From 023cb0b0f8b437a098d8c345af86d813e05f9fff Mon Sep 17 00:00:00 2001 From: BenjaVR Date: Mon, 24 Dec 2018 14:37:38 +0100 Subject: [PATCH] Removing i18next and Redux. --- .vscode/settings.json | 4 +- firestore.rules | 3 +- functions/package.json | 44 +- functions/src/index.ts | 53 +- functions/src/shared/.gitignore | 1 - .../src/shared/firebase/firestoreConstants.ts | 1 - functions/src/shared/firebase/interfaces.ts | 6 - functions/src/shared/models/LoginDetails.ts | 28 - functions/src/shared/models/School.ts | 29 - functions/src/shared/translations/En.ts | 15 - functions/src/shared/translations/Nl.ts | 15 - functions/src/shared/translations/types.ts | 21 - .../shared/validators/FirebaseValidator.ts | 5 - .../src/shared/validators/StringValidator.ts | 6 - .../src/shared/validators/ValidationError.ts | 15 - .../src/shared/validators/ValidationResult.ts | 23 - package.json | 44 +- web/package.json | 46 +- .../auth/AuthChecker/AuthChecker.tsx | 107 +-- .../components/auth/LoginForm/LoginForm.tsx | 140 ++- .../schools/SchoolForm/SchoolForm.tsx | 161 ++-- .../schools/SchoolList/SchoolList.tsx | 54 +- .../schools/SchoolsPage/SchoolsPage.tsx | 54 +- web/src/config/FirebaseInitializer.ts | 3 - web/src/config/I18nextInitializer.ts | 29 - web/src/index.tsx | 19 +- web/src/models/LoginDetails.ts | 4 + web/src/routes/index.ts | 6 +- web/src/services/SchoolsService.ts | 42 +- .../firestore/FirestoreServiceBase.ts | 5 - .../services/functions/FirebaseFunctions.ts | 16 - .../stores/schools/actions/addSchoolAction.ts | 65 -- .../schools/actions/fetchSchoolsAction.ts | 64 -- web/src/stores/schools/actions/index.ts | 11 - web/src/stores/schools/reducer.ts | 83 -- web/tsconfig.json | 8 +- web/tslint.json | 2 +- yarn.lock | 837 +++++++----------- 38 files changed, 632 insertions(+), 1437 deletions(-) delete mode 100644 functions/src/shared/.gitignore delete mode 100644 functions/src/shared/firebase/firestoreConstants.ts delete mode 100644 functions/src/shared/firebase/interfaces.ts delete mode 100644 functions/src/shared/models/LoginDetails.ts delete mode 100644 functions/src/shared/models/School.ts delete mode 100644 functions/src/shared/translations/En.ts delete mode 100644 functions/src/shared/translations/Nl.ts delete mode 100644 functions/src/shared/translations/types.ts delete mode 100644 functions/src/shared/validators/FirebaseValidator.ts delete mode 100644 functions/src/shared/validators/StringValidator.ts delete mode 100644 functions/src/shared/validators/ValidationError.ts delete mode 100644 functions/src/shared/validators/ValidationResult.ts delete mode 100644 web/src/config/I18nextInitializer.ts create mode 100644 web/src/models/LoginDetails.ts delete mode 100644 web/src/services/firestore/FirestoreServiceBase.ts delete mode 100644 web/src/services/functions/FirebaseFunctions.ts delete mode 100644 web/src/stores/schools/actions/addSchoolAction.ts delete mode 100644 web/src/stores/schools/actions/fetchSchoolsAction.ts delete mode 100644 web/src/stores/schools/actions/index.ts delete mode 100644 web/src/stores/schools/reducer.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index c90f58a..2d69729 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,7 @@ { "files.associations": { ".firebaserc": "jsonc" - } + }, + "npm.packageManager": "yarn", + "typescript.tsdk": "node_modules\\typescript\\lib" } diff --git a/firestore.rules b/firestore.rules index 63f2feb..077ddb0 100644 --- a/firestore.rules +++ b/firestore.rules @@ -1,8 +1,7 @@ service cloud.firestore { match /databases/{database}/documents { match /{document=**} { - allow read: if request.auth.uid != null; - allow write: if false; + allow read, write: if exists(/databases/$(database)/documents/users/$(request.auth.uid)); } } } diff --git a/functions/package.json b/functions/package.json index 720c0c5..b44ed69 100644 --- a/functions/package.json +++ b/functions/package.json @@ -1,24 +1,24 @@ { - "name": "@studentplanner/functions", - "version": "1.0.0", - "scripts": { - "lint": "tslint --project tsconfig.json", - "build": "tsc --skipLibCheck", - "build:watch": "tsc -w --skipLibCheck", - "serve": "npm run build && firebase serve --only functions", - "shell": "npm run build && firebase functions:shell", - "start": "npm run shell", - "deploy": "firebase deploy --only functions", - "logs": "firebase functions:log" - }, - "main": "dist/index.js", - "dependencies": { - "firebase-admin": "~6.0.0", - "firebase-functions": "^2.1.0" - }, - "devDependencies": { - "tslint": "~5.8.0", - "typescript": "~2.8.3" - }, - "private": true + "name": "studentplanner-functions", + "version": "1.0.0", + "private": true, + "scripts": { + "lint": "tslint --project tsconfig.json", + "build": "tsc", + "build:watch": "tsc -w", + "serve": "npm run build && firebase serve --only functions", + "shell": "npm run build && firebase functions:shell", + "start": "npm run shell", + "deploy": "firebase deploy --only functions", + "logs": "firebase functions:log" + }, + "main": "dist/index.js", + "dependencies": { + "firebase-admin": "6.4.0", + "firebase-functions": "2.1.0" + }, + "devDependencies": { + "tslint": "5.12.0", + "typescript": "3.2.2" + } } diff --git a/functions/src/index.ts b/functions/src/index.ts index 9d1d24b..fa8f6f8 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -1,63 +1,12 @@ import * as admin from "firebase-admin"; import * as functions from "firebase-functions"; import { UserRecord } from "firebase-functions/lib/providers/auth"; -import { CallableContext, HttpsError } from "firebase-functions/lib/providers/https"; -import { schoolsCollection } from "./shared/firebase/firestoreConstants"; -import { IFirebaseFunctionParam as Param } from "./shared/firebase/interfaces"; -import { ISchool, validateSchool } from "./shared/models/School"; admin.initializeApp(); -const db = admin.firestore(); const auth = admin.auth(); -/////////////// -// Utilities // -/////////////// - -function checkAuthentication(context: CallableContext): void { - if (!context.auth) { - throw new HttpsError("unauthenticated", "You need permissions"); // TODO: translate - } -} - -function errorCallback(details: any): void { - throw new HttpsError("unknown", "Something went wrong... Please try again later!", details); // TODO: translate -} - -///////////////////////// -// Database operations // -///////////////////////// - -export const addSchool = functions.https.onCall((param: Param, context): Promise => { - checkAuthentication(context); - - return new Promise(((resolve) => { - const validated = validateSchool(param.data); - if (validated.hasErrors()) { - throw new HttpsError("invalid-argument", "Fields are not correct", validated); // TODO: translate - } else { - db.collection(schoolsCollection).add(param.data) - .then((ref) => { - return ref.get(); - }) - .then((doc) => { - const school = { - ...doc.data(), - id: doc.id, - }; - resolve(school as ISchool); - }) - .catch(errorCallback); - } - })); -}); - -///////////////////////////// -// Authentication triggers // -///////////////////////////// - /** - * Disables users after they sign up. This prevents random people somehow succeeded to sign up from logging in. + * Disables users after they sign up. This prevents random people (somehow succeeded to sign up) from logging in. */ export const disableUserAfterSignUp = functions.auth.user().onCreate((user: UserRecord): void => { auth.updateUser(user.uid, { diff --git a/functions/src/shared/.gitignore b/functions/src/shared/.gitignore deleted file mode 100644 index 849ddff..0000000 --- a/functions/src/shared/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist/ diff --git a/functions/src/shared/firebase/firestoreConstants.ts b/functions/src/shared/firebase/firestoreConstants.ts deleted file mode 100644 index da2ff4d..0000000 --- a/functions/src/shared/firebase/firestoreConstants.ts +++ /dev/null @@ -1 +0,0 @@ -export const schoolsCollection = "/schools"; diff --git a/functions/src/shared/firebase/interfaces.ts b/functions/src/shared/firebase/interfaces.ts deleted file mode 100644 index 0b90718..0000000 --- a/functions/src/shared/firebase/interfaces.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Language } from "../translations/types"; - -export interface IFirebaseFunctionParam { - lang: Language; - data: T; -} diff --git a/functions/src/shared/models/LoginDetails.ts b/functions/src/shared/models/LoginDetails.ts deleted file mode 100644 index ed82326..0000000 --- a/functions/src/shared/models/LoginDetails.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { StringValidator } from "../validators/StringValidator"; -import { ValidationError } from "../validators/ValidationError"; -import { ValidationResult } from "../validators/ValidationResult"; - -export interface ILoginDetails { - username: string; - password: string; -} - -export function validateLoginDetails(loginDetails: ILoginDetails): ValidationResult { - const result = new ValidationResult(loginDetails); - - /** - * username - */ - if (StringValidator.isEmpty(loginDetails.username)) { - result.add(new ValidationError("username", "validation.field_should_not_be_empty")); - } - - /** - * password - */ - if (StringValidator.isEmpty(loginDetails.password)) { - result.add(new ValidationError("password", "validation.field_should_not_be_empty")); - } - - return result; -} diff --git a/functions/src/shared/models/School.ts b/functions/src/shared/models/School.ts deleted file mode 100644 index 1745b39..0000000 --- a/functions/src/shared/models/School.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { FirebaseValidator } from "../validators/FirebaseValidator"; -import { StringValidator } from "../validators/StringValidator"; -import { ValidationError } from "../validators/ValidationError"; -import { ValidationResult } from "../validators/ValidationResult"; - -export interface ISchool { - id?: string; - name: string; -} - -export function validateSchool(school: ISchool): ValidationResult { - const result = new ValidationResult(school); - - /** - * id - */ - if (FirebaseValidator.hasId(school)) { - result.add(new ValidationError("id", "validation.model_should_not_have_id")); - } - - /** - * name - */ - if (StringValidator.isEmpty(school.name)) { - result.add(new ValidationError("name", "validation.field_should_not_be_empty")); - } - - return result; -} diff --git a/functions/src/shared/translations/En.ts b/functions/src/shared/translations/En.ts deleted file mode 100644 index 86bf7bf..0000000 --- a/functions/src/shared/translations/En.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { I18nextResourceTranslations, ILanguage } from "./types"; - -export class En implements ILanguage { - public getTranslations(): I18nextResourceTranslations { - return { - "validation.field_should_not_be_empty": "Value should not be empty.", - "validation.model_should_not_have_id": "Object should not have an id.", - - "auth.logged_in_successfully": "Succesfully logged in!", - "auth.logging_in_failed": "Failed to log in. Password and/or username are incorrect.", - "auth.logged_out_successfully": "Successfully logged out!", - "auth.welcome_back{{username}}": "Welcome back, {{username}}!", - }; - } -} diff --git a/functions/src/shared/translations/Nl.ts b/functions/src/shared/translations/Nl.ts deleted file mode 100644 index 1987857..0000000 --- a/functions/src/shared/translations/Nl.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { I18nextResourceTranslations, ILanguage } from "./types"; - -export class Nl implements ILanguage { - public getTranslations(): I18nextResourceTranslations { - return { - "validation.field_should_not_be_empty": "Waarde mag niet leeg zijn.", - "validation.model_should_not_have_id": "Object mag geen id hebben.", - - "auth.logged_in_successfully": "Succesvol ingelogd!", - "auth.logging_in_failed": "Inloggen gefaald. Wachtwoord en/of gebruikersnaam zijn incorrect.", - "auth.logged_out_successfully": "Succesvol uitgelogd!", - "auth.welcome_back{{username}}": "Welkom terug, {{username}}!", - }; - } -} diff --git a/functions/src/shared/translations/types.ts b/functions/src/shared/translations/types.ts deleted file mode 100644 index 388668b..0000000 --- a/functions/src/shared/translations/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface I18nextResource { - [key: string]: any; -} - -export type I18nextResourceTranslations = I18nextResource & ITranslations; - -export interface ILanguage { - getTranslations(): ITranslations; -} - -export type Language = "nl" | "en"; - -export interface ITranslations { - "validation.field_should_not_be_empty": string; - "validation.model_should_not_have_id": string; - - "auth.logged_in_successfully": string; - "auth.logging_in_failed": string; - "auth.logged_out_successfully": string; - "auth.welcome_back{{username}}": string; -} diff --git a/functions/src/shared/validators/FirebaseValidator.ts b/functions/src/shared/validators/FirebaseValidator.ts deleted file mode 100644 index 38a93d1..0000000 --- a/functions/src/shared/validators/FirebaseValidator.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class FirebaseValidator { - public static hasId(value: { id?: string }) { - return value.id !== undefined; - } -} diff --git a/functions/src/shared/validators/StringValidator.ts b/functions/src/shared/validators/StringValidator.ts deleted file mode 100644 index 326150d..0000000 --- a/functions/src/shared/validators/StringValidator.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class StringValidator { - public static isEmpty(value: string): boolean { - return value === undefined - || value.length === 0; - } -} diff --git a/functions/src/shared/validators/ValidationError.ts b/functions/src/shared/validators/ValidationError.ts deleted file mode 100644 index 9c5191b..0000000 --- a/functions/src/shared/validators/ValidationError.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ITranslations } from "../translations/types"; - -export class ValidationError { - - public readonly field: keyof T; - /** - * Translation key that contains the error message. - */ - public readonly translationKey: keyof ITranslations; - - constructor(field: keyof T, translationKey: keyof ITranslations) { - this.field = field; - this.translationKey = translationKey; - } -} diff --git a/functions/src/shared/validators/ValidationResult.ts b/functions/src/shared/validators/ValidationResult.ts deleted file mode 100644 index e08306a..0000000 --- a/functions/src/shared/validators/ValidationResult.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ValidationError } from "./ValidationError"; - -export class ValidationResult { - - public readonly instance: T; - public readonly errors: Array> = []; - - constructor(instance: T) { - this.instance = instance; - } - - public add(error: ValidationError): void { - this.errors.push(error); - } - - public hasErrors(): boolean { - return this.errors.length > 0; - } - - public getErrorsWithField(field: keyof T): Array> { - return this.errors.filter((error) => error.field === field); - } -} diff --git a/package.json b/package.json index c653ae5..1530c70 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,25 @@ { - "name": "studentplanner", - "private": true, - "version": "1.0.0", - "scripts": { - "build-web": "npm --prefix web run start", - "build-functions": "npm --prefix functions run build:watch", - "build": "npm-run-all --continue-on-error --parallel build-functions build-web" - }, - "repository": "git+https://github.com/BenjaVR/StudentPlanner.git", - "author": "Benjamin Van Renterghem", - "license": "ISC", - "bugs": { - "url": "https://github.com/BenjaVR/StudentPlanner/issues" - }, - "homepage": "https://github.com/BenjaVR/StudentPlanner#readme", - "devDependencies": { - "npm-run-all": "^4.1.5" - }, - "workspaces": [ - "functions", "web" - ] + "name": "studentplanner", + "private": true, + "version": "1.0.0", + "scripts": { + "build-web": "npm --prefix web run start", + "build-functions": "npm --prefix functions run build:watch", + "build": "npm-run-all --continue-on-error --parallel build-functions build-web", + "deploy": "firebase deploy" + }, + "repository": "git+https://github.com/BenjaVR/StudentPlanner.git", + "author": "Benjamin Van Renterghem", + "license": "ISC", + "bugs": { + "url": "https://github.com/BenjaVR/StudentPlanner/issues" + }, + "homepage": "https://github.com/BenjaVR/StudentPlanner#readme", + "devDependencies": { + "npm-run-all": "4.1.5" + }, + "workspaces": [ + "web", + "functions" + ] } diff --git a/web/package.json b/web/package.json index ea92ce6..8f57e84 100644 --- a/web/package.json +++ b/web/package.json @@ -1,23 +1,18 @@ { - "name": "@studentplanner/web", + "name": "studentplanner-web", "version": "1.0.0", "private": true, "dependencies": { - "antd": "^3.11.2", - "es6-promise": "^4.2.5", - "firebase": "^5.5.8", - "i18next": "^13.0.0", - "moment": "^2.23.0", - "react": "^16.6.3", - "react-dom": "^16.6.3", - "react-i18next": "^8.4.0", - "react-redux": "^6.0.0", - "react-router": "^4.3.1", - "react-router-dom": "^4.3.1", - "redux": "^4.0.1", - "redux-thunk": "^2.3.0", - "whatwg-fetch": "^3.0.0", - "@studentplanner/functions": "1.0.0" + "antd": "3.11.4", + "core-js": "2.6.1", + "firebase": "5.7.1", + "jest": "23.6.0", + "moment": "2.23.0", + "react": "16.7.0", + "react-dom": "16.7.0", + "react-router": "4.3.1", + "react-router-dom": "4.3.1", + "whatwg-fetch": "3.0.0" }, "scripts": { "start": "react-scripts start", @@ -32,17 +27,16 @@ ], "devDependencies": { "@types/jest": "23.3.10", - "@types/node": "10.12.17", - "@types/react": "16.7.17", + "@types/node": "10.12.18", + "@types/react": "16.7.18", "@types/react-dom": "16.0.11", - "@types/react-redux": "^6.0.11", - "@types/react-router": "^4.4.3", - "@types/react-router-dom": "^4.3.1", - "node-sass": "^4.11.0", + "@types/react-router": "4.4.3", + "@types/react-router-dom": "4.3.1", + "node-sass": "4.11.0", "react-scripts": "2.1.1", - "redux-devtools-extension": "^2.13.7", - "tslint": "^5.12.0", - "tslint-react": "^3.6.0", - "typescript": "3.2.2" + "tslint": "5.12.0", + "tslint-react": "3.6.0", + "typescript": "3.2.2", + "typescript-plugin-css-modules": "1.0.4" } } diff --git a/web/src/components/auth/AuthChecker/AuthChecker.tsx b/web/src/components/auth/AuthChecker/AuthChecker.tsx index 48299ef..00741dc 100644 --- a/web/src/components/auth/AuthChecker/AuthChecker.tsx +++ b/web/src/components/auth/AuthChecker/AuthChecker.tsx @@ -1,24 +1,16 @@ -import { ITranslations } from "@studentplanner/functions/dist/shared/translations/types"; -import { notification, Spin, Layout } from "antd"; +import { notification, Spin } from "antd"; import React from "react"; -import { withNamespaces, WithNamespaces } from "react-i18next"; -import { connect } from "react-redux"; -import { bindActionCreators, Dispatch } from "redux"; -import { IApplicationState } from "../../../stores"; -import { checkLoggedIn } from "../../../stores/auth/actions"; -import { IAuthState } from "../../../stores/auth/reducer"; +import { Firebase } from "../../../config/FirebaseInitializer"; +import styles from "./AuthChecker.module.scss"; interface IAuthCheckerProps { } -type AuthCheckerProps = IAuthCheckerProps & IStateProps & IDispatchProps & WithNamespaces; - interface IAuthCheckerState { - isDoingInitialCheck: boolean; initialCheckDone: boolean; } -class AuthChecker extends React.Component { +class AuthChecker extends React.Component { /** * This is to check if the user is refreshing the page, or actually opening it again in an new browser session. @@ -26,103 +18,46 @@ class AuthChecker extends React.Component { private pageWasReloaded: boolean; private readonly pageWasReloadedSessionKey = "StudentPlanner_PageReloaded"; - constructor(props: AuthCheckerProps) { + constructor(props: IAuthCheckerProps) { super(props); this.state = { initialCheckDone: false, - isDoingInitialCheck: true, }; - window.setTimeout(() => { - this.setState({ - initialCheckDone: true, - isDoingInitialCheck: false, - }); - }, 1000); - const sessionReloadedValue = sessionStorage.getItem(this.pageWasReloadedSessionKey); this.pageWasReloaded = sessionReloadedValue !== null ? JSON.parse(sessionReloadedValue) === true : false; } public componentDidMount(): void { - this.props.actions.checkLoggedIn(); - } + Firebase.auth().onAuthStateChanged((user) => { + if (user && !this.state.initialCheckDone && !this.pageWasReloaded) { + const hasName = user.displayName !== null; + notification.success({ + message: hasName ? `Welkom terug, ${user.displayName}!` : "Welkom terug!", + }); + } - public componentDidUpdate(prevProps: AuthCheckerProps): void { - const { t } = this.props; + sessionStorage.setItem(this.pageWasReloadedSessionKey, JSON.stringify(true)); + this.pageWasReloaded = true; - if (prevProps.authStore.status === "LOGGING_IN" && this.props.authStore.status === "LOGGED_IN") { - this.setPageReloaded(); - const message: keyof ITranslations = "auth.logged_in_successfully"; - notification.success({ message: t(message) }); - } - - if (prevProps.authStore.status === "LOGGING_IN" && this.props.authStore.status === "LOGGED_OUT") { - const message: keyof ITranslations = "auth.logging_in_failed"; - notification.error({ message: t(message) }); - } - - if (prevProps.authStore.status === "CHECKING_LOGGED_IN" && this.props.authStore.status === "LOGGED_IN" && !this.pageWasReloaded) { - this.setPageReloaded(); - const message: keyof ITranslations = "auth.welcome_back{{username}}"; - const user = this.props.authStore.user as firebase.User; - notification.success({ - message: t(message, { - username: user.displayName !== null ? user.displayName : user.email, - }), + this.setState({ + initialCheckDone: true, }); - } - - if (prevProps.authStore.status === "LOGGING_OUT" && this.props.authStore.status === "LOGGED_OUT") { - const message: keyof ITranslations = "auth.logged_out_successfully"; - notification.success({ message: t(message) }); - } + }); } public render(): React.ReactNode { return ( - - + +
{this.state.initialCheckDone && this.props.children } - +
); } - - private setPageReloaded(): void { - sessionStorage.setItem(this.pageWasReloadedSessionKey, JSON.stringify(true)); - this.pageWasReloaded = true; - } -} - -interface IStateProps { - authStore: IAuthState; -} - -function mapStateToProps(state: IApplicationState): IStateProps { - return { - authStore: state.auth, - }; } -interface IDispatchProps { - actions: { - checkLoggedIn: () => void; - }; -} - -function mapDispatchToProps(dispatch: Dispatch): IDispatchProps { - return { - actions: bindActionCreators({ - checkLoggedIn, - }, dispatch), - }; -} - -const ConnectedAuthChecker = connect( - mapStateToProps, mapDispatchToProps)(AuthChecker); - -export default withNamespaces()(ConnectedAuthChecker); +export default AuthChecker; diff --git a/web/src/components/auth/LoginForm/LoginForm.tsx b/web/src/components/auth/LoginForm/LoginForm.tsx index f76e272..a8fa8b9 100644 --- a/web/src/components/auth/LoginForm/LoginForm.tsx +++ b/web/src/components/auth/LoginForm/LoginForm.tsx @@ -1,25 +1,17 @@ -import { ILoginDetails, validateLoginDetails } from "@studentplanner/functions/dist/shared/models/LoginDetails"; -import { ValidationError } from "@studentplanner/functions/dist/shared/validators/ValidationError"; -import { Button, Form, Icon, Input } from "antd"; +import { Button, Form, Icon, Input, notification } from "antd"; import { FormComponentProps } from "antd/lib/form"; import FormItem from "antd/lib/form/FormItem"; import * as React from "react"; -import { withNamespaces, WithNamespaces } from "react-i18next"; -import { connect } from "react-redux"; -import { bindActionCreators, Dispatch } from "redux"; -import { IApplicationState } from "../../../stores"; -import { login, logout } from "../../../stores/auth/actions"; -import { IAuthState } from "../../../stores/auth/reducer"; +import { Firebase } from "../../../config/FirebaseInitializer"; +import { ILoginDetails } from "../../../models/LoginDetails"; interface ILoginFormProps { } -type LoginFormProps = ILoginFormProps & FormComponentProps & IStateProps & IDispatchProps & WithNamespaces; +type LoginFormProps = ILoginFormProps & FormComponentProps; interface ILoginFormState { - doValidateOnChange: boolean; - usernameErrors: Array>; - passwordErrors: Array>; + isSubmitting: boolean; } class LoginForm extends React.Component { @@ -28,65 +20,54 @@ class LoginForm extends React.Component { super(props); this.state = { - doValidateOnChange: false, - usernameErrors: [], - passwordErrors: [], + isSubmitting: false, }; this.handleSubmit = this.handleSubmit.bind(this); - this.handleFormChange = this.handleFormChange.bind(this); this.handleLogout = this.handleLogout.bind(this); } public render(): React.ReactNode { const { getFieldDecorator } = this.props.form; - const { t } = this.props; return ( -
- 0 ? "error" : "success"} - help={this.state.usernameErrors.length > 0 ? t(`${this.state.usernameErrors[0].translationKey}`) : ""} - > - {getFieldDecorator("username")( + + + {getFieldDecorator("username", { + rules: [ + { required: true }, + ], + })( } - placeholder="Username" - disabled={this.props.authStore.status === "LOGGING_IN"} + placeholder="E-mail" + disabled={this.state.isSubmitting} />, )} - 0 ? "error" : "success"} - help={this.state.passwordErrors.length > 0 ? t(`${this.state.passwordErrors[0].translationKey}`) : ""} - > - {getFieldDecorator("password")( + + {getFieldDecorator("password", { + rules: [ + { required: true }, + ], + })( } - placeholder="Password" - disabled={this.props.authStore.status === "LOGGING_IN"} + placeholder="Wachtwoord" + disabled={this.state.isSubmitting} />, )} - - -

STATUS: {this.props.authStore.status}

- {this.props.authStore.user && -

Welcome, {this.props.authStore.user.email}!

- } - - {this.props.authStore.status === "LOGGED_IN" && - - }
); } @@ -94,21 +75,44 @@ class LoginForm extends React.Component { private handleSubmit(event: React.FormEvent): void { event.preventDefault(); - this.validateForm(true); - } - - private handleFormChange(event: React.FormEvent): void { - event.preventDefault(); + this.setState({ + isSubmitting: true, + }); - if (this.state.doValidateOnChange) { - this.validateForm(false); - } + const fields: Array = ["username", "password"]; + this.props.form.validateFieldsAndScroll(fields, (errors, values) => { + if (!errors) { + const loginDetails: ILoginDetails = values; + Firebase.auth().signInWithEmailAndPassword(loginDetails.username, loginDetails.password) + .then(() => { + // TODO + }) + .catch(() => { + // TODO + }) + .finally(() => { + this.setState({ + isSubmitting: false, + }); + }); + } + }); } private handleLogout(event: React.FormEvent): void { event.preventDefault(); - this.props.actions.logout(); + Firebase.auth().signOut() + .then(() => { + notification.success({ + message: "Succesvol uitgelogd", + }); + }) + .catch(() => { + notification.error({ + message: "Iets ging fout bij het uitloggen... Was u al uitgelogd?", + }); + }); } private validateForm(doLogin: boolean): void { @@ -132,34 +136,6 @@ class LoginForm extends React.Component { } } -interface IStateProps { - authStore: IAuthState; -} - -function mapStateToProps(state: IApplicationState): IStateProps { - return { - authStore: state.auth, - }; -} - -interface IDispatchProps { - actions: { - login: (loginDetails: ILoginDetails) => void; - logout: () => void; - }; -} - -function mapDispatchToProps(dispatch: Dispatch): IDispatchProps { - return { - actions: bindActionCreators({ - login, - logout, - }, dispatch), - }; -} - -const ConnectedLoginForm = connect( - mapStateToProps, mapDispatchToProps)(LoginForm); -const WrappedLoginForm = Form.create()(ConnectedLoginForm); +const WrappedLoginForm = Form.create()(LoginForm); -export default withNamespaces()(WrappedLoginForm); +export default WrappedLoginForm; diff --git a/web/src/components/schools/SchoolForm/SchoolForm.tsx b/web/src/components/schools/SchoolForm/SchoolForm.tsx index d660b0f..b051974 100644 --- a/web/src/components/schools/SchoolForm/SchoolForm.tsx +++ b/web/src/components/schools/SchoolForm/SchoolForm.tsx @@ -1,142 +1,85 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; +import { Button, Form, Input } from "antd"; +import { FormComponentProps } from "antd/lib/form"; +import FormItem from "antd/lib/form/FormItem"; import React from "react"; -import { ISchoolsState } from "../../../stores/schools/reducer"; -import { IApplicationState } from "../../../stores"; -import { Dispatch, bindActionCreators } from "redux"; -import { fetchSchools, addSchool } from "../../../stores/schools/actions"; -import { connect } from "react-redux"; -import { notification } from "antd"; +import { ISchool } from "../../../models/School"; interface ISchoolFormProps { + submitSchool(school: ISchool): Promise; } -type SchoolFormProps = ISchoolFormProps & IStateProps & IDispatchProps; +type SchoolFormProps = ISchoolFormProps & FormComponentProps; interface ISchoolFormState { - school: ISchool; + isSubmitting: boolean; } class SchoolForm extends React.Component { - private readonly emptySchool: ISchool = { - name: "", - }; - constructor(props: SchoolFormProps) { super(props); this.state = { - school: this.emptySchool, + isSubmitting: false, }; this.handleSubmit = this.handleSubmit.bind(this); - this.handleChange = this.handleChange.bind(this); - } - - public componentDidUpdate(prevProps: SchoolFormProps): void { - if (prevProps.schoolsStore.addingStatus === "ADDING" && this.props.schoolsStore.addingStatus === "ADDED") { - const schoolName = this.props.schoolsStore.lastAddedSchool !== undefined - ? this.props.schoolsStore.lastAddedSchool.name : ""; - notification.success({ - message: `Successfully added school "${schoolName}"!`, // TODO: translate - }); - this.resetForm(); - } - - if (prevProps.schoolsStore.addingStatus === "ADDING" && this.props.schoolsStore.addingStatus === "FAILED") { - notification.error({ - message: this.props.schoolsStore.addErrorMessage, // TODO: translate (key) - }); - } } public render(): React.ReactNode { - const isLoading = this.props.schoolsStore.addingStatus === "ADDING"; + const { getFieldDecorator } = this.props.form; return ( -
-
- {/*//TODO: translate */} -
- -
-
-
-
- -
-
-
+
+ + {getFieldDecorator("name", { + rules: [ + { required: true }, + ], + })( + , + )} + + + + + +
); } private handleSubmit(event: React.FormEvent): void { event.preventDefault(); - this.props.actions.addSchool(this.state.school); - } - - private handleChange(event: React.FormEvent): void { - const target = event.currentTarget; - - // TODO: check if one of the fields is a field of School, and then add it dynamically (instead of switch) - switch (target.name) { - case "name": - this.setState({ - school: { - ...this.state.school, - name: target.value, - }, - }); - break; - } - } - - private resetForm(): void { - this.setState({school: this.emptySchool}); - } -} - -interface IStateProps { - schoolsStore: ISchoolsState; -} - -function mapStateToProps(state: IApplicationState): IStateProps { - return { - schoolsStore: state.schools, - } -} - -interface IDispatchProps { - actions: { - fetchSchools: () => void; - addSchool: (school: ISchool) => void; - } -} - -function mapDispatchToProps(dispatch: Dispatch): IDispatchProps { - return { - actions: bindActionCreators({ - fetchSchools, - addSchool, - }, dispatch), + this.setState({ + isSubmitting: true, + }); + + const fields: Array = ["name"]; + this.props.form.validateFieldsAndScroll(fields, (errors, values) => { + if (!errors) { + const school: ISchool = { + ...values, + }; + this.props.submitSchool(school) + .then(() => { + this.props.form.resetFields(); + }) + .finally(() => { + this.setState({ + isSubmitting: false, + }); + }); + } + }); } } -const ConnectedSchoolForm = connect( - mapStateToProps, mapDispatchToProps)(SchoolForm); +const WrappedSchoolForm = Form.create()(SchoolForm); -export default ConnectedSchoolForm; +export default WrappedSchoolForm; diff --git a/web/src/components/schools/SchoolList/SchoolList.tsx b/web/src/components/schools/SchoolList/SchoolList.tsx index c0f1090..5fabd66 100644 --- a/web/src/components/schools/SchoolList/SchoolList.tsx +++ b/web/src/components/schools/SchoolList/SchoolList.tsx @@ -1,34 +1,25 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; import { Spin } from "antd"; import React from "react"; -import { connect } from "react-redux"; -import { bindActionCreators, Dispatch } from "redux"; -import { IApplicationState } from "../../../stores"; -import { fetchSchools } from "../../../stores/schools/actions"; -import { ISchoolsState } from "../../../stores/schools/reducer"; +import { ISchool } from "../../../models/School"; interface ISchoolListProps { + schools: ISchool[]; + isLoading: boolean; } -type SchoolListProps = ISchoolListProps & IStateProps & IDispatchProps; - -class SchoolList extends React.Component { - - public componentDidMount(): void { - this.props.actions.fetchSchools(); - } +class SchoolList extends React.Component { public render(): React.ReactNode { return ( - - + +
- + - {this.props.schoolsStore.schools.map(this.renderSchoolRow)} + {this.props.schools.map(this.renderSchoolRow)}
SchoolScholen
@@ -44,31 +35,4 @@ class SchoolList extends React.Component { } } -interface IStateProps { - schoolsStore: ISchoolsState; -} - -function mapStateToProps(state: IApplicationState): IStateProps { - return { - schoolsStore: state.schools, - }; -} - -interface IDispatchProps { - actions: { - fetchSchools: () => void; - }; -} - -function mapDispatchToProps(dispatch: Dispatch): IDispatchProps { - return { - actions: bindActionCreators({ - fetchSchools, - }, dispatch), - }; -} - -const ConnectedSchoolList = connect( - mapStateToProps, mapDispatchToProps)(SchoolList); - -export default ConnectedSchoolList; +export default SchoolList; diff --git a/web/src/components/schools/SchoolsPage/SchoolsPage.tsx b/web/src/components/schools/SchoolsPage/SchoolsPage.tsx index 20d390e..2f14803 100644 --- a/web/src/components/schools/SchoolsPage/SchoolsPage.tsx +++ b/web/src/components/schools/SchoolsPage/SchoolsPage.tsx @@ -1,6 +1,8 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; +import { notification } from "antd"; import React from "react"; +import { ISchool } from "../../../models/School"; import { RoutePageComponentProps } from "../../../routes"; +import { SchoolsService } from "../../../services/SchoolsService"; import { SignedInLayout } from "../../layouts/SignedInLayout"; import { SchoolForm } from "../SchoolForm"; import { SchoolList } from "../SchoolList"; @@ -10,24 +12,70 @@ interface ISchoolsPageProps extends RoutePageComponentProps { interface ISchoolsPageState { schools: ISchool[]; + isFetching: boolean; } export default class SchoolsPage extends React.Component { + private readonly schoolsService = new SchoolsService(); + constructor(props: ISchoolsPageProps) { super(props); this.state = { schools: [], + isFetching: false, }; + + this.addSchool = this.addSchool.bind(this); + } + + public componentDidMount(): void { + this.fetchSchools(); } public render(): React.ReactNode { return ( - - + + ); } + + private addSchool(school: ISchool): Promise { + return new Promise((resolve, reject) => { + this.schoolsService.addSchool(school) + .then(() => { + notification.success({ + message: `School "${school.name}" succesvol toegevoegd`, + }); + resolve(); + }) + .catch(() => { + notification.error({ + message: "Kon school niet toevoegen", + }); + reject(); + }); + }); + } + + private fetchSchools(): void { + this.setState({ + isFetching: true, + }); + + this.schoolsService.listSchools() + .then((schools) => { + this.setState({ + schools, + }); + }) + .finally(() => { + this.setState({ + isFetching: false, + }); + }); + } } diff --git a/web/src/config/FirebaseInitializer.ts b/web/src/config/FirebaseInitializer.ts index 05cc002..6823eb0 100644 --- a/web/src/config/FirebaseInitializer.ts +++ b/web/src/config/FirebaseInitializer.ts @@ -1,7 +1,6 @@ import firebase from "firebase/app"; import "firebase/auth"; import "firebase/firestore"; -import "firebase/functions"; const firebaseConfig = { apiKey: "AIzaSyAhHD7f5dudCPHiuidXqWQFzSyOmsmvWcU", @@ -22,8 +21,6 @@ export class FirebaseInitializer { } else { firebase.firestore.setLogLevel("silent"); } - - firebase.functions(); } } diff --git a/web/src/config/I18nextInitializer.ts b/web/src/config/I18nextInitializer.ts deleted file mode 100644 index 1dbc6a6..0000000 --- a/web/src/config/I18nextInitializer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { En } from "@studentplanner/functions/dist/shared/translations/En"; -import { Nl } from "@studentplanner/functions/dist/shared/translations/Nl"; -import { Language } from "@studentplanner/functions/dist/shared/translations/types"; -import i18next from "i18next"; -import { reactI18nextModule } from "react-i18next"; - -export class I18nextInitializer { - public static initialize(lang: Language): void { - i18next - .use(reactI18nextModule) - .init({ - lng: lang, - fallbackLng: "en", - keySeparator: false, // dots in translations do not mean nested json in our case. - resources: { - en: { - translation: new En().getTranslations(), - }, - nl: { - translation: new Nl().getTranslations(), - }, - }, - }); - } -} - -export function getCurrentLanguage(): Language { - return i18next.language as Language; -} diff --git a/web/src/index.tsx b/web/src/index.tsx index f057958..971a101 100644 --- a/web/src/index.tsx +++ b/web/src/index.tsx @@ -1,29 +1,20 @@ +import "./polyfill"; + import { LocaleProvider, notification } from "antd"; import nlBE from "antd/lib/locale-provider/nl_BE"; -import es6promise from "es6-promise"; import moment from "moment"; import "moment/locale/nl-be"; import React from "react"; import ReactDOM from "react-dom"; -import { Provider } from "react-redux"; -import "whatwg-fetch"; import App from "./components/App/App"; import { FirebaseInitializer } from "./config/FirebaseInitializer"; -import { I18nextInitializer } from "./config/I18nextInitializer"; import "./index.scss"; -import store from "./stores"; - -// Polyfills -es6promise.polyfill(); -/* the "whatwg-fetch" import will automatically polyfill window.fetch */ // Firebase initialization FirebaseInitializer.initialize(); // Locales initialization -const enabledLocale = nlBE; moment.locale("nl-be"); -I18nextInitializer.initialize("nl"); // Ant design global notification config notification.config({ @@ -31,10 +22,8 @@ notification.config({ }); ReactDOM.render( - - - - + + , document.getElementById("root"), ); diff --git a/web/src/models/LoginDetails.ts b/web/src/models/LoginDetails.ts new file mode 100644 index 0000000..1bfee17 --- /dev/null +++ b/web/src/models/LoginDetails.ts @@ -0,0 +1,4 @@ +export interface ILoginDetails { + username: string; + password: string; +} diff --git a/web/src/routes/index.ts b/web/src/routes/index.ts index 792f376..1e72cfe 100644 --- a/web/src/routes/index.ts +++ b/web/src/routes/index.ts @@ -11,8 +11,6 @@ export interface IRoute { component: React.ComponentType; } -// TODO: titles localizable! - const logInRoute: IRoute = { title: "Log In", url: "/login", @@ -20,13 +18,13 @@ const logInRoute: IRoute = { }; const schoolsRoute: IRoute = { - title: "Schools", + title: "Scholen", url: "/schools", component: SchoolsPage, }; const studentsRoute: IRoute = { - title: "Students", + title: "Studenten", url: "/students", component: SchoolsPage, }; diff --git a/web/src/services/SchoolsService.ts b/web/src/services/SchoolsService.ts index 7974c06..60fcb22 100644 --- a/web/src/services/SchoolsService.ts +++ b/web/src/services/SchoolsService.ts @@ -1,34 +1,15 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; -import { FirestoreServiceBase } from "./firestore/FirestoreServiceBase"; -import { FirebaseFunctions } from "./functions/FirebaseFunctions"; -import { getCurrentLanguage } from "../config/I18nextInitializer"; +import { ISchool } from "../models/School"; +import { FirestoreServiceBase } from "./FirestoreServiceBase"; -export class SchoolsService extends FirestoreServiceBase { +export class SchoolsService extends FirestoreServiceBase { - private static instance: SchoolsService; - - private readonly schoolsCollection = "schools"; - private readonly schoolsRef = this.firestore.collection(this.schoolsCollection); - - public static getInstance(): SchoolsService { - if (this.instance === undefined) { - this.instance = new SchoolsService(); - } - return this.instance; - } + private readonly schoolsRef = this.firestore.collection("schools"); public listSchools(): Promise { return new Promise((resolve, reject) => { this.schoolsRef.get() .then((snapshot) => { - const schools: ISchool[] = []; - snapshot.docs.forEach((doc) => { - const school = { - id: doc.id, - ...doc.data(), - }; - schools.push(school as ISchool); - }); + const schools = this.mapQueryDocumentSnapshotsToObject(snapshot.docs); return resolve(schools); }) .catch(reject); @@ -37,11 +18,14 @@ export class SchoolsService extends FirestoreServiceBase { public addSchool(school: ISchool): Promise { return new Promise((resolve, reject) => { - FirebaseFunctions.addSchoolFunction({ - data: school, - lang: getCurrentLanguage(), - }) - .then(resolve) + this.schoolsRef.add(school) + .then((docRef) => { + return docRef.get(); + }) + .then((doc) => { + const addedSchool = this.mapQueryDocumentSnapshotToObject(doc); + resolve(addedSchool); + }) .catch(reject); }); } diff --git a/web/src/services/firestore/FirestoreServiceBase.ts b/web/src/services/firestore/FirestoreServiceBase.ts deleted file mode 100644 index 7ba71cd..0000000 --- a/web/src/services/firestore/FirestoreServiceBase.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Firebase } from "../../config/FirebaseInitializer"; - -export abstract class FirestoreServiceBase { - protected readonly firestore = Firebase.firestore(); -} diff --git a/web/src/services/functions/FirebaseFunctions.ts b/web/src/services/functions/FirebaseFunctions.ts deleted file mode 100644 index 2ad2509..0000000 --- a/web/src/services/functions/FirebaseFunctions.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IFirebaseFunctionParam } from "@studentplanner/functions/dist/shared/firebase/interfaces"; -import { Firebase } from "../../config/FirebaseInitializer"; -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; - -export class FirebaseFunctions { - - public static addSchoolFunction(data: IFirebaseFunctionParam): Promise { - return new Promise((resolve, reject) => { - Firebase.functions().httpsCallable("addSchool")(data) - .then((result) => { - resolve(result.data); - }) - .catch(reject); - }); - } -} diff --git a/web/src/stores/schools/actions/addSchoolAction.ts b/web/src/stores/schools/actions/addSchoolAction.ts deleted file mode 100644 index a53d3e2..0000000 --- a/web/src/stores/schools/actions/addSchoolAction.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Action, Dispatch } from "redux"; -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; -import { SchoolsService } from "../../../services/SchoolsService"; - -interface IAddSchoolStartedAction extends Action { - type: "ADD_SCHOOL_STARTED"; -} - -interface IAddSchoolSuccessAction extends Action { - type: "ADD_SCHOOL_SUCCESS"; - payload: { - school: ISchool; - } -} - -interface IAddSchoolFailureAction extends Action { - type: "ADD_SCHOOL_FAILURE"; - payload: { - error: string; - } -} - -export type AddSchoolAction = - IAddSchoolStartedAction | - IAddSchoolSuccessAction | - IAddSchoolFailureAction; - -function actionAddSchoolStarted(): IAddSchoolStartedAction { - return { - type: "ADD_SCHOOL_STARTED", - }; -} - -function actionAddSchoolSuccess(school: ISchool): IAddSchoolSuccessAction { - return { - type: "ADD_SCHOOL_SUCCESS", - payload: { - school, - }, - }; -} - -function actionAddSchoolFailure(error: string): IAddSchoolFailureAction { - return { - type: "ADD_SCHOOL_FAILURE", - payload: { - error, - }, - }; -} - -export function addSchool(school: ISchool): (d: Dispatch) => void { - return (dispatch: Dispatch) => { - dispatch(actionAddSchoolStarted()); - - SchoolsService.getInstance().addSchool(school) - .then((school: ISchool) => { - return dispatch(actionAddSchoolSuccess(school)); - }) - .catch((error: firebase.functions.HttpsError) => { - console.log(error.details); - return dispatch(actionAddSchoolFailure(error.message)); - }); - }; -} diff --git a/web/src/stores/schools/actions/fetchSchoolsAction.ts b/web/src/stores/schools/actions/fetchSchoolsAction.ts deleted file mode 100644 index 80705a2..0000000 --- a/web/src/stores/schools/actions/fetchSchoolsAction.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; -import { Action, Dispatch } from "redux"; -import { SchoolsService } from "../../../services/SchoolsService"; - -interface IFetchSchoolsStartedAction extends Action { - type: "FETCH_SCHOOLS_STARTED"; -} - -interface IFetchSchoolsSuccessAction extends Action { - type: "FETCH_SCHOOLS_SUCCESS"; - payload: { - schools: ISchool[]; - }; -} - -interface IFetchSchoolsFailureAction extends Action { - type: "FETCH_SCHOOLS_FAILURE"; - payload: { - error: string; - }; -} - -export type FetchSchoolsAction = - IFetchSchoolsStartedAction | - IFetchSchoolsSuccessAction | - IFetchSchoolsFailureAction; - -function actionFetchSchoolsStarted(): IFetchSchoolsStartedAction { - return { - type: "FETCH_SCHOOLS_STARTED", - }; -} - -function actionFetchSchoolsSuccess(schools: ISchool[]): IFetchSchoolsSuccessAction { - return { - type: "FETCH_SCHOOLS_SUCCESS", - payload: { - schools, - }, - }; -} - -function actionFetchSchoolsFailure(error: string): IFetchSchoolsFailureAction { - return { - type: "FETCH_SCHOOLS_FAILURE", - payload: { - error, - }, - }; -} - -export function fetchSchools(): (d: Dispatch) => void { - return (dispatch: Dispatch) => { - dispatch(actionFetchSchoolsStarted()); - - SchoolsService.getInstance().listSchools() - .then((schools: ISchool[]) => { - return dispatch(actionFetchSchoolsSuccess(schools)); - }) - .catch(() => { - return dispatch(actionFetchSchoolsFailure("Could not load schools.")); // TODO: translate - }); - }; -} diff --git a/web/src/stores/schools/actions/index.ts b/web/src/stores/schools/actions/index.ts deleted file mode 100644 index 1677a41..0000000 --- a/web/src/stores/schools/actions/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { fetchSchools, FetchSchoolsAction } from "./fetchSchoolsAction"; -import { AddSchoolAction, addSchool } from "./addSchoolAction"; - -export type SchoolsAction = - FetchSchoolsAction | - AddSchoolAction; - -export { - fetchSchools, - addSchool, -}; diff --git a/web/src/stores/schools/reducer.ts b/web/src/stores/schools/reducer.ts deleted file mode 100644 index 6972ba5..0000000 --- a/web/src/stores/schools/reducer.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { ISchool } from "@studentplanner/functions/dist/shared/models/School"; -import { SchoolsAction } from "./actions"; - -export type SchoolsLoadingStatus = - "NOT_LOADED" | - "LOADING" | - "LOADING_DONE" | - "LOADING_FAILED"; - -export type SchoolAddingStatus = - "NOTHING_ADDED" | - "ADDING" | - "ADDED" | - "FAILED"; - -export interface ISchoolsState { - readonly schools: ISchool[]; - readonly listLoadingStatus: SchoolsLoadingStatus; - readonly listErrorMessage: string; - readonly lastAddedSchool: ISchool | undefined; - readonly addingStatus: SchoolAddingStatus; - readonly addErrorMessage: string; -} - -const initialState: ISchoolsState = { - schools: [], - listLoadingStatus: "NOT_LOADED", - listErrorMessage: "", - lastAddedSchool: undefined, - addingStatus: "NOTHING_ADDED", - addErrorMessage: "", -}; - -export function schoolsReducer(state: ISchoolsState = initialState, action: SchoolsAction): ISchoolsState { - switch (action.type) { - case "FETCH_SCHOOLS_STARTED": - return { - ...state, - listLoadingStatus: "LOADING", - }; - - case "FETCH_SCHOOLS_SUCCESS": - return { - ...state, - listLoadingStatus: "LOADING_DONE", - schools: action.payload.schools, - listErrorMessage: "", - }; - - case "FETCH_SCHOOLS_FAILURE": - return { - ...state, - listLoadingStatus: "LOADING_FAILED", - listErrorMessage: action.payload.error, - }; - - case "ADD_SCHOOL_STARTED": - return { - ...state, - addingStatus: "ADDING" - } - - case "ADD_SCHOOL_SUCCESS": - state.schools.push(action.payload.school); - return { - ...state, - addingStatus: "ADDED", - lastAddedSchool: action.payload.school, - addErrorMessage: "" - } - - case "ADD_SCHOOL_FAILURE": - return { - ...state, - addingStatus: "FAILED", - addErrorMessage: action.payload.error, - lastAddedSchool: undefined, - } - - default: - return state; - } -} diff --git a/web/tsconfig.json b/web/tsconfig.json index a6bd7f8..ece3c13 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -17,7 +17,13 @@ "es6", "dom", "es2018.promise" - ] + ], + "plugins": [{ + "name": "typescript-plugin-css-modules", + "options": { + "camelCase": "dashes" + } + }] }, "include": [ "src" diff --git a/web/tslint.json b/web/tslint.json index 3b61527..dba66d7 100644 --- a/web/tslint.json +++ b/web/tslint.json @@ -19,7 +19,7 @@ "moment/locale", "antd/lib", "firebase", - "@studentplanner" + "core-js/modules" ], "max-line-length": false, "object-literal-sort-keys": false, diff --git a/yarn.lock b/yarn.lock index 7b48d6c..5be6535 100644 --- a/yarn.lock +++ b/yarn.lock @@ -202,13 +202,13 @@ "@babel/types" "^7.0.0" "@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" + integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA== dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" + "@babel/traverse" "^7.2.3" "@babel/types" "^7.0.0" "@babel/helper-simple-access@^7.1.0": @@ -254,10 +254,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.2.tgz#37ebdbc88a2e1ebc6c8dd3d35ea9436e3e39e477" - integrity sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" + integrity sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA== "@babel/plugin-proposal-async-generator-functions@^7.1.0", "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -766,9 +766,9 @@ semver "^5.3.0" "@babel/preset-env@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.0.tgz#a5030e7e4306af5a295dd5d7c78dc5464af3fee2" - integrity sha512-haGR38j5vOGVeBatrQPr3l0xHbs14505DcM57cbJy48kgMFvvHHoYEhHuRV+7vi559yyAUAVbTWzbK/B/pzJng== + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.3.tgz#948c8df4d4609c99c7e0130169f052ea6a7a8933" + integrity sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -838,13 +838,6 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" - integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== - dependencies: - regenerator-runtime "^0.12.0" - "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -854,16 +847,16 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.2.tgz#961039de1f9bcb946d807efe2dba9c92e859d188" - integrity sha512-E5Bn9FSwHpSkUhthw/XEuvFZxIgrqb9M8cX8j5EUQtrUG5DQUy6bFyl7G7iQ1D1Czudor+xkmp81JbLVVM0Sjg== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" + integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.2.2" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.2" + "@babel/parser" "^7.2.3" "@babel/types" "^7.2.2" debug "^4.1.0" globals "^11.1.0" @@ -888,7 +881,7 @@ resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.3.2.tgz#a92dc544290e2893bd8c02a81e684dae3d8e7c85" integrity sha512-ZD8lTgW07NGgo75bTyBJA8Lt9+NweNzot7lrsBtIvfciwUzaFJLsv2EShqjBeuhF7RpG6YFucJ6m67w5buCtzw== -"@firebase/app@0.3.5", "@firebase/app@^0.3.1": +"@firebase/app@0.3.5", "@firebase/app@^0.3.4": version "0.3.5" resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.3.5.tgz#7011ab5a16604d6c1b2964d513b88c61a0a5387c" integrity sha512-DaAlb74yzwXbkFXvfsUVFeurSETPJAvKNtVpAKlS6RThyD+Y+ci1/8JVw4INm2hihbj/edxlAUelg9eoOZNCKA== @@ -904,10 +897,10 @@ resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.5.0.tgz#5620308993d524e5b4f0d084372ad7e7dc7dee55" integrity sha512-DSjtsIjTy5RSiWyGHqiGkLcDgEgFEf2aD2O0t/0+lHmAzxUGrJFO5+IkPNV6i0ffmtiJaXQDJ7z7q4OdypDBCg== -"@firebase/auth@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.9.0.tgz#c815f36c9b0e494c50a15b93ce0d958f4eed0f29" - integrity sha512-pNxfxFr4/tJluGfmPYUiuy2Tq/ZSRniJlWP4fj1mg+a9r+KevheeISZdWEZwJMosieXeCg+BzY0tvFD9j5ZrDw== +"@firebase/auth@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.9.1.tgz#406c7dee4688fe2a3a5457d0b75a6e549883bc2e" + integrity sha512-kiJtKXzM7DD1UNTdWcMmmRoU4LBX95JPWgCUN6nzumO1Ed+1izsgE4OwYVbZo+inSlOp6au0JTJrecsHHBemug== dependencies: "@firebase/auth-types" "0.5.0" @@ -916,10 +909,10 @@ resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.3.2.tgz#70611a64dd460e0e253c7427f860d56a1afd86fe" integrity sha512-9ZYdvYQ6r3aaHJarhUM5Hf6lQWu3ZJme+RR0o8qfBb9L04TL3uNjt+AJFku1ysVPntTn+9GqJjiIB2/OC3JtwA== -"@firebase/database@0.3.7", "@firebase/database@^0.3.1": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.3.7.tgz#7cc9a83b2adff06137157e37d7f27545166afe74" - integrity sha512-BB5L3PqwQVJUdS1WY+sq3eun5n5oimFWolXYl6pyACJwqL2qnPp0cnjK6kOqTsRPPMayZZmfUI38RBDwXaUJhQ== +"@firebase/database@0.3.8", "@firebase/database@^0.3.6": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.3.8.tgz#1ed903aa6efa778f81dab5b01bd6ea33b5c5bc20" + integrity sha512-y+QJjxC62triL1g6e58sapkGKegvbNIp3hOttE6olYG/zzb+U4Q7lUbYjtMkVpGWKYSsQOPu8JkH3FNhFvX95Q== dependencies: "@firebase/database-types" "0.3.2" "@firebase/logger" "0.1.2" @@ -932,10 +925,10 @@ resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-0.8.0.tgz#a40b2ed03eda9c189af145acdff408e562976345" integrity sha512-FdLy2TbZ6aAeT9eDmVMPAFsUqhjN2e+jcdVpl0Pz1W6ElRWWyr30hgTY7xIqIKpMs1iT6IF/8w9CKvI6fPbKxA== -"@firebase/firestore@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-0.9.0.tgz#37a6698b1805b07181455df562f7e98192d12546" - integrity sha512-ub9BXce75D7t2yQxqopJhqE5YrsdePLg7wP8aMLR2Twe+O89IZqOhdbE0VALjplD2rAWXkOLqf6zYsppu2hh4g== +"@firebase/firestore@0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-0.9.1.tgz#ec6bc5feb02aad195a9a6a4b6a12dbc92d4c2dfb" + integrity sha512-R4VzozcniHgoS7kldk2aOYr1AhgG+9evkin/pG+6lZcZOabO04LYxT6HWLq+Q1KAyaEl9LOjJ1ne28S5l9IA5g== dependencies: "@firebase/firestore-types" "0.8.0" "@firebase/logger" "0.1.2" @@ -1035,22 +1028,21 @@ string-format-obj "^1.1.0" through2 "^2.0.3" -"@google-cloud/firestore@^0.16.0": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-0.16.1.tgz#aedba92d428cc78f8a6e3eb6ab59e3c8d906f814" - integrity sha512-xHb4OdRb0OP0x/8w58WJERtCi9Pr+CsloiUlVAq6fFjSyEcmxgL0V+swE8A/2rI5NGQGwtrN57xwDcis5UM/cQ== +"@google-cloud/firestore@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-0.19.0.tgz#c16c426a2af33badfa0257245bc04730c7094fec" + integrity sha512-5WBS4UT3e0pogjiq7Ih/ezBQFqM/eEWQfB0oPiCYl2uzAcMfIvYjQlbxG7QI0fSB93TIA7fa+xCHvRHnIVnF+Q== dependencies: "@google-cloud/projectify" "^0.3.0" bun "^0.0.12" deep-equal "^1.0.1" extend "^3.0.1" functional-red-black-tree "^1.0.1" - google-gax "^0.18.0" - google-proto-files "^0.16.1" + google-gax "^0.22.0" is "^3.2.1" lodash.merge "^4.6.1" protobufjs "^6.8.6" - through2 "^2.0.3" + through2 "^3.0.0" "@google-cloud/projectify@^0.3.0": version "0.3.2" @@ -1084,6 +1076,14 @@ through2 "^2.0.0" xdg-basedir "^3.0.0" +"@grpc/grpc-js@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.3.2.tgz#8adcf22154bfd4a0903296d6656420c2ff86e388" + integrity sha512-vvcC4EZwS2kzEuwe3zmExi20YM1tqO+L/xdpzInze0WnRfhwbssDfLtMfAyAPQaL2CD8dRZLCOVLbsSdF1KVjA== + dependencies: + lodash "^4.17.4" + semver "^5.5.0" + "@grpc/proto-loader@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.3.0.tgz#c127d3859bff895f220453612ba04b923af0c584" @@ -1242,7 +1242,7 @@ dependencies: "@types/node" "*" -"@types/google-cloud__storage@^1.1.7": +"@types/google-cloud__storage@^1.7.1": version "1.7.2" resolved "https://registry.yarnpkg.com/@types/google-cloud__storage/-/google-cloud__storage-1.7.2.tgz#28593a90c861299609344e30c9ee5a8895948901" integrity sha512-RaQJ7+Ht20MRYJu7mgKBpbVNZIPneztKIl/DUKacRC6A8mXRsJfgDdPA7indHmJGIgm+hzUTj44+A3RyuuYZhg== @@ -1267,7 +1267,7 @@ dependencies: "@types/node" "*" -"@types/lodash@^4.14.104", "@types/lodash@^4.14.34": +"@types/lodash@^4.14.104", "@types/lodash@^4.14.118", "@types/lodash@^4.14.34": version "4.14.119" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.119.tgz#be847e5f4bc3e35e46d041c394ead8b603ad8b39" integrity sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw== @@ -1282,16 +1282,16 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b" integrity sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA== -"@types/node@*", "@types/node@^8.0.53": +"@types/node@*", "@types/node@10.12.18", "@types/node@^10.1.0": + version "10.12.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" + integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== + +"@types/node@^8.0.53": version "8.10.39" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.39.tgz#e7e87ad00364dd7bc485c940926345b8ec1a26ca" integrity sha512-rE7fktr02J8ybFf6eysife+WF+L4sAHWzw09DgdCebEu+qDwMvv4zl6Bc+825ttGZP73kCKxa3dhJOoGJ8+5mA== -"@types/node@10.12.17", "@types/node@^10.1.0": - version "10.12.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.17.tgz#7040565b2c93d59325a68fa69073e754a7eda93a" - integrity sha512-umSCRkjWH70uNzFiOof5yxCqrMXIBJ9UJJUzbEsmtWt8apURQh06pylGMqnhdjHGJSeoBrhzk+mibu6NgL1oBA== - "@types/node@^9.4.6": version "9.6.41" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.41.tgz#e57c3152eb2e7ec748c733cebd0c095b437c5d37" @@ -1319,15 +1319,7 @@ dependencies: "@types/react" "*" -"@types/react-redux@^6.0.11": - version "6.0.11" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.11.tgz#d872254bbcba42465195a5475f40b22502b0407d" - integrity sha512-I3POoeGGwNqZjbK7TfnPJS2C51TFvT0atQPz4M+xpVTrLMjsX37AAfcTF3XUOTnmxHsryEjwJN9r/ScGwSXdtg== - dependencies: - "@types/react" "*" - redux "^4.0.0" - -"@types/react-router-dom@^4.3.1": +"@types/react-router-dom@4.3.1": version "4.3.1" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.3.1.tgz#71fe2918f8f60474a891520def40a63997dafe04" integrity sha512-GbztJAScOmQ/7RsQfO4cd55RuH1W4g6V1gDW3j4riLlt+8yxYLqqsiMzmyuXBLzdFmDtX/uU2Bpcm0cmudv44A== @@ -1336,7 +1328,7 @@ "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*", "@types/react-router@^4.4.3": +"@types/react-router@*", "@types/react-router@4.4.3": version "4.4.3" resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.4.3.tgz#ea68b4021cb576866f83365b2201411537423d50" integrity sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ== @@ -1344,10 +1336,10 @@ "@types/history" "*" "@types/react" "*" -"@types/react@*", "@types/react@16.7.17": - version "16.7.17" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.17.tgz#3242e796a1ffbba4f49eae5915a67f4c079504e9" - integrity sha512-YcXcaoXaxo7A76mBCGlKlN2aZu3REQfF0DTrhiyXVJLA7PDdxVCr+wiQOrkVNn44D/zLlIyDSn3U918Ve0AaEA== +"@types/react@*", "@types/react@16.7.18": + version "16.7.18" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.18.tgz#f4ce0d539a893dd61e36cd11ae3a5e54f5a48337" + integrity sha512-Tx4uu3ppK53/iHk6VpamMP3f3ahfDLEVt3ZQc8TFm30a1H3v9lMsCntBREswZIW/SKrvJjkb3Hq8UwO6GREBng== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -1562,11 +1554,6 @@ acorn-dynamic-import@^3.0.0: dependencies: acorn "^5.0.0" -acorn-es7-plugin@^1.0.12: - version "1.1.7" - resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" - integrity sha1-8u4fMiipDurRJF+asZIusucdM2s= - acorn-globals@^4.1.0, acorn-globals@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" @@ -1607,6 +1594,13 @@ address@1.0.3, address@^1.0.1: resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1686,10 +1680,10 @@ ant-design-palettes@^1.1.3: dependencies: tinycolor2 "^1.4.1" -antd@^3.11.2: - version "3.11.2" - resolved "https://registry.yarnpkg.com/antd/-/antd-3.11.2.tgz#150eb55c65c554961394c14418843348e1de1d3d" - integrity sha512-bwc9L+5Dk6sGbtA2Nr9rnfchM5JJ28Zb/AZTzMzevwA/89CFm5Eq4uBhFtYrITv8R2+p0FXyPo4lDVUQ16IlPQ== +antd@3.11.4: + version "3.11.4" + resolved "https://registry.yarnpkg.com/antd/-/antd-3.11.4.tgz#39c4a0e9ff1a944da4bdcb23c91432f0e8729158" + integrity sha512-no4tx3A3RyoccGE9DbuR5J4pZwW1hhWM1CoVvIqEdzVkc0pFjqht4Ad1b02kHwyYkPzXMezJOn5OwpkuejLGxA== dependencies: "@ant-design/icons" "~1.1.15" "@ant-design/icons-react" "~1.1.2" @@ -1716,14 +1710,14 @@ antd@^3.11.2: rc-drawer "~1.7.6" rc-dropdown "~2.2.1" rc-editor-mention "^1.1.7" - rc-form "^2.2.7" + rc-form "^2.4.0" rc-input-number "~4.3.7" rc-menu "~7.4.12" rc-notification "~3.3.0" - rc-pagination "~1.17.3" + rc-pagination "~1.17.5" rc-progress "~2.2.6" rc-rate "~2.4.2" - rc-select "~8.6.0" + rc-select "^8.6.7" rc-slider "~8.6.3" rc-steps "~3.3.0" rc-switch "~1.8.0" @@ -1813,11 +1807,6 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" @@ -2345,7 +2334,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.1: +bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== @@ -2600,23 +2589,23 @@ cacache@^10.0.4: y18n "^4.0.0" cacache@^11.0.2: - version "11.3.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" - integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA== + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" move-concurrently "^1.0.1" promise-inflight "^1.0.1" rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" + ssri "^6.0.1" + unique-filename "^1.1.1" y18n "^4.0.0" cache-base@^1.0.1: @@ -2639,11 +2628,6 @@ call-me-maybe@^1.0.1: resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= -call-signature@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" - integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY= - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2722,9 +2706,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000884, caniuse-lite@^1.0.30000887, caniuse-lite@^1.0.30000921: - version "1.0.30000921" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000921.tgz#7a607c1623444b22351d834e093aedda3c42fbe8" - integrity sha512-Bu09ciy0lMWLgpYC77I0YGuI8eFRBPPzaSOYJK1jTI64txCphYCqnWbxJYjHABYVt/TYX/p3jNjLBR87u1Bfpw== + version "1.0.30000923" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz#148f9bda508024b5ce957b463ae2e8302b451bb2" + integrity sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w== capture-exit@^1.2.0: version "1.2.0" @@ -2983,7 +2967,7 @@ commander@2.17.x, commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.12.1, commander@^2.9.0: +commander@^2.11.0, commander@^2.12.1: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -3158,7 +3142,7 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.0.0, core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042" integrity sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg== @@ -3251,14 +3235,6 @@ create-react-context@0.2.2: fbjs "^0.8.0" gud "^1.0.0" -create-react-context@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" - integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3428,10 +3404,10 @@ cssesc@^2.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== -cssnano-preset-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" - integrity sha512-f1uhya0ZAjPYtDD58QkBB0R+uYdzHPei7cDxJyQQIHt5acdhyGXaSXl2nDLzWHLwGFbZcHxQtkJS8mmNwnxTvw== +cssnano-preset-default@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz#92379e2a6db4a91c0ea727f5f556eeac693eab6a" + integrity sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" @@ -3443,7 +3419,7 @@ cssnano-preset-default@^4.0.5: postcss-discard-duplicates "^4.0.2" postcss-discard-empty "^4.0.1" postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.9" + postcss-merge-longhand "^4.0.10" postcss-merge-rules "^4.0.2" postcss-minify-font-values "^4.0.2" postcss-minify-gradients "^4.0.1" @@ -3487,12 +3463,12 @@ cssnano-util-same-parent@^4.0.0: integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^4.1.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" - integrity sha512-AiXL90l+MDuQmRNyypG2P7ux7K4XklxYzNNUd5HXZCNcH8/N9bHPcpN97v8tXgRVeFL/Ed8iP8mVmAAu0ZpT7A== + version "4.1.8" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.8.tgz#8014989679d5fd42491e4499a521dbfb85c95fd1" + integrity sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.5" + cssnano-preset-default "^4.0.6" is-resolvable "^1.0.0" postcss "^7.0.0" @@ -3580,9 +3556,9 @@ debug@^3.1.0: ms "^2.1.1" debug@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" @@ -3732,11 +3708,6 @@ detect-port-alt@1.1.6: address "^1.0.1" debug "^2.6.0" -diff-match-patch@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.4.tgz#6ac4b55237463761c4daf0dc603eb869124744b1" - integrity sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg== - diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3929,11 +3900,6 @@ duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3955,9 +3921,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.62, electron-to-chromium@^1.3.92: - version "1.3.94" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.94.tgz#896dba14f6fefb431295b90543874925ee0cd46e" - integrity sha512-miQqXALb6eBD3OetCtg3UM5XTLMwHISux0l6mh14iiV5SE+qvftgOCXT9Vvp53fWaCLET4sfA/SmIMYHXkaNmw== + version "1.3.96" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz#25770ec99b8b07706dedf3a5f43fa50cb54c4f9a" + integrity sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q== elliptic@^6.0.0: version "6.4.1" @@ -3982,22 +3948,6 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -empower-core@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" - integrity sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ== - dependencies: - call-signature "0.0.2" - core-js "^2.0.0" - -empower@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/empower/-/empower-1.3.1.tgz#768979cbbb36d71d8f5edaab663deacb9dab916c" - integrity sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA== - dependencies: - core-js "^2.0.0" - empower-core "^1.2.0" - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -4075,11 +4025,18 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.2.5: +es6-promise@^4.0.3: version "4.2.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -4273,13 +4230,6 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -espurify@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.8.1.tgz#5746c6c1ab42d302de10bd1d5bf7f0e8c0515056" - integrity sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg== - dependencies: - core-js "^2.0.0" - esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" @@ -4585,7 +4535,7 @@ fbjs@^0.8.0, fbjs@^0.8.15, fbjs@^0.8.16, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -figgy-pudding@^3.1.0, figgy-pudding@^3.5.1: +figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== @@ -4714,22 +4664,22 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -firebase-admin@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-6.0.0.tgz#6a4be9e38b523ad7b4397b9b35853e4412e135ae" - integrity sha512-ai7ensTAZx9iF6z/lMn7JzFJYSl6+uXYm53GGhWlph+npnQli10FF9YB97OjcVUghapDEWzmb6J0VMtB965nsw== +firebase-admin@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-6.4.0.tgz#55c288f4e324bc89174bad39735c78475eae7235" + integrity sha512-sqRfD4UbDA9r1tX/TPbtpYhcajLr+APqlNps7HrFfrqYBfNXLkkZbnx6Bbbbii3XPJZ5Dcwfl9saxHahsLkpCw== dependencies: - "@firebase/app" "^0.3.1" - "@firebase/database" "^0.3.1" + "@firebase/app" "^0.3.4" + "@firebase/database" "^0.3.6" "@types/node" "^8.0.53" jsonwebtoken "8.1.0" node-forge "0.7.4" optionalDependencies: - "@google-cloud/firestore" "^0.16.0" + "@google-cloud/firestore" "^0.19.0" "@google-cloud/storage" "^1.6.0" - "@types/google-cloud__storage" "^1.1.7" + "@types/google-cloud__storage" "^1.7.1" -firebase-functions@^2.1.0: +firebase-functions@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-2.1.0.tgz#10973f9055092aaa8ed5bd26410426a9790a99ea" integrity sha512-gvWjfIu/q0jXSE/4JY+6XZyJWVzk0TeGLJAfKE4Y7W/cUxkycogc7EIBJSEMdHnxFAD3GE6VgCrhtTTmUud6Sw== @@ -4743,15 +4693,15 @@ firebase-functions@^2.1.0: jsonwebtoken "^8.2.1" lodash "^4.6.1" -firebase@^5.5.8: - version "5.7.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-5.7.0.tgz#4e43e3f6521cfb4c1b4caf1b269a402c83713dd4" - integrity sha512-8sQYXCUbUuzpyZS+XpBogstQE/7lvX6tPWtrUH0Cf4mH7flH/Sue5GUvZzwBpkgKOrMpI+clzuoYm/ffGi/TjQ== +firebase@5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-5.7.1.tgz#9c82f5ca8837eb2a102e2e439cda0cea9b3da485" + integrity sha512-mzquoe+m7lMC5UHyidrOUENImaInB9k2bBKLr6TSThtoCxsBmvHUiexqsYQ8QRl28X0GdVcKEOOESBltnlRsnQ== dependencies: "@firebase/app" "0.3.5" - "@firebase/auth" "0.9.0" - "@firebase/database" "0.3.7" - "@firebase/firestore" "0.9.0" + "@firebase/auth" "0.9.1" + "@firebase/database" "0.3.8" + "@firebase/firestore" "0.9.1" "@firebase/functions" "0.3.3" "@firebase/messaging" "0.3.7" "@firebase/polyfill" "0.3.3" @@ -4971,6 +4921,15 @@ gcp-metadata@^0.6.1, gcp-metadata@^0.6.3: extend "^3.0.1" retry-axios "0.3.2" +gcp-metadata@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.7.0.tgz#6c35dbb52bda32a427bb9c98f54237ddd1b5406f" + integrity sha512-ffjC09amcDWjh3VZdkDngIo7WoluyC5Ag9PAYxZbmQLOLNI8lvPtoKTSCyU54j2gwy5roZh6sSMTfkY2ct7K3g== + dependencies: + axios "^0.18.0" + extend "^3.0.1" + retry-axios "0.3.2" + gcs-resumable-upload@^0.10.2: version "0.10.2" resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.10.2.tgz#7f29b3ee23dcec4170367c0711418249c660545f" @@ -4982,6 +4941,13 @@ gcs-resumable-upload@^0.10.2: request "^2.85.0" stream-events "^1.0.3" +generic-names@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" + integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= + dependencies: + loader-utils "^0.2.16" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -5042,7 +5008,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -5084,7 +5050,7 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globby@8.0.1, globby@^8.0.0, globby@^8.0.1: +globby@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== @@ -5117,7 +5083,7 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -google-auth-library@^1.3.1, google-auth-library@^1.6.1: +google-auth-library@^1.3.1: version "1.6.1" resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-1.6.1.tgz#9c73d831ad720c0c3048ab89d0ffdec714d07dd2" integrity sha512-jYiWC8NA9n9OtQM7ANn0Tk464do9yhKEtaJ72pKcaBiEwn4LwcGYIYOfwtfsSm3aur/ed3tlSxbmg24IAT6gAg== @@ -5130,6 +5096,19 @@ google-auth-library@^1.3.1, google-auth-library@^1.6.1: lru-cache "^4.1.3" retry-axios "^0.3.2" +google-auth-library@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-2.0.2.tgz#7a315d2036744af6afcad87b210ee6638b40f57b" + integrity sha512-FURxmo1hBVmcfLauuMRKOPYAPKht3dGuI2wjeJFalDUThO0HoYVjr4yxt5cgYSFm1dgUpmN9G/poa7ceTFAIiA== + dependencies: + axios "^0.18.0" + gcp-metadata "^0.7.0" + gtoken "^2.3.0" + https-proxy-agent "^2.2.1" + jws "^3.1.5" + lru-cache "^5.0.0" + semver "^5.5.0" + google-auto-auth@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/google-auto-auth/-/google-auto-auth-0.10.1.tgz#68834a6f3da59a6cb27fce56f76e3d99ee49d0a2" @@ -5140,23 +5119,24 @@ google-auto-auth@^0.10.0: google-auth-library "^1.3.1" request "^2.79.0" -google-gax@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.18.0.tgz#07ede5c3d8a41be627c168454c3e7ff60f648bfe" - integrity sha512-cF2s3aTw1cWDHsjaYfIizJZT0KJF0FSM3laiCX4O/K0ZcdmeE9PitG2bxRH+dY+Sz094//m+JoH1hBtSyOf67A== +google-gax@^0.22.0: + version "0.22.1" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.22.1.tgz#62a8109648a17027d64b3c3346d74fd9c0029333" + integrity sha512-QLvRQ00f5eLmkVm9c8JwqDSwQ6yEJXdtwCu+Xvk2EMpzzaTPZxgX+TtU1Ljg7AHJclpxChJpNYrCw10aB1IJlQ== dependencies: + "@grpc/grpc-js" "^0.3.0" "@grpc/proto-loader" "^0.3.0" duplexify "^3.6.0" - extend "^3.0.1" - globby "^8.0.1" - google-auth-library "^1.6.1" - google-proto-files "^0.16.0" - grpc "^1.12.2" + google-auth-library "^2.0.0" + google-proto-files "^0.18.0" + grpc "^1.16.0" is-stream-ended "^0.1.4" - lodash "^4.17.10" + lodash.at "^4.6.0" + lodash.has "^4.5.2" protobufjs "^6.8.8" retry-request "^4.0.0" - through2 "^2.0.3" + semver "^5.5.1" + walkdir "0.0.12" google-p12-pem@^1.0.0: version "1.0.3" @@ -5166,16 +5146,15 @@ google-p12-pem@^1.0.0: node-forge "^0.7.5" pify "^4.0.0" -google-proto-files@^0.16.0, google-proto-files@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.16.1.tgz#e422e4c0cfd65c481b63f3c0e0cca03ba9cd97ce" - integrity sha512-ykdhaYDiU/jlyrkzZDPemraKwVIgLT31XMHVNSJW//R9VED56hqSDRMx1Jlxbf0O4iDZnBWQ0JQLHbM2r5+wuA== +google-proto-files@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.18.0.tgz#5be91bac15b38dbeae00393b0e47b9acb6c51cf2" + integrity sha512-blJ5rA3TWEiZIw7Qm0GHNERDdZeezDj46wE4O5uGnOWpZI/STQjeI6rPbqiwjmxzG+b592Hrp2+GKYfbmKR+Lg== dependencies: - globby "^8.0.0" - power-assert "^1.4.4" protobufjs "^6.8.0" + walkdir "0.0.12" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== @@ -5195,7 +5174,7 @@ grpc@1.16.1: node-pre-gyp "^0.12.0" protobufjs "^5.0.3" -grpc@^1.12.2: +grpc@^1.16.0: version "1.17.0" resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.17.0.tgz#d7971dd39bd4eec90c69a048f7727795ab504876" integrity sha512-5zb5ilwHlsiWfE2Abq/IN5SkHQ2zi4QF/u9Gewcw5DO3y+hGTtzZUiMK52MX3YZHAIRjqxDcO3fx0jLhPjT8Zw== @@ -5435,25 +5414,11 @@ hoek@4.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== -hoist-non-react-statics@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.0.1.tgz#fba3e7df0210eb9447757ca1a7cb607162f0a364" - integrity sha512-1kXwPsOi0OGQIZNVMPvgWJ9tSnGMiMfJdihqEzrPEXlHOBh9AAHXX/QYmAJTXztnz/K+PQ8ryCb4eGaN6HlGbQ== - dependencies: - react-is "^16.3.2" - hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e" - integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw== - dependencies: - react-is "^16.3.2" - home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -5529,13 +5494,6 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.4.x" -html-parse-stringify2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" - integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= - dependencies: - void-elements "^2.0.1" - html-webpack-plugin@4.0.0-alpha.2: version "4.0.0-alpha.2" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz#7745967e389a57a098e26963f328ebe4c19b598d" @@ -5612,10 +5570,13 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -i18next@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-13.0.0.tgz#3d8de7ff3c2cf23cd6d91c4d5861c4756d8a73c6" - integrity sha512-P8SDA5PN4bI5/ZdLE2AlanZhU+eXh31icrojQvbGcG7jovoDoz79eKY9mSgQ0LAeuDFKAw4Vl4mGf1/EWGFACg== +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" iconv-lite@0.4.23: version "0.4.23" @@ -5643,6 +5604,20 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +icss-utils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" + integrity sha1-7nDTroysOMa+XtkehRsn7tNDrQ8= + dependencies: + postcss "^6.0.2" + +icss-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.0.0.tgz#d52cf4bcdcfa1c45c2dbefb4ffdf6b00ef608098" + integrity sha512-bA/xGiwWM17qjllIs9X/y0EjsB7e0AV08F3OL8UPsoNkNRibIuu8f1eKTnQ8QO1DteKKTxTUAn+IEWUToIwGOA== + dependencies: + postcss "^7.0.5" + identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -7039,6 +7014,16 @@ loader-utils@1.1.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1. emojis-list "^2.0.0" json5 "^0.5.0" +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -7070,6 +7055,11 @@ lodash.assign@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= +lodash.at@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.at/-/lodash.at-4.6.0.tgz#93cdce664f0a1994ea33dd7cd40e23afd11b0ff8" + integrity sha1-k83OZk8KGZTqM9181A4jr9EbD/g= + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -7090,6 +7080,11 @@ lodash.debounce@^4.0.0, lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.has@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -7219,7 +7214,7 @@ long@~3: resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7247,6 +7242,13 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.0.0, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -7599,7 +7601,7 @@ modelo@^4.2.0: resolved "https://registry.yarnpkg.com/modelo/-/modelo-4.2.3.tgz#b278588a4db87fc1e5107ae3a277c0876f38d894" integrity sha512-9DITV2YEMcw7XojdfvGl3gDD8J9QjZTJ7ZOUuSAkP+F3T6rDbzMJuPktxptsdHYEvZcmXrCD3LMOhdSAEq6zKA== -moment@2.x, moment@^2.22.2, moment@^2.23.0: +moment@2.23.0, moment@2.x, moment@^2.22.2: version "2.23.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225" integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA== @@ -7831,7 +7833,7 @@ node-releases@^1.0.0-alpha.11, node-releases@^1.1.1: dependencies: semver "^5.3.0" -node-sass@^4.11.0: +node-sass@4.11.0: version "4.11.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== @@ -7911,7 +7913,7 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-run-all@^4.1.5: +npm-run-all@4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== @@ -7989,7 +7991,7 @@ object-hash@^1.1.4: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.0, object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== @@ -8671,6 +8673,17 @@ postcss-gap-properties@^2.0.0: dependencies: postcss "^7.0.2" +postcss-icss-selectors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-icss-selectors/-/postcss-icss-selectors-2.0.3.tgz#27fa1afcaab6c602c866cbb298f3218e9bc1c9b3" + integrity sha1-J/oa/Kq2xgLIZsuymPMhjpvBybM= + dependencies: + css-selector-tokenizer "^0.7.0" + generic-names "^1.0.2" + icss-utils "^3.0.1" + lodash "^4.17.4" + postcss "^6.0.2" + postcss-image-set-function@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" @@ -8728,10 +8741,10 @@ postcss-media-minmax@^4.0.0: dependencies: postcss "^7.0.2" -postcss-merge-longhand@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" - integrity sha512-UVMXrXF5K/kIwUbK/crPFCytpWbNX2Q3dZSc8+nQUgfOHrCT4+MHncpdxVphUlQeZxlLXUJbDyXc5NBhTnS2tA== +postcss-merge-longhand@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz#c4d63ab57bdc054ab4067ab075d488c8c2978380" + integrity sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g== dependencies: css-color-names "0.0.4" postcss "^7.0.0" @@ -9046,9 +9059,9 @@ postcss-selector-parser@^3.0.0: uniq "^1.0.1" postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0-rc.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz#ca5e77238bf152966378c13e91ad6d611568ea87" - integrity sha512-0XvfYuShrKlTk1ooUrVzMCFQRcypsdEIsGqh5IxC5rdtBi4/M/tDAJeSONwC2MTqEFsmPZYAV7Dd4X8rgAfV0A== + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== dependencies: cssesc "^2.0.0" indexes-of "^1.0.1" @@ -9087,7 +9100,7 @@ postcss-values-parser@^2.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@^6.0.1, postcss@^6.0.23: +postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.23: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== @@ -9105,105 +9118,6 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6: source-map "^0.6.1" supports-color "^5.5.0" -power-assert-context-formatter@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz#8fbe72692288ec5a7203cdf215c8b838a6061d2a" - integrity sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg== - dependencies: - core-js "^2.0.0" - power-assert-context-traversal "^1.2.0" - -power-assert-context-reducer-ast@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz#c7ca1c9e39a6fb717f7ac5fe9e76e192bf525df3" - integrity sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw== - dependencies: - acorn "^5.0.0" - acorn-es7-plugin "^1.0.12" - core-js "^2.0.0" - espurify "^1.6.0" - estraverse "^4.2.0" - -power-assert-context-traversal@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz#f6e71454baf640de5c1c9c270349f5c9ab0b2e94" - integrity sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ== - dependencies: - core-js "^2.0.0" - estraverse "^4.1.0" - -power-assert-formatter@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" - integrity sha1-XcEl7VCj37HdomwZNH879Y7CiEo= - dependencies: - core-js "^2.0.0" - power-assert-context-formatter "^1.0.7" - power-assert-context-reducer-ast "^1.0.7" - power-assert-renderer-assertion "^1.0.7" - power-assert-renderer-comparison "^1.0.7" - power-assert-renderer-diagram "^1.0.7" - power-assert-renderer-file "^1.0.7" - -power-assert-renderer-assertion@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz#3db6ffcda106b37bc1e06432ad0d748a682b147a" - integrity sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg== - dependencies: - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.2.0" - -power-assert-renderer-base@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" - integrity sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s= - -power-assert-renderer-comparison@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz#e4f88113225a69be8aa586ead05aef99462c0495" - integrity sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g== - dependencies: - core-js "^2.0.0" - diff-match-patch "^1.0.0" - power-assert-renderer-base "^1.1.1" - stringifier "^1.3.0" - type-name "^2.0.1" - -power-assert-renderer-diagram@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz#37f66e8542e5677c5b58e6d72b01c0d9a30e2219" - integrity sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg== - dependencies: - core-js "^2.0.0" - power-assert-renderer-base "^1.1.1" - power-assert-util-string-width "^1.2.0" - stringifier "^1.3.0" - -power-assert-renderer-file@^1.0.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz#3f4bebd9e1455d75cf2ac541e7bb515a87d4ce4b" - integrity sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg== - dependencies: - power-assert-renderer-base "^1.1.1" - -power-assert-util-string-width@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz#6e06d5e3581bb876c5d377c53109fffa95bd91a0" - integrity sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A== - dependencies: - eastasianwidth "^0.2.0" - -power-assert@^1.4.4: - version "1.6.1" - resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.6.1.tgz#b28cbc02ae808afd1431d0cd5093a39ac5a5b1fe" - integrity sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ== - dependencies: - define-properties "^1.1.2" - empower "^1.3.1" - power-assert-formatter "^1.4.1" - universal-deep-strict-equal "^1.2.1" - xtend "^4.0.0" - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9544,9 +9458,9 @@ rc-cascader@~0.16.0: warning "^4.0.1" rc-checkbox@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.1.5.tgz#411858448c0ee2a797ef8544dac63bcaeef722ef" - integrity sha512-WXKnZV6ipS3Jsmd7mVenVUQf+ictgWZW0RqiH+7MeYdzGj/SL4g/S6MZgRdgzaBS2tGBCp4bvhGcyZLns6uQxw== + version "2.1.6" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.1.6.tgz#5dc00653e5277018c431fec55e38b91c1f976e90" + integrity sha512-+VxQbt2Cwe1PxCvwosrAYXT6EQeGwrbLJB2K+IPGCSRPCKnk9zcub/0eW8A4kxjyyfh60PkwsAUZ7qmB31OmRA== dependencies: babel-runtime "^6.23.0" classnames "2.x" @@ -9554,9 +9468,9 @@ rc-checkbox@~2.1.5: rc-util "^4.0.4" rc-collapse@~1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-1.10.0.tgz#b39578633a1e033391597776758763a10d3bc261" - integrity sha512-H8cn7yOhSg28anuhZTSbGBTEWYMmEqNHWT2AMCXk6JpYN5RpdJDCWMZitdJYPeKT0axMqQnrNe4upSELmWnTMw== + version "1.10.1" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-1.10.1.tgz#cf98d94d8813bfd849276104496c6284326ca6bc" + integrity sha512-OQ4f8V3/9rhU0dEzjkHQ4NzWKSjdQwaEbnMs+hkdLUv4wxmiIeJwlDzayl5Vlo7UTF44wdHA9YfM3eWq7AgN2g== dependencies: classnames "2.x" css-animation "1.x" @@ -9573,9 +9487,9 @@ rc-dialog@~7.2.1: rc-util "^4.4.0" rc-drawer@~1.7.6: - version "1.7.6" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-1.7.6.tgz#925ce0768cf81ef5fa83eb22d90c603422b1b1b1" - integrity sha512-FPJjShzI32ijWVjuBm+icDJHdXnKGQh/tvHJooKKspmWusCo2CAKMn1c7IG4pbVdKhZYCih70/8pD5iF5E8Bhg== + version "1.7.7" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-1.7.7.tgz#b014d1de52457c85c4f3e1f0d647a54031dd260c" + integrity sha512-7dESNkClYdWGSdBdwcfeOz6DUCqzrW44QT013fsTBJIiWNLSLgDV5KoHKXG8VTJWU4mBn7M5Lqgyr94CRZcxGA== dependencies: babel-runtime "6.x" classnames "^2.2.5" @@ -9619,10 +9533,10 @@ rc-editor-mention@^1.1.7: rc-animate "^2.3.0" rc-editor-core "~0.8.3" -rc-form@^2.2.7: - version "2.3.0" - resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.3.0.tgz#4e7c16bcb32402565f629dfdf163bb810b16d941" - integrity sha512-2lp/NdSls0nh2C+twLqwiQixwr3p6Ngoi2v912bgxLd/nJS64Gad87KtnwMAdUFfQ4TOpGZ6AFAFEmrwVSFbMw== +rc-form@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.4.0.tgz#7488619a2ed73fc2f776afc8705e587539d16e19" + integrity sha512-NuXc+TXOkEmIgVcgvxCUNUNNBaGaPQRuB0WRIACAl4UGkiHTadkBmBUBw9+1WzwutaVIzJi/XVd7rWrI24OyFQ== dependencies: async-validator "~1.8.5" babel-runtime "6.x" @@ -9680,13 +9594,14 @@ rc-notification@~3.3.0: rc-animate "2.x" rc-util "^4.0.4" -rc-pagination@~1.17.3: - version "1.17.3" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.17.3.tgz#4c5334adef607f7a80b90ca7501a1e962491aae5" - integrity sha512-/bwe4++vjBHq2lNvxWP2LpCx0c0CRNH+tDO75tFsj1XMpQQo/vzdhreISC3HFjQOeb5a+59e2dXKmoBCootr9Q== +rc-pagination@~1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.17.5.tgz#56bf8748dc42920f1f8c0f03cdd0685d321f0238" + integrity sha512-SHxN9P/cpoxdhKwSDWnLTTMQKTEL1D4qSUdnjdjEZcwO+RfxCnVJ4SjfFq0lsyiKfaYdD2HVYZoAiXtPdOwf9A== dependencies: babel-runtime "6.x" prop-types "^15.5.7" + react-lifecycles-compat "^3.0.4" rc-progress@~2.2.6: version "2.2.6" @@ -9707,10 +9622,10 @@ rc-rate@~2.4.2: rc-util "^4.3.0" react-lifecycles-compat "^3.0.4" -rc-select@~8.6.0: - version "8.6.5" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-8.6.5.tgz#60a76c8ae3763f7a64cc1379b9f5285338bb48bf" - integrity sha512-IMiqr2Gd7TNGEsyN/jtoijH0rVsw2I6BHihVvc7chfRX8vuGcOK7fPqKuU+3DW9B+LqmCU3vTf0ZeSwQkFDjRA== +rc-select@^8.6.7: + version "8.6.9" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-8.6.9.tgz#e10f208b1090626df837a6de91d59d84b00bf951" + integrity sha512-W06QQaKYr7qZuq5eHotOIrQIC3x1z64f3FLeOXq8ZMH9VkrLimaLibSBQ+Zne1wOQ7ZsFpqfvcdmzEOexM85DA== dependencies: babel-runtime "^6.23.0" classnames "2.x" @@ -9864,9 +9779,9 @@ rc-trigger@^3.0.0-rc.2: rc-util "^4.4.0" rc-upload@~2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-2.6.0.tgz#9cfb8dda8b1bbae823a076d2dd81a5c0b3f0aa00" - integrity sha512-0nKpPEdRopGzxxrcFGXgZIiRJZwuet+TcMatYFAwPTCDyrFikdiSKkaLcz8Lz9tvLG2VzR5berbT2VLfpH9VvA== + version "2.6.1" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-2.6.1.tgz#bf1a81a294e53920c8451b5752f90208d3ae2247" + integrity sha512-cYuHgy+wZZfQwwbuJuIBPdTmRYcfMddukZ9ayzuxlUJT77BUf6kgImfCj2CYTvpnTeIlDn8Wh79AAaC2PF1dIQ== dependencies: babel-runtime "6.x" classnames "^2.2.5" @@ -9934,36 +9849,21 @@ react-dev-utils@^6.1.1: strip-ansi "4.0.0" text-table "0.2.0" -react-dom@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" - integrity sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ== +react-dom@16.7.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.7.0.tgz#a17b2a7ca89ee7390bc1ed5eb81783c7461748b8" + integrity sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.2" + scheduler "^0.12.0" react-error-overlay@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.0.tgz#c516995a5652e7bfbed8b497910d5280df74a7e8" integrity sha512-akMy/BQT5m1J3iJIHkSb4qycq2wzllWsmmolaaFVnb+LPV9cIJ/nTud40ZsiiT0H3P+/wXIdbjx2fzF61OaeOQ== -react-i18next@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-8.4.0.tgz#e9f0c5b9938b155eaa6051360614719c08cae72f" - integrity sha512-zIO/bc1L0UUGdaws2y40cTiSQHuQud5e9SSodYM6MTzhJTI3iayxCCdgvotblOLM4taOD77Ct2/fUbheQIhyeg== - dependencies: - "@babel/runtime" "^7.1.2" - create-react-context "0.2.3" - hoist-non-react-statics "3.0.1" - html-parse-stringify2 "2.0.1" - -react-is@^16.3.2, react-is@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0" - integrity sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA== - react-lazy-load@^3.0.13: version "3.0.13" resolved "https://registry.yarnpkg.com/react-lazy-load/-/react-lazy-load-3.0.13.tgz#3b0a92d336d43d3f0d73cbe6f35b17050b08b824" @@ -9979,19 +9879,7 @@ react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-redux@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.0.tgz#09e86eeed5febb98e9442458ad2970c8f1a173ef" - integrity sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ== - dependencies: - "@babel/runtime" "^7.2.0" - hoist-non-react-statics "^3.2.1" - invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-is "^16.6.3" - -react-router-dom@^4.3.1: +react-router-dom@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA== @@ -10003,7 +9891,7 @@ react-router-dom@^4.3.1: react-router "^4.3.1" warning "^4.0.1" -react-router@^4.3.1: +react-router@4.3.1, react-router@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== @@ -10083,15 +9971,15 @@ react-slick@~0.23.2: prettier "^1.14.3" resize-observer-polyfill "^1.5.0" -react@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw== +react@16.7.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.7.0.tgz#b674ec396b0a5715873b350446f7ea0802ab6381" + integrity sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.2" + scheduler "^0.12.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -10159,6 +10047,15 @@ readable-stream@1.0, readable-stream@~1.0.32: isarray "0.0.1" string_decoder "~0.10.x" +"readable-stream@2 || 3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" + integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -10190,24 +10087,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -redux-devtools-extension@^2.13.7: - version "2.13.7" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.7.tgz#14bd7a1a7c8bee7f397beb1116fd16fc9633b752" - integrity sha512-F2GlWMWxCTJGRjJ+GSZcGDcVAj6Pbf77FKb4C9S8eni5Eah6UBGNwxNj8K1MTtmItdZH1Wx+EvIifHN2KKcQrw== - -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== - -redux@^4.0.0, redux@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" - integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== - dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" - regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -10628,10 +10507,10 @@ saxes@^3.1.4: dependencies: xmlchars "^1.3.1" -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - integrity sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ== +scheduler@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.12.0.tgz#8ab17699939c0aedc5a196a657743c496538647b" + integrity sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -11045,9 +10924,9 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" - integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA== + version "1.16.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz#1d4963a2fbffe58050aa9084ca20be81741c07de" + integrity sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -11066,7 +10945,7 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" -ssri@^6.0.0: +ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== @@ -11196,7 +11075,7 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" -string_decoder@^1.0.0: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== @@ -11215,15 +11094,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringifier@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.4.0.tgz#d704581567f4526265d00ed8ecb354a02c3fec28" - integrity sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw== - dependencies: - core-js "^2.0.0" - traverse "^0.6.6" - type-name "^2.0.1" - stringify-object@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -11352,11 +11222,6 @@ svgo@^1.0.0, svgo@^1.0.5: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -11416,9 +11281,9 @@ terser-webpack-plugin@1.1.0: worker-farm "^1.5.2" terser@^3.8.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0" - integrity sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ== + version "3.13.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.13.1.tgz#a02e8827fb9705fe7b609c31093d010b28cea8eb" + integrity sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA== dependencies: commander "~2.17.1" source-map "~0.6.1" @@ -11453,6 +11318,14 @@ through2@^2.0.0, through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" +through2@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" + integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ== + dependencies: + readable-stream "2 || 3" + xtend "~4.0.1" + through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -11562,11 +11435,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -11594,19 +11462,19 @@ tslib@1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -tslint-react@^3.6.0: +tslint-react@3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1" integrity sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw== dependencies: tsutils "^2.13.1" -tslint@^5.12.0: +tslint@5.12.0: version "5.12.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.0.tgz#47f2dba291ed3d580752d109866fb640768fca36" integrity sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ== @@ -11624,24 +11492,7 @@ tslint@^5.12.0: tslib "^1.8.0" tsutils "^2.27.2" -tslint@~5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13" - integrity sha1-H0mtWy53x2w69N3K5VKuTjYS6xM= - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.1.0" - commander "^2.9.0" - diff "^3.2.0" - glob "^7.1.1" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.7.1" - tsutils "^2.12.1" - -tsutils@^2.12.1, tsutils@^2.13.1, tsutils@^2.27.2: +tsutils@^2.13.1, tsutils@^2.27.2: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== @@ -11680,26 +11531,27 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" -type-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" - integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript-plugin-css-modules@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-1.0.4.tgz#117accdec829750206ff0cd23594249754180db3" + integrity sha512-aug41lkG76cqNjJ+KxL2FBcQrXAtve00LR952HPLfrOHA9HDut7FGAcPwUYDENCgVz5RsFlcTpof4+2PDOCHtw== + dependencies: + "@types/lodash" "^4.14.118" + icss-utils "^4.0.0" + lodash "^4.17.11" + postcss "^7.0.5" + postcss-icss-selectors "^2.0.3" + typescript@3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg== -typescript@~2.8.3: - version "2.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.4.tgz#0b1db68e6bdfb0b767fa2ab642136a35b059b199" - integrity sha512-IIU5cN1mR5J3z9jjdESJbnxikTrEz3lzAw/D0Tf45jHpBp55nY31UkUvmVHoffCfKHTqJs3fCLPDxknQTTFegQ== - ua-parser-js@^0.7.18: version "0.7.19" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" @@ -11778,7 +11630,7 @@ uniqs@^2.0.0: resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= -unique-filename@^1.1.0: +unique-filename@^1.1.0, unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== @@ -11799,15 +11651,6 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universal-deep-strict-equal@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" - integrity sha1-DaSsL3PP95JMgfpN4BjKViyisKc= - dependencies: - array-filter "^1.0.0" - indexof "0.0.1" - object-keys "^1.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -11883,7 +11726,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -11964,11 +11807,6 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -11985,6 +11823,11 @@ w3c-xmlserializer@^1.0.1: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" +walkdir@0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.12.tgz#2f24f1ade64aab1e458591d4442c8868356e9281" + integrity sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw== + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -12166,7 +12009,7 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== -whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: +whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==