From 11173e580ee6ad752d6de0966001227214cfd915 Mon Sep 17 00:00:00 2001 From: Estefania Barrios Aragon Date: Mon, 14 Jan 2019 18:50:19 +0100 Subject: [PATCH 01/80] Initial commit for sample 19 LoginForm --- 19 LoginForm/.babelrc | 10 +++ 19 LoginForm/package.json | 40 +++++++++ 19 LoginForm/readme.md | 39 +++++++++ 19 LoginForm/src/api/member/index.ts | 77 ++++++++++++++++++ 19 LoginForm/src/api/member/mockData.ts | 15 ++++ 19 LoginForm/src/app.tsx | 12 +++ .../src/common/components/form/button.tsx | 19 +++++ .../src/common/components/form/index.ts | 2 + .../src/common/components/form/input.tsx | 40 +++++++++ 19 LoginForm/src/components/about.tsx | 48 +++++++++++ 19 LoginForm/src/components/header.tsx | 29 +++++++ 19 LoginForm/src/components/index.ts | 4 + 19 LoginForm/src/components/member/index.ts | 1 + .../src/components/member/memberForm.tsx | 43 ++++++++++ .../components/member/memberFormValidation.ts | 17 ++++ 19 LoginForm/src/components/member/page.tsx | 21 +++++ .../src/components/member/pageContainer.tsx | 74 +++++++++++++++++ 19 LoginForm/src/components/members/index.ts | 1 + .../src/components/members/memberHeader.tsx | 11 +++ .../src/components/members/memberRow.tsx | 27 ++++++ 19 LoginForm/src/components/members/page.tsx | 54 ++++++++++++ 19 LoginForm/src/css/site.css | 37 +++++++++ 19 LoginForm/src/images/lemoncode.png | Bin 0 -> 99511 bytes 19 LoginForm/src/index.html | 10 +++ 19 LoginForm/src/index.tsx | 7 ++ 19 LoginForm/src/model/index.ts | 2 + 19 LoginForm/src/model/memberEntity.ts | 5 ++ 19 LoginForm/src/model/memberErrors.ts | 5 ++ 19 LoginForm/src/router.tsx | 21 +++++ 19 LoginForm/tsconfig.json | 17 ++++ 19 LoginForm/webpack.config.js | 75 +++++++++++++++++ 31 files changed, 763 insertions(+) create mode 100644 19 LoginForm/.babelrc create mode 100644 19 LoginForm/package.json create mode 100644 19 LoginForm/readme.md create mode 100644 19 LoginForm/src/api/member/index.ts create mode 100644 19 LoginForm/src/api/member/mockData.ts create mode 100644 19 LoginForm/src/app.tsx create mode 100644 19 LoginForm/src/common/components/form/button.tsx create mode 100644 19 LoginForm/src/common/components/form/index.ts create mode 100644 19 LoginForm/src/common/components/form/input.tsx create mode 100644 19 LoginForm/src/components/about.tsx create mode 100644 19 LoginForm/src/components/header.tsx create mode 100644 19 LoginForm/src/components/index.ts create mode 100644 19 LoginForm/src/components/member/index.ts create mode 100644 19 LoginForm/src/components/member/memberForm.tsx create mode 100644 19 LoginForm/src/components/member/memberFormValidation.ts create mode 100644 19 LoginForm/src/components/member/page.tsx create mode 100644 19 LoginForm/src/components/member/pageContainer.tsx create mode 100644 19 LoginForm/src/components/members/index.ts create mode 100644 19 LoginForm/src/components/members/memberHeader.tsx create mode 100644 19 LoginForm/src/components/members/memberRow.tsx create mode 100644 19 LoginForm/src/components/members/page.tsx create mode 100644 19 LoginForm/src/css/site.css create mode 100644 19 LoginForm/src/images/lemoncode.png create mode 100644 19 LoginForm/src/index.html create mode 100644 19 LoginForm/src/index.tsx create mode 100644 19 LoginForm/src/model/index.ts create mode 100644 19 LoginForm/src/model/memberEntity.ts create mode 100644 19 LoginForm/src/model/memberErrors.ts create mode 100644 19 LoginForm/src/router.tsx create mode 100644 19 LoginForm/tsconfig.json create mode 100644 19 LoginForm/webpack.config.js diff --git a/19 LoginForm/.babelrc b/19 LoginForm/.babelrc new file mode 100644 index 00000000..03dfd132 --- /dev/null +++ b/19 LoginForm/.babelrc @@ -0,0 +1,10 @@ +{ + "presets": [ + [ + "env", + { + "modules": false + } + ] + ] +} diff --git a/19 LoginForm/package.json b/19 LoginForm/package.json new file mode 100644 index 00000000..3643494e --- /dev/null +++ b/19 LoginForm/package.json @@ -0,0 +1,40 @@ +{ + "name": "react-typescript-samples", + "version": "1.0.0", + "description": "Sample working with React,TypeScript and Webpack)", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "webpack-dev-server --mode development --inline --hot --open", + "build": "webpack --mode development" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@types/react": "^16.4.7", + "@types/react-dom": "^16.0.6", + "@types/react-router-dom": "^4.3.0", + "@types/toastr": "^2.1.35", + "awesome-typescript-loader": "^5.2.0", + "babel-core": "^6.26.3", + "babel-preset-env": "^1.7.0", + "css-loader": "^1.0.0", + "file-loader": "^1.1.11", + "html-webpack-plugin": "^3.2.0", + "mini-css-extract-plugin": "^0.4.1", + "style-loader": "^0.21.0", + "url-loader": "^1.0.1", + "webpack": "^4.16.2", + "webpack-cli": "^3.1.0", + "webpack-dev-server": "^3.1.5" + }, + "dependencies": { + "bootstrap": "^4.1.2", + "lc-form-validation": "^1.0.0", + "react": "^16.7.0-alpha.0", + "react-dom": "^16.7.0-alpha.0", + "react-router-dom": "^4.2.2", + "toastr": "^2.1.4", + "typescript": "^3.0.1" + } +} diff --git a/19 LoginForm/readme.md b/19 LoginForm/readme.md new file mode 100644 index 00000000..59780bd7 --- /dev/null +++ b/19 LoginForm/readme.md @@ -0,0 +1,39 @@ +# 19 LoginForm + +In this sample we are going to add a login page using Material-UI, a widely used set of UI components for React. + +We will take as startup point sample _18 Hooks_. + +## Prerequisites + +Install [Node.js and npm](https://nodejs.org/en/) if they are not already installed on your computer. + +> Verify that you are running at least node v6.x.x and npm 3.x.x by running `node -v` and `npm -v` +in a terminal/console window. Older versions may produce errors. + +## Steps to build it + +- Copy the content of `18 Hooks` folder to an empty folder for the sample. + +- To ensure that we use exactly React version 16.7.0-alpha-0, let's set it like that in package.json: +```diff +- "react": "^16.7.0-alpha.0", +- "react-dom": "^16.7.0-alpha.0", ++ "react": "16.7.0-alpha.0", ++ "react-dom": "16.7.0-alpha.0", +``` + +- Install dependencies: + +``` +npm install +``` + +- More info about Material-UI: + + https://material-ui.com/ + +# About Lemoncode + +We are a team of long-term experienced freelance developers, established as a group in 2010. +We specialize in Front End technologies and .NET. [Click here](http://lemoncode.net/services/en/#en-home) to get more info about us. diff --git a/19 LoginForm/src/api/member/index.ts b/19 LoginForm/src/api/member/index.ts new file mode 100644 index 00000000..90b1edd5 --- /dev/null +++ b/19 LoginForm/src/api/member/index.ts @@ -0,0 +1,77 @@ +import { MemberEntity } from '../../model'; +import { members } from './mockData'; + +const baseURL = 'https://api.github.com/orgs/lemoncode'; +let mockMembers = members; + +const fetchMembers = (): Promise => { + return Promise.resolve(mockMembers); +}; + +const fetchMembersAsync = (): Promise => { + const membersURL = `${baseURL}/members`; + + return fetch(membersURL) + .then((response) => (response.json())) + .then(mapToMembers); +}; + +const mapToMembers = (githubMembers: any[]): MemberEntity[] => { + return githubMembers.map(mapToMember); +}; + +const mapToMember = (githubMember): MemberEntity => { + return { + id: githubMember.id, + login: githubMember.login, + avatar_url: githubMember.avatar_url, + }; +}; + +const saveMember = (member: MemberEntity): Promise => { + const index = mockMembers.findIndex(m => m.id === member.id); + + index >= 0 ? + updateMember(member, index) : + insertMember(member); + + return Promise.resolve(true); +}; + +const updateMember = (member: MemberEntity, index: number) => { + mockMembers = [ + ...mockMembers.slice(0, index), + member, + ...mockMembers.slice(index + 1), + ]; +}; + +const insertMember = (member: MemberEntity) => { + member.id = mockMembers.length; + + mockMembers = [ + ...mockMembers, + member, + ]; +}; + +const fetchMemberById = (id: number): Promise => { + const index: number = mockMembers.findIndex(m => m.id === id); + const member: MemberEntity = index >= 0 ? + mockMembers[index] + : + { + id: -1, + login: '', + avatar_url: '', + }; + + return Promise.resolve(member); +} + +export const memberAPI = { + fetchMembers, + fetchMembersAsync, + saveMember, + fetchMemberById, +}; diff --git a/19 LoginForm/src/api/member/mockData.ts b/19 LoginForm/src/api/member/mockData.ts new file mode 100644 index 00000000..8c7a6e20 --- /dev/null +++ b/19 LoginForm/src/api/member/mockData.ts @@ -0,0 +1,15 @@ +import { MemberEntity } from '../../model'; + +export const members: MemberEntity[] = + [ + { + id: 1457912, + login: "brauliodiez", + avatar_url: "https://avatars.githubusercontent.com/u/1457912?v=3" + }, + { + id: 4374977, + login: "Nasdan", + avatar_url: "https://avatars.githubusercontent.com/u/4374977?v=3" + } + ]; diff --git a/19 LoginForm/src/app.tsx b/19 LoginForm/src/app.tsx new file mode 100644 index 00000000..5fc6ae27 --- /dev/null +++ b/19 LoginForm/src/app.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { Header } from './components'; + +export const App: React.StatelessComponent<{}> = (props) => { + return ( +
+
+ {props.children} +
+ + ); +} diff --git a/19 LoginForm/src/common/components/form/button.tsx b/19 LoginForm/src/common/components/form/button.tsx new file mode 100644 index 00000000..4395a66a --- /dev/null +++ b/19 LoginForm/src/common/components/form/button.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; + +interface Props { + label: string; + className: string; + onClick: () => void; +} + +export const Button: React.StatelessComponent = (props) => { + + return ( + + ); +}; diff --git a/19 LoginForm/src/common/components/form/index.ts b/19 LoginForm/src/common/components/form/index.ts new file mode 100644 index 00000000..4d2a1a03 --- /dev/null +++ b/19 LoginForm/src/common/components/form/index.ts @@ -0,0 +1,2 @@ +export * from './input'; +export * from './button'; diff --git a/19 LoginForm/src/common/components/form/input.tsx b/19 LoginForm/src/common/components/form/input.tsx new file mode 100644 index 00000000..87bc7c86 --- /dev/null +++ b/19 LoginForm/src/common/components/form/input.tsx @@ -0,0 +1,40 @@ +import * as React from "react"; + +interface Props { + name: string; + label: string; + placeholder?: string; + value: string; + onChange: (fieldName: string, value: string) => void; + error?: string; +} + +export const Input: React.StatelessComponent = (props) => { + return ( +
+ +
+ +
+
{props.error}
+
+ ) +}; + +const formatWrapperClass = (props: Props) => { + const wrapperClass = 'form-group'; + + return props.error ? + `${wrapperClass} has-error` : + wrapperClass; +}; + +const onChangeInput = (props: Props) => (e: React.ChangeEvent) => { + props.onChange(e.target.name, e.target.value); +}; diff --git a/19 LoginForm/src/components/about.tsx b/19 LoginForm/src/components/about.tsx new file mode 100644 index 00000000..3cbbeaf9 --- /dev/null +++ b/19 LoginForm/src/components/about.tsx @@ -0,0 +1,48 @@ +import * as React from 'react'; + +export const About: React.StatelessComponent<{}> = () => { + return ( +
+

18 Hooks

+ +
+

+ This sample takes as starting point sample "08 ParamNavigation". +

+
+

+ We are replacing class components by stateless components using Hooks. +

+
+
+ +
+

Highlights

+
+

+ The most interesting parts worth to take a look +

+
+ +
+
    +
  • +

    Components:

    +
      +
    • +

      + components/members/page.tsx: Stateless component using Hooks. +

      +
    • +
    • +

      + components/member/pageContainer.tsx: Stateless component using Hooks. +

      +
    • +
    +
  • +
+
+
+ ); +} diff --git a/19 LoginForm/src/components/header.tsx b/19 LoginForm/src/components/header.tsx new file mode 100644 index 00000000..3aeb58d5 --- /dev/null +++ b/19 LoginForm/src/components/header.tsx @@ -0,0 +1,29 @@ +import * as React from 'react'; +import { Link } from 'react-router-dom'; + +export const Header: React.StatelessComponent<{}> = () => { + return ( +
+ + +
+ ); +} \ No newline at end of file diff --git a/19 LoginForm/src/components/index.ts b/19 LoginForm/src/components/index.ts new file mode 100644 index 00000000..ad5f6f38 --- /dev/null +++ b/19 LoginForm/src/components/index.ts @@ -0,0 +1,4 @@ +export * from './header'; +export * from './about'; +export * from './members'; +export * from './member'; diff --git a/19 LoginForm/src/components/member/index.ts b/19 LoginForm/src/components/member/index.ts new file mode 100644 index 00000000..298113cd --- /dev/null +++ b/19 LoginForm/src/components/member/index.ts @@ -0,0 +1 @@ +export * from './pageContainer'; diff --git a/19 LoginForm/src/components/member/memberForm.tsx b/19 LoginForm/src/components/member/memberForm.tsx new file mode 100644 index 00000000..9f08ee9c --- /dev/null +++ b/19 LoginForm/src/components/member/memberForm.tsx @@ -0,0 +1,43 @@ +import * as React from 'react'; +import { MemberEntity, MemberErrors } from '../../model'; +import { Input, Button } from '../../common/components/form'; + +interface Props { + member: MemberEntity; + memberErrors: MemberErrors; + onChange: (fieldName: string, value: string) => void; + onSave: () => void; +} + +export const MemberForm: React.StatelessComponent = (props) => { + return ( +
+

Manage member

+ + + + + +
+ + ); +} +``` + +- Now, let's create the page component, named _LoginPage_, that will contain our recently created _LoginForm_. We will include the form in a _Card_ from Material-UI. Also, we need to add a function to perform the action related to the _onLogin_ event. In this case, we are going to show the _About_ page, which was the home page in previous samples. + +_./src/components/login/loginPage.tsx_ + +``` +import * as React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import { Card, CardHeader, CardContent } from '@material-ui/core'; +import { LoginForm } from './loginForm'; + +interface Props extends RouteComponentProps { +} + +export class Login extends React.Component { + + constructor(props: Props) { + super(props); + } + + private onLogin = () => { + this.props.history.push('/about'); + } + + public render() { + return ( + + + + + + + ); + } +} +``` + +- Also, we are going to add barrels for the login component: + +_./src/components/login/index.ts_ +``` +export { Login } from './loginPage'; +``` + +_./src/components/index.ts_ +```diff ++ export * from './login'; +``` + +- In order to show the new page properly styled, we will add some styles to site.css file: + +_./src/css/site.css_ +```diff ++ .login-form { ++ display: flex; ++ flex-direction: column; ++ justify-content: center; ++ } ++ ++ .login-card { ++ max-width: 400px; ++ margin: 0 auto; ++ } +``` + +- Now, let's change the home route in _AppRouter_ component. We have to replace the about page by the login page: + +_./src/router.tsx_ +```diff +- import { About, MembersPage, MemberPageContainer } from './components'; ++ import { About, MembersPage, MemberPageContainer, Login } from './components'; + +export const AppRouter: React.StatelessComponent<{}> = () => { + return ( + +
+ + +- ++ + + + + + +
+
+ ); +} +``` + +- The next step is to modify the _App_ component because we are not going to show the _Header_ in the _LoginPage_. Therefore, we need to remove it from the _App_ component and add it to _About_ and _Members_ pages because they are the only ones where _Header_ will be shown. + +_./src/app.tsx_ + +```diff +import * as React from 'react'; +- import { Header } from './components'; + +export const App: React.StatelessComponent<{}> = (props) => { + return ( +-
++
+-
+ {props.children} +
+ ); +} +``` + +_/.src/components/members/page.tsx_ + +```diff +//... ++ import { Header } from '../header'; + +//... + return ( ++
++
+
+

Members Page

+ New Member + + + + + + { + members.map((member) => + + ) + } + +
+
++
+ ); +} +``` + +_./src/components/about.tsx_ +```diff ++ import { Header } from './header'; + +export const About: React.StatelessComponent<{}> = () => { + return ( ++
++
+
+-

18 Hooks

++

19 LoginForm

+ +
+

+- This sample takes as starting point sample "08 ParamNavigation". ++ This sample takes as starting point sample "18 Hooks". +

+
+

+- We are replacing class components by stateless components using Hooks. ++ We are adding a login form using Material-UI. +

+
+
+ +
+

Highlights

+
+

+ The most interesting parts worth to take a look +

+
+ +
+
    +
  • +

    Components:

    +
      +
    • +

      +- components/members/page.tsx: Stateless component using Hooks. ++ components/login: New login page. +

      +
    • +
    • +

      +- components/member/pageContainer.tsx: Stateless component using Hooks. ++ common/components/notification: New common component to show a notification. +

      +
    • +
    +
  • +
+
+
++
+ ); +} +``` + +- At this point, we have the structure and design of the login page working. Now, it is time to add the logic to perfom the login event, so that it only shows the _About_ page if the credentials are correct. + +- Firstly, we are going to create a new _LoginEntity_ in our model. + +_./src/model/login.ts_ +``` +export interface LoginEntity { + login: string; + password: string; +} + +export const createEmptyLogin = (): LoginEntity => ({ + login: '', + password: '', +}); +``` + +_./src/model/index.ts_ +```diff ++ export * from './login'; +``` + +- Secondly, we will modify _LoginForm_ to add a property with the currently typed credentials, named _loginInfo_, and a function to update the credentials when the user types into the login or password text fields. We are going to use them in _value_ and _onChange_ properties of the _TextField_ component. + +_./src/components/login/loginForm.tsx_ +```diff +import * as React from 'react'; +import TextField from '@material-ui/core/TextField'; +import Button from '@material-ui/core/Button'; ++ import { LoginEntity } from '../../model'; + +interface Props { + onLogin: () => void; ++ onUpdateLoginField: (name: string, value: any) => void; ++ loginInfo: LoginEntity; +} + +export const LoginForm: React.StatelessComponent = (props: Props) => { + ++ const onTextFieldChange = (fieldId) => (e) => { ++ props.onUpdateLoginField(fieldId, e.target.value); ++ } + + return ( +
+ + + +
+ ); +} +``` + +- Thirdly, let's review _LoginPage_ component. We need to add _loginInfo_ to the state and update it accordingly. Also, it is necessary to check whether the credentials are correct or not. To do that, we will add a function named _isValidLogin_ to our fake API. + +_./src/components/login/loginPage.tsx_ + +```diff +import * as React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import { Card, CardHeader, CardContent } from '@material-ui/core'; +import { LoginForm } from './loginForm'; ++ import { isValidLogin } from '../../api/login'; ++ import { LoginEntity, createEmptyLogin } from '../../model'; + +interface Props extends RouteComponentProps { +} + ++ interface State { ++ loginInfo: LoginEntity; ++ } + +- export class Login extends React.Component { ++ export class Login extends React.Component { + + constructor(props: Props) { + super(props); + ++ this.state = { ++ loginInfo: createEmptyLogin(), ++ }; + } + + private onLogin = () => { ++ if (isValidLogin(this.state.loginInfo)) { + this.props.history.push('/about'); ++ } + } + ++ private onUpdateLoginField = (name, value) => { ++ this.setState({ ++ loginInfo: { ++ ...this.state.loginInfo, ++ [name]: value, ++ }, ++ }); ++ } + + public render() { + return ( + + + + + + + ); + } +} +``` + +- The new function to check if a login is valid in our API: + +_./src/api/login/login.ts_ +``` +import { LoginEntity } from "../../model"; + +export const isValidLogin = (loginInfo: LoginEntity): boolean => + (loginInfo.login === 'admin' && loginInfo.password === 'test'); +``` + +- And its corresponding barrel: + +_./src/api/login/index.ts_ +``` +export { isValidLogin } from './login'; +``` + +- Finally, let's add a notification to show the user when the credentials are incorrect. To do that, we are going to create a common notification component using Material-UI: + +_./src/common/components/notification/notification.tsx_ +``` +import * as React from 'react'; +import Button from '@material-ui/core/Button'; +import Snackbar from '@material-ui/core/Snackbar'; +import IconButton from '@material-ui/core/IconButton'; +import CloseIcon from '@material-ui/icons/Close'; +import { withStyles } from "@material-ui/core"; + +interface Props { + classes?: any; + message: string; + show: boolean; + onClose: () => void; +} + +const styles = theme => ({ + close: { + padding: theme.spacing.unit / 2, + }, +}); + +const NotificationComponentInner: React.StatelessComponent = (props: Props) => { + return ( + {props.message}} + action={[ + + + , + ]} + /> + ); +} + +export const NotificationComponent = withStyles(styles)(NotificationComponentInner); +``` + +- Let's add the barrel: + +_./src/common/components/notification/index.ts_ +``` +export { NotificationComponent } from './notification'; +``` + +- Now, let's use our recently created _NotificationComponent_ in _LoginPage_. + +_./src/components/login/loginPage.tsx_ +```diff +//... ++ import { NotificationComponent } from '../../common/components/notification'; + +interface Props extends RouteComponentProps { +} + +interface State { + loginInfo: LoginEntity; ++ showLoginFailedMsg: boolean; +} + +export class Login extends React.Component { + + constructor(props: Props) { + super(props); + + this.state = { + loginInfo: createEmptyLogin(), ++ showLoginFailedMsg: false, + }; + } + + private onLogin = () => { + if (isValidLogin(this.state.loginInfo)) { + this.props.history.push('/about'); ++ } else { ++ this.setState({ ++ ...this.state, ++ showLoginFailedMsg: true, ++ }); + } + } + + private onUpdateLoginField = (name, value) => { + this.setState({ + loginInfo: { + ...this.state.loginInfo, + [name]: value, + }, + }); + } + + public render() { + return ( ++
++ this.setState({ showLoginFailedMsg: false })} ++ /> + + + + + + ++
+ ); + } +} +``` + +- It is time to see our sample running. Run the command `npm start` and open the browser at http://localhost:8080 + - More info about Material-UI: https://material-ui.com/ diff --git a/19 LoginForm/src/api/login/index.ts b/19 LoginForm/src/api/login/index.ts new file mode 100644 index 00000000..8de5a4cf --- /dev/null +++ b/19 LoginForm/src/api/login/index.ts @@ -0,0 +1 @@ +export { isValidLogin } from './login'; diff --git a/19 LoginForm/src/api/login/login.ts b/19 LoginForm/src/api/login/login.ts new file mode 100644 index 00000000..eccd4da3 --- /dev/null +++ b/19 LoginForm/src/api/login/login.ts @@ -0,0 +1,4 @@ +import { LoginEntity } from "../../model"; + +export const isValidLogin = (loginInfo: LoginEntity): boolean => + (loginInfo.login === 'admin' && loginInfo.password === 'test'); diff --git a/19 LoginForm/src/app.tsx b/19 LoginForm/src/app.tsx index 5fc6ae27..ef957b42 100644 --- a/19 LoginForm/src/app.tsx +++ b/19 LoginForm/src/app.tsx @@ -1,12 +1,9 @@ import * as React from 'react'; -import { Header } from './components'; export const App: React.StatelessComponent<{}> = (props) => { return ( -
-
+
{props.children}
- ); } diff --git a/19 LoginForm/src/common/components/notification/index.ts b/19 LoginForm/src/common/components/notification/index.ts new file mode 100644 index 00000000..a962feec --- /dev/null +++ b/19 LoginForm/src/common/components/notification/index.ts @@ -0,0 +1 @@ +export { NotificationComponent } from './notification'; diff --git a/19 LoginForm/src/common/components/notification/notification.tsx b/19 LoginForm/src/common/components/notification/notification.tsx new file mode 100644 index 00000000..595ee463 --- /dev/null +++ b/19 LoginForm/src/common/components/notification/notification.tsx @@ -0,0 +1,50 @@ +import * as React from 'react'; +import Button from '@material-ui/core/Button'; +import Snackbar from '@material-ui/core/Snackbar'; +import IconButton from '@material-ui/core/IconButton'; +import CloseIcon from '@material-ui/icons/Close'; +import { withStyles } from "@material-ui/core"; + +interface Props { + classes?: any; + message: string; + show: boolean; + onClose: () => void; +} + +const styles = theme => ({ + close: { + padding: theme.spacing.unit / 2, + }, +}); + +const NotificationComponentInner: React.StatelessComponent = (props: Props) => { + return ( + {props.message}} + action={[ + + + , + ]} + /> + ); +} + +export const NotificationComponent = withStyles(styles)(NotificationComponentInner); diff --git a/19 LoginForm/src/components/about.tsx b/19 LoginForm/src/components/about.tsx index 3cbbeaf9..aca86a67 100644 --- a/19 LoginForm/src/components/about.tsx +++ b/19 LoginForm/src/components/about.tsx @@ -1,47 +1,51 @@ import * as React from 'react'; +import { Header } from './header'; export const About: React.StatelessComponent<{}> = () => { return ( -
-

18 Hooks

+
+
+
+

19 LoginForm

-
-

- This sample takes as starting point sample "08 ParamNavigation". -

-
+
+

+ This sample takes as starting point sample "18 Hooks". +

+
+

+ We are adding a login form using Material-UI. +

+
+
+ +
+

Highlights

+

- We are replacing class components by stateless components using Hooks. + The most interesting parts worth to take a look

-
-
-

Highlights

-
-

- The most interesting parts worth to take a look -

-
- -
-
    -
  • -

    Components:

    -
      -
    • -

      - components/members/page.tsx: Stateless component using Hooks. -

      -
    • -
    • -

      - components/member/pageContainer.tsx: Stateless component using Hooks. -

      -
    • -
    -
  • -
+
+
    +
  • +

    Components:

    +
      +
    • +

      + components/login: New login page. +

      +
    • +
    • +

      + common/components/notification: New common component to show a notification. +

      +
    • +
    +
  • +
+
); diff --git a/19 LoginForm/src/components/index.ts b/19 LoginForm/src/components/index.ts index ad5f6f38..105938c0 100644 --- a/19 LoginForm/src/components/index.ts +++ b/19 LoginForm/src/components/index.ts @@ -2,3 +2,4 @@ export * from './header'; export * from './about'; export * from './members'; export * from './member'; +export * from './login'; diff --git a/19 LoginForm/src/components/login/index.ts b/19 LoginForm/src/components/login/index.ts new file mode 100644 index 00000000..e0e4dfa3 --- /dev/null +++ b/19 LoginForm/src/components/login/index.ts @@ -0,0 +1 @@ +export { Login } from './loginPage'; diff --git a/19 LoginForm/src/components/login/loginForm.tsx b/19 LoginForm/src/components/login/loginForm.tsx new file mode 100644 index 00000000..b64824b3 --- /dev/null +++ b/19 LoginForm/src/components/login/loginForm.tsx @@ -0,0 +1,38 @@ +import * as React from 'react'; +import TextField from '@material-ui/core/TextField'; +import Button from '@material-ui/core/Button'; +import { LoginEntity } from '../../model'; + +interface Props { + onLogin: () => void; + onUpdateLoginField: (name: string, value: any) => void; + loginInfo: LoginEntity; +} + +export const LoginForm: React.StatelessComponent = (props: Props) => { + + const onTextFieldChange = (fieldId) => (e) => { + props.onUpdateLoginField(fieldId, e.target.value); + } + + return ( +
+ + + +
+ ); +} diff --git a/19 LoginForm/src/components/login/loginPage.tsx b/19 LoginForm/src/components/login/loginPage.tsx new file mode 100644 index 00000000..bcf2ca98 --- /dev/null +++ b/19 LoginForm/src/components/login/loginPage.tsx @@ -0,0 +1,69 @@ +import * as React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import { Card, CardHeader, CardContent } from '@material-ui/core'; +import { LoginForm } from './loginForm'; +import { isValidLogin } from '../../api/login'; +import { LoginEntity, createEmptyLogin } from '../../model'; +import { NotificationComponent } from '../../common/components/notification'; + +interface Props extends RouteComponentProps { +} + +interface State { + loginInfo: LoginEntity; + showLoginFailedMsg: boolean; +} + +export class Login extends React.Component { + + constructor(props: Props) { + super(props); + + this.state = { + loginInfo: createEmptyLogin(), + showLoginFailedMsg: false, + }; + } + + private onLogin = () => { + if (isValidLogin(this.state.loginInfo)) { + this.props.history.push('/about'); + } else { + this.setState({ + ...this.state, + showLoginFailedMsg: true, + }); + } + } + + private onUpdateLoginField = (name, value) => { + this.setState({ + loginInfo: { + ...this.state.loginInfo, + [name]: value, + }, + }); + } + + public render() { + return ( +
+ this.setState({ showLoginFailedMsg: false })} + /> + + + + + + +
+ ); + } +} diff --git a/19 LoginForm/src/components/member/pageContainer.tsx b/19 LoginForm/src/components/member/pageContainer.tsx index 052690ec..482aebdd 100644 --- a/19 LoginForm/src/components/member/pageContainer.tsx +++ b/19 LoginForm/src/components/member/pageContainer.tsx @@ -6,6 +6,7 @@ import { memberAPI } from '../../api/member'; import { MemberEntity, MemberErrors } from '../../model'; import { memberFormValidation } from './memberFormValidation'; import { MemberPage } from './page'; +import { Header } from '../header'; interface Params { id: string; @@ -24,7 +25,7 @@ export const MemberPageContainer: React.StatelessComponent = (props: Prop const [memberErrors, setMemberErrors] = React.useState({ login: new FieldValidationResult(), - }); + }); const loadMember = () => { const memberId = Number(props.match.params.id) || 0; @@ -35,7 +36,7 @@ export const MemberPageContainer: React.StatelessComponent = (props: Prop React.useEffect(() => { loadMember(); }, []); - + const onFieldValueChange = (fieldName: string, value: string) => { memberFormValidation.validateField(member, fieldName, value) .then((fieldValidationResult) => { @@ -64,11 +65,14 @@ export const MemberPageContainer: React.StatelessComponent = (props: Prop } return ( - +
+
+ +
); } diff --git a/19 LoginForm/src/components/members/page.tsx b/19 LoginForm/src/components/members/page.tsx index b00cbe5b..fb1214b5 100644 --- a/19 LoginForm/src/components/members/page.tsx +++ b/19 LoginForm/src/components/members/page.tsx @@ -4,6 +4,7 @@ import { MemberEntity } from '../../model'; import { memberAPI } from '../../api/member'; import { MemberHeader } from './memberHeader'; import { MemberRow } from './memberRow'; +import { Header } from '../header'; interface Props { } @@ -12,7 +13,7 @@ const useMembers = () => { const [members, setMembers] = React.useState([]); let promise: Promise; - const loadMembers = () => { + const loadMembers = () => { promise = memberAPI.fetchMembersAsync(); promise.then((members) => { setMembers(members); @@ -31,24 +32,27 @@ export const MembersPage: React.StatelessComponent = () => { }, []); return ( -
-

Members Page

- New Member - - - - - - { - members.map((member) => - - ) - } - -
+
+
+
+

Members Page

+ New Member + + + + + + { + members.map((member) => + + ) + } + +
+
); } diff --git a/19 LoginForm/src/css/site.css b/19 LoginForm/src/css/site.css index 018642d2..81a048bb 100644 --- a/19 LoginForm/src/css/site.css +++ b/19 LoginForm/src/css/site.css @@ -34,4 +34,15 @@ #header-title { background-color: rgb(238, 235, 235); +} + +.login-form { + display: flex; + flex-direction: column; + justify-content: center; +} + +.login-card { + max-width: 400px; + margin: 0 auto; } \ No newline at end of file diff --git a/19 LoginForm/src/model/index.ts b/19 LoginForm/src/model/index.ts index d3031c4b..8b745b56 100644 --- a/19 LoginForm/src/model/index.ts +++ b/19 LoginForm/src/model/index.ts @@ -1,2 +1,3 @@ export * from './memberEntity'; export * from './memberErrors'; +export * from './login'; diff --git a/19 LoginForm/src/model/login.ts b/19 LoginForm/src/model/login.ts new file mode 100644 index 00000000..8fc3faa3 --- /dev/null +++ b/19 LoginForm/src/model/login.ts @@ -0,0 +1,9 @@ +export interface LoginEntity { + login: string; + password: string; +} + +export const createEmptyLogin = (): LoginEntity => ({ + login: '', + password: '', +}); diff --git a/19 LoginForm/src/router.tsx b/19 LoginForm/src/router.tsx index 3e5dc8a2..196ebd19 100644 --- a/19 LoginForm/src/router.tsx +++ b/19 LoginForm/src/router.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { Route, HashRouter as Router, Switch } from 'react-router-dom'; import { App } from './app'; -import { About, MembersPage, MemberPageContainer } from './components'; +import { About, MembersPage, MemberPageContainer, Login } from './components'; export const AppRouter: React.StatelessComponent<{}> = () => { return ( @@ -9,7 +9,7 @@ export const AppRouter: React.StatelessComponent<{}> = () => {
- + diff --git a/readme.md b/readme.md index d551f862..0b703c10 100644 --- a/readme.md +++ b/readme.md @@ -127,6 +127,10 @@ Pending update Replace class components by stateless components using Hooks. +## 19 LoginForm + +Add a login page using Material-UI. + # About Lemoncode We are a team of long-term experienced freelance developers, established as a group in 2010. From 679fe1bde4fddad8e15daeb05bcfdc82594e7769 Mon Sep 17 00:00:00 2001 From: Estefania Barrios Aragon Date: Wed, 13 Feb 2019 14:00:12 +0100 Subject: [PATCH 03/80] Use layouts. --- 19 LoginForm/src/components/about.tsx | 7 +++---- .../src/components/login/loginForm.styles.ts | 16 ++++++++++++++++ 19 LoginForm/src/components/login/loginForm.tsx | 10 +++++++--- 19 LoginForm/src/components/login/loginPage.tsx | 7 ++++--- 19 LoginForm/src/components/members/page.tsx | 7 +++---- 19 LoginForm/src/css/site.css | 11 ----------- 19 LoginForm/src/layout/appView.component.tsx | 16 ++++++++++++++++ 19 LoginForm/src/layout/appView.styles.ts | 13 +++++++++++++ .../src/layout/centeredView.component.tsx | 14 ++++++++++++++ 19 LoginForm/src/layout/centeredView.styles.ts | 15 +++++++++++++++ 19 LoginForm/src/layout/index.ts | 2 ++ 11 files changed, 93 insertions(+), 25 deletions(-) create mode 100644 19 LoginForm/src/components/login/loginForm.styles.ts create mode 100644 19 LoginForm/src/layout/appView.component.tsx create mode 100644 19 LoginForm/src/layout/appView.styles.ts create mode 100644 19 LoginForm/src/layout/centeredView.component.tsx create mode 100644 19 LoginForm/src/layout/centeredView.styles.ts create mode 100644 19 LoginForm/src/layout/index.ts diff --git a/19 LoginForm/src/components/about.tsx b/19 LoginForm/src/components/about.tsx index aca86a67..1c81daca 100644 --- a/19 LoginForm/src/components/about.tsx +++ b/19 LoginForm/src/components/about.tsx @@ -1,10 +1,9 @@ import * as React from 'react'; -import { Header } from './header'; +import { AppView } from '../layout'; export const About: React.StatelessComponent<{}> = () => { return ( -
-
+

19 LoginForm

@@ -47,6 +46,6 @@ export const About: React.StatelessComponent<{}> = () => {
-
+ ); } diff --git a/19 LoginForm/src/components/login/loginForm.styles.ts b/19 LoginForm/src/components/login/loginForm.styles.ts new file mode 100644 index 00000000..86d978f4 --- /dev/null +++ b/19 LoginForm/src/components/login/loginForm.styles.ts @@ -0,0 +1,16 @@ +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + } +}); diff --git a/19 LoginForm/src/components/login/loginForm.tsx b/19 LoginForm/src/components/login/loginForm.tsx index b64824b3..d2c0e2a5 100644 --- a/19 LoginForm/src/components/login/loginForm.tsx +++ b/19 LoginForm/src/components/login/loginForm.tsx @@ -1,22 +1,24 @@ import * as React from 'react'; import TextField from '@material-ui/core/TextField'; import Button from '@material-ui/core/Button'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; import { LoginEntity } from '../../model'; +import styles from './loginForm.styles'; -interface Props { +interface Props extends WithStyles { onLogin: () => void; onUpdateLoginField: (name: string, value: any) => void; loginInfo: LoginEntity; } -export const LoginForm: React.StatelessComponent = (props: Props) => { +const LoginFormInner: React.StatelessComponent = (props: Props) => { const onTextFieldChange = (fieldId) => (e) => { props.onUpdateLoginField(fieldId, e.target.value); } return ( -
+
= (props: Props) => {
); } + +export const LoginForm = withStyles(styles)(LoginFormInner); diff --git a/19 LoginForm/src/components/login/loginPage.tsx b/19 LoginForm/src/components/login/loginPage.tsx index bcf2ca98..1b08abc4 100644 --- a/19 LoginForm/src/components/login/loginPage.tsx +++ b/19 LoginForm/src/components/login/loginPage.tsx @@ -5,6 +5,7 @@ import { LoginForm } from './loginForm'; import { isValidLogin } from '../../api/login'; import { LoginEntity, createEmptyLogin } from '../../model'; import { NotificationComponent } from '../../common/components/notification'; +import { CenteredView } from '../../layout'; interface Props extends RouteComponentProps { } @@ -47,13 +48,13 @@ export class Login extends React.Component { public render() { return ( -
+ this.setState({ showLoginFailedMsg: false })} /> - + { /> -
+ ); } } diff --git a/19 LoginForm/src/components/members/page.tsx b/19 LoginForm/src/components/members/page.tsx index fb1214b5..9f0e8936 100644 --- a/19 LoginForm/src/components/members/page.tsx +++ b/19 LoginForm/src/components/members/page.tsx @@ -4,7 +4,7 @@ import { MemberEntity } from '../../model'; import { memberAPI } from '../../api/member'; import { MemberHeader } from './memberHeader'; import { MemberRow } from './memberRow'; -import { Header } from '../header'; +import { AppView } from '../../layout'; interface Props { } @@ -32,8 +32,7 @@ export const MembersPage: React.StatelessComponent = () => { }, []); return ( -
-
+

Members Page

New Member @@ -53,6 +52,6 @@ export const MembersPage: React.StatelessComponent = () => {
-
+ ); } diff --git a/19 LoginForm/src/css/site.css b/19 LoginForm/src/css/site.css index 81a048bb..08f06f90 100644 --- a/19 LoginForm/src/css/site.css +++ b/19 LoginForm/src/css/site.css @@ -35,14 +35,3 @@ #header-title { background-color: rgb(238, 235, 235); } - -.login-form { - display: flex; - flex-direction: column; - justify-content: center; -} - -.login-card { - max-width: 400px; - margin: 0 auto; -} \ No newline at end of file diff --git a/19 LoginForm/src/layout/appView.component.tsx b/19 LoginForm/src/layout/appView.component.tsx new file mode 100644 index 00000000..f2df5514 --- /dev/null +++ b/19 LoginForm/src/layout/appView.component.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './appView.styles'; +import { Header } from '../components'; + +interface Props extends WithStyles { +} + +const AppViewInner: React.StatelessComponent = (props) => ( +
+
+ {props.children} +
+); + +export const AppView = withStyles(styles)(AppViewInner); diff --git a/19 LoginForm/src/layout/appView.styles.ts b/19 LoginForm/src/layout/appView.styles.ts new file mode 100644 index 00000000..cdc35f56 --- /dev/null +++ b/19 LoginForm/src/layout/appView.styles.ts @@ -0,0 +1,13 @@ +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + } +}); \ No newline at end of file diff --git a/19 LoginForm/src/layout/centeredView.component.tsx b/19 LoginForm/src/layout/centeredView.component.tsx new file mode 100644 index 00000000..880ae853 --- /dev/null +++ b/19 LoginForm/src/layout/centeredView.component.tsx @@ -0,0 +1,14 @@ +import * as React from 'react'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './centeredView.styles'; + +interface Props extends WithStyles { +} + +const CenteredViewInner: React.StatelessComponent = (props) => ( +
+ {props.children} +
+); + +export const CenteredView = withStyles(styles)(CenteredViewInner); \ No newline at end of file diff --git a/19 LoginForm/src/layout/centeredView.styles.ts b/19 LoginForm/src/layout/centeredView.styles.ts new file mode 100644 index 00000000..b121d7ef --- /dev/null +++ b/19 LoginForm/src/layout/centeredView.styles.ts @@ -0,0 +1,15 @@ +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + maxWidth: '400px', + margin: '0 auto', + } +}); \ No newline at end of file diff --git a/19 LoginForm/src/layout/index.ts b/19 LoginForm/src/layout/index.ts new file mode 100644 index 00000000..25aea291 --- /dev/null +++ b/19 LoginForm/src/layout/index.ts @@ -0,0 +1,2 @@ +export { CenteredView } from './centeredView.component'; +export { AppView } from './appView.component'; \ No newline at end of file From 0184f6a47dc33fd86a5f9082a7beb8a0a48c59cc Mon Sep 17 00:00:00 2001 From: Estefania Barrios Aragon Date: Fri, 15 Feb 2019 14:12:37 +0100 Subject: [PATCH 04/80] Update readme. --- 19 LoginForm/readme.md | 230 ++++++++++++++---- 19 LoginForm/src/layout/appView.styles.ts | 2 +- .../src/layout/centeredView.component.tsx | 2 +- .../src/layout/centeredView.styles.ts | 2 +- 19 LoginForm/src/layout/index.ts | 2 +- 5 files changed, 189 insertions(+), 49 deletions(-) diff --git a/19 LoginForm/readme.md b/19 LoginForm/readme.md index 53119256..bda4894c 100644 --- a/19 LoginForm/readme.md +++ b/19 LoginForm/readme.md @@ -37,20 +37,24 @@ npm install @material-ui/core @material-ui/icons --save-dev - In order to perform the login in the parent component when the button is clicked, we add a callback as a property in _Props_ interface. +- Also, we are going to apply styles using _withStyles_ function from Material-UI. Those styles will be defined in a new file, _loginForm.styles.ts_. + _./src/components/login/loginForm.tsx_ ``` import * as React from 'react'; import TextField from '@material-ui/core/TextField'; import Button from '@material-ui/core/Button'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './loginForm.styles'; -interface Props { +interface Props extends WithStyles { onLogin: () => void; } -export const LoginForm: React.StatelessComponent = (props: Props) => { +const LoginFormInner: React.StatelessComponent = (props: Props) => { return ( -
+
= (props: Props) => {
); } -``` +export const LoginForm = withStyles(styles)(LoginFormInner); +``` +_./src/components/login/loginForm.styles.ts_ +``` +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + } +}); +``` - Now, let's create the page component, named _LoginPage_, that will contain our recently created _LoginForm_. We will include the form in a _Card_ from Material-UI. Also, we need to add a function to perform the action related to the _onLogin_ event. In this case, we are going to show the _About_ page, which was the home page in previous samples. _./src/components/login/loginPage.tsx_ @@ -93,7 +117,7 @@ export class Login extends React.Component { public render() { return ( - + = () => { } ``` -- The next step is to modify the _App_ component because we are not going to show the _Header_ in the _LoginPage_. Therefore, we need to remove it from the _App_ component and add it to _About_ and _Members_ pages because they are the only ones where _Header_ will be shown. +- The next step is to modify the _App_ component because we are not going to show the _Header_ in the _LoginPage_. Therefore, we need to remove it from the _App_ component and, instead of adding it to _About_ and _Members_ pages, we are going to create layouts. The idea is that we will have one layout for the login page and another layout for _About_ and _Members_ pages, which will include the _Header_. + +- Let's create the layout folder and the first layout for the login page, using Material-UI: + +_./src/layout/centeredView.styles.ts_ +``` +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + maxWidth: '400px', + margin: '0 auto', + } +}); +``` +_./src/layout/centeredView.component.tsx_ +``` +import * as React from 'react'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './centeredView.styles'; + +interface Props extends WithStyles { +} + +const CenteredViewInner: React.StatelessComponent = (props) => ( +
+ {props.children} +
+); + +export const CenteredView = withStyles(styles)(CenteredViewInner); +``` + +- Now, let's do the same for _Members_ and _About_ pages. In this case, we are going to create a layout that includes the _Header_. + +_./src/layout/appView.styles.ts_ +``` +import { createStyles, Theme } from "@material-ui/core/styles"; + +export default (theme: Theme) => createStyles({ + '@global': { + 'body, html, #root': { + margin: 0, + padding: 0, + width: '100%', + } + }, + container: { + } +}); +``` +_./src/layout/appView.component.tsx_ +``` +import * as React from 'react'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './appView.styles'; +import { Header } from '../components'; + +interface Props extends WithStyles { +} + +const AppViewInner: React.StatelessComponent = (props) => ( +
+
+ {props.children} +
+); + +export const AppView = withStyles(styles)(AppViewInner); +``` + +- Let's add barrel: + +_./src/layout/index.ts_ +``` +export { CenteredView } from './centeredView.component'; +export { AppView } from './appView.component'; +``` + +- Now, we can modify the _App_ component to remove the _Header_. _./src/app.tsx_ @@ -179,16 +273,17 @@ export const App: React.StatelessComponent<{}> = (props) => { } ``` +- And let's use our layouts in the corresponding pages: + _/.src/components/members/page.tsx_ ```diff //... -+ import { Header } from '../header'; ++ import { AppView } from '../../layout'; //... return ( -+
-+
++

Members Page

New Member @@ -208,19 +303,18 @@ _/.src/components/members/page.tsx_
-+
++ ); } ``` _./src/components/about.tsx_ ```diff -+ import { Header } from './header'; ++ import { AppView } from '../layout'; export const About: React.StatelessComponent<{}> = () => { return ( -+
-+
++
-

18 Hooks

+

19 LoginForm

@@ -268,11 +362,50 @@ export const About: React.StatelessComponent<{}> = () => {
-+
++ ); } ``` +_./src/components/login/loginPage.tsx_ + +```diff +import * as React from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import { Card, CardHeader, CardContent } from '@material-ui/core'; +import { LoginForm } from './loginForm'; ++ import { CenteredView } from '../../layout'; + +interface Props extends RouteComponentProps { +} + +export class Login extends React.Component { + + constructor(props: Props) { + super(props); + } + + private onLogin = () => { + this.props.history.push('/about'); + } + + public render() { + return ( ++ + + + + + + ++ + ); + } +} +``` + - At this point, we have the structure and design of the login page working. Now, it is time to add the logic to perfom the login event, so that it only shows the _About_ page if the credentials are correct. - Firstly, we are going to create a new _LoginEntity_ in our model. @@ -302,6 +435,8 @@ _./src/components/login/loginForm.tsx_ import * as React from 'react'; import TextField from '@material-ui/core/TextField'; import Button from '@material-ui/core/Button'; +import { withStyles, WithStyles } from '@material-ui/core/styles'; +import styles from './loginForm.styles'; + import { LoginEntity } from '../../model'; interface Props { @@ -310,14 +445,14 @@ interface Props { + loginInfo: LoginEntity; } -export const LoginForm: React.StatelessComponent = (props: Props) => { +const LoginFormInner: React.StatelessComponent = (props: Props) => { + const onTextFieldChange = (fieldId) => (e) => { + props.onUpdateLoginField(fieldId, e.target.value); + } return ( -
+
= (props: Props) => {
); } + +export const LoginForm = withStyles(styles)(LoginFormInner); ``` - Thirdly, let's review _LoginPage_ component. We need to add _loginInfo_ to the state and update it accordingly. Also, it is necessary to check whether the credentials are correct or not. To do that, we will add a function named _isValidLogin_ to our fake API. @@ -348,6 +485,7 @@ import * as React from 'react'; import { RouteComponentProps } from 'react-router-dom'; import { Card, CardHeader, CardContent } from '@material-ui/core'; import { LoginForm } from './loginForm'; +import { CenteredView } from '../../layout'; + import { isValidLogin } from '../../api/login'; + import { LoginEntity, createEmptyLogin } from '../../model'; @@ -386,16 +524,18 @@ interface Props extends RouteComponentProps { public render() { return ( - - - - - - + + + + + + + + ); } } @@ -529,13 +669,13 @@ export class Login extends React.Component { public render() { return ( -+
+ + this.setState({ showLoginFailedMsg: false })} + /> - + { /> -+
+ ); } } diff --git a/19 LoginForm/src/layout/appView.styles.ts b/19 LoginForm/src/layout/appView.styles.ts index cdc35f56..8417ea18 100644 --- a/19 LoginForm/src/layout/appView.styles.ts +++ b/19 LoginForm/src/layout/appView.styles.ts @@ -10,4 +10,4 @@ export default (theme: Theme) => createStyles({ }, container: { } -}); \ No newline at end of file +}); diff --git a/19 LoginForm/src/layout/centeredView.component.tsx b/19 LoginForm/src/layout/centeredView.component.tsx index 880ae853..3af9a43c 100644 --- a/19 LoginForm/src/layout/centeredView.component.tsx +++ b/19 LoginForm/src/layout/centeredView.component.tsx @@ -11,4 +11,4 @@ const CenteredViewInner: React.StatelessComponent = (props) => (
); -export const CenteredView = withStyles(styles)(CenteredViewInner); \ No newline at end of file +export const CenteredView = withStyles(styles)(CenteredViewInner); diff --git a/19 LoginForm/src/layout/centeredView.styles.ts b/19 LoginForm/src/layout/centeredView.styles.ts index b121d7ef..9add7f21 100644 --- a/19 LoginForm/src/layout/centeredView.styles.ts +++ b/19 LoginForm/src/layout/centeredView.styles.ts @@ -12,4 +12,4 @@ export default (theme: Theme) => createStyles({ maxWidth: '400px', margin: '0 auto', } -}); \ No newline at end of file +}); diff --git a/19 LoginForm/src/layout/index.ts b/19 LoginForm/src/layout/index.ts index 25aea291..63b125f1 100644 --- a/19 LoginForm/src/layout/index.ts +++ b/19 LoginForm/src/layout/index.ts @@ -1,2 +1,2 @@ export { CenteredView } from './centeredView.component'; -export { AppView } from './appView.component'; \ No newline at end of file +export { AppView } from './appView.component'; From 768c551becff0221275c917b76d44ba489d19542 Mon Sep 17 00:00:00 2001 From: Estefania Barrios Aragon Date: Fri, 15 Feb 2019 14:16:20 +0100 Subject: [PATCH 05/80] Update readme. --- 19 LoginForm/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/19 LoginForm/readme.md b/19 LoginForm/readme.md index bda4894c..45fe2438 100644 --- a/19 LoginForm/readme.md +++ b/19 LoginForm/readme.md @@ -439,7 +439,7 @@ import { withStyles, WithStyles } from '@material-ui/core/styles'; import styles from './loginForm.styles'; + import { LoginEntity } from '../../model'; -interface Props { +interface Props extends WithStyles { onLogin: () => void; + onUpdateLoginField: (name: string, value: any) => void; + loginInfo: LoginEntity; From 5c2d85cc9f0c4811b417ec620025bc4a28ab3114 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Mon, 18 Feb 2019 19:53:47 +0100 Subject: [PATCH 06/80] Update readme.md --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 6a32a18f..8c7ef6ea 100644 --- a/readme.md +++ b/readme.md @@ -49,11 +49,11 @@ start working with React and Typescript. Characteristics: ## Hooks -### [00 Boiler plate](./hooks/00_BoilerPlate/readme.md) +### [00 Boiler plate](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/00_BoilerPlate) Bundling + npm start based on webpack. -### [01 Hello React](./hooks/01_HelloReact/readme.md) +### [01 Hello React](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/01_HelloReact/readme.md) Display the text 'Hello React'. From 9e227f7cbb2e4a7e30c246c1202ee3b6c470e898 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Mon, 18 Feb 2019 19:58:41 +0100 Subject: [PATCH 07/80] Update readme.md --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index 8c7ef6ea..3e863985 100644 --- a/readme.md +++ b/readme.md @@ -53,62 +53,62 @@ start working with React and Typescript. Characteristics: Bundling + npm start based on webpack. -### [01 Hello React](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/01_HelloReact/readme.md) +### [01 Hello React](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/01_HelloReact) Display the text 'Hello React'. Hello world, simples react render sample. -### [02 Properties](./hooks/02_Properties/readme.md) +### [02 Properties](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/02_Properties) Display the text 'Hello {name}' (where name is a prop that contains a given name). Introduce a basic React concept, handling properties. -### [03 State](./hooks/03_State/readme.md) +### [03 State](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/03_State) Starting from sample 02, Let's the user change the name to be displayed. Introduce a basic React concept, handling State using hooks. -### [04 Callback](./hooks/04_Callback/readme.md) +### [04 Callback](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/04_Callback) Starting from sample 03, let the user change the name only when he hits a _change_ button. Using callbacks. -### [05 Refactor](./hooks/05_Refactor/readme.md) +### [05 Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/05_Refactor) Refactor sample 04, cleanup and discussion on where to place the state. Refactor the job done. -### [06 Enable](./hooks/06_Enable/readme.md) +### [06 Enable](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/06_Enable) Starting from sample 05, enable / disable the _change_ button when the text is empty or same name as original name,. Enable/disable components. -### [07 ColorPicker](./hooks/07_Colorpicker/readme.md) +### [07 ColorPicker](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/07_Colorpicker) Simple color picker demo (show how properties work). -### [08 ColorPicker Refactor](./hooks/08_ColorPickerRefactor/readme.md) +### [08 ColorPicker Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/08_ColorPickerRefactor) ColorPicker refactor. -### [09 Sidebar](./hooks/10_Sidebar/readme.md) +### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_Sidebar) Implementation of a single sidebar. -### [10 Table Mock](./hooks/11_TableMock/readme.md) +### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableMock) Render a table and use a child component to render each row, using mock data. -### [11 Table Axios](./hooks/12_TableAxios/readme.md) +### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_TableAxios) Starting from sample 10, remove mock data, hit a real REST API (Github api), use axios to perform the fetch call. From 91d890026f8e4dc29b7e718ebbefdf09abd4cdb0 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Mon, 18 Feb 2019 20:01:12 +0100 Subject: [PATCH 08/80] Update readme.md --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 3e863985..03b93446 100644 --- a/readme.md +++ b/readme.md @@ -92,7 +92,7 @@ when the text is empty or same name as original name,. Enable/disable components. -### [07 ColorPicker](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/07_Colorpicker) +### [07 ColorPicker](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/07_ColorPicker) Simple color picker demo (show how properties work). @@ -100,15 +100,15 @@ Simple color picker demo (show how properties work). ColorPicker refactor. -### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_Sidebar) +### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/09_Sidebar) Implementation of a single sidebar. -### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableMock) +### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_TableMock) Render a table and use a child component to render each row, using mock data. -### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_TableAxios) +### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) Starting from sample 10, remove mock data, hit a real REST API (Github api), use axios to perform the fetch call. From a9dfb20eee1311b5c2ff56dfe9f64d8420c8f9ec Mon Sep 17 00:00:00 2001 From: desarrollolocal Date: Wed, 20 Feb 2019 11:31:26 +0100 Subject: [PATCH 09/80] Review and corrections finished --- 00 BoilerPlate/package-lock.json | 7977 ++++++++++-------------------- 00 BoilerPlate/package.json | 2 +- 00 BoilerPlate/readme.md | 49 +- 3 files changed, 2642 insertions(+), 5386 deletions(-) diff --git a/00 BoilerPlate/package-lock.json b/00 BoilerPlate/package-lock.json index 8281d3fc..de6e86ff 100644 --- a/00 BoilerPlate/package-lock.json +++ b/00 BoilerPlate/package-lock.json @@ -4,215 +4,238 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" - } - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, "@webassemblyjs/ast": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.3.1.tgz", - "integrity": "sha512-WJKy500MK6cM5LNcOjKlLHnYtTU5PcmL06iXErYriA90GLn7W/EzIyknZRx0Bj3W6FjYKTPkHADdE3GM0ZJk1Q==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.3.tgz", + "integrity": "sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ==", "dev": true, "requires": { - "@webassemblyjs/helper-wasm-bytecode": "1.3.1", - "@webassemblyjs/wast-parser": "1.3.1", - "webassemblyjs": "1.3.1" + "@webassemblyjs/helper-module-context": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/wast-parser": "1.8.3" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.3.1.tgz", - "integrity": "sha512-8kCRyt0bQSnZD67UQfDTONO0jD7HCxmNUUJfT9OnVok0RWYs/AnpS83kfHtQjHucRMyx2d+YlsJWkdhXdLobqA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz", + "integrity": "sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz", + "integrity": "sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.3.1.tgz", - "integrity": "sha512-xIcxcfkBrrivLauyXJ57i/ArPy+kFgZjMDrxm4pSUBG2VtwwYKjOZAyjf4qsM4JbP5vRuRzMD2gp+a9WMyC3PA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz", + "integrity": "sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.3.1.tgz", - "integrity": "sha512-X305tLl7qeTixYz0/Y0Xu+bcNizJLfHUZ1iTiVtorDkh5mLrIZ8hLkkM2oYNSq/oaoW6gpHDrHRfYZItExTeeQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz", + "integrity": "sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.3.1" + "@webassemblyjs/wast-printer": "1.8.3" } }, "@webassemblyjs/helper-fsm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.3.1.tgz", - "integrity": "sha512-Be1G8ZDTP1T+vXaVMraXY8+SoJnOVNarRkByrM83PHjW+vqUwubwYPpA4U2NBTz4WG19vYpfsUccCZwOPiyK+Q==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz", + "integrity": "sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA==", "dev": true }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz", + "integrity": "sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.3", + "mamacro": "^0.0.3" + } + }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.3.1.tgz", - "integrity": "sha512-rOIjy/Cmd+hspim9B/c7dUqhW8AyKsRceVcQtWljIvFSitx9rsL5m73NGaGFUVAEaMDvvEzYczehjwbrHPz4KA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz", + "integrity": "sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.3.1.tgz", - "integrity": "sha512-mDBlDsrsl1Y7LGEdmlTzdDwr/SCe2l9ZsQZ1GYXird71jlU/0djs5ZXfxyufd1G3wO+yuxW997m50Patk4s1fA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz", + "integrity": "sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/helper-buffer": "1.3.1", - "@webassemblyjs/helper-wasm-bytecode": "1.3.1", - "@webassemblyjs/wasm-gen": "1.3.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3" } }, - "@webassemblyjs/leb128": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.3.1.tgz", - "integrity": "sha512-CgkWUXRINTGs/+Swp8COvwOk5Ci4spv1MKDdGfRecyFiLGs7wYm/p4fgRQWzBEFaotEP/ftPa9O6BFykrwghzw==", + "@webassemblyjs/ieee754": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz", + "integrity": "sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg==", "dev": true, "requires": { - "leb": "0.3.0" + "@xtuc/ieee754": "^1.2.0" } }, - "@webassemblyjs/validation": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.3.1.tgz", - "integrity": "sha512-afp32tgDVwW53lQc58PtIBifyZf3qGzRpl9r+8SNHzPOe6lBamjK1RWEA83YHwvu7qk6uBV7IAeUC7BgdxPtsA==", + "@webassemblyjs/leb128": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.3.tgz", + "integrity": "sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1" + "@xtuc/long": "4.2.2" } }, + "@webassemblyjs/utf8": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.3.tgz", + "integrity": "sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg==", + "dev": true + }, "@webassemblyjs/wasm-edit": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.3.1.tgz", - "integrity": "sha512-0T75tHKR0dIDiO3oqBZmo+2McJy5FkgSL2AIP3rJvqrDFaJ19jCrC5KLqGbqo3ZicdY9x9Xdc9zaY2A1TCkAiw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz", + "integrity": "sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/helper-buffer": "1.3.1", - "@webassemblyjs/helper-wasm-bytecode": "1.3.1", - "@webassemblyjs/helper-wasm-section": "1.3.1", - "@webassemblyjs/wasm-gen": "1.3.1", - "@webassemblyjs/wasm-opt": "1.3.1", - "@webassemblyjs/wasm-parser": "1.3.1", - "@webassemblyjs/wast-printer": "1.3.1", - "debug": "3.1.0" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/helper-wasm-section": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3", + "@webassemblyjs/wasm-opt": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3", + "@webassemblyjs/wast-printer": "1.8.3" } }, "@webassemblyjs/wasm-gen": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.3.1.tgz", - "integrity": "sha512-iYgQ3UJpsKiJnXerHulT//JpJAHuLavqMPEtUiRnSh0r/WvZh8pNtYBaN2v64+d9yTtu9aMlJmlKi6uz1j5FFg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz", + "integrity": "sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/helper-wasm-bytecode": "1.3.1", - "@webassemblyjs/leb128": "1.3.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/ieee754": "1.8.3", + "@webassemblyjs/leb128": "1.8.3", + "@webassemblyjs/utf8": "1.8.3" } }, "@webassemblyjs/wasm-opt": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.3.1.tgz", - "integrity": "sha512-Eqi1he5VuGxMYKGhrBU+UxUhIwTDlnuvJmwrad3k4dD2UQpqu3HedRndGdJTQ68xj2GqDCdE6QiLzjytSN4KVQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz", + "integrity": "sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/helper-buffer": "1.3.1", - "@webassemblyjs/wasm-gen": "1.3.1", - "@webassemblyjs/wasm-parser": "1.3.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-buffer": "1.8.3", + "@webassemblyjs/wasm-gen": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3" } }, "@webassemblyjs/wasm-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.3.1.tgz", - "integrity": "sha512-euRnqP/bky9DGbXf5Nqvtmc5soOM7xkvwI2H+LSP88NAFkcGMPEnrAP4UbsFAH+ESnS4kAW6wL5UyzjWBiiTbA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz", + "integrity": "sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/helper-wasm-bytecode": "1.3.1", - "@webassemblyjs/leb128": "1.3.1", - "@webassemblyjs/wasm-parser": "1.3.1", - "webassemblyjs": "1.3.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-api-error": "1.8.3", + "@webassemblyjs/helper-wasm-bytecode": "1.8.3", + "@webassemblyjs/ieee754": "1.8.3", + "@webassemblyjs/leb128": "1.8.3", + "@webassemblyjs/utf8": "1.8.3" } }, "@webassemblyjs/wast-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.3.1.tgz", - "integrity": "sha512-lM7Kwsp1mqqL3jq1kXKeoT8Z/cXvPQ2kWBNg19nZXbL1eLgr+4qRi83WvQU45+5+uIovigtBw/WU0nLLev7LGA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz", + "integrity": "sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/floating-point-hex-parser": "1.3.1", - "@webassemblyjs/helper-code-frame": "1.3.1", - "@webassemblyjs/helper-fsm": "1.3.1", - "long": "3.2.0", - "webassemblyjs": "1.3.1" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/floating-point-hex-parser": "1.8.3", + "@webassemblyjs/helper-api-error": "1.8.3", + "@webassemblyjs/helper-code-frame": "1.8.3", + "@webassemblyjs/helper-fsm": "1.8.3", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.3.1.tgz", - "integrity": "sha512-V2SMByzsrTT2wGQOjm/3ctCiy8mdYOSLDk+EkOpNHVZWB9ISJc+gZWzniTgihih03UWqqNa1S/0XpyVz7ZEYSQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz", + "integrity": "sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/wast-parser": "1.3.1", - "long": "3.2.0" + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/wast-parser": "1.8.3", + "@xtuc/long": "4.2.2" } }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", "dev": true }, "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "5.5.3" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true }, "ajv": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", - "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "4.2.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "alphanum-sort": { @@ -221,10 +244,10 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-html": { @@ -234,9 +257,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { @@ -245,23 +268,28 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, - "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", - "dev": true - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "aproba": { @@ -276,7 +304,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -297,41 +325,19 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -346,21 +352,15 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -370,6 +370,23 @@ "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "assign-symbols": { @@ -378,12 +395,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", - "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", - "dev": true - }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -397,9 +408,9 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "autoprefixer": { @@ -408,64 +419,53 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000839", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "awesome-typescript-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.0.0.tgz", - "integrity": "sha512-/80vlBnWp5IlERQ0sxRDQfz5voqht02MRNgUdbn90rKHrope6eh0PYr0qepD2TpYYnCSvq0DzdWc8udHM0KefA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "enhanced-resolve": "4.0.0", - "loader-utils": "1.1.0", - "lodash": "4.17.10", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "source-map-support": "0.5.5" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", - "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "buffer-from": "1.0.0", - "source-map": "0.6.1" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } } } }, + "awesome-typescript-loader": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz", + "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3", + "webpack-log": "^1.2.0" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -478,20 +478,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -508,41 +499,32 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" }, "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } } } }, @@ -552,33 +534,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -587,9 +550,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -598,10 +561,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -610,10 +573,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -622,21 +585,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -645,11 +596,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -658,8 +609,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -668,8 +619,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -678,8 +629,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -688,9 +639,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -699,11 +650,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -712,12 +663,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -726,8 +677,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-messages": { @@ -736,7 +687,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -745,7 +696,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -754,122 +705,27 @@ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "dev": true, - "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -878,7 +734,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -887,7 +743,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -896,11 +752,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -909,15 +765,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -926,8 +782,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -936,7 +792,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -945,8 +801,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -955,7 +811,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -964,9 +820,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -975,7 +831,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -984,9 +840,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -995,10 +851,10 @@ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1007,9 +863,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1018,9 +874,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1029,8 +885,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1039,12 +895,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1053,8 +909,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1063,7 +919,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1072,9 +928,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1083,7 +939,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1092,7 +948,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1101,9 +957,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1112,39 +968,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1153,7 +979,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1162,8 +988,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-env": { @@ -1172,116 +998,36 @@ "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.7", - "invariant": "2.2.4", - "semver": "5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", - "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000839", - "electron-to-chromium": "1.3.45" - } - } - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true, - "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" } }, "babel-register": { @@ -1290,13 +1036,24 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.6", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } } }, "babel-runtime": { @@ -1305,8 +1062,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.6", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1315,19 +1072,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - } + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1336,32 +1085,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1370,16 +1102,16 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", - "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "balanced-match": { @@ -1394,13 +1126,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1409,7 +1141,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1418,7 +1150,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1427,7 +1159,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1436,9 +1168,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1456,27 +1188,21 @@ "dev": true }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "binaryextensions": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", - "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", "dev": true }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { @@ -1486,38 +1212,21 @@ "dev": true }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - } + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" } }, "bonjour": { @@ -1526,12 +1235,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "boolbase": { @@ -1541,9 +1250,9 @@ "dev": true }, "bootstrap": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.1.tgz", - "integrity": "sha512-SpiDSOcbg4J/PjVSt4ny5eY6j74VbVSjROY4Fb/WIUXBV9cnb5luyR4KnPvNoXuGnBK1T+nJIWqRsvU3yP8Mcg==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" }, "brace-expansion": { "version": "1.1.11", @@ -1551,7 +1260,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1561,16 +1270,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1579,7 +1288,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1596,12 +1305,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1610,20 +1319,21 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1632,8 +1342,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1642,13 +1352,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1657,17 +1367,17 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { - "caniuse-db": "1.0.30000839", - "electron-to-chromium": "1.3.45" + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" } }, "buffer": { @@ -1676,15 +1386,15 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-indexof": { @@ -1699,12 +1409,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -1718,24 +1422,25 @@ "dev": true }, "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, "cache-base": { @@ -1744,152 +1449,114 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - } - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000839", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } } }, "caniuse-db": { - "version": "1.0.30000839", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000839.tgz", - "integrity": "sha1-VahuQCx0rhcUlwe+o+o5lSIjNJc=", + "version": "1.0.30000938", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000938.tgz", + "integrity": "sha512-1lbcoAGPQFUYOdY7sxpsl8ZDBfn5cyn80XuYnZwk7N4Qp7Behw7uxZCH5jjH2qWTV2WM6hgjvDVpP/uV3M/l9g==", "dev": true }, "caniuse-lite": { - "version": "1.0.30000839", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000839.tgz", - "integrity": "sha512-gJZIfmkuy84agOeAZc7WJOexZhisZaBSFk96gkGM6TkH7+1mBfr/MSPnXC8lO0g7guh/ucbswYjruvDbzc6i0g==", + "version": "1.0.30000938", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz", + "integrity": "sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==", "dev": true }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.5" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" } }, "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, "chrome-trace-event": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", - "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } }, "cipher-base": { "version": "1.0.4", @@ -1897,8 +1564,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -1907,15 +1574,9 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -1928,20 +1589,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -1958,10 +1610,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1970,161 +1622,69 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } }, "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "colors": "1.0.3" + "source-map": "~0.6.0" }, "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^3.0.0" } } } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "1.0.0" - } - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" - } - }, "coa": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2139,8 +1699,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2149,15 +1709,15 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.4", - "color-convert": "1.9.1", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -2175,7 +1735,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "colormin": { @@ -2184,21 +1744,21 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true }, "commondir": { @@ -2214,44 +1774,27 @@ "dev": true }, "compressible": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", - "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": ">= 1.38.0 < 2" } }, "compression": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.13", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" } }, "concat-map": { @@ -2266,16 +1809,16 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-browserify": { @@ -2284,7 +1827,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2306,10 +1849,13 @@ "dev": true }, "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "cookie": { "version": "0.3.1", @@ -2329,12 +1875,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2344,9 +1890,9 @@ "dev": true }, "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", "dev": true }, "core-util-is": { @@ -2361,8 +1907,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2371,11 +1917,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2384,12 +1930,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -2398,11 +1944,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2411,17 +1957,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2436,20 +1982,20 @@ "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-select": { @@ -2458,21 +2004,21 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -2481,17 +2027,17 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } }, "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { @@ -2506,38 +2052,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -2546,17 +2092,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cyclist": { @@ -2571,37 +2108,19 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.42" + "es5-ext": "^0.10.9" } }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", - "dev": true - }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", - "dev": true - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -2619,35 +2138,52 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "1.0.0" - } - }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "dev": true + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "object-keys": "^1.0.12" } }, "define-property": { @@ -2656,8 +2192,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2666,7 +2202,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2675,7 +2211,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2684,9 +2220,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2703,12 +2239,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -2723,8 +2259,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -2733,10 +2269,10 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, "detect-indent": { @@ -2745,19 +2281,13 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, "diffie-hellman": { @@ -2766,19 +2296,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -2793,8 +2313,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -2803,42 +2323,26 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } + "utila": "~0.4" } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -2848,9 +2352,9 @@ "dev": true }, "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { @@ -2859,7 +2363,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2868,71 +2372,47 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "dev": true - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true - }, "electron-to-chromium": { - "version": "1.3.45", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", - "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2953,30 +2433,24 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", - "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "envinfo": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", - "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "errno": { @@ -2985,61 +2459,43 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" - } - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" + "prr": "~1.0.1" } }, "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "version": "0.10.47", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", + "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -3048,9 +2504,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-symbol": { @@ -3059,8 +2515,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" + "d": "1", + "es5-ext": "~0.10.14" } }, "escape-html": { @@ -3076,19 +2532,19 @@ "dev": true }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, "esrecurse": { @@ -3097,7 +2553,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3125,18 +2581,18 @@ "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.0" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -3145,75 +2601,47 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3222,58 +2650,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.4" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" + "is-extendable": "^0.1.0" } } } @@ -3284,45 +2661,45 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", - "body-parser": "1.18.2", + "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -3330,21 +2707,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true } } }, @@ -3354,8 +2716,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3364,36 +2726,25 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.23", - "tmp": "0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3402,7 +2753,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -3411,7 +2762,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3420,7 +2771,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3429,7 +2780,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3438,9 +2789,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3451,19 +2802,6 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "fast-glob": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.1.tgz", - "integrity": "sha512-wSyW1TBK3ia5V+te0rGPXudeMHoUQW6O5Y9oATiaGhpENmEifPDlOdhpsnlj5HoG6ttIvGiY1DdCmI9X2xGMhg==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "glob-parent": "3.1.0", - "is-glob": "4.0.0", - "merge2": "1.2.2", - "micromatch": "3.1.10" - } - }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -3471,9 +2809,9 @@ "dev": true }, "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "faye-websocket": { @@ -3482,17 +2820,14 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true }, "file-loader": { "version": "1.1.11", @@ -3500,26 +2835,20 @@ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3528,7 +2857,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3540,52 +2869,55 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^3.0.0" } }, - "first-chunk-stream": { + "findup-sync": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "flatten": { @@ -3594,29 +2926,40 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, - "flow-parser": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.72.0.tgz", - "integrity": "sha512-kFaDtviKlD/rHi6NRp42KTbnPgz/nKcWUJQhqDnLDeKA8uGcRVSy0YlQjaf9M3pFo5PgC3SNFnCPpQGLtHjH2w==", - "dev": true - }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "for-in": { @@ -3625,21 +2968,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3652,7 +2980,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -3667,8 +2995,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -3677,10 +3005,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3690,14 +3018,14 @@ "dev": true }, "fsevents": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz", - "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.9.1" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3718,13 +3046,13 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3737,12 +3065,12 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "chownr": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -3778,7 +3106,7 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.6.0", "bundled": true, "dev": true, "optional": true @@ -3801,7 +3129,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3816,28 +3144,28 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3847,12 +3175,12 @@ "optional": true }, "iconv-lite": { - "version": "0.4.21", + "version": "0.4.24", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -3861,7 +3189,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3870,8 +3198,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3890,7 +3218,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3904,7 +3232,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3913,21 +3241,21 @@ "dev": true }, "minipass": { - "version": "2.2.4", + "version": "2.3.5", "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3945,32 +3273,32 @@ "optional": true }, "needle": { - "version": "2.2.0", + "version": "2.2.4", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.9.1", + "version": "0.10.3", "bundled": true, "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.6", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3979,24 +3307,24 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { - "version": "1.0.3", + "version": "1.0.5", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.1.10", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -4005,10 +3333,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4027,7 +3355,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4048,8 +3376,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -4065,15 +3393,15 @@ "optional": true }, "rc": { - "version": "1.2.6", + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4090,26 +3418,26 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", "bundled": true, "dev": true }, @@ -4126,7 +3454,7 @@ "optional": true }, "semver": { - "version": "5.5.0", + "version": "5.6.0", "bundled": true, "dev": true, "optional": true @@ -4148,9 +3476,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -4159,7 +3487,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4167,7 +3495,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4177,18 +3505,18 @@ "optional": true }, "tar": { - "version": "4.4.1", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -4198,12 +3526,12 @@ "optional": true }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -4212,7 +3540,7 @@ "dev": true }, "yallist": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true } @@ -4225,22 +3553,19 @@ "dev": true }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, "get-value": { "version": "2.0.6", @@ -4248,287 +3573,111 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "got": "7.1.0", - "is-plain-obj": "1.1.0" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "requires": { - "p-finally": "1.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "is-extglob": "^2.1.0" } } } }, - "github-username": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", - "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "gh-got": "6.0.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, - "glob-all": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", - "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "glob": "7.1.2", - "yargs": "1.2.6" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", - "dev": true, - "requires": { - "minimist": "0.1.0" - } } } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "got": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.1.tgz", - "integrity": "sha512-tiLX+bnYm5A56T5N/n9Xo89vMaO1mrS9qoDqj3u/anVooqGozvY/HbXzEpDfbNeKsHCBpK40gSbz8wGYSp3i1w==", - "dev": true, - "requires": { - "@sindresorhus/is": "0.7.0", - "cacheable-request": "2.1.4", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "into-stream": "3.1.0", - "is-retry-allowed": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.0", - "p-cancelable": "0.4.1", - "p-timeout": "2.0.1", - "pify": "3.0.0", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "3.0.0", - "url-to-options": "1.0.1" - } - }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, - "grouped-queue": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", - "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", - "dev": true, - "requires": { - "lodash": "4.17.10" - } - }, "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4537,59 +3686,30 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } + "ansi-regex": "^2.0.0" } }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -4598,8 +3718,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -4608,7 +3728,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4619,24 +3739,24 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hmac-drbg": { @@ -4645,9 +3765,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "home-or-tmp": { @@ -4656,8 +3776,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "homedir-polyfill": { @@ -4666,31 +3786,25 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, "html-entities": { @@ -4700,42 +3814,18 @@ "dev": true }, "html-minifier": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.15.tgz", - "integrity": "sha512-OZa4rfb6tZOZ3Z8Xf0jKxXkiDcFWldQePGYFDcgKqES2sXeWaEv9y6QQvWUtX3ySI3feApQi5uCsHLINQ6NoAw==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.15.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.24" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.3.24", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.24.tgz", - "integrity": "sha512-hS7+TDiqIqvWScCcKRybCQzmMnEzJ4ryl9ErRmW4GFyG48p0/dKZiy/5mVLbsFzU8CCnCgQdxMiJzZythvLzCg==", - "dev": true, - "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" - } - } + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "html-webpack-plugin": { @@ -4744,25 +3834,37 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.15", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.0.0", - "toposort": "1.0.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -4773,10 +3875,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -4785,7 +3887,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "isarray": { @@ -4800,10 +3902,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4814,12 +3916,6 @@ } } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -4832,16 +3928,16 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.12.tgz", - "integrity": "sha1-uc+/Sizybw/DSxDKFImid3HjR08=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", "dev": true }, "http-proxy": { @@ -4850,9 +3946,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.4.1", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -4861,10 +3957,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.10", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -4879,7 +3975,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -4894,18 +3990,18 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.22" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4917,9 +4013,9 @@ } }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, "iferr": { @@ -4928,20 +4024,14 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", - "dev": true - }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -4950,15 +4040,6 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -4977,8 +4058,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4993,65 +4074,35 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "5.5.10", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "meow": "3.7.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "2.3.0", - "p-is-promise": "1.1.0" - } - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "ip": { @@ -5060,10 +4111,16 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, "is-absolute-url": { @@ -5078,7 +4135,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5087,24 +4144,18 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -5113,19 +4164,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-data-descriptor": { @@ -5134,7 +4176,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5143,7 +4185,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5160,9 +4202,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -5173,21 +4215,6 @@ } } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5206,7 +4233,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5221,7 +4248,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -5230,7 +4257,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5239,51 +4266,11 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "dev": true, - "requires": { - "symbol-observable": "0.2.4" - }, - "dependencies": { - "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", - "dev": true - } - } - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -5296,7 +4283,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5305,7 +4292,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -5320,49 +4307,16 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-scoped": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", - "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", - "dev": true, - "requires": { - "scoped-regex": "1.0.0" + "has": "^1.0.1" } }, "is-stream": { @@ -5377,20 +4331,17 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "is-windows": { "version": "1.0.2", @@ -5410,12 +4361,6 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5428,31 +4373,10 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", - "dev": true, - "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, "js-tokens": { @@ -5467,142 +4391,14 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - } - } - }, - "jscodeshift": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", - "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "7.0.0-beta.46", - "colors": "1.2.5", - "flow-parser": "0.72.0", - "lodash": "4.17.10", - "micromatch": "2.3.11", - "neo-async": "2.5.1", - "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.14.7", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - } + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "json-parse-better-errors": { @@ -5612,9 +4408,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json3": { @@ -5624,24 +4420,18 @@ "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "json-buffer": "3.0.0" + "minimist": "^1.2.0" } }, "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, "kind-of": { @@ -5651,335 +4441,45 @@ "dev": true }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "leb": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz", - "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=", - "dev": true - }, - "listr": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.10", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "invert-kv": "^2.0.0" } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "lodash.camelcase": { @@ -6006,50 +4506,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.4.1" - } - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - } + "chalk": "^2.0.1" } }, "loglevel": { @@ -6064,33 +4521,17 @@ "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", "dev": true, "requires": { - "es6-symbol": "3.1.1", - "object.assign": "4.1.0" + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" } }, - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", - "dev": true - }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lower-case": { @@ -6099,35 +4540,37 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pify": "^3.0.0" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "pify": "3.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -6136,19 +4579,13 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-expression-evaluator": { @@ -6157,20 +4594,15 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -6180,91 +4612,14 @@ "dev": true }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, - "mem-fs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", - "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", - "dev": true, - "requires": { - "through2": "2.0.3", - "vinyl": "1.2.0", - "vinyl-file": "2.0.0" - } - }, - "mem-fs-editor": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz", - "integrity": "sha512-QHvdXLLNmwJXxKdf7x27aNUren6IoPxwcM8Sfd+S6/ddQQMcYdEtVKsh6ilpqMrU18VQuKZEaH0aCGt3JDbA0g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "dev": true, "requires": { - "commondir": "1.0.1", - "deep-extend": "0.5.1", - "ejs": "2.6.1", - "glob": "7.1.2", - "globby": "8.0.1", - "isbinaryfile": "3.0.2", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "dev": true, - "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.1", - "glob": "7.1.2", - "ignore": "3.3.8", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - } + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" } }, "memory-fs": { @@ -6273,113 +4628,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - } + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -6388,12 +4638,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "merge2": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", - "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", - "dev": true - }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -6406,19 +4650,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -6427,29 +4671,29 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -6458,20 +4702,28 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", - "dev": true - }, "mini-css-extract-plugin": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz", - "integrity": "sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", + "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "webpack-sources": "1.1.0" + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "minimalistic-assert": { @@ -6492,31 +4744,31 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -6525,8 +4777,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6535,7 +4787,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6547,6 +4799,14 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "move-concurrently": { @@ -6555,12 +4815,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -6575,8 +4835,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -6585,49 +4845,30 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true, "optional": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -6637,9 +4878,9 @@ "dev": true }, "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, "next-tick": { @@ -6649,9 +4890,9 @@ "dev": true }, "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "no-case": { @@ -6660,15 +4901,9 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, - "node-dir": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", - "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", - "dev": true - }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -6676,33 +4911,33 @@ "dev": true }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.2", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.11.0", "vm-browserify": "0.0.4" }, "dependencies": { @@ -6714,61 +4949,11 @@ } } }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" - } - }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -6777,14 +4962,15 @@ "dev": true }, "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.1", - "sort-keys": "2.0.0" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-run-path": { @@ -6793,16 +4979,16 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -6829,9 +5015,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -6840,7 +5026,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -6849,15 +5035,15 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", "dev": true }, "object-visit": { @@ -6866,7 +5052,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -6875,10 +5061,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.getownpropertydescriptors": { @@ -6887,18 +5073,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.pick": { @@ -6907,155 +5083,55 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" } }, "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -7071,14 +5147,14 @@ "dev": true }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -7087,20 +5163,11 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-each-series": { + "p-defer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "1.0.0" - } + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-finally": { "version": "1.0.0", @@ -7109,33 +5176,27 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", - "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", "dev": true }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -7144,31 +5205,16 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "1.0.0" - } - }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", "dev": true }, "parallel-transform": { @@ -7177,9 +5223,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -7188,59 +5234,21 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-passwd": { @@ -7297,38 +5305,23 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -7349,38 +5342,27 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^3.0.0" } }, "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -7395,18 +5377,12 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -7419,11 +5395,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -7440,22 +5416,13 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -7466,9 +5433,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -7477,9 +5444,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -7488,8 +5455,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -7498,7 +5465,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -7507,7 +5474,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -7516,7 +5483,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -7525,7 +5492,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -7534,18 +5501,17 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "postcss": "^5.0.4" } }, "postcss-merge-idents": { @@ -7554,9 +5520,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -7565,7 +5531,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -7574,11 +5540,23 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } } }, "postcss-message-helpers": { @@ -7593,9 +5571,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -7604,8 +5582,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -7614,10 +5592,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -7626,30 +5604,30 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", "dev": true, "requires": { - "postcss": "6.0.22" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -7666,19 +5644,19 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.22" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -7695,19 +5673,19 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.22" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -7724,19 +5702,19 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.22" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -7753,7 +5731,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -7762,49 +5740,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - } + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -7813,8 +5752,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -7823,8 +5762,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -7833,7 +5772,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -7842,9 +5781,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -7853,9 +5792,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -7864,10 +5803,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -7876,15 +5815,15 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, "postcss-zindex": { @@ -7893,33 +5832,15 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", - "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", - "dev": true - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "pretty-error": { @@ -7928,8 +5849,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "private": { @@ -7957,13 +5878,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" } }, "prr": { @@ -7972,50 +5893,57 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.0.tgz", - "integrity": "sha512-UWi0klDoq8xtVzlMRgENV9F7iCTZExaJQSQL187UXsxpk9NnrKGqTqqUNYAKGOzucSOxs2+jUnRNI+rLviPhJg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.0", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "q": { @@ -8025,20 +5953,19 @@ "dev": true }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -8054,37 +5981,18 @@ "dev": true }, "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", "dev": true }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -8093,8 +6001,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -8104,78 +6012,15 @@ "dev": true }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dev": true, "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "dev": true, - "requires": { - "pify": "3.0.0", - "safe-buffer": "5.1.2" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" } }, "readable-stream": { @@ -8184,64 +6029,24 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" - } - }, - "recast": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", - "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", - "dev": true, - "requires": { - "ast-types": "0.11.3", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.7.1" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "reduce-css-calc": { @@ -8250,9 +6055,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -8269,7 +6074,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -8281,9 +6086,9 @@ } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, "regenerator-runtime": { @@ -8298,18 +6103,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-not": { @@ -8318,8 +6114,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -8328,9 +6124,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -8345,7 +6141,15 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } } }, "relateurl": { @@ -8361,45 +6165,22 @@ "dev": true }, "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", + "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } + "css-select": "^1.1.0", + "dom-converter": "~0.2", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" } }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -8414,15 +6195,9 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8441,22 +6216,13 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-dir": { @@ -8465,8 +6231,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { @@ -8481,25 +6247,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "1.0.1" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8507,12 +6254,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.1.3" } }, "ripemd160": { @@ -8521,17 +6268,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -8540,31 +6278,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, - "rxjs": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", - "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -8579,7 +6293,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -8595,21 +6309,15 @@ "dev": true }, "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, - "scoped-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", - "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", - "dev": true - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -8617,18 +6325,18 @@ "dev": true }, "selfsigned": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", - "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", "dev": true, "requires": { "node-forge": "0.7.5" } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "send": { @@ -8638,35 +6346,32 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true } } }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, "serve-index": { @@ -8675,24 +6380,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.18", - "parseurl": "1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -8701,9 +6395,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -8713,22 +6407,16 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8737,7 +6425,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8760,8 +6448,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -8770,7 +6458,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8779,17 +6467,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", - "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", - "dev": true, - "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -8802,50 +6479,29 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8854,7 +6510,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8865,9 +6521,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8876,7 +6532,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8885,7 +6541,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8894,7 +6550,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8903,9 +6559,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -8916,7 +6572,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -8925,7 +6581,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8936,31 +6592,31 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.2.1" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.0" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -8969,24 +6625,30 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { @@ -9001,20 +6663,29 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "source-map": "0.5.7" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "source-map-url": { @@ -9023,85 +6694,74 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, "spdy-transport": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", - "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -9112,7 +6772,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -9122,12 +6782,12 @@ "dev": true }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -9136,8 +6796,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9146,7 +6806,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9158,36 +6818,36 @@ "dev": true }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", - "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -9196,35 +6856,37 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "dev": true, - "requires": { - "any-observable": "0.2.0" - } - }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string_decoder": { @@ -9233,35 +6895,16 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -9270,32 +6913,23 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, "style-loader": { "version": "0.21.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -9304,91 +6938,89 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", "dev": true }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "terser": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.9" }, "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "textextensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", - "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "terser-webpack-plugin": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.16.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "thunky": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, "timers-browserify": { @@ -9397,16 +7029,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -9427,7 +7050,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9436,7 +7059,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9447,10 +7070,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9459,8 +7082,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { @@ -9469,18 +7092,18 @@ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "dev": true }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -9494,7 +7117,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -9504,43 +7127,19 @@ "dev": true }, "typescript": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", - "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", - "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.5", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -9551,22 +7150,16 @@ } } }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9575,7 +7168,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -9584,10 +7177,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9598,15 +7191,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true, - "requires": { - "macaddress": "0.2.8" - } - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -9614,21 +7198,21 @@ "dev": true }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -9643,8 +7227,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9653,9 +7237,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9677,16 +7261,10 @@ } } }, - "untildify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", - "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", - "dev": true - }, "upath": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.5.tgz", - "integrity": "sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, "upper-case": { @@ -9696,12 +7274,12 @@ "dev": true }, "uri-js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", - "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" } }, "urix": { @@ -9728,88 +7306,53 @@ } } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, "url-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz", - "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mime": "2.3.1", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" }, "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } } } }, "url-parse": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz", - "integrity": "sha512-ERuGxDiQ6Xw/agN4tuoCRbmwRuZP0cJ1lJxJubXr5Q/5cDa78+Dc4wfvtxzhzhkm5VvmW6Mf8EVj9SPGN4l8Lg==", - "dev": true, - "requires": { - "querystringify": "2.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", - "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "dev": true, "requires": { - "prepend-http": "2.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -9824,8 +7367,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -9841,27 +7384,17 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "v8-compile-cache": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", - "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9874,39 +7407,6 @@ "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", - "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -9922,9 +7422,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.3", - "graceful-fs": "4.1.11", - "neo-async": "2.5.1" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -9933,338 +7433,213 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, - "webassemblyjs": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.3.1.tgz", - "integrity": "sha512-jaqGpR+MLye6fzxKTiv0/TPEm6ma7ypef76JlQVk9E1z5M2N6EXNrsMOuh7P6aXUVFHJSioRp4N9QOFpcWfIVA==", + "webpack": { + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.5.tgz", + "integrity": "sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/helper-module-context": "1.8.3", + "@webassemblyjs/wasm-edit": "1.8.3", + "@webassemblyjs/wasm-parser": "1.8.3", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-cli": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", + "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/validation": "1.3.1", - "@webassemblyjs/wasm-parser": "1.3.1", - "@webassemblyjs/wast-parser": "1.3.1", - "long": "3.2.0" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "findup-sync": "^2.0.0", + "global-modules": "^1.0.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.4" } }, - "webpack": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.1.tgz", - "integrity": "sha512-xkxthzaVR298HmvmrjBCjiCmgzWnBnvBlgPzuvqmxWSh8QImrPvCCmr482YIx7ixWkTtQj1aMRz+cjoNPUsGEQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.3.1", - "@webassemblyjs/wasm-edit": "1.3.1", - "@webassemblyjs/wasm-parser": "1.3.1", - "acorn": "5.5.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.0", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "0.1.3", - "enhanced-resolve": "4.0.0", - "eslint-scope": "3.7.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.5.1", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.5", - "watchpack": "1.6.0", - "webpack-sources": "1.1.0" - } - }, - "webpack-addons": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", - "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "jscodeshift": "0.4.1" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { - "arr-diff": { + "webpack-log": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", - "dev": true - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + } + } + }, + "webpack-dev-server": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "semver": "^5.6.0", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "ms": "^2.1.1" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", "dev": true, "requires": { - "is-extglob": "1.0.0" + "xregexp": "4.0.0" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "jscodeshift": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", - "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", - "dev": true, - "requires": { - "async": "1.5.2", - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.2.5", - "flow-parser": "0.72.0", - "lodash": "4.17.10", - "micromatch": "2.3.11", - "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.12.9", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ast-types": "0.10.1", - "core-js": "2.5.6", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.3.tgz", - "integrity": "sha512-5AsKoL/Ccn8iTrwk3uErdyhetGH+c7VRQ7Itim2GL0IhBRq5rtojVDk00buMRmFmBpw1RvHXq97Gup965LbozA==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "diff": "3.5.0", - "enhanced-resolve": "4.0.0", - "envinfo": "4.4.2", - "glob-all": "3.1.0", - "global-modules": "1.0.0", - "got": "8.3.1", - "import-local": "1.0.0", - "inquirer": "5.2.0", - "interpret": "1.1.0", - "jscodeshift": "0.5.0", - "listr": "0.13.0", - "loader-utils": "1.1.0", - "lodash": "4.17.10", - "log-symbols": "2.2.0", - "mkdirp": "0.5.1", - "p-each-series": "1.0.0", - "p-lazy": "1.0.0", - "prettier": "1.12.1", - "supports-color": "5.4.0", - "v8-compile-cache": "1.1.2", - "webpack-addons": "1.1.5", - "yargs": "11.1.0", - "yeoman-environment": "2.0.6", - "yeoman-generator": "2.0.5" - } - }, - "webpack-dev-middleware": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz", - "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", - "dev": true, - "requires": { - "loud-rejection": "1.6.0", - "memory-fs": "0.4.1", - "mime": "2.3.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "url-join": "4.0.0", - "webpack-log": "1.2.0" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz", - "integrity": "sha512-itcIUDFkHuj1/QQxzUFOEXXmxOj5bku2ScLEsOFPapnq2JRTm58gPdtnBphBJOKL2+M3p6+xygL64bI+3eyzzw==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.3", - "compression": "1.7.2", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.3", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "1.0.0", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.3.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.3", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.4.0", - "webpack-dev-middleware": "3.1.3", - "webpack-log": "1.2.0", - "yargs": "11.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" } }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", - "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "camelcase": "^4.1.0" } } } @@ -10275,20 +7650,20 @@ "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "dev": true, "requires": { - "chalk": "2.4.1", - "log-symbols": "2.2.0", - "loglevelnext": "1.0.5", - "uuid": "3.2.1" + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -10305,8 +7680,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.12", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -10322,12 +7697,12 @@ "dev": true }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10342,7 +7717,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -10351,23 +7726,17 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -10376,18 +7745,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -10398,16 +7758,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true }, "xtend": { "version": "4.0.1", @@ -10422,141 +7777,39 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - } + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "4.1.0" - } - }, - "yeoman-environment": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", - "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", - "dev": true, - "requires": { - "chalk": "2.4.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "globby": "6.1.0", - "grouped-queue": "0.3.3", - "inquirer": "3.3.0", - "is-scoped": "1.0.0", - "lodash": "4.17.10", - "log-symbols": "2.2.0", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "3.0.2" - }, - "dependencies": { - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - } - } - }, - "yeoman-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", - "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", - "dev": true, - "requires": { - "async": "2.6.0", - "chalk": "2.4.1", - "cli-table": "0.3.1", - "cross-spawn": "6.0.5", - "dargs": "5.1.0", - "dateformat": "3.0.3", - "debug": "3.1.0", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "2.1.0", - "github-username": "4.1.0", - "istextorbinary": "2.2.1", - "lodash": "4.17.10", - "make-dir": "1.3.0", - "mem-fs-editor": "4.0.2", - "minimist": "1.2.0", - "pretty-bytes": "4.0.2", - "read-chunk": "2.1.0", - "read-pkg-up": "3.0.0", - "rimraf": "2.6.2", - "run-async": "2.3.0", - "shelljs": "0.8.2", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "2.0.6" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.10" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/00 BoilerPlate/package.json b/00 BoilerPlate/package.json index 321c90bd..cdee4b10 100644 --- a/00 BoilerPlate/package.json +++ b/00 BoilerPlate/package.json @@ -22,7 +22,7 @@ "typescript": "^2.8.3", "url-loader": "^1.0.1", "webpack": "^4.8.1", - "webpack-cli": "^2.1.3", + "webpack-cli": "3.2.3", "webpack-dev-server": "^3.1.4" }, "dependencies": { diff --git a/00 BoilerPlate/readme.md b/00 BoilerPlate/readme.md index 6c6d70fa..5b0c5b5a 100644 --- a/00 BoilerPlate/readme.md +++ b/00 BoilerPlate/readme.md @@ -24,7 +24,7 @@ Summary steps: # Prerequisites -Install [Node.js and npm](https://nodejs.org/en/) (v8.9.4) if they are not already installed on your computer. +Install at least [Node.js and npm](https://nodejs.org/en/) (v8.9.4) if they are not already installed on your computer. > Verify that you are running at least node v8.x.x and npm 5.x.x by running `node -v` and `npm -v` in a terminal/console window. Older versions may produce errors. @@ -143,29 +143,32 @@ _[./package.json](./package.json)_ { "name": "reactboilerplate", "version": "1.0.0", - "description": "Sample working with React,TypeScript and Webpack", + "description": "sample working with React, Typescript and Webpack", + "main": "index.js", "scripts": { - "start": "webpack-dev-server", - "build": "webpack" - }, - "author": "Lemoncode", - "license": "MIT", - "dependencies": { - "bootstrap": "^3.3.7", - "jquery": "^3.2.1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "webpack-dev-server --mode development --inline --hot --open", + "build": "webpack --mode development" }, + "author": "", + "license": "ISC", "devDependencies": { - "awesome-typescript-loader": "^3.1.3", - "babel-core": "^6.25.0", - "babel-preset-env": "^1.5.2", - "css-loader": "^0.28.4", - "file-loader": "^0.11.2", - "html-webpack-plugin": "^2.28.0", - "style-loader": "^0.18.2", - "typescript": "^2.3.4", - "url-loader": "^0.5.9", - "webpack": "^2.6.1", - "webpack-dev-server": "^2.4.5" + "awesome-typescript-loader": "^5.0.0", + "babel-core": "^6.26.3", + "babel-preset-env": "^1.7.0", + "css-loader": "^0.28.11", + "file-loader": "^1.1.11", + "html-webpack-plugin": "^3.2.0", + "mini-css-extract-plugin": "^0.4.0", + "style-loader": "^0.21.0", + "typescript": "^2.8.3", + "url-loader": "^1.0.1", + "webpack": "^4.8.1", + "webpack-cli": "^2.1.3", + "webpack-dev-server": "^3.1.4" + }, + "dependencies": { + "bootstrap": "^4.1.1" } } @@ -198,8 +201,7 @@ _[./src/index.html](./src/index.html)_ ``` -- Now it's time to create a basic **[./webpack.config.js](./webpack.config.js)** file, this configuration will - include plumbing for: +- Now it's time to create a basic **[./webpack.config.js](./webpack.config.js)** file, this configuration will include plumbing for: - Launching a web dev server. - Transpiling from TypeScript to JavaScript. - Setup Twitter Bootstrap (including fonts, etc...). @@ -279,6 +281,7 @@ module.exports = { ``` npm start ``` + ## Note: If you have problems when running the app you should update webpack-cli to : "webpack-cli": "3.2.3" # About Lemoncode From b33f4021febd3384be53e50404ad6339dcd75aee Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Wed, 20 Feb 2019 15:01:09 +0100 Subject: [PATCH 10/80] Update Readme.md --- hooks/13_LoginForm/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 7ba9c386..42d4540f 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -109,7 +109,7 @@ _./src/index.html_ - Let's build a proper _login_ layout, _loginPage.tsx_. To build a nice layout, we will install _@material-ui/core_ ```bash -npm install @material-ui/core @material-ui/icons --save-dev +npm install @material-ui/core @material-ui/icons --save ``` - Now we could create a login form it could look something like: From 6b997dbf5e4238c06a4862ea4ea3752ca89e146e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Mart=C3=ADn?= Date: Wed, 20 Feb 2019 15:18:32 +0100 Subject: [PATCH 11/80] Updated readme and proved example 06 works fine step by step --- hooks/06_Enable/Readme.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hooks/06_Enable/Readme.md b/hooks/06_Enable/Readme.md index 01163edb..a71a4b3e 100644 --- a/hooks/06_Enable/Readme.md +++ b/hooks/06_Enable/Readme.md @@ -22,8 +22,6 @@ We will take a startup point sample _05 Refactor_ npm install ``` -- Let's start by adding - - Let's start by adding a condition to disable the field whenever is empty. _./src/nameEdit.tsx_ @@ -46,13 +44,13 @@ _./src/nameEdit.tsx_ the editingName is empty and when the editing name is the same as the finalname, how could we do that? We can choose between two options here: - - [Excercise] Add to the disabled option on more condition and cover the case where + - [Excercise] Add to the disabled option one more condition and cover the case where the editingName is equal to the initialName. - Create a generic disable property on the NameEditComponent and let the parent control decide in which cases it should be disabled (thanks to [Victor Borrego](https://github.com/v-borrego) to point out this great solution). -We will follow the second approach since is the one that can provide more flexiblity to the +We will follow the second approach since is the one that can provide more flexibility to the control (in a real project, choosing between one approach or the other depends on specfication details). We will expose a _disabled_ property in the _NameEdit_ component. From 8eb1283d8b9ae3d59ab92551199f3c7dcff9a851 Mon Sep 17 00:00:00 2001 From: Braulio Diez Botella Date: Sun, 24 Feb 2019 16:24:54 +0100 Subject: [PATCH 12/80] fixed path index.ts should be component #167 --- hooks/07_ColorPicker/Readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hooks/07_ColorPicker/Readme.md b/hooks/07_ColorPicker/Readme.md index 18584b9f..2fd8dba4 100644 --- a/hooks/07_ColorPicker/Readme.md +++ b/hooks/07_ColorPicker/Readme.md @@ -25,7 +25,7 @@ npm install on we can refactor the content of the components folder without affecting other external files in the application that may import them). -_./src/index.tsx_ +_./src/components/index.tsx_ ```typescript export * from "./hello"; @@ -252,7 +252,7 @@ export const ColorPicker = (props: Props) => ( + )} + /> + {props.color.blue} -+
++
); ``` @@ -262,6 +262,7 @@ export const ColorPicker = (props: Props) => ( ```bash npm start ``` + # About Basefactor + Lemoncode We are an innovating team of Javascript experts, passionate about turning your ideas into robust products. From f84ae5537de242b4827365291ef95980f92a6f5c Mon Sep 17 00:00:00 2001 From: Estefania Barrios Aragon Date: Sun, 24 Feb 2019 22:20:13 +0100 Subject: [PATCH 13/80] Change project folder --- .../19 LoginForm}/.babelrc | 0 .../19 LoginForm}/package.json | 0 .../19 LoginForm}/readme.md | 0 .../19 LoginForm}/src/api/login/index.ts | 0 .../19 LoginForm}/src/api/login/login.ts | 0 .../19 LoginForm}/src/api/member/index.ts | 0 .../19 LoginForm}/src/api/member/mockData.ts | 0 .../19 LoginForm}/src/app.tsx | 0 .../src/common/components/form/button.tsx | 0 .../src/common/components/form/index.ts | 0 .../src/common/components/form/input.tsx | 0 .../src/common/components/notification/index.ts | 0 .../common/components/notification/notification.tsx | 0 .../19 LoginForm}/src/components/about.tsx | 0 .../19 LoginForm}/src/components/header.tsx | 0 .../19 LoginForm}/src/components/index.ts | 0 .../19 LoginForm}/src/components/login/index.ts | 0 .../src/components/login/loginForm.styles.ts | 0 .../src/components/login/loginForm.tsx | 0 .../src/components/login/loginPage.tsx | 0 .../19 LoginForm}/src/components/member/index.ts | 0 .../src/components/member/memberForm.tsx | 0 .../src/components/member/memberFormValidation.ts | 0 .../19 LoginForm}/src/components/member/page.tsx | 0 .../src/components/member/pageContainer.tsx | 0 .../19 LoginForm}/src/components/members/index.ts | 0 .../src/components/members/memberHeader.tsx | 0 .../src/components/members/memberRow.tsx | 0 .../19 LoginForm}/src/components/members/page.tsx | 0 .../19 LoginForm}/src/css/site.css | 0 .../19 LoginForm}/src/images/lemoncode.png | Bin .../19 LoginForm}/src/index.html | 0 .../19 LoginForm}/src/index.tsx | 0 .../19 LoginForm}/src/layout/appView.component.tsx | 0 .../19 LoginForm}/src/layout/appView.styles.ts | 0 .../src/layout/centeredView.component.tsx | 0 .../19 LoginForm}/src/layout/centeredView.styles.ts | 0 .../19 LoginForm}/src/layout/index.ts | 0 .../19 LoginForm}/src/model/index.ts | 0 .../19 LoginForm}/src/model/login.ts | 0 .../19 LoginForm}/src/model/memberEntity.ts | 0 .../19 LoginForm}/src/model/memberErrors.ts | 0 .../19 LoginForm}/src/router.tsx | 0 .../19 LoginForm}/tsconfig.json | 0 .../19 LoginForm}/webpack.config.js | 0 45 files changed, 0 insertions(+), 0 deletions(-) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/.babelrc (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/package.json (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/readme.md (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/api/login/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/api/login/login.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/api/member/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/api/member/mockData.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/app.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/common/components/form/button.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/common/components/form/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/common/components/form/input.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/common/components/notification/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/common/components/notification/notification.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/about.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/header.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/login/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/login/loginForm.styles.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/login/loginForm.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/login/loginPage.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/member/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/member/memberForm.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/member/memberFormValidation.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/member/page.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/member/pageContainer.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/members/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/members/memberHeader.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/members/memberRow.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/components/members/page.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/css/site.css (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/images/lemoncode.png (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/index.html (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/index.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/layout/appView.component.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/layout/appView.styles.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/layout/centeredView.component.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/layout/centeredView.styles.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/layout/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/model/index.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/model/login.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/model/memberEntity.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/model/memberErrors.ts (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/src/router.tsx (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/tsconfig.json (100%) rename {19 LoginForm => old_class_components_samples/19 LoginForm}/webpack.config.js (100%) diff --git a/19 LoginForm/.babelrc b/old_class_components_samples/19 LoginForm/.babelrc similarity index 100% rename from 19 LoginForm/.babelrc rename to old_class_components_samples/19 LoginForm/.babelrc diff --git a/19 LoginForm/package.json b/old_class_components_samples/19 LoginForm/package.json similarity index 100% rename from 19 LoginForm/package.json rename to old_class_components_samples/19 LoginForm/package.json diff --git a/19 LoginForm/readme.md b/old_class_components_samples/19 LoginForm/readme.md similarity index 100% rename from 19 LoginForm/readme.md rename to old_class_components_samples/19 LoginForm/readme.md diff --git a/19 LoginForm/src/api/login/index.ts b/old_class_components_samples/19 LoginForm/src/api/login/index.ts similarity index 100% rename from 19 LoginForm/src/api/login/index.ts rename to old_class_components_samples/19 LoginForm/src/api/login/index.ts diff --git a/19 LoginForm/src/api/login/login.ts b/old_class_components_samples/19 LoginForm/src/api/login/login.ts similarity index 100% rename from 19 LoginForm/src/api/login/login.ts rename to old_class_components_samples/19 LoginForm/src/api/login/login.ts diff --git a/19 LoginForm/src/api/member/index.ts b/old_class_components_samples/19 LoginForm/src/api/member/index.ts similarity index 100% rename from 19 LoginForm/src/api/member/index.ts rename to old_class_components_samples/19 LoginForm/src/api/member/index.ts diff --git a/19 LoginForm/src/api/member/mockData.ts b/old_class_components_samples/19 LoginForm/src/api/member/mockData.ts similarity index 100% rename from 19 LoginForm/src/api/member/mockData.ts rename to old_class_components_samples/19 LoginForm/src/api/member/mockData.ts diff --git a/19 LoginForm/src/app.tsx b/old_class_components_samples/19 LoginForm/src/app.tsx similarity index 100% rename from 19 LoginForm/src/app.tsx rename to old_class_components_samples/19 LoginForm/src/app.tsx diff --git a/19 LoginForm/src/common/components/form/button.tsx b/old_class_components_samples/19 LoginForm/src/common/components/form/button.tsx similarity index 100% rename from 19 LoginForm/src/common/components/form/button.tsx rename to old_class_components_samples/19 LoginForm/src/common/components/form/button.tsx diff --git a/19 LoginForm/src/common/components/form/index.ts b/old_class_components_samples/19 LoginForm/src/common/components/form/index.ts similarity index 100% rename from 19 LoginForm/src/common/components/form/index.ts rename to old_class_components_samples/19 LoginForm/src/common/components/form/index.ts diff --git a/19 LoginForm/src/common/components/form/input.tsx b/old_class_components_samples/19 LoginForm/src/common/components/form/input.tsx similarity index 100% rename from 19 LoginForm/src/common/components/form/input.tsx rename to old_class_components_samples/19 LoginForm/src/common/components/form/input.tsx diff --git a/19 LoginForm/src/common/components/notification/index.ts b/old_class_components_samples/19 LoginForm/src/common/components/notification/index.ts similarity index 100% rename from 19 LoginForm/src/common/components/notification/index.ts rename to old_class_components_samples/19 LoginForm/src/common/components/notification/index.ts diff --git a/19 LoginForm/src/common/components/notification/notification.tsx b/old_class_components_samples/19 LoginForm/src/common/components/notification/notification.tsx similarity index 100% rename from 19 LoginForm/src/common/components/notification/notification.tsx rename to old_class_components_samples/19 LoginForm/src/common/components/notification/notification.tsx diff --git a/19 LoginForm/src/components/about.tsx b/old_class_components_samples/19 LoginForm/src/components/about.tsx similarity index 100% rename from 19 LoginForm/src/components/about.tsx rename to old_class_components_samples/19 LoginForm/src/components/about.tsx diff --git a/19 LoginForm/src/components/header.tsx b/old_class_components_samples/19 LoginForm/src/components/header.tsx similarity index 100% rename from 19 LoginForm/src/components/header.tsx rename to old_class_components_samples/19 LoginForm/src/components/header.tsx diff --git a/19 LoginForm/src/components/index.ts b/old_class_components_samples/19 LoginForm/src/components/index.ts similarity index 100% rename from 19 LoginForm/src/components/index.ts rename to old_class_components_samples/19 LoginForm/src/components/index.ts diff --git a/19 LoginForm/src/components/login/index.ts b/old_class_components_samples/19 LoginForm/src/components/login/index.ts similarity index 100% rename from 19 LoginForm/src/components/login/index.ts rename to old_class_components_samples/19 LoginForm/src/components/login/index.ts diff --git a/19 LoginForm/src/components/login/loginForm.styles.ts b/old_class_components_samples/19 LoginForm/src/components/login/loginForm.styles.ts similarity index 100% rename from 19 LoginForm/src/components/login/loginForm.styles.ts rename to old_class_components_samples/19 LoginForm/src/components/login/loginForm.styles.ts diff --git a/19 LoginForm/src/components/login/loginForm.tsx b/old_class_components_samples/19 LoginForm/src/components/login/loginForm.tsx similarity index 100% rename from 19 LoginForm/src/components/login/loginForm.tsx rename to old_class_components_samples/19 LoginForm/src/components/login/loginForm.tsx diff --git a/19 LoginForm/src/components/login/loginPage.tsx b/old_class_components_samples/19 LoginForm/src/components/login/loginPage.tsx similarity index 100% rename from 19 LoginForm/src/components/login/loginPage.tsx rename to old_class_components_samples/19 LoginForm/src/components/login/loginPage.tsx diff --git a/19 LoginForm/src/components/member/index.ts b/old_class_components_samples/19 LoginForm/src/components/member/index.ts similarity index 100% rename from 19 LoginForm/src/components/member/index.ts rename to old_class_components_samples/19 LoginForm/src/components/member/index.ts diff --git a/19 LoginForm/src/components/member/memberForm.tsx b/old_class_components_samples/19 LoginForm/src/components/member/memberForm.tsx similarity index 100% rename from 19 LoginForm/src/components/member/memberForm.tsx rename to old_class_components_samples/19 LoginForm/src/components/member/memberForm.tsx diff --git a/19 LoginForm/src/components/member/memberFormValidation.ts b/old_class_components_samples/19 LoginForm/src/components/member/memberFormValidation.ts similarity index 100% rename from 19 LoginForm/src/components/member/memberFormValidation.ts rename to old_class_components_samples/19 LoginForm/src/components/member/memberFormValidation.ts diff --git a/19 LoginForm/src/components/member/page.tsx b/old_class_components_samples/19 LoginForm/src/components/member/page.tsx similarity index 100% rename from 19 LoginForm/src/components/member/page.tsx rename to old_class_components_samples/19 LoginForm/src/components/member/page.tsx diff --git a/19 LoginForm/src/components/member/pageContainer.tsx b/old_class_components_samples/19 LoginForm/src/components/member/pageContainer.tsx similarity index 100% rename from 19 LoginForm/src/components/member/pageContainer.tsx rename to old_class_components_samples/19 LoginForm/src/components/member/pageContainer.tsx diff --git a/19 LoginForm/src/components/members/index.ts b/old_class_components_samples/19 LoginForm/src/components/members/index.ts similarity index 100% rename from 19 LoginForm/src/components/members/index.ts rename to old_class_components_samples/19 LoginForm/src/components/members/index.ts diff --git a/19 LoginForm/src/components/members/memberHeader.tsx b/old_class_components_samples/19 LoginForm/src/components/members/memberHeader.tsx similarity index 100% rename from 19 LoginForm/src/components/members/memberHeader.tsx rename to old_class_components_samples/19 LoginForm/src/components/members/memberHeader.tsx diff --git a/19 LoginForm/src/components/members/memberRow.tsx b/old_class_components_samples/19 LoginForm/src/components/members/memberRow.tsx similarity index 100% rename from 19 LoginForm/src/components/members/memberRow.tsx rename to old_class_components_samples/19 LoginForm/src/components/members/memberRow.tsx diff --git a/19 LoginForm/src/components/members/page.tsx b/old_class_components_samples/19 LoginForm/src/components/members/page.tsx similarity index 100% rename from 19 LoginForm/src/components/members/page.tsx rename to old_class_components_samples/19 LoginForm/src/components/members/page.tsx diff --git a/19 LoginForm/src/css/site.css b/old_class_components_samples/19 LoginForm/src/css/site.css similarity index 100% rename from 19 LoginForm/src/css/site.css rename to old_class_components_samples/19 LoginForm/src/css/site.css diff --git a/19 LoginForm/src/images/lemoncode.png b/old_class_components_samples/19 LoginForm/src/images/lemoncode.png similarity index 100% rename from 19 LoginForm/src/images/lemoncode.png rename to old_class_components_samples/19 LoginForm/src/images/lemoncode.png diff --git a/19 LoginForm/src/index.html b/old_class_components_samples/19 LoginForm/src/index.html similarity index 100% rename from 19 LoginForm/src/index.html rename to old_class_components_samples/19 LoginForm/src/index.html diff --git a/19 LoginForm/src/index.tsx b/old_class_components_samples/19 LoginForm/src/index.tsx similarity index 100% rename from 19 LoginForm/src/index.tsx rename to old_class_components_samples/19 LoginForm/src/index.tsx diff --git a/19 LoginForm/src/layout/appView.component.tsx b/old_class_components_samples/19 LoginForm/src/layout/appView.component.tsx similarity index 100% rename from 19 LoginForm/src/layout/appView.component.tsx rename to old_class_components_samples/19 LoginForm/src/layout/appView.component.tsx diff --git a/19 LoginForm/src/layout/appView.styles.ts b/old_class_components_samples/19 LoginForm/src/layout/appView.styles.ts similarity index 100% rename from 19 LoginForm/src/layout/appView.styles.ts rename to old_class_components_samples/19 LoginForm/src/layout/appView.styles.ts diff --git a/19 LoginForm/src/layout/centeredView.component.tsx b/old_class_components_samples/19 LoginForm/src/layout/centeredView.component.tsx similarity index 100% rename from 19 LoginForm/src/layout/centeredView.component.tsx rename to old_class_components_samples/19 LoginForm/src/layout/centeredView.component.tsx diff --git a/19 LoginForm/src/layout/centeredView.styles.ts b/old_class_components_samples/19 LoginForm/src/layout/centeredView.styles.ts similarity index 100% rename from 19 LoginForm/src/layout/centeredView.styles.ts rename to old_class_components_samples/19 LoginForm/src/layout/centeredView.styles.ts diff --git a/19 LoginForm/src/layout/index.ts b/old_class_components_samples/19 LoginForm/src/layout/index.ts similarity index 100% rename from 19 LoginForm/src/layout/index.ts rename to old_class_components_samples/19 LoginForm/src/layout/index.ts diff --git a/19 LoginForm/src/model/index.ts b/old_class_components_samples/19 LoginForm/src/model/index.ts similarity index 100% rename from 19 LoginForm/src/model/index.ts rename to old_class_components_samples/19 LoginForm/src/model/index.ts diff --git a/19 LoginForm/src/model/login.ts b/old_class_components_samples/19 LoginForm/src/model/login.ts similarity index 100% rename from 19 LoginForm/src/model/login.ts rename to old_class_components_samples/19 LoginForm/src/model/login.ts diff --git a/19 LoginForm/src/model/memberEntity.ts b/old_class_components_samples/19 LoginForm/src/model/memberEntity.ts similarity index 100% rename from 19 LoginForm/src/model/memberEntity.ts rename to old_class_components_samples/19 LoginForm/src/model/memberEntity.ts diff --git a/19 LoginForm/src/model/memberErrors.ts b/old_class_components_samples/19 LoginForm/src/model/memberErrors.ts similarity index 100% rename from 19 LoginForm/src/model/memberErrors.ts rename to old_class_components_samples/19 LoginForm/src/model/memberErrors.ts diff --git a/19 LoginForm/src/router.tsx b/old_class_components_samples/19 LoginForm/src/router.tsx similarity index 100% rename from 19 LoginForm/src/router.tsx rename to old_class_components_samples/19 LoginForm/src/router.tsx diff --git a/19 LoginForm/tsconfig.json b/old_class_components_samples/19 LoginForm/tsconfig.json similarity index 100% rename from 19 LoginForm/tsconfig.json rename to old_class_components_samples/19 LoginForm/tsconfig.json diff --git a/19 LoginForm/webpack.config.js b/old_class_components_samples/19 LoginForm/webpack.config.js similarity index 100% rename from 19 LoginForm/webpack.config.js rename to old_class_components_samples/19 LoginForm/webpack.config.js From 7344110af7ef1f4d67611f58fbc4640ef6f3cd9b Mon Sep 17 00:00:00 2001 From: desarrollolocal Date: Tue, 26 Feb 2019 09:54:17 +0100 Subject: [PATCH 14/80] The 01 and 02 reviewed --- .gitignore | 3 +- 02 Components/package-lock.json | 2478 ++++++++++++------------ 02 Components/readme.md | 2 +- 02 Components/src/components/about.tsx | 6 +- 4 files changed, 1252 insertions(+), 1237 deletions(-) diff --git a/.gitignore b/.gitignore index d922a117..d51fabd6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ typings/ .idea/ */src/**/*.js */src/**/*.js.map -package-lock.json \ No newline at end of file +package-lock.json +.vscode diff --git a/02 Components/package-lock.json b/02 Components/package-lock.json index 541f744b..ee2f0d72 100644 --- a/02 Components/package-lock.json +++ b/02 Components/package-lock.json @@ -16,7 +16,7 @@ "integrity": "sha512-RnC6YeQDmDas7DToCbRWNntB9XpIR+sqg1zUqcCUxOJTBwGeSAPfTQaXqzyNND82FIBNY67r17FedDyaKRcHBQ==", "dev": true, "requires": { - "@types/react": "16.4.8" + "@types/react": "*" } }, "@types/react": { @@ -25,8 +25,8 @@ "integrity": "sha512-i1bQXfUF2gItMpG9u9epR02DHLZEpXHON0I6z89vFvbOfGRMyMP1h6VxHTa9TpSJhXrYQjNhwTtLGJdvQA7kcA==", "dev": true, "requires": { - "@types/prop-types": "15.5.4", - "csstype": "2.5.6" + "@types/prop-types": "*", + "csstype": "^2.2.0" } }, "@types/react-dom": { @@ -35,8 +35,8 @@ "integrity": "sha512-vaq4vMaJOaNgFff1t3LnHYr6vRa09vRspMkmLdXtFZmO1fwDI2snP+dpOkwrtlU8UC8qsqemCu4RmVM2OLq/fA==", "dev": true, "requires": { - "@types/node": "10.5.7", - "@types/react": "16.4.8" + "@types/node": "*", + "@types/react": "*" } }, "@webassemblyjs/ast": { @@ -48,8 +48,8 @@ "@webassemblyjs/helper-module-context": "1.5.13", "@webassemblyjs/helper-wasm-bytecode": "1.5.13", "@webassemblyjs/wast-parser": "1.5.13", - "debug": "3.1.0", - "mamacro": "0.0.3" + "debug": "^3.1.0", + "mamacro": "^0.0.3" }, "dependencies": { "debug": { @@ -81,7 +81,7 @@ "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -116,8 +116,8 @@ "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", "dev": true, "requires": { - "debug": "3.1.0", - "mamacro": "0.0.3" + "debug": "^3.1.0", + "mamacro": "^0.0.3" }, "dependencies": { "debug": { @@ -147,7 +147,7 @@ "@webassemblyjs/helper-buffer": "1.5.13", "@webassemblyjs/helper-wasm-bytecode": "1.5.13", "@webassemblyjs/wasm-gen": "1.5.13", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -167,7 +167,7 @@ "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", "dev": true, "requires": { - "ieee754": "1.1.12" + "ieee754": "^1.1.11" } }, "@webassemblyjs/leb128": { @@ -207,7 +207,7 @@ "@webassemblyjs/wasm-opt": "1.5.13", "@webassemblyjs/wasm-parser": "1.5.13", "@webassemblyjs/wast-printer": "1.5.13", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -244,7 +244,7 @@ "@webassemblyjs/helper-buffer": "1.5.13", "@webassemblyjs/wasm-gen": "1.5.13", "@webassemblyjs/wasm-parser": "1.5.13", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -283,8 +283,8 @@ "@webassemblyjs/helper-api-error": "1.5.13", "@webassemblyjs/helper-code-frame": "1.5.13", "@webassemblyjs/helper-fsm": "1.5.13", - "long": "3.2.0", - "mamacro": "0.0.3" + "long": "^3.2.0", + "mamacro": "^0.0.3" } }, "@webassemblyjs/wast-printer": { @@ -295,7 +295,7 @@ "requires": { "@webassemblyjs/ast": "1.5.13", "@webassemblyjs/wast-parser": "1.5.13", - "long": "3.2.0" + "long": "^3.2.0" } }, "@webpack-contrib/schema-utils": { @@ -303,12 +303,12 @@ "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz", "integrity": "sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==", "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chalk": "2.4.1", - "strip-ansi": "4.0.0", - "text-table": "0.2.0", - "webpack-log": "1.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chalk": "^2.3.2", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "webpack-log": "^1.1.2" }, "dependencies": { "ansi-regex": { @@ -321,7 +321,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -332,7 +332,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.19", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -348,7 +348,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.1" + "acorn": "^5.0.0" } }, "ajv": { @@ -356,10 +356,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ajv-keywords": { @@ -390,7 +390,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.2" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -399,8 +399,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -445,8 +445,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "array-union": { @@ -455,7 +455,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -481,9 +481,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -542,14 +542,14 @@ "integrity": "sha512-3v5MEUgRz1n90u61UGYbhFxiFq1tK/HBdoY/ScBX1srOiZVo4iF9b6hyP2ZsRp1ewHKYwlEo0OaHUXJVQHv6dw==", "dev": true, "requires": { - "chalk": "2.4.1", - "enhanced-resolve": "4.1.0", - "loader-utils": "1.1.0", - "lodash": "4.17.10", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "source-map-support": "0.5.6", - "webpack-log": "1.2.0" + "chalk": "^2.4.1", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3", + "webpack-log": "^1.2.0" } }, "babel-code-frame": { @@ -558,9 +558,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -575,11 +575,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "js-tokens": { @@ -602,25 +602,25 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "babel-generator": { @@ -629,14 +629,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -645,9 +645,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -656,10 +656,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -668,10 +668,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -680,9 +680,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -691,11 +691,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -704,8 +704,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -714,8 +714,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -724,8 +724,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -734,9 +734,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -745,11 +745,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -758,12 +758,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -772,8 +772,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-messages": { @@ -782,7 +782,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -791,7 +791,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -818,9 +818,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -829,7 +829,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -838,7 +838,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -847,11 +847,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -860,15 +860,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -877,8 +877,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -887,7 +887,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -896,8 +896,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -906,7 +906,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -915,9 +915,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -926,7 +926,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -935,9 +935,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -946,10 +946,10 @@ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -958,9 +958,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -969,9 +969,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -980,8 +980,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -990,12 +990,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1004,8 +1004,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1014,7 +1014,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1023,9 +1023,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1034,7 +1034,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1043,7 +1043,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1052,9 +1052,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1063,9 +1063,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1074,7 +1074,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1083,8 +1083,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-env": { @@ -1093,36 +1093,36 @@ "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.5.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" } }, "babel-register": { @@ -1131,13 +1131,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "core-js": { @@ -1152,7 +1152,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } } } @@ -1163,8 +1163,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "core-js": { @@ -1181,11 +1181,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1194,15 +1194,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1211,10 +1211,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1235,13 +1235,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1250,7 +1250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1259,7 +1259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1268,7 +1268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1277,9 +1277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1326,15 +1326,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" }, "dependencies": { "iconv-lite": { @@ -1351,12 +1351,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "boolbase": { @@ -1376,7 +1376,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1386,16 +1386,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1404,7 +1404,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1421,12 +1421,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1435,9 +1435,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1446,10 +1446,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1458,8 +1458,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1468,13 +1468,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1483,7 +1483,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { @@ -1492,8 +1492,8 @@ "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000874", - "electron-to-chromium": "1.3.56" + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" } }, "buffer": { @@ -1502,9 +1502,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -1549,19 +1549,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -1570,15 +1570,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camel-case": { @@ -1587,8 +1587,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -1603,8 +1603,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -1626,9 +1626,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -1643,19 +1643,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -1670,7 +1670,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -1679,8 +1679,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -1689,10 +1689,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1701,7 +1701,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1712,7 +1712,7 @@ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.5.x" } }, "cli-cursor": { @@ -1721,7 +1721,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -1736,9 +1736,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1753,7 +1753,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -1770,8 +1770,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -1811,7 +1811,7 @@ "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "dev": true, "requires": { - "mime-db": "1.35.0" + "mime-db": ">= 1.34.0 < 2" } }, "compression": { @@ -1820,13 +1820,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.14", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1841,10 +1841,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1859,7 +1859,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1904,12 +1904,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1935,8 +1935,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1945,11 +1945,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1958,12 +1958,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1972,11 +1972,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1985,17 +1985,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-loader": { @@ -2004,18 +2004,18 @@ "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "postcss": "6.0.23", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-select": { @@ -2024,10 +2024,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -2036,9 +2036,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -2047,9 +2047,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } @@ -2078,7 +2078,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cyclist": { @@ -2092,7 +2092,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.45" + "es5-ext": "^0.10.9" } }, "date-now": { @@ -2136,8 +2136,8 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.12" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -2146,8 +2146,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2156,7 +2156,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2165,7 +2165,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2174,9 +2174,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2187,12 +2187,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -2207,8 +2207,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -2223,7 +2223,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-node": { @@ -2238,9 +2238,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -2255,8 +2255,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -2265,7 +2265,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "dom-converter": { @@ -2274,7 +2274,7 @@ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "dev": true, "requires": { - "utila": "0.3.3" + "utila": "~0.3" }, "dependencies": { "utila": { @@ -2291,8 +2291,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2321,7 +2321,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2330,8 +2330,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexify": { @@ -2340,10 +2340,10 @@ "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -2364,13 +2364,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2389,7 +2389,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2398,7 +2398,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -2407,9 +2407,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { @@ -2424,7 +2424,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -2433,7 +2433,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -2442,11 +2442,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -2455,9 +2455,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "es5-ext": { @@ -2465,9 +2465,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -2475,9 +2475,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.45", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-symbol": { @@ -2485,8 +2485,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.45" + "d": "1", + "es5-ext": "~0.10.14" } }, "escape-html": { @@ -2506,8 +2506,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -2516,7 +2516,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2555,7 +2555,7 @@ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", "dev": true, "requires": { - "original": "1.0.2" + "original": ">=0.0.5" } }, "evp_bytestokey": { @@ -2564,8 +2564,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -2574,13 +2574,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -2589,9 +2589,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -2602,13 +2602,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2617,7 +2617,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2626,7 +2626,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2637,36 +2637,36 @@ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -2689,8 +2689,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2699,7 +2699,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2710,9 +2710,9 @@ "integrity": "sha512-mpkfj0FEdxrIhOC04zk85X7StNtr0yXnG7zCb+8ikO8OJi2jsHh5YGoknNTyXgsbHOf1WOOcVU3kPFWT2WgCkQ==", "dev": true, "requires": { - "chardet": "0.5.0", - "iconv-lite": "0.4.23", - "tmp": "0.0.33" + "chardet": "^0.5.0", + "iconv-lite": "^0.4.22", + "tmp": "^0.0.33" } }, "extglob": { @@ -2721,14 +2721,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2737,7 +2737,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2746,7 +2746,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2755,7 +2755,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2764,7 +2764,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2773,9 +2773,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2802,7 +2802,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fbjs": { @@ -2810,13 +2810,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.18" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, "figures": { @@ -2825,7 +2825,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-loader": { @@ -2834,8 +2834,8 @@ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.7" + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" } }, "fill-range": { @@ -2844,10 +2844,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2856,7 +2856,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2868,12 +2868,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -2882,9 +2882,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -2893,7 +2893,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -2902,8 +2902,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -2912,7 +2912,7 @@ "integrity": "sha512-kssLorP/9acIdpQ2udQVTiCS5LQmdEz9mvdIfDcl1gYX2tPKFADHSyFdvJS040XdFsPzemWtgI3q8mFVCxtX8A==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -2949,7 +2949,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -2964,8 +2964,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -2974,10 +2974,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -2993,8 +2993,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3027,12 +3027,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -3047,17 +3049,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3174,7 +3179,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3186,6 +3192,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "1.0.1" } @@ -3200,6 +3207,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "1.1.11" } @@ -3207,12 +3215,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "5.1.1", "yallist": "3.0.2" @@ -3231,6 +3241,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3311,7 +3322,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3323,6 +3335,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1.0.2" } @@ -3444,6 +3457,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -3550,12 +3564,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -3564,8 +3578,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -3574,7 +3588,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -3597,11 +3611,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -3630,7 +3644,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -3639,7 +3653,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -3658,9 +3672,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3669,8 +3683,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -3679,7 +3693,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3690,8 +3704,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -3700,8 +3714,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -3716,9 +3730,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "home-or-tmp": { @@ -3727,8 +3741,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "hosted-git-info": { @@ -3743,10 +3757,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -3761,13 +3775,13 @@ "integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.16.0", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.6" + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.16.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "html-webpack-plugin": { @@ -3776,12 +3790,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.19", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.0.0", - "toposort": "1.0.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { @@ -3791,10 +3805,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -3805,10 +3819,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -3817,7 +3831,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "isarray": { @@ -3832,10 +3846,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3858,10 +3872,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -3876,9 +3890,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.2", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -3887,10 +3901,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.10", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -3904,7 +3918,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -3919,7 +3933,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" } }, "ieee754": { @@ -3940,8 +3954,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -3956,7 +3970,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexof": { @@ -3971,8 +3985,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3987,19 +4001,19 @@ "integrity": "sha512-f9K2MMx/G/AVmJSaZg2a+GVLRRmTdlGLbwxsibNd6yNTxXujqxPypjCnxnC0y4+Wb/rNY5KyKuq06AO5jrE+7w==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "3.0.0", - "figures": "2.0.0", - "lodash": "4.17.10", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "6.2.2", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -4014,7 +4028,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -4025,7 +4039,7 @@ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", "dev": true, "requires": { - "meow": "3.7.0" + "meow": "^3.3.0" } }, "interpret": { @@ -4040,7 +4054,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.4.0" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4067,7 +4081,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4076,7 +4090,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4093,7 +4107,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4108,7 +4122,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -4123,7 +4137,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4132,7 +4146,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4149,9 +4163,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -4180,7 +4194,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4195,7 +4209,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -4204,7 +4218,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4213,7 +4227,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4230,7 +4244,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -4239,7 +4253,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -4248,7 +4262,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-promise": { @@ -4263,7 +4277,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.1" } }, "is-stream": { @@ -4318,8 +4332,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "jquery": { @@ -4378,7 +4392,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "load-json-file": { @@ -4387,11 +4401,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "pify": { @@ -4413,9 +4427,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -4424,8 +4438,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -4451,7 +4465,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "requires": { - "chalk": "2.4.1" + "chalk": "^2.0.1" } }, "loglevel": { @@ -4465,8 +4479,8 @@ "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", "requires": { - "es6-symbol": "3.1.1", - "object.assign": "4.1.0" + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" } }, "long": { @@ -4480,7 +4494,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "4.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -4489,8 +4503,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -4505,8 +4519,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -4515,7 +4529,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "mamacro": { @@ -4542,7 +4556,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -4551,8 +4565,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "media-typer": { @@ -4567,7 +4581,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -4576,8 +4590,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { @@ -4586,16 +4600,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "decamelize": { @@ -4630,19 +4644,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -4651,8 +4665,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -4673,7 +4687,7 @@ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "requires": { - "mime-db": "1.35.0" + "mime-db": "~1.35.0" } }, "mimic-fn": { @@ -4687,9 +4701,9 @@ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz", "integrity": "sha512-XWuB3G61Rtasq/gLe7cp5cuozehE6hN+E4sxCamRR/WDiHTg+f7ZIAS024r8UJQffY+e2gGELXQZgQoFDfNDCg==", "requires": { - "@webpack-contrib/schema-utils": "1.0.0-beta.0", - "loader-utils": "1.1.0", - "webpack-sources": "1.1.0" + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "loader-utils": "^1.1.0", + "webpack-sources": "^1.1.0" } }, "minimalistic-assert": { @@ -4710,7 +4724,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4725,16 +4739,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -4743,8 +4757,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4753,7 +4767,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4773,12 +4787,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -4793,8 +4807,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -4822,17 +4836,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -4864,7 +4878,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-fetch": { @@ -4872,8 +4886,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-forge": { @@ -4888,28 +4902,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -4927,10 +4941,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -4939,7 +4953,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -4948,7 +4962,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "nth-check": { @@ -4957,7 +4971,7 @@ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "number-is-nan": { @@ -4977,9 +4991,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -4988,7 +5002,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -4997,7 +5011,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5013,7 +5027,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -5021,10 +5035,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.12" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.getownpropertydescriptors": { @@ -5033,8 +5047,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.pick": { @@ -5043,7 +5057,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -5073,7 +5087,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -5082,7 +5096,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "opn": { @@ -5091,7 +5105,7 @@ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -5100,7 +5114,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -5121,9 +5135,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -5144,7 +5158,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5153,7 +5167,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -5180,9 +5194,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -5191,7 +5205,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -5200,11 +5214,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-json": { @@ -5213,7 +5227,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "parseurl": { @@ -5276,9 +5290,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -5295,11 +5309,11 @@ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -5320,7 +5334,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -5329,7 +5343,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -5338,9 +5352,9 @@ "integrity": "sha512-icBXCFQxzlK2PMepOM0QeEdPPFSLAaXXeuKOv5AClJlMy1oVCBrkDGJ12IZYesI/BF8mpeVco3vRCmgeBb4+hw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -5355,9 +5369,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "dependencies": { "source-map": { @@ -5374,7 +5388,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" } }, "postcss-modules-local-by-default": { @@ -5383,8 +5397,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" } }, "postcss-modules-scope": { @@ -5393,8 +5407,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" } }, "postcss-modules-values": { @@ -5403,8 +5417,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" } }, "postcss-value-parser": { @@ -5419,8 +5433,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "private": { @@ -5446,7 +5460,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -5460,8 +5474,8 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "proxy-addr": { @@ -5470,7 +5484,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -5492,11 +5506,11 @@ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -5505,8 +5519,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -5515,9 +5529,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.0", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -5555,7 +5569,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -5564,8 +5578,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -5601,7 +5615,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "statuses": ">= 1.3.1 < 2" } }, "iconv-lite": { @@ -5623,10 +5637,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz", "integrity": "sha512-dMv7YrbxO4y2aqnvA7f/ik9ibeLSHQJTI6TrYAenPSaQ6OXfb+Oti+oJiy8WBxgRzlKatYqtCjphTgDSCEiWFg==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { @@ -5634,10 +5648,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.2.tgz", "integrity": "sha512-Usl73nQqzvmJN+89r97zmeUpQDKDlh58eX6Hbs/ERdDHzeBzWy+ENk7fsGQ+5KxArV1iOFPT46/VneklK9zoWw==", "requires": { - "fbjs": "0.8.17", - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.6.2" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "read-pkg": { @@ -5646,9 +5660,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -5657,8 +5671,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -5667,8 +5681,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -5677,7 +5691,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } } } @@ -5688,13 +5702,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -5703,10 +5717,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "redent": { @@ -5715,8 +5729,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regenerate": { @@ -5737,9 +5751,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-not": { @@ -5748,8 +5762,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -5758,9 +5772,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -5775,7 +5789,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -5804,11 +5818,11 @@ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" }, "dependencies": { "utila": { @@ -5837,7 +5851,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -5864,7 +5878,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -5885,8 +5899,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -5901,7 +5915,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { @@ -5910,8 +5924,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -5920,7 +5934,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -5929,7 +5943,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rxjs": { @@ -5938,7 +5952,7 @@ "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -5953,7 +5967,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -5967,8 +5981,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "select-hose": { @@ -5999,18 +6013,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "mime": { @@ -6033,13 +6047,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.19", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -6048,9 +6062,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -6072,10 +6086,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -6084,7 +6098,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6106,8 +6120,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -6116,7 +6130,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6143,14 +6157,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -6159,7 +6173,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -6168,7 +6182,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -6179,9 +6193,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -6190,7 +6204,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -6199,7 +6213,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -6208,7 +6222,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -6217,9 +6231,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -6230,7 +6244,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -6239,7 +6253,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6250,8 +6264,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -6260,12 +6274,12 @@ "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", "dev": true, "requires": { - "debug": "2.6.9", + "debug": "^2.6.6", "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" }, "dependencies": { "faye-websocket": { @@ -6274,7 +6288,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } } } @@ -6296,11 +6310,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -6309,8 +6323,8 @@ "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -6333,8 +6347,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -6349,8 +6363,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -6365,12 +6379,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -6379,13 +6393,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -6394,7 +6408,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -6403,7 +6417,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -6412,8 +6426,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -6422,7 +6436,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -6439,8 +6453,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -6449,8 +6463,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -6459,11 +6473,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -6478,8 +6492,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -6494,7 +6508,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6505,7 +6519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -6514,7 +6528,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -6523,7 +6537,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -6538,7 +6552,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "style-loader": { @@ -6547,8 +6561,8 @@ "integrity": "sha512-WXUrLeinPIR1Oat3PfCDro7qTniwNTJqGqv1KcQiL3JR5PzrVLTyNsd9wTsPXG/qNCJ7lzR2NY/QDjFsP7nuSQ==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.7" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { @@ -6556,7 +6570,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -6582,8 +6596,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -6598,7 +6612,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -6607,7 +6621,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { @@ -6628,7 +6642,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -6637,7 +6651,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6648,10 +6662,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -6660,8 +6674,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { @@ -6701,7 +6715,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.19" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -6727,8 +6741,8 @@ "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==", "dev": true, "requires": { - "commander": "2.16.0", - "source-map": "0.6.1" + "commander": "~2.16.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -6745,14 +6759,14 @@ "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "commander": { @@ -6773,8 +6787,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } } } @@ -6785,10 +6799,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -6797,7 +6811,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -6806,10 +6820,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -6820,7 +6834,7 @@ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -6829,7 +6843,7 @@ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -6844,8 +6858,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -6854,9 +6868,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -6895,7 +6909,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -6934,9 +6948,9 @@ "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mime": "2.3.1", - "schema-utils": "0.4.7" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^0.4.3" } }, "url-parse": { @@ -6945,8 +6959,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.0.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -6976,8 +6990,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -7009,8 +7023,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -7034,9 +7048,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.5.1" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -7045,7 +7059,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -7059,26 +7073,26 @@ "@webassemblyjs/wasm-edit": "1.5.13", "@webassemblyjs/wasm-opt": "1.5.13", "@webassemblyjs/wasm-parser": "1.5.13", - "acorn": "5.7.1", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.5.1", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.7", - "watchpack": "1.6.0", - "webpack-sources": "1.1.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" } }, "webpack-cli": { @@ -7087,17 +7101,17 @@ "integrity": "sha512-p5NeKDtYwjZozUWq6kGNs9w+Gtw/CPvyuXjXn2HMdz8Tie+krjEg8oAtonvIyITZdvpF7XG9xDHwscLr2c+ugQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "1.0.0", - "inquirer": "6.1.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.4.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.1" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.0.0", + "global-modules-path": "^2.1.0", + "import-local": "^1.0.0", + "inquirer": "^6.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.4.0", + "v8-compile-cache": "^2.0.0", + "yargs": "^12.0.1" } }, "webpack-dev-middleware": { @@ -7106,13 +7120,13 @@ "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", "dev": true, "requires": { - "loud-rejection": "1.6.0", - "memory-fs": "0.4.1", - "mime": "2.3.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "url-join": "4.0.0", - "webpack-log": "1.2.0" + "loud-rejection": "^1.6.0", + "memory-fs": "~0.4.1", + "mime": "^2.1.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "url-join": "^4.0.0", + "webpack-log": "^1.0.1" } }, "webpack-dev-server": { @@ -7122,32 +7136,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.3", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "1.0.0", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^1.0.0", "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.3.0", - "portfinder": "1.0.16", - "selfsigned": "1.10.3", - "serve-index": "1.9.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.1.5", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.4.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.1.3", - "webpack-log": "1.2.0", + "webpack-log": "^1.1.2", "yargs": "11.0.0" }, "dependencies": { @@ -7178,18 +7192,18 @@ "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" } }, "yargs-parser": { @@ -7198,7 +7212,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -7208,10 +7222,10 @@ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "requires": { - "chalk": "2.4.1", - "log-symbols": "2.2.0", - "loglevelnext": "1.0.5", - "uuid": "3.3.2" + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" } }, "webpack-sources": { @@ -7219,8 +7233,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -7236,8 +7250,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.13", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -7257,7 +7271,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -7272,7 +7286,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -7281,8 +7295,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -7291,7 +7305,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -7300,9 +7314,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7343,18 +7357,18 @@ "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -7363,7 +7377,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -7372,8 +7386,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -7382,7 +7396,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7391,7 +7405,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7408,7 +7422,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/02 Components/readme.md b/02 Components/readme.md index 3299f113..83619aa2 100644 --- a/02 Components/readme.md +++ b/02 Components/readme.md @@ -13,7 +13,7 @@ Summary steps: ## Prerequisites -Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0) if they are not already +Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0or higher) if they are not already installed on your computer. > Verify that you are running at least node v6.x.x and npm 3.x.x by running `node -v` and `npm -v` diff --git a/02 Components/src/components/about.tsx b/02 Components/src/components/about.tsx index 1e333c7c..69ac59d4 100644 --- a/02 Components/src/components/about.tsx +++ b/02 Components/src/components/about.tsx @@ -11,7 +11,7 @@ export const About: React.StatelessComponent<{}> = () => { This sample takes the sample "01 Hello react" as starting point. -
+

We are adding react components: a main component that consumes a header and an about component. @@ -20,7 +20,7 @@ export const About: React.StatelessComponent<{}> = () => {

-
+

Highlights


@@ -30,7 +30,7 @@ export const About: React.StatelessComponent<{}> = () => {

-
+
  • Components:

    From fd1645beac4449040d5b8effb0cde7b6c9457afa Mon Sep 17 00:00:00 2001 From: dailymp Date: Wed, 27 Feb 2019 00:37:44 +0100 Subject: [PATCH 15/80] Updating example 3 --- 00 BoilerPlate/package-lock.json | 28 +++++++++++---- 03 Navigation/package.json | 1 + 03 Navigation/readme.md | 48 ++++++++++++++----------- 03 Navigation/src/components/header.tsx | 42 ++++++++++++++++------ 4 files changed, 80 insertions(+), 39 deletions(-) diff --git a/00 BoilerPlate/package-lock.json b/00 BoilerPlate/package-lock.json index de6e86ff..9f9f2ddd 100644 --- a/00 BoilerPlate/package-lock.json +++ b/00 BoilerPlate/package-lock.json @@ -3058,12 +3058,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3078,17 +3080,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3205,7 +3210,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3217,6 +3223,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3231,6 +3238,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3238,12 +3246,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3262,6 +3272,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3342,7 +3353,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3354,6 +3366,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3475,6 +3488,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/03 Navigation/package.json b/03 Navigation/package.json index 0de1df1a..da757d10 100644 --- a/03 Navigation/package.json +++ b/03 Navigation/package.json @@ -9,6 +9,7 @@ "author": "Lemoncode", "license": "MIT", "dependencies": { + "@types/node": "^11.9.5", "bootstrap": "^4.1.3", "jquery": "^3.2.1", "mini-css-extract-plugin": "^0.4.1", diff --git a/03 Navigation/readme.md b/03 Navigation/readme.md index 0079b46d..dc60e007 100644 --- a/03 Navigation/readme.md +++ b/03 Navigation/readme.md @@ -20,7 +20,7 @@ Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0) if they are not alrea installed on your computer. > Verify that you are running at least node v6.x.x and npm 3.x.x by running `node -v` and `npm -v` -in a terminal/console window. Older versions may produce errors. +> in a terminal/console window. Older versions may produce errors. ## Steps to build it @@ -28,20 +28,22 @@ in a terminal/console window. Older versions may produce errors. - Install the npm packages described in the `package.json` and verify that it works: - ```bash - $ npm install - ``` +```bash +$ npm install +``` - Install `react-router-dom` and typings: ```bash npm install react-router-dom --save npm install @types/react-router-dom --save-dev +npm i @types/node ``` - Update `vendors`: ### ./webpack.config.js + ```diff ... entry: { @@ -62,8 +64,9 @@ entry: { - Now, we can start adding a dummy `Members Page`: ### ./src/components/members/page.tsx + ```javascript -import * as React from 'react'; +import * as React from "react"; export const MembersPage: React.StatelessComponent<{}> = () => { return ( @@ -71,21 +74,21 @@ export const MembersPage: React.StatelessComponent<{}> = () => {

    Members Page

); -} - +}; ``` - And its `index.ts` file: ### ./src/components/members/index.ts -```javascript -export * from './page'; +```javascript +export * from "./page"; ``` - Update `header` component to add links to navigate other pages: ### ./src/components/header.tsx + ```diff import * as React from 'react'; + import { Link } from 'react-router-dom'; @@ -103,13 +106,12 @@ export const Header: React.StatelessComponent<{}> = () => { + +
@@ -121,6 +123,7 @@ export const Header: React.StatelessComponent<{}> = () => { - Update components `index.ts` file: ### ./src/components/index.ts + ```diff export * from './header'; export * from './about'; @@ -133,11 +136,12 @@ export * from './about'; - Now, we are going to create the `AppRouter` component where we define routes: ### ./src/router.tsx + ```javascript - import * as React from 'react'; - import { Route, HashRouter, Switch } from 'react-router-dom'; - import { App } from './app'; - import { About, MembersPage } from './components'; + import * as React from "react"; + import { Route, HashRouter, Switch } from "react-router-dom"; + import { App } from "./app"; + import { About, MembersPage } from "./components"; export const AppRouter: React.StatelessComponent<{}> = () => { return ( @@ -152,7 +156,7 @@ export * from './about';
); - } + }; ``` - The type of router that we are using is HashRouter because we are creating a static website. @@ -163,6 +167,7 @@ export * from './about'; - Update `App`. We will remove the div enclosing `Header` because we have already added it in `AppRouter`: ### ./src/app.tsx + ```diff import * as React from 'react'; - import { Header, About } from './components'; @@ -183,6 +188,7 @@ import * as React from 'react'; - And finally, update main file: ### ./src/index.tsx + ```diff import * as React from 'react'; import * as ReactDOM from 'react-dom'; @@ -198,11 +204,11 @@ ReactDOM.render( - Execute the example: - ```bash - $ npm start - ``` +```bash +$ npm start +``` # About Lemoncode We are a team of long-term experienced freelance developers, established as a group in 2010. -We specialize in Front End technologies and .NET. [Click here](http://lemoncode.net/services/en/#en-home) to get more info about us. +We specialize in Front End technologies and .NET. [Click here](http://lemoncode.net/services/en/#en-home) to get more info about us. diff --git a/03 Navigation/src/components/header.tsx b/03 Navigation/src/components/header.tsx index 3aeb58d5..bf64b826 100644 --- a/03 Navigation/src/components/header.tsx +++ b/03 Navigation/src/components/header.tsx @@ -1,29 +1,49 @@ -import * as React from 'react'; -import { Link } from 'react-router-dom'; +import * as React from "react"; +import { Link } from "react-router-dom"; export const Header: React.StatelessComponent<{}> = () => { return (
+
); -} \ No newline at end of file +}; From 0f334b93f019622d2e7b6f39f3f9622df753c246 Mon Sep 17 00:00:00 2001 From: Braulio Diez Botella Date: Tue, 5 Mar 2019 20:58:01 +0100 Subject: [PATCH 16/80] fixed 05 readme --- hooks/05_Refactor/Readme.md | 45 ++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/hooks/05_Refactor/Readme.md b/hooks/05_Refactor/Readme.md index 2cb2c577..dd3756da 100644 --- a/hooks/05_Refactor/Readme.md +++ b/hooks/05_Refactor/Readme.md @@ -163,6 +163,50 @@ export const App = () => { }; ``` +- Now let's jump into _NameEditComponent_ and update the contract and + implementation: + +```diff +interface Props { + initialUserName: string; ++ editingName: string; +- onNameUpdated: (newName: string) => any; ++ onNameUpdated: () => any; ++ onEditingNameUpdated: (newEditingName: string) => any; +} +``` + +```diff +export const NameEditComponent = (props: Props) => { +- const [editingName, setEditingName] = React.useState(props.initialUserName); + + const onChange = (e: React.ChangeEvent) => { +- setEditingName(e.target.value); ++ props.onEditingNameUpdated(e.target.value); + }; + + const onNameSubmit = (event: any): any => { +- props.onNameUpdated(editingName); ++ props.onNameUpdated(); + }; + +- if(props.initialUserName !== lastInitialName) { +- setLastInitialName(props.initialUserName); +- setEditingName(props.initialUserName); +- } + + + return ( + <> + +- ++ + + + ); +}; +``` + # About Basefactor + Lemoncode We are an innovating team of Javascript experts, passionate about turning your ideas into robust products. @@ -172,4 +216,3 @@ We are an innovating team of Javascript experts, passionate about turning your i [Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend - From b005dc71d137f8eaa4e47281080074ce2a2094b3 Mon Sep 17 00:00:00 2001 From: Max P Date: Wed, 6 Mar 2019 12:57:57 +0300 Subject: [PATCH 17/80] fix function parametrs --- hooks/13_LoginForm/src/pages/loginPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index 0c08d456..03967f30 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -70,7 +70,7 @@ export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); interface PropsForm { onLogin: () => void; - onUpdateField: (string, any) => void; + onUpdateField: (name: string, value: any) => void; loginInfo: LoginEntity; } From 974b50725271efea337661fa9dba9101e53a10dc Mon Sep 17 00:00:00 2001 From: Max P Date: Wed, 6 Mar 2019 13:02:05 +0300 Subject: [PATCH 18/80] also fix a redme for chapter 13 --- hooks/13_LoginForm/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 42d4540f..784f3b10 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -424,7 +424,7 @@ _./src/pages/loginPage.tsx_ ```diff interface PropsForm { onLogin: () => void; -+ onUpdateField: (string, any) => void; ++ onUpdateField: (name: string, value: any) => void; + loginInfo : LoginEntity; } From 305977e7cc244617300673068d97496f02770cd9 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Wed, 6 Mar 2019 15:31:42 +0100 Subject: [PATCH 19/80] Update Readme.md --- hooks/15_Context/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/15_Context/Readme.md b/hooks/15_Context/Readme.md index 6a501ebd..9acc513c 100644 --- a/hooks/15_Context/Readme.md +++ b/hooks/15_Context/Readme.md @@ -32,7 +32,7 @@ export const createDefaultUser = (): SessionContextProps => ({ }); export const SessionContext = - React.createContext < SessionContextProps > createDefaultUser(); + React.createContext < SessionContextProps >(createDefaultUser()); ``` - This session context will expose a _provider_ (it will serve us to set the login name in the context), and a _consumer_ (that will let us consume the login name from the context at any point of the application). From 95531723802c214fe33d80d0f73abd4b8ea50166 Mon Sep 17 00:00:00 2001 From: Max P Date: Wed, 6 Mar 2019 17:36:14 +0300 Subject: [PATCH 20/80] fix typo in path --- hooks/14_FormValidation/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index 6f55e8f5..0c4366d2 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -108,7 +108,7 @@ export const loginFormValidation = createFormValidation( - Let's create now a class to hold the dataFormErrors. -_./src/login/loginPage.viewmodel.ts_ +_./src/pages/loginPage.viewmodel.ts_ ```typescript import { FieldValidationResult } from "lc-form-validation"; From 9b8a1417337b21c87e166279fcc20354b364db25 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Wed, 6 Mar 2019 15:42:15 +0100 Subject: [PATCH 21/80] Update sessionContext.tsx --- hooks/15_Context/src/common/sessionContext.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/15_Context/src/common/sessionContext.tsx b/hooks/15_Context/src/common/sessionContext.tsx index e1ec6ae6..4d1c0384 100644 --- a/hooks/15_Context/src/common/sessionContext.tsx +++ b/hooks/15_Context/src/common/sessionContext.tsx @@ -18,7 +18,7 @@ export const SessionContext = React.createContext( createDefaultUser() ); -export const SessionProvider: React.StatelessComponent = props => { +export const SessionProvider: React.FunctionComponent = props => { const [login, setLogin] = React.useState(""); return ( From 71236298f21353629898daf3e2c297bd77ec6a2d Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Wed, 6 Mar 2019 15:52:27 +0100 Subject: [PATCH 22/80] Update Readme.md --- hooks/15_Context/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/15_Context/Readme.md b/hooks/15_Context/Readme.md index 9acc513c..d1b48e30 100644 --- a/hooks/15_Context/Readme.md +++ b/hooks/15_Context/Readme.md @@ -122,8 +122,8 @@ import { Link } from "react-router-dom"; _./src/pages/loginPage.tsx_ ```diff -+ import { TextFieldForm } from "../common"; -import { TextFieldForm, SessionContext } from "../common"; +- import { TextFieldForm } from "../common"; ++ import { TextFieldForm, SessionContext } from "../common"; ``` From f64bcc4c2a78b2951dbd65856707496bcaa13463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Mart=C3=ADn?= Date: Sun, 10 Mar 2019 17:43:27 +0100 Subject: [PATCH 23/80] Updated readme and proved example 08 works fine step by step --- hooks/08_ColorPickerRefactor/Readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hooks/08_ColorPickerRefactor/Readme.md b/hooks/08_ColorPickerRefactor/Readme.md index 6d404b2d..4972366a 100644 --- a/hooks/08_ColorPickerRefactor/Readme.md +++ b/hooks/08_ColorPickerRefactor/Readme.md @@ -1,4 +1,4 @@ -# 09 Colorpicker Refactor +# 08 Colorpicker Refactor In this example we are going to review the colorpicker component we have created and simplify it. Right now we have three slider controls with many details that make our HTML hard to read. Let's componentize this scenario. @@ -219,13 +219,13 @@ export const ColorPicker = (props: Props) => { } ``` -- Now we got a great result !! we have enhanced code quality in our component. +- Now we got a great result!! We have enhanced code quality in our component. ```bash npm start ``` -- Could we go one step furhter refactoring? The answer is yes, could it be worth? That's +- Could we go one step further refactoring? The answer is yes, could it be worth? That's worth a discussion, sometimes is a good idea to keep on refactoring, and then rollback one step, let's apply the following trick, let's replace our color picker with this code: From 054b0d9a5a5cf52977d0199c73fd449e7371801b Mon Sep 17 00:00:00 2001 From: Day MP Date: Sun, 17 Mar 2019 12:58:48 +0100 Subject: [PATCH 24/80] # 158 on hooks. Review and updated from 00 to 03. --- hooks/00_BoilerPlate/Readme.md | 2 +- hooks/01_HelloReact/Readme.md | 14 +++++++------- hooks/02_Properties/Readme.md | 9 +++++---- hooks/02_Properties/src/hello.tsx | 6 +++--- hooks/03_State/Readme.md | 2 +- hooks/03_State/src/app.tsx | 2 +- hooks/03_State/src/nameEdit.tsx | 2 +- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/hooks/00_BoilerPlate/Readme.md b/hooks/00_BoilerPlate/Readme.md index 25d4324e..d2b0180b 100644 --- a/hooks/00_BoilerPlate/Readme.md +++ b/hooks/00_BoilerPlate/Readme.md @@ -22,7 +22,7 @@ Summary steps: # Prerequisites -Install [Node.js and npm](https://nodejs.org/en/) (v8.9.1) if they are not already installed on your computer. +Install [Node.js and npm](https://nodejs.org/en/) (v8.9.1 or higher) if they are not already installed on your computer. > Verify that you are running at least node v8.x.x and npm 5.x.x by running `node -v` and `npm -v` in a terminal/console window. Older versions may produce errors. diff --git a/hooks/01_HelloReact/Readme.md b/hooks/01_HelloReact/Readme.md index e1e3f825..528987aa 100644 --- a/hooks/01_HelloReact/Readme.md +++ b/hooks/01_HelloReact/Readme.md @@ -109,13 +109,13 @@ module.exports = { resolve: { extensions: ['.js', '.ts', '.tsx'] }, - entry: { -- app: './index.ts', -+ app: './index.tsx', - vendorStyles: [ - '../node_modules/bootstrap/dist/css/bootstrap.css', - ], - }, + entry: ["@babel/polyfill", + - "main.ts"], + + "./index.tsx"], + output: { + path: path.join(basePath, "dist"), + filename: "bundle.js" + }, ``` - Execute the example: diff --git a/hooks/02_Properties/Readme.md b/hooks/02_Properties/Readme.md index aee5f3f5..1fb6b190 100644 --- a/hooks/02_Properties/Readme.md +++ b/hooks/02_Properties/Readme.md @@ -13,7 +13,7 @@ We take as startup point the example **01 Hello React**: ## Prerequisites -Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0) if they are not already installed on your computer. +Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0 or higher) if they are not already installed on your computer. > Verify that you are running at least node v6.x.x and npm 3.x.x by running `node -v` and `npm -v` in a terminal/console window. Older versions may produce errors. @@ -37,12 +37,13 @@ import * as React from 'react'; + } - export const HelloComponent = () => { -+ export const HelloComponent = (props: Props) => { - return ( ++ export const HelloComponent = (props: Props) => ( +- { +- return ( -

Hello component !

+

Hello user: { props.userName } !

); -} +- } ``` - Let's update _index.tsx_ and provide a value to the _userName_ property: diff --git a/hooks/02_Properties/src/hello.tsx b/hooks/02_Properties/src/hello.tsx index 33a0ab73..38df41c1 100644 --- a/hooks/02_Properties/src/hello.tsx +++ b/hooks/02_Properties/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { - return

Hello user: {props.userName} !

; -}; +export const HelloComponent = (props: Props) => ( +

Hello user: {props.userName} !

+); \ No newline at end of file diff --git a/hooks/03_State/Readme.md b/hooks/03_State/Readme.md index 79ca23ea..17c56cb1 100644 --- a/hooks/03_State/Readme.md +++ b/hooks/03_State/Readme.md @@ -66,7 +66,7 @@ _./src/index.tsx_ ``` - It's time to revisit _app.tsx_. We want to store the user's name and let the user updated it. We will use hooks to - allow _App_ fucntional components to make use of state (this works in React 16.8.2 and above if you have to use + allow _App_ functional components to make use of state (this works in React 16.8.2 and above if you have to use older verions you have to use a class component, check the "old*classes_components" on the root of this repo for example). We will add \_userName* to the state. diff --git a/hooks/03_State/src/app.tsx b/hooks/03_State/src/app.tsx index 00523d10..f7d14292 100644 --- a/hooks/03_State/src/app.tsx +++ b/hooks/03_State/src/app.tsx @@ -3,7 +3,7 @@ import { HelloComponent } from "./hello"; import { NameEditComponent } from "./nameEdit"; export const App = () => { - const [name, setName] = React.useState("defaultUserName"); + const [name, setName] = React.useState("initialName"); const setUsernameState = (event: React.ChangeEvent) => { setName(event.target.value); diff --git a/hooks/03_State/src/nameEdit.tsx b/hooks/03_State/src/nameEdit.tsx index f8691f70..09c4cd1c 100644 --- a/hooks/03_State/src/nameEdit.tsx +++ b/hooks/03_State/src/nameEdit.tsx @@ -2,7 +2,7 @@ import * as React from "react"; interface Props { userName: string; - onChange: (e : React.ChangeEvent) => void; + onChange: (e: React.ChangeEvent) => void; } export const NameEditComponent = (props: Props) => ( From 5bcbaaf013262322c38d2c1da7efe993efb86853 Mon Sep 17 00:00:00 2001 From: ialvarezecna Date: Mon, 18 Mar 2019 12:15:08 +0100 Subject: [PATCH 25/80] #159 Review 04 Readme, text plus ensure is working fine --- hooks/04_Callback/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/04_Callback/Readme.md b/hooks/04_Callback/Readme.md index ff0b8945..d7bc48f6 100644 --- a/hooks/04_Callback/Readme.md +++ b/hooks/04_Callback/Readme.md @@ -1,6 +1,6 @@ # 04 Callback + State -In this example we refactor the previous **03 State** example. +In this example we will refactor the previous **03 State** example. We will update the name property only when the user clicks a _change_ button, and we will simplify the prop callback signature. @@ -14,7 +14,7 @@ Obviously, we take the example **03 State** as a starting point. ## Prerequisites -Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0) if they are not already installed on your computer. +Install [Node.js and npm](https://nodejs.org/en/) (v6.6.0 or higher) if they are not already installed on your computer. > Verify that you are running at least node v6.x.x and npm 3.x.x by running `node -v` and `npm -v` in a terminal/console window. Older versions may produce errors. From 0dd464933e69d614771814a32ffa2206943040bf Mon Sep 17 00:00:00 2001 From: Jon <19751518+JonChica@users.noreply.github.com> Date: Fri, 29 Mar 2019 13:29:19 +0100 Subject: [PATCH 26/80] hooks/09-sidebar/ review and translate readme to spanish --- hooks/09_Sidebar/Readme.md | 11 +- hooks/09_Sidebar/Readme_es.md | 342 ++++++++++++++++++++++++++++++++++ 2 files changed, 347 insertions(+), 6 deletions(-) create mode 100644 hooks/09_Sidebar/Readme_es.md diff --git a/hooks/09_Sidebar/Readme.md b/hooks/09_Sidebar/Readme.md index 3a5ec64f..23cfc6f3 100644 --- a/hooks/09_Sidebar/Readme.md +++ b/hooks/09_Sidebar/Readme.md @@ -77,9 +77,9 @@ _./webpack.config.js_ ```diff { test: /\.css$/, -+ include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] - }, ++ include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"] + }, + // Use CSS modules for custom stylesheets + { + test: /\.css$/, @@ -161,7 +161,7 @@ _./src/app.tsx_ ```diff return ( <> -+ ++ ``` @@ -287,7 +287,7 @@ npm start > good pratice (on each render the function will be recreated), let's refactor this in two > steps: -- First we will extract this logic to a function, we will call it _toggleSidebarVisbility_. +- First we will extract this logic to a function, we will call it _toggleSidebarVisibility_. - Then let's wrap visibility + toggleSidebarVisibility in a custom hook. * So far so good, but what happens if we want to make this sidebar a reusable component? We could just show the frame but the content should be dynamic. @@ -343,4 +343,3 @@ We are an innovating team of Javascript experts, passionate about turning your i [Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend - diff --git a/hooks/09_Sidebar/Readme_es.md b/hooks/09_Sidebar/Readme_es.md new file mode 100644 index 00000000..22a75175 --- /dev/null +++ b/hooks/09_Sidebar/Readme_es.md @@ -0,0 +1,342 @@ +# 09 Sidebar + +En este ejemplo vamos a añadir una barra lateral a nuestra aplicación, empezaremos con una implementación específica, y luego la haremos genérica. + +# Pasos a seguir + +- Tomaremos como punto de partida el ejemplo _08 ColorPickerRefactor_, copiamos el contenido de ese archivo y ejecutamos _npm install_. + +```bash +npm install +``` + +- Cree un archivo llamado _src/sidebar.css_ y añada los siguientes estilos (http://www.w3schools.com/howto/howto_js_sidenav.asp): + +_./src/components/sidebar.css_ + +```css +/* The side navigation menu */ +.sidenav { + height: 100%; /* 100% Full-height */ + width: 0; /* 0 width - change this with JavaScript */ + position: fixed; /* Stay in place */ + z-index: 1; /* Stay on top */ + top: 0; + left: 0; + background-color: #808080; /* Gray*/ + overflow-x: hidden; /* Disable horizontal scroll */ + padding-top: 60px; /* Place content 60px from the top */ + transition: 0.5s; /* 0.5 second transition effect to slide in the sidenav */ +} + +/* Position and style the close button (top right corner) */ +.sidenav .closebtn { + position: absolute; + top: 0; + right: 25px; + font-size: 36px; + margin-left: 50px; +} + +/* Style page content - use this if you want to push the page content to the right when you open the side navigation */ +#main { + transition: margin-left 0.5s; + padding: 20px; +} + +/* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */ +@media screen and (max-height: 450px) { + .sidenav { + padding-top: 15px; + } + .sidenav a { + font-size: 18px; + } +} +``` + +- Vamos a usar módulos CSS, así que vamos a configurarlo. + +_./webpack.config.js_ + +```diff + module.exports = { + context: path.join(basePath, "src"), + resolve: { +- extensions: ['.js', '.ts', '.tsx'] ++ extensions: ['.js', '.ts', '.tsx', '.css'] + }, +``` + +- Sólo usaremos módulos CSS para hojas de estilo personalizadas. No usaremos Módulos CSS para otros archivos CSS, como Bootstrap (carpeta node_modules). + +_./webpack.config.js_ + +```diff + { + test: /\.css$/, ++ include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"] + }, ++ // Use CSS modules for custom stylesheets ++ { ++ test: /\.css$/, ++ exclude: /node_modules/, ++ use: [ ++ MiniCssExtractPlugin.loader, ++ { ++ loader: 'css-loader', ++ options: { ++ modules: true, ++ localIdentName: '[name]__[local]___[hash:base64:5]', ++ camelCase: true, ++ }, ++ }, ++ ] ++ }, ++ // Do not use CSS modules in node_modules folder + +``` + +- Vamos a crear el componente de la barra lateral, _src/sidebar.tsx_. Crearemos sólo + un rectángulo e interactuaremos con la animación. + +Necesitamos instalar los tipos para _node_, ya que usaremos _require_ a la hora de importar desde el _css_. + +```bash +npm install @types/node --save-dev +``` + +_./src/components/sidebar.tsx_ + +```jsx +import * as React from "react"; + +const classNames = require("./sidebar.css"); + +export const SidebarComponent = () => ( +
+ Basic side bar, first steps +
+); +``` + +- Añadimos este componente a nuestro barrel _index_ + +_./src/components/index.ts_ + +```diff +export * from "./hello"; +export * from "./nameEdit"; +export * from "./colorBrowser"; +export * from "./colorPicker"; ++ export * from "./sidebar"; +``` + +- Vamos a añadir un _id_ al elemento _body_ de la página _src/index.html_ + +_./src/index.html_ + +```diff +- ++ +``` + +- Colocamos el componente añadiéndolo en `app.tsx`: + +_./src/app.tsx_ + +```diff +import * as React from "react"; +- import { HelloComponent, NameEditComponent, ColorBrowser, ColorPicker } from "./components"; ++ import { HelloComponent, NameEditComponent, ColorBrowser, ColorPicker, SidebarComponent } from "./components"; +import { Color } from "./model/color"; +``` + +_./src/app.tsx_ + +```diff + return ( + <> ++ + +``` + +- Comencemos con la parte interesante de esta implementación, agreguemos una opción para mostrar/ocultar la barra lateral _sidebar.tsx_. + +_./src/components/sidebar.tsx_ + +```diff +import * as React from 'react'; + +const classNames = require('./sidebar.css'); + ++ interface Props { ++ isVisible: boolean; ++ } + +- export const SidebarComponent = () => ++ export const SidebarComponent = (props: Props) => +
+ Basic sidebar, first steps +
+``` + +- Ahora vamos a añadir algo de lógica para mostrar / ocultar la barra lateral en caso de que se actualice dicha opción. + + +_./src/sidebar.tsx_ + +```diff +import * as React from 'react'; + +const classNames = require('./sidebar.css'); + +interface Props { + isVisible: boolean; +}; + ++ const divStyle = (props: Props): React.CSSProperties => ({ ++ width: (props.isVisible) ? '23rem' : '0rem' ++ }); + +export const SidebarComponent = (props: Props) => +-
++
+ Basic sidebar, first steps +
+``` + +- Hagamos una prueba rápida para mostrar siempre la barra lateral: + +_./src/app.tsx_ + +```diff + return ( + <> +- ++ + +``` + +- Si arrancamos el proyecto veremos la barra lateral que hemos creado (un rectángulo gris). + + +```bash +npm start +``` +_¿Qué pasa si no puedo ver la barra lateral?_ Compruebe que _webpack.config.js_ y sus estilos se han aplicado, es posible que tenga que iniciar de nuevo _webpack-dev-sever_ (relanzar _npm start_), compruebe con dev tools que está cargando los estilos CSS. + +- Ahora a nivel de aplicación podemos recordar la opción de visibilidad, y añadir un botón para alternar la visualización de la barra lateral. + + +_./src/app.tsx_ + +```diff +export const App = () => { + const [name, setName] = React.useState("defaultUserName"); + const [editingName, setEditingName] = React.useState("defaultUserName"); + const [color, setColor] = React.useState({ + red: 20, + green: 40, + blue: 180 + }); ++ const[isVisible, setVisible] = React.useState(false); +``` + +_./src/app.tsx_ + +```diff + return ( + <> +- ++ + + + + ++
++ ++
+ +``` + +- Iniciemos la aplicación para comprobar cómo se comporta: + +```bash +npm start +``` + +> Ejercicio: la llamada en línea a la función dentro de _onClick_ no se +> considera una buena práctica (en cada render se recreará la función), +> vamos a refactorizarla en dos pasos: + +- Primero extraeremos esta lógica a una función, la llamaremos _toggleSidebarVisibility_. + +- Ahora envolvemos _visibility_ y _toggleSidebarVisibility_ en un _hook_ personalizado. + +* Hasta ahora todo va bien, pero ¿qué pasa si queremos que esta barra lateral sea un componente reutilizable? Podríamos simplemente mostrar el marco pero el contenido debe ser dinámico. + +* Comencemos por añadir algo de contenido al instanciar la barra lateral (_app.tsx_). + + +_./src/app.tsx_ + +```diff + <> +- ++ ++

Cool Scfi movies

++ ++
+ +``` + +> Tenemos un error, _children_ no está definido, vamos a arreglarlo en el +> siguiente paso.... + +- Ahora en _sidebar.tsx_ volcaremos este contenido usando {this.props.children} + +_./src/components/sidebar.tsx_ + +```diff +- export const SidebarComponent = (props: Props) => ( ++ export const SidebarComponent: React.StatelessComponent = (props) => ( + +
+- Basic side bar, first steps ++ {props.children} +
+); +``` + +- Probemos el ejemplo + +``` +npm start +``` + +# About Basefactor + Lemoncode + +We are an innovating team of Javascript experts, passionate about turning your ideas into robust products. + +[Basefactor, consultancy by Lemoncode](http://www.basefactor.com) provides consultancy and coaching services. + +[Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. + +For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend From 3c3dc39f11dbb650f2edf3049f5fc092d27ae6c9 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Thu, 4 Apr 2019 13:54:41 +0200 Subject: [PATCH 27/80] Update Readme.md --- hooks/14_FormValidation/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index 0c4366d2..06f9d766 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -22,7 +22,7 @@ npm install - Let's install the _lc-form-validation-library_. ```bash -npm install lc-form-validation +npm install lc-form-validation --save ``` - To avoid having too much repeated code let's move to common an input component, including it's From 5f00756c2bcf979049215f2c784309d5d3346e81 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Thu, 4 Apr 2019 19:04:49 +0200 Subject: [PATCH 28/80] Update Readme.md --- hooks/14_FormValidation/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index 06f9d766..efc1cdcf 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -184,7 +184,7 @@ _./src/pages/loginPage.tsx_ onLogin={onLogin} onUpdateField={onUpdateLoginField} loginInfo={loginInfo} -+ loginFormErrors={this.state.loginFormErrors} ++ loginFormErrors={loginFormErrors} /> ``` From 0982d1f0f5ed865d98a198db404627e7acbbbf4b Mon Sep 17 00:00:00 2001 From: Igor Alvarez Date: Tue, 23 Apr 2019 19:00:09 +0200 Subject: [PATCH 29/80] Review hooks samples --- hooks/00_BoilerPlate/Readme.md | 5 +- hooks/01_HelloReact/Readme.md | 6 +- hooks/02_Properties/Readme.md | 1 - hooks/03_State/Readme.md | 4 +- hooks/05_Refactor/Readme.md | 4 +- hooks/06_Enable/Readme.md | 6 +- hooks/07_ColorPicker/Readme.md | 13 +- hooks/08_ColorPickerRefactor/Readme.md | 10 +- hooks/09_Sidebar/Readme.md | 8 +- hooks/09_Sidebar/Readme_es.md | 4 +- hooks/10_TableMock/Readme.md | 12 +- hooks/11_TableAxios/Readme.md | 10 +- hooks/12_ReactRouter/Readme.md | 35 +++--- hooks/12_ReactRouter/src/app.tsx | 5 - hooks/12_ReactRouter/src/pages/pageA.tsx | 3 +- hooks/12_ReactRouter/src/pages/pageB.tsx | 3 +- hooks/13_LoginForm/Readme.md | 115 ++++++++---------- hooks/13_LoginForm/package.json | 4 +- .../13_LoginForm/src/common/notification.tsx | 1 - hooks/13_LoginForm/src/pages/loginPage.tsx | 2 - hooks/14_FormValidation/Readme.md | 14 +-- hooks/14_FormValidation/package.json | 4 +- hooks/15_Context/Readme.md | 6 +- hooks/15_Context/package.json | 4 +- .../19 LoginForm/package.json | 4 +- .../19 LoginForm/readme.md | 2 +- readme.md | 22 +++- 27 files changed, 151 insertions(+), 156 deletions(-) diff --git a/hooks/00_BoilerPlate/Readme.md b/hooks/00_BoilerPlate/Readme.md index d2b0180b..2474def9 100644 --- a/hooks/00_BoilerPlate/Readme.md +++ b/hooks/00_BoilerPlate/Readme.md @@ -15,7 +15,6 @@ Summary steps: - Webpack and webpack-dev-server. - TypeScript. - Babel. - - Bootstrap. - Setup **[./webpack.config.js](./webpack.config.js)** - Create a test JS file. - Create a simple HTML file. @@ -136,8 +135,7 @@ _[./package.json](./package.json)_ "main": "index.js", "scripts": { "start": "webpack-dev-server --mode development --inline --hot --open", - "build": "webpack --mode development", - "test": "echo \"Error: no test specified\" && exit 1" + "build": "webpack --mode development" }, "author": "", "license": "ISC", @@ -198,7 +196,6 @@ _[./src/index.html](./src/index.html)_ - Now it's time to create a basic **[./webpack.config.js](./webpack.config.js)** file. This configuration includes plumbing for: - Launching a web dev server. - Transpiling from TypeScript to JavaScript. -- Setting up Twitter Bootstrap (including fonts, etc...). - Generating the build under a **dist** folder. _[./webpack.config.js](./webpack.config.js)_ diff --git a/hooks/01_HelloReact/Readme.md b/hooks/01_HelloReact/Readme.md index 528987aa..023b661a 100644 --- a/hooks/01_HelloReact/Readme.md +++ b/hooks/01_HelloReact/Readme.md @@ -96,7 +96,7 @@ _[./src/index.tsx](./src/index.tsx)_ - Delete the file _main.ts_ we are not going to need it anymore. -- Modify the [./webpack.config.js](./webpack.config.js) file and change the entry point from `./index.ts` +- Modify the [./webpack.config.js](./webpack.config.js) file and change the entry point from `./main.ts` to `./index.tsx`. _[./webpack.config.js](./webpack.config.js)_ @@ -110,8 +110,8 @@ module.exports = { extensions: ['.js', '.ts', '.tsx'] }, entry: ["@babel/polyfill", - - "main.ts"], - + "./index.tsx"], +- "./main.ts"], ++ "./index.tsx"], output: { path: path.join(basePath, "dist"), filename: "bundle.js" diff --git a/hooks/02_Properties/Readme.md b/hooks/02_Properties/Readme.md index 1fb6b190..0cb07614 100644 --- a/hooks/02_Properties/Readme.md +++ b/hooks/02_Properties/Readme.md @@ -38,7 +38,6 @@ import * as React from 'react'; - export const HelloComponent = () => { + export const HelloComponent = (props: Props) => ( -- { - return ( -

Hello component !

+

Hello user: { props.userName } !

diff --git a/hooks/03_State/Readme.md b/hooks/03_State/Readme.md index 17c56cb1..c3f63e2a 100644 --- a/hooks/03_State/Readme.md +++ b/hooks/03_State/Readme.md @@ -12,7 +12,7 @@ We take as a starting point the example _02 Properties_: username (with default value "defaultUserName"). This _App_ component renders the _Hello_ component. At first we create a simple stateless _App_ component. -- Update _main.tsx_ file to include our _App_ component. +- Update _index.tsx_ file to include our _App_ component. - Change _App_ component to a stateful class component to hold the _userName_ state. - Create a _NameEdit_ component to let the user change the value of username. This changes the _App_ state using a function from _App_. @@ -67,7 +67,7 @@ _./src/index.tsx_ - It's time to revisit _app.tsx_. We want to store the user's name and let the user updated it. We will use hooks to allow _App_ functional components to make use of state (this works in React 16.8.2 and above if you have to use - older verions you have to use a class component, check the "old*classes_components" on the root of this repo for example). + older versions you have to use a class component, check the "old*classes_components" on the root of this repo for example). We will add \_userName* to the state. Let's move this component to a class stateful component and define a state including _userName_, and pass this value to the _Hello_ component. diff --git a/hooks/05_Refactor/Readme.md b/hooks/05_Refactor/Readme.md index dd3756da..11b31907 100644 --- a/hooks/05_Refactor/Readme.md +++ b/hooks/05_Refactor/Readme.md @@ -62,7 +62,7 @@ We can think about two possible solutions: - The child components remains as pure presentational. - You have only one place where the updates is being done, and you have control over it, you could easily change behavior - e.g. if the user has alreay started typing then name then ignore the ajax call. + e.g. if the user has already started typing the name then ignore the ajax call. We will stick with the second approach in the rest of examples, but we encourage you to go through both approaches as a learning excercise. @@ -119,7 +119,7 @@ The first approach was fine if we come from a Java / C# mindset, but it has it d what would happen if we want the editingName to be preserved if it has changed (async call would have no effect then)? When there is a conflict updating the state between parent and child a valid solution is to lift up that part of the state to the parent component, if we follow -this approach we can endup having the core state isolated in container components (prior step +this approach we can end up having the core state isolated in container components (prior step to build redux on top of it). Let's see how can we lift up this state: diff --git a/hooks/06_Enable/Readme.md b/hooks/06_Enable/Readme.md index a71a4b3e..1b784daf 100644 --- a/hooks/06_Enable/Readme.md +++ b/hooks/06_Enable/Readme.md @@ -3,7 +3,7 @@ Let's continue with the update name sample, this time we want to disable the "update" button when the input is empty or when the value hasn't changed. -We will take a startup point sample _05 Refactor_ +We will take as startup point sample _05 Refactor_ ## Summary steps: @@ -51,7 +51,7 @@ _./src/nameEdit.tsx_ decide in which cases it should be disabled (thanks to [Victor Borrego](https://github.com/v-borrego) to point out this great solution). We will follow the second approach since is the one that can provide more flexibility to the -control (in a real project, choosing between one approach or the other depends on specfication details). +control (in a real project, choosing between one approach or the other depends on specification details). We will expose a _disabled_ property in the _NameEdit_ component. @@ -97,7 +97,7 @@ npm start # Excercise -Ideas to further implement this, let's convert our NamEdit component to a password +Ideas to further implement this, let's convert our NameEdit component to a password strength component: - Extract the disabled condition to function. diff --git a/hooks/07_ColorPicker/Readme.md b/hooks/07_ColorPicker/Readme.md index 2fd8dba4..2f0096e1 100644 --- a/hooks/07_ColorPicker/Readme.md +++ b/hooks/07_ColorPicker/Readme.md @@ -1,14 +1,13 @@ # 07 Colopicker -In this sample we are going to implement a color picker component, it will allow us to choose -between red / green / blue components and displaty the resulting color. +In this sample we are going to implement a color picker component, it will allow us to choose between red / green / blue components and display the resulting color. -We will start with a non optimal implementation and we will refactor it in sample 09. +We will start with a non optimal implementation and we will refactor it in sample 08. # Steps - We will take as starting point sample _06 Enable_, copy the content from that project and - exectue _npm install_ + execute _npm install_ ```bash npm install @@ -18,7 +17,7 @@ npm install - We will create a components folder under _src_ (_src/components_). -- Inside that components folder we will copy all the components that we have created (_nameEdit_ +- Inside that components folder we will copy all the components that we have created (_nameEdit.tsx_ and _hello.tsx_). - We will create an _index_ file under _src/components_ and create a barrel (by doing this, later @@ -47,7 +46,7 @@ export interface Color { - Let's start by creating a _ColorBrowser_ component: this color will just display the selected color (under the hood is just a div, by applying css styling we provide a width - and height to that rectanble, and a background color). + and height to that rectangle, and a background color). _./src/components/colorBrowser.tsx_ @@ -128,7 +127,7 @@ _./src/app.tsx_ npm start ``` -- We want add color picker editing capabilities, let's create a color picker component +- We want to add color picker editing capabilities, let's create a color picker component and add a single slider for one of the color values. _./src/components/colorpicker.tsx_ diff --git a/hooks/08_ColorPickerRefactor/Readme.md b/hooks/08_ColorPickerRefactor/Readme.md index 4972366a..3597b75a 100644 --- a/hooks/08_ColorPickerRefactor/Readme.md +++ b/hooks/08_ColorPickerRefactor/Readme.md @@ -1,12 +1,12 @@ # 08 Colorpicker Refactor -In this example we are going to review the colorpicker component we have created and simplify it. Right now we have three slider controls with many details that make our HTML hard to read. Let's componentize this scenario. +In this example we are going to review the colorPicker component we have created and simplify it. Right now we have three slider controls with many details that make our HTML hard to read. Let's componentize this scenario. -We take _07 Colorpicker_ as reference. +We take _07 ColorPicker_ as reference. # Steps to reproduce this sample -- Copy the content from _07 Colorpicker_ and execute _npm install_. +- Copy the content from _07 ColorPicker_ and execute _npm install_. ```bash npm install @@ -37,9 +37,9 @@ _DO NOT COPY THIS_ - We will start our refactor by componentizing this piece of code, let's append to the _colorPicker.tsx_ the following component - (another approach could be to create a new file, that's a tetchty decisition, + (another approach could be to create a new file, that's a tetchy decision, on one hand it makes sense to keep in the same file the slider since is quite - related to the picker, on the other segregating in diferent files is another + related to the picker, on the other segregating in different files is another valid approach). _./src/components/colorPicker.tsx_ diff --git a/hooks/09_Sidebar/Readme.md b/hooks/09_Sidebar/Readme.md index 23cfc6f3..be7bddb2 100644 --- a/hooks/09_Sidebar/Readme.md +++ b/hooks/09_Sidebar/Readme.md @@ -12,7 +12,7 @@ implementation, then we will make it generic. npm install ``` -- Create a file called _src/sidebar.css_ and add the following styles (http://www.w3schools.com/howto/howto_js_sidenav.asp): +- Create a file called _src/components/sidebar.css_ and add the following styles (http://www.w3schools.com/howto/howto_js_sidenav.asp): _./src/components/sidebar.css_ @@ -100,10 +100,10 @@ _./webpack.config.js_ ``` -- We are going to create now a sidebar component, _src/sidebar.tsx_. Right now we will create just +- We are going to create now a sidebar component, _src/components/sidebar.tsx_. Right now we will create just a rectangle and we will interact with the animation. -We need to install node typings, since we are goin to make use of _require_ to import from +We need to install node typings, since we are going to make use of _require_ to import from the _css_. ```bash @@ -212,7 +212,7 @@ export const SidebarComponent = (props: Props) =>
``` -- Let's make a quick test we will show always the side bar: +- Let's make a quick test, we will show always the side bar: _./src/app.tsx_ diff --git a/hooks/09_Sidebar/Readme_es.md b/hooks/09_Sidebar/Readme_es.md index 22a75175..109add7b 100644 --- a/hooks/09_Sidebar/Readme_es.md +++ b/hooks/09_Sidebar/Readme_es.md @@ -10,7 +10,7 @@ En este ejemplo vamos a añadir una barra lateral a nuestra aplicación, empezar npm install ``` -- Cree un archivo llamado _src/sidebar.css_ y añada los siguientes estilos (http://www.w3schools.com/howto/howto_js_sidenav.asp): +- Cree un archivo llamado _src/components/sidebar.css_ y añada los siguientes estilos (http://www.w3schools.com/howto/howto_js_sidenav.asp): _./src/components/sidebar.css_ @@ -98,7 +98,7 @@ _./webpack.config.js_ ``` -- Vamos a crear el componente de la barra lateral, _src/sidebar.tsx_. Crearemos sólo +- Vamos a crear el componente de la barra lateral, _src/components/sidebar.tsx_. Crearemos sólo un rectángulo e interactuaremos con la animación. Necesitamos instalar los tipos para _node_, ya que usaremos _require_ a la hora de importar desde el _css_. diff --git a/hooks/10_TableMock/Readme.md b/hooks/10_TableMock/Readme.md index b88a63c7..913c3089 100644 --- a/hooks/10_TableMock/Readme.md +++ b/hooks/10_TableMock/Readme.md @@ -3,7 +3,7 @@ In this sample we are going to show a table with mock data. We will simulate that this method is calling an ajax api (it will return a promise), -by doing this we can check how easy is to replace it by a reall call in the next +by doing this we can check how easy is to replace it by a real call in the next example. # Steps to reproduce the sample @@ -15,8 +15,6 @@ example. npm install ``` -- Let's define a model entity: - - Let's define a model entity in _src/model/member.ts_: _./src/model/member.ts_ @@ -65,7 +63,7 @@ export const getMembersCollection = (): Promise => { > Using promises means you are going to use ES6 or you are going to include a > polyfill to provide compatibility on ES5 (need to install the polifyll and -> include it your wepback entry point). +> include it your webpack entry point). - Let's jump into the ui side, to create the table component we are going to follow a progressive approach: @@ -122,7 +120,7 @@ export const MemberTableComponent = () => { In this component we are doing many things: - First we have created a custom hook to encapsulate the getter to memberCollection and - the loadMemberCollection call to the api, by doing this code is more maintenalbe plus + the loadMemberCollection call to the api, by doing this code is more maintenable plus is a potential effect to be reused in other components. - We just use the custom hook that we have create in the component. @@ -149,7 +147,7 @@ export * from "./sidebar"; + export * from './memberTable'; ``` -- Let's instatiate this component into the app: +- Let's instantiate this component into the app: First we import it @@ -303,7 +301,7 @@ _./src/components/memberTable.tsx_ ``` > Excercise: we could go further with the refactoring, what about creating a -> _TableHeaderComponent_ component and a _tableBodyComponent_ ?. +> _TableHeaderComponent_ component and a _tableBodyComponent_ ? # About Basefactor + Lemoncode diff --git a/hooks/11_TableAxios/Readme.md b/hooks/11_TableAxios/Readme.md index 0c4496ff..4808c875 100644 --- a/hooks/11_TableAxios/Readme.md +++ b/hooks/11_TableAxios/Readme.md @@ -1,18 +1,18 @@ -# 11 Table fetch +# 11 Table Axios -In this sample we are going to update the previous sampe (mock table) and instead of +In this sample we are going to update the previous sample (mock table) and instead of returning mock data, return real data from the github rest api. # Steps to reproduce the sample -- We will take as starting point sample _10 tableMock_, let's copy the content from this +- We will take as starting point sample _10 TableMock_. Let's copy the content from this sample and execute _npm install_. ```bash npm install ``` -- To retrieve data from the Github REST api we will make use of axios, let's install the package +- To retrieve data from the Github REST api we will make use of axios. Let's install the package (no need to install typing, they are already included in the library). ```bash @@ -68,7 +68,7 @@ export const getMembersCollection = (): Promise => { ``` - Aaaand... we don't need to add any update on the rest of the application, why? - The function is providing the same contract it returns a promise, + The function is providing the same contract, it returns a promise, let's give a try: ```bash diff --git a/hooks/12_ReactRouter/Readme.md b/hooks/12_ReactRouter/Readme.md index 3cd8a12b..be86465c 100644 --- a/hooks/12_ReactRouter/Readme.md +++ b/hooks/12_ReactRouter/Readme.md @@ -1,6 +1,6 @@ # 12 React Router -n this sample we will start using React-Router (SPA navigation). +In this sample we will start using React-Router (SPA navigation). We take as a starting point the example _03 State_: @@ -14,7 +14,7 @@ npm install - Let's make some cleanup (remove _src/hello.tsx_ and _src/nameEdit.tsx_ files). -- Let's create a component called _PageA_ as _src/pageA.tsx_: +- Let's create a component called _PageA_ as _src/pages/pageA.tsx_: _./src/pages/pageA.tsx_ @@ -27,7 +27,7 @@ export const PageA = () =>
``` -- Let's create a component called _PageB_ as _src/pageB.tsx_: +- Let's create a component called _PageB_ as _src/pages/pageB.tsx_: _./src/pages/pageB.tsx_ @@ -54,22 +54,29 @@ _./src/app.tsx_ ```diff import * as React from 'react'; import * as ReactDOM from 'react-dom'; -- import { App } from './app'; - import { HelloComponent } from './hello'; +- import { NameEditComponent } from './nameEdit'; + import { HashRouter, Switch, Route } from 'react-router-dom'; + import { PageA } from './pages/pageA'; + import { PageB } from './pages/pageB'; -ReactDOM.render( -- -- -+ -+ -+ -+ -+ -+ , -document.getElementById('root') +export const App = () => { +- const [name, setName] = React.useState("initialName"); + +- const setUsernameState = (event: React.ChangeEvent) => { +- setName(event.target.value); +- }; + return ( + <> +- +- ++ ++ ++ ++ ++ ++ , + ); ``` diff --git a/hooks/12_ReactRouter/src/app.tsx b/hooks/12_ReactRouter/src/app.tsx index c5b284d2..18beb8eb 100644 --- a/hooks/12_ReactRouter/src/app.tsx +++ b/hooks/12_ReactRouter/src/app.tsx @@ -4,11 +4,6 @@ import { PageA } from "./pages/pageA"; import { PageB } from "./pages/pageB"; export const App = () => { - const [name, setName] = React.useState("defaultUserName"); - - const setUsernameState = (event: React.ChangeEvent) => { - setName(event.target.value); - }; return ( <> diff --git a/hooks/12_ReactRouter/src/pages/pageA.tsx b/hooks/12_ReactRouter/src/pages/pageA.tsx index 376961db..1eab2e8c 100644 --- a/hooks/12_ReactRouter/src/pages/pageA.tsx +++ b/hooks/12_ReactRouter/src/pages/pageA.tsx @@ -1,10 +1,9 @@ import * as React from "react"; import { Link } from "react-router-dom"; -export const PageA = () => ( +export const PageA = () =>

Hello from page A


Navigate to Page B
-); diff --git a/hooks/12_ReactRouter/src/pages/pageB.tsx b/hooks/12_ReactRouter/src/pages/pageB.tsx index f21b6c70..39a86dd1 100644 --- a/hooks/12_ReactRouter/src/pages/pageB.tsx +++ b/hooks/12_ReactRouter/src/pages/pageB.tsx @@ -1,10 +1,9 @@ import * as React from "react"; import { Link } from "react-router-dom"; -export const PageB = () => ( +export const PageB = () =>

Hello from page B


Navigate to Page A
-); diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 784f3b10..1e152b96 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -2,9 +2,9 @@ In this sample we are going to implement a basic login page, that will redirect the user to another page whenever the login has completed successfully. -We will attempt to create a realistic layout, in order to keep simplicity we will break it into subcomponents and perform some refactor in order to make the solution more maintenable. +We will attempt to create a realistic layout, in order to keep simplicity we will break it into subcomponents and perform some refactor in order to make the solution more maintainable. -We will take a startup point sample 12 ReactRouter: +We will take a starting point the sample 12 ReactRouter: ## Steps @@ -20,19 +20,19 @@ npm install _./src/pages/loginPage.tsx_ -```javascript +```diff import * as React from "react"; import { Link } from "react-router-dom"; -export const LoginPage = () => { - return ( +- export const PageA = () => ( ++ export const LoginPage = () => (
-

Hello from login Page

+-

Hello from page A

++

Hello from login Page


Navigate to Page B
); -}; ``` - Let's update _app.tsx_ (routes, names and add a redirect from root to login page). @@ -40,27 +40,29 @@ export const LoginPage = () => { _./src/app.tsx_ ```diff -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { HashRouter, Switch, Route } from 'react-router-dom'; +import * as React from "react"; +import { HashRouter, Switch, Route } from "react-router-dom"; - import { PageA } from "./pages/pageA"; + import { LoginPage } from "./pages/loginPage"; import { PageB } from "./pages/pageB"; -ReactDOM.render( - - -- -+ - - - - , - document.getElementById('root') -); +export const App = () => { + + return ( + <> + + +- ++ + + + + + ); +}; ``` -- Let's update as well the navigation from _pageB_ to _loginPage_, _pageB.tsx_. +- Let's update as well the navigation from _pageB_ to _loginPage_. _./src/pages/b/pageB.tsx_ @@ -80,7 +82,7 @@ export const PageB = () => { } ``` -- Let's make a quick test and check that everyting is still working fine. +- Let's make a quick test and check that everything is still working fine. ``` npm start @@ -106,7 +108,7 @@ _./src/index.html_ ``` -- Let's build a proper _login_ layout, _loginPage.tsx_. To build a nice layout, we will install _@material-ui/core_ +- Let's build a proper _login_ layout, _loginPage.tsx_. To build a nice layout, we will install _@material-ui/core_ and _@material-ui/icons_ ```bash npm install @material-ui/core @material-ui/icons --save @@ -118,7 +120,6 @@ _./src/pages/loginPage.tsx_ ```javascript import * as React from "react"; -import { Link } from "react-router-dom"; import { withRouter, RouteComponentProps } from "react-router-dom"; import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; import Card from "@material-ui/core/Card"; @@ -126,7 +127,6 @@ import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; import TextField from "@material-ui/core/TextField"; import Button from "@material-ui/core/Button"; -import { FormHelperText } from "@material-ui/core"; // https://material-ui.com/guides/typescript/ const styles = theme => @@ -164,9 +164,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withStyles(styles)( - withRouter < Props > LoginPageInner -); +export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); ``` - This can be ok, but if we take a deeper look to this component, we could break down into two, one is the card itself the other the form dialog, so it should finally look like: @@ -182,7 +180,7 @@ export const LoginPage = withStyles(styles)( ``` -- Let's create the loginformcomponent (append it to the loginPage file): +- Let's create the LoginForm component (append it to the loginPage file): _./src/pages/loginPage.tsx_ @@ -241,7 +239,7 @@ _./src/pages/loginPage.tsx_ npm start ``` -- Le'ts add the navigation on button clicked, we will do it in two steps. +- Let's add the navigation on button clicked, we will do it in two steps. - First we will expose a method to do that in the loginPage. @@ -279,8 +277,7 @@ const LoginPageInner = (props) => { ) } -- export const LoginPage = withStyles(styles)(LoginPageInner); -+ export const LoginPage = withStyles(styles)(withRouter((LoginPageInner))); +export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); ``` - Let's add the navigation on button clicked (later on we will check for user and pwd) _form.tsx_. @@ -293,33 +290,26 @@ _./src/pages/loginPage.tsx_ +interface PropsForm { + onLogin : () => void; +} - -+export const LoginForm = (props : PropsForm) => { -- export const LoginForm = () => { +-const LoginForm = props => { ++const LoginForm = (props : PropsForm) => { + const { onLogin } = props; - - return ( -
-
-
-
- -
-
- -
-- -- -
-
-
- ); -- } -+}) + return ( +
+ + +- +
+ ); + }; ``` - Let's give a quick try. @@ -330,9 +320,9 @@ npm start Ok, we can navigate whenever we click on the login page. -- Let's keep on progressing, now is time to collect the username and password info, and check if password is valid or not. +- Let's keep on progressing, now it is time to collect the username and password info, and check if password is valid or not. -- Let's define an entity for the loginInfo let's create the following path and file +- Let's define an entity for the loginInfo. Let's create the following path and file _src/model/login.ts_ @@ -348,7 +338,7 @@ export const createEmptyLogin = (): LoginEntity => ({ }); ``` -- Let's add login validation fake restApi: create a folder _src/api_. and a file called _login.ts_ +- Let's add login validation fake restApi: create a folder _src/api_ and a file called _login.ts_ _./src/api/login.ts_ @@ -469,7 +459,6 @@ _./src/common/notification.tsx_ ```javascript import * as React from "react"; -import Button from "@material-ui/core/Button"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; diff --git a/hooks/13_LoginForm/package.json b/hooks/13_LoginForm/package.json index e59398f0..95411205 100644 --- a/hooks/13_LoginForm/package.json +++ b/hooks/13_LoginForm/package.json @@ -19,8 +19,6 @@ "@babel/core": "^7.2.2", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.1", - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", "@types/react": "^16.8.3", "@types/react-dom": "^16.8.1", "@types/react-router-dom": "^4.3.1", @@ -38,6 +36,8 @@ "webpack-dev-server": "^3.1.14" }, "dependencies": { + "@material-ui/core": "^3.9.3", + "@material-ui/icons": "^3.0.2", "react": "^16.8.2", "react-dom": "^16.8.2", "react-router-dom": "^4.3.1" diff --git a/hooks/13_LoginForm/src/common/notification.tsx b/hooks/13_LoginForm/src/common/notification.tsx index bcca8275..baa87c8b 100644 --- a/hooks/13_LoginForm/src/common/notification.tsx +++ b/hooks/13_LoginForm/src/common/notification.tsx @@ -1,5 +1,4 @@ import * as React from "react"; -import Button from "@material-ui/core/Button"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index 03967f30..8081b4f3 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -1,5 +1,4 @@ import * as React from "react"; -import { Link } from "react-router-dom"; import { withRouter, RouteComponentProps } from "react-router-dom"; import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; import Card from "@material-ui/core/Card"; @@ -7,7 +6,6 @@ import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; import TextField from "@material-ui/core/TextField"; import Button from "@material-ui/core/Button"; -import { FormHelperText } from "@material-ui/core"; import { LoginEntity, createEmptyLogin } from "../model/login"; import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index efc1cdcf..f906f597 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -1,4 +1,4 @@ -# 13 Login Form +# 14 Form Validation Let's add validation support to this form. @@ -147,7 +147,7 @@ const LoginPageInner = (props: Props) => { const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); ``` -- Let's fire the validation on viemodel update. +- Let's fire the validation on viewmodel update. _./src/pages/loginPage.tsx_ @@ -172,7 +172,7 @@ const onUpdateLoginField = (name, value) => { + [name]: fieldValidationResult, + }); + }); - } + }; ``` - We need to pass down dataFormErrors @@ -220,7 +220,7 @@ const LoginForm = (props: PropsForm) => { - { - { /> ``` -- let's give a try +- Let's give a try ``` npm start @@ -274,7 +274,7 @@ const onLogin = () => { }; ``` -> Excercise, refactor this method following single abstraction level principle and single resposibility principle. +> Excercise, refactor this method following single abstraction level principle and single responsibility principle. # About Basefactor + Lemoncode diff --git a/hooks/14_FormValidation/package.json b/hooks/14_FormValidation/package.json index 43f3fd93..38362431 100644 --- a/hooks/14_FormValidation/package.json +++ b/hooks/14_FormValidation/package.json @@ -19,8 +19,6 @@ "@babel/core": "^7.2.2", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.1", - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", "@types/react": "^16.8.3", "@types/react-dom": "^16.8.1", "@types/react-router-dom": "^4.3.1", @@ -38,6 +36,8 @@ "webpack-dev-server": "^3.1.14" }, "dependencies": { + "@material-ui/core": "^3.9.2", + "@material-ui/icons": "^3.0.2", "lc-form-validation": "^2.0.0", "react": "^16.8.2", "react-dom": "^16.8.2", diff --git a/hooks/15_Context/Readme.md b/hooks/15_Context/Readme.md index d1b48e30..8ede5a8d 100644 --- a/hooks/15_Context/Readme.md +++ b/hooks/15_Context/Readme.md @@ -4,11 +4,11 @@ In this sample we are going to learn how React 16 context api works. This will allow us to share information between components without having to go through props drilldown or having to add redux support to our project. -We will take a startup point sample 15 Context: +We will take a startup point sample 14 FormValidation: ## Steps -- We want to store just the _login_ field once the user logs in and display it in the page B (or in wathever page or component we need it), let's add a default value ('no user'). +- We want to store just the _login_ field once the user logs in and display it in the page B (or in whatever page or component we need it), let's add a default value ('no user'). - Let's start by creating a context, we will call it _sessionContext_, and add the proper typing @@ -40,7 +40,7 @@ export const SessionContext = _./src/common/sessionContext.tsx_ -Append this to the bottom of the file. +Append this at the bottom of the file. ```typescript export const SessionProvider: React.StatelessComponent = props => { diff --git a/hooks/15_Context/package.json b/hooks/15_Context/package.json index 43f3fd93..38362431 100644 --- a/hooks/15_Context/package.json +++ b/hooks/15_Context/package.json @@ -19,8 +19,6 @@ "@babel/core": "^7.2.2", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.1", - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", "@types/react": "^16.8.3", "@types/react-dom": "^16.8.1", "@types/react-router-dom": "^4.3.1", @@ -38,6 +36,8 @@ "webpack-dev-server": "^3.1.14" }, "dependencies": { + "@material-ui/core": "^3.9.2", + "@material-ui/icons": "^3.0.2", "lc-form-validation": "^2.0.0", "react": "^16.8.2", "react-dom": "^16.8.2", diff --git a/old_class_components_samples/19 LoginForm/package.json b/old_class_components_samples/19 LoginForm/package.json index bddd3a2c..e99aa28b 100644 --- a/old_class_components_samples/19 LoginForm/package.json +++ b/old_class_components_samples/19 LoginForm/package.json @@ -11,8 +11,6 @@ "author": "", "license": "ISC", "devDependencies": { - "@material-ui/core": "^3.9.0", - "@material-ui/icons": "^3.0.2", "@types/react": "^16.4.7", "@types/react-dom": "^16.0.6", "@types/react-router-dom": "^4.3.0", @@ -31,6 +29,8 @@ "webpack-dev-server": "^3.1.5" }, "dependencies": { + "@material-ui/core": "^3.9.0", + "@material-ui/icons": "^3.0.2", "bootstrap": "^4.1.2", "lc-form-validation": "^1.0.0", "react": "16.7.0-alpha.0", diff --git a/old_class_components_samples/19 LoginForm/readme.md b/old_class_components_samples/19 LoginForm/readme.md index 45fe2438..26f7f41c 100644 --- a/old_class_components_samples/19 LoginForm/readme.md +++ b/old_class_components_samples/19 LoginForm/readme.md @@ -30,7 +30,7 @@ npm install - Then, we need to install Material-UI: ``` -npm install @material-ui/core @material-ui/icons --save-dev +npm install @material-ui/core @material-ui/icons --save ``` - We are going to add a new component to show a login form. So, firstly, let's create a new folder under _./src/components_, named _login_. Secondly, we will add there a new file, _loginForm.tsx_, which will contain a form with two text fields and a button from Material-UI. diff --git a/readme.md b/readme.md index 74d6f4f8..4bb8fff9 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ We have incorporated a set of examples based on hooks. Right now you got two main folders: -- [Hooks](./hooks): set of samples migrated to hooks (right now 11 samples migrated), if you are new to +- [Hooks](./hooks): set of samples migrated to hooks (right now 15 samples migrated), if you are new to React, or you are going to start working on a new project, I recommend you going through these examples. @@ -68,7 +68,7 @@ Introduce a basic React concept, handling properties. ### [03 State](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/03_State) -Starting from sample 02, Let's the user change the name to be displayed. +Starting from sample 02, let's the user change the name to be displayed. Introduce a basic React concept, handling State using hooks. @@ -113,6 +113,22 @@ Render a table and use a child component to render each row, using mock data. Starting from sample 10, remove mock data, hit a real REST API (Github api), use axios to perform the fetch call. +### [12 React Router](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_ReactRouter) + +Starting from sample 03,start using React-Router (SPA navigation). + +### [13 Login Form](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) + +Starting from sample 12, implement a basic login page, that will redirect the user to another page whenever the login has completed successfully. + +### [14 Form Validation](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) + +Starting from sample 13, add validation support to login form. + +### [15 Context](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/15_Context) + +Starting from sample 14, learn how React 16 context api works. + ## Old Class folder ### 00 Boiler plate @@ -171,7 +187,7 @@ we will call async operations and fitting them into Redux architecture. Display a busy indicator when an ajax request is in progress. -To have a global count of promises gong on we are using [reat-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) +To have a global count of promises gong on we are using [react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) ### 11 Testing reducers From ac12dbfc6b432e782d02d842f47a132303dcd831 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Mon, 13 May 2019 10:54:56 +0200 Subject: [PATCH 30/80] Update readme.md --- readme.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 4bb8fff9..7625f920 100644 --- a/readme.md +++ b/readme.md @@ -14,12 +14,13 @@ Right now you got two main folders: - [Old_class_components_samples](./old_class_components_samples): The old samples, just in case you need to work with older react versions or you need to maintain legacy code. -You can check as well other repos (react / redux + typescript): +If you want to make a deeper dive on React Hooks you can check this repo [React Hooks By Example](https://github.com/Lemoncode/react-hooks-by-example) + +Other guided repos available (react / redux + typescript): -- [React By Sample](https://github.com/Lemoncode/react-by-sample) - [Redux By Sample](https://github.com/Lemoncode/redux-by-sample) - [From React to Redux](https://github.com/Lemoncode/from-react-to-redux-ts) -- [Redux Testing Typescript](https://github.com/Lemoncode/redux-testing-typescript) +- [Redux Sagas](https://github.com/Lemoncode/redux-sagas-typescript-by-example) # Examples From 23350d78ea263fd8c8b6c542faaaf32814488a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= Date: Thu, 30 May 2019 11:17:16 +0200 Subject: [PATCH 31/80] Changes for use material-ui hooks --- hooks/13_LoginForm/Readme.md | 62 ++++++++++--------- hooks/13_LoginForm/package.json | 6 +- .../13_LoginForm/src/common/notification.tsx | 25 ++++---- hooks/13_LoginForm/src/pages/loginPage.tsx | 16 ++--- 4 files changed, 56 insertions(+), 53 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 1e152b96..acc70ef1 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -121,26 +121,28 @@ _./src/pages/loginPage.tsx_ ```javascript import * as React from "react"; import { withRouter, RouteComponentProps } from "react-router-dom"; -import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; +import makeStyles from "@material-ui/styles/makeStyles"; +import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; import TextField from "@material-ui/core/TextField"; import Button from "@material-ui/core/Button"; -// https://material-ui.com/guides/typescript/ -const styles = theme => +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useStyles = makeStyles(theme => createStyles({ card: { maxWidth: 400, margin: "0 auto" } - }); + }) +); interface Props extends RouteComponentProps, WithStyles {} const LoginPageInner = (props: Props) => { - const { classes } = props; + const classes = useStyles(); return ( @@ -164,7 +166,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); +export const LoginPage = withRouter < Props > LoginPageInner; ``` - This can be ok, but if we take a deeper look to this component, we could break down into two, one is the card itself the other the form dialog, so it should finally look like: @@ -248,16 +250,17 @@ _./src/pages/login/loginPage.tsx_ ```diff // ... -// https://material-ui.com/guides/typescript/ -const styles = theme => createStyles({ - card: { - maxWidth: 400, - margin: '0 auto', - }, -}); +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useStyles = makeStyles(theme => + createStyles({ + card: { + maxWidth: 400, + margin: "0 auto" + } + }) +); -interface Props extends RouteComponentProps, WithStyles { -} +interface Props extends RouteComponentProps {} const LoginPageInner = (props) => { const { classes } = props; @@ -277,7 +280,7 @@ const LoginPageInner = (props) => { ) } -export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); +export const LoginPage = withRouter(LoginPageInner); ``` - Let's add the navigation on button clicked (later on we will check for user and pwd) _form.tsx_. @@ -462,23 +465,26 @@ import * as React from "react"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; -import { withStyles } from "@material-ui/core"; +import createStyles from "@material-ui/core/styles/createStyles"; +import makeStyles from "@material-ui/core/styles/makeStyles"; interface Props { - classes?: any; message: string; show: boolean; onClose: () => void; } -const styles = theme => ({ - close: { - padding: theme.spacing.unit / 2 - } -}); +const useStyles = makeStyles(theme => + createStyles({ + close: { + padding: theme.spacing(0.5) + } + }) +); -const NotificationComponentInner = (props: Props) => { - const { classes, message, show, onClose } = props; +export const NotificationComponent = (props: Props) => { + const { message, show, onClose } = props; + const classes = useStyles(); return ( { /> ); }; - -export const NotificationComponent = withStyles(styles)( - NotificationComponentInner -); ``` - Let's expose this common component via an _index_ file. @@ -535,7 +537,7 @@ const LoginPageInner = (props: Props) => { createEmptyLogin() ); + const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const { classes } = props; + const classes = useStyles(); const onLogin = () => { if (isValidLogin(loginInfo)) { diff --git a/hooks/13_LoginForm/package.json b/hooks/13_LoginForm/package.json index 95411205..05668f87 100644 --- a/hooks/13_LoginForm/package.json +++ b/hooks/13_LoginForm/package.json @@ -29,15 +29,15 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "^3.3.3", + "typescript": "3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.1.14" }, "dependencies": { - "@material-ui/core": "^3.9.3", - "@material-ui/icons": "^3.0.2", + "@material-ui/core": "^4.0.1", + "@material-ui/icons": "^4.0.1", "react": "^16.8.2", "react-dom": "^16.8.2", "react-router-dom": "^4.3.1" diff --git a/hooks/13_LoginForm/src/common/notification.tsx b/hooks/13_LoginForm/src/common/notification.tsx index baa87c8b..097fb3a5 100644 --- a/hooks/13_LoginForm/src/common/notification.tsx +++ b/hooks/13_LoginForm/src/common/notification.tsx @@ -2,23 +2,26 @@ import * as React from "react"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; -import { withStyles } from "@material-ui/core"; +import createStyles from "@material-ui/core/styles/createStyles"; +import makeStyles from "@material-ui/core/styles/makeStyles"; interface Props { - classes?: any; message: string; show: boolean; onClose: () => void; } -const styles = theme => ({ - close: { - padding: theme.spacing.unit / 2 - } -}); +const useStyles = makeStyles(theme => + createStyles({ + close: { + padding: theme.spacing(0.5) + } + }) +); -const NotificationComponentInner = (props: Props) => { - const { classes, message, show, onClose } = props; +export const NotificationComponent = (props: Props) => { + const { message, show, onClose } = props; + const classes = useStyles(); return ( { /> ); }; - -export const NotificationComponent = withStyles(styles)( - NotificationComponentInner -); diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index 8081b4f3..e5b06222 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -1,6 +1,7 @@ import * as React from "react"; import { withRouter, RouteComponentProps } from "react-router-dom"; -import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; +import makeStyles from "@material-ui/styles/makeStyles"; +import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; @@ -10,23 +11,24 @@ import { LoginEntity, createEmptyLogin } from "../model/login"; import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; -// https://material-ui.com/guides/typescript/ -const styles = theme => +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useStyles = makeStyles(theme => createStyles({ card: { maxWidth: 400, margin: "0 auto" } - }); + }) +); -interface Props extends RouteComponentProps, WithStyles {} +interface Props extends RouteComponentProps {} const LoginPageInner = (props: Props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const { classes } = props; + const classes = useStyles(); const onLogin = () => { if (isValidLogin(loginInfo)) { @@ -64,7 +66,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); +export const LoginPage = withRouter(LoginPageInner); interface PropsForm { onLogin: () => void; From e6c0fb91966626b71e2671799c2559d2908c091b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= <43609530+v-borrego@users.noreply.github.com> Date: Thu, 30 May 2019 11:22:10 +0200 Subject: [PATCH 32/80] Update Readme.md --- hooks/13_LoginForm/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index acc70ef1..200ab2b0 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -139,7 +139,7 @@ const useStyles = makeStyles(theme => }) ); -interface Props extends RouteComponentProps, WithStyles {} +interface Props extends RouteComponentProps {} const LoginPageInner = (props: Props) => { const classes = useStyles(); @@ -166,7 +166,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withRouter < Props > LoginPageInner; +export const LoginPage = withRouter(LoginPageInner); ``` - This can be ok, but if we take a deeper look to this component, we could break down into two, one is the card itself the other the form dialog, so it should finally look like: From 1fe8098e277ed6bc50fc98f3e05cb8883e79db73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= Date: Fri, 31 May 2019 19:12:56 +0200 Subject: [PATCH 33/80] Refactor LoginForm to use classes --- hooks/13_LoginForm/src/pages/loginPage.tsx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index e5b06222..05e51a77 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -74,7 +74,19 @@ interface PropsForm { loginInfo: LoginEntity; } +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles(theme => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center" + } + }) +); + const LoginForm = (props: PropsForm) => { + const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea @@ -83,13 +95,7 @@ const LoginForm = (props: PropsForm) => { }; return ( -
+
Date: Fri, 31 May 2019 19:23:00 +0200 Subject: [PATCH 34/80] Update Readme.md - Adding classes to LoginForm component --- hooks/13_LoginForm/Readme.md | 58 +++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 200ab2b0..8671c23e 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -166,7 +166,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withRouter(LoginPageInner); +export const LoginPage = withRouter < Props > LoginPageInner; ``` - This can be ok, but if we take a deeper look to this component, we could break down into two, one is the card itself the other the form dialog, so it should finally look like: @@ -454,6 +454,62 @@ const LoginForm = (props: PropsForm) => { }; ``` +- We will add material-ui classes to LoginForm component. + +_./src/pages/loginPage.tsx_ + +```diff +interface PropsForm { + onLogin: () => void; + onUpdateField: (name: string, value: any) => void; + loginInfo : LoginEntity; +} + ++ // https://material-ui.com/styles/api/#makestyles-styles-options-hook ++ const useFormStyles = makeStyles(theme => ++ createStyles({ ++ formContainer: { ++ display: "flex", ++ flexDirection: "column", ++ justifyContent: "center" ++ } ++ }) ++ ); + +const LoginForm = (props: PropsForm) => { ++ const classes = useFormStyles(); + const { onLogin, onUpdateField, loginInfo } = props; + + // TODO: Enhacement move this outside the stateless component discuss why is a good idea + const onTexFieldChange = (fieldId) => (e) => { + onUpdateField(fieldId, e.target.value); + } + + return ( +-
++
+ + + +
+ ); +}; +``` + - Let's display a notification when the login validation fails. - First we will create a simple notification component, base on _react material ui_ _snackbar_ From a98085878c8bb4ebde505cf8a989dfbbba263338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= Date: Fri, 31 May 2019 19:37:19 +0200 Subject: [PATCH 35/80] Adding material-ui hooks to 14_FormValidation example --- hooks/14_FormValidation/package.json | 6 ++-- .../src/common/notification.tsx | 26 +++++++------- .../14_FormValidation/src/pages/loginPage.tsx | 36 +++++++++++-------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/hooks/14_FormValidation/package.json b/hooks/14_FormValidation/package.json index 38362431..1858735e 100644 --- a/hooks/14_FormValidation/package.json +++ b/hooks/14_FormValidation/package.json @@ -29,15 +29,15 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "^3.3.3", + "typescript": "3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.1.14" }, "dependencies": { - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", + "@material-ui/core": "^4.0.1", + "@material-ui/icons": "^4.0.1", "lc-form-validation": "^2.0.0", "react": "^16.8.2", "react-dom": "^16.8.2", diff --git a/hooks/14_FormValidation/src/common/notification.tsx b/hooks/14_FormValidation/src/common/notification.tsx index bcca8275..3fc14394 100644 --- a/hooks/14_FormValidation/src/common/notification.tsx +++ b/hooks/14_FormValidation/src/common/notification.tsx @@ -1,25 +1,27 @@ import * as React from "react"; -import Button from "@material-ui/core/Button"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; -import { withStyles } from "@material-ui/core"; +import createStyles from "@material-ui/core/styles/createStyles"; +import makeStyles from "@material-ui/core/styles/makeStyles"; interface Props { - classes?: any; message: string; show: boolean; onClose: () => void; } -const styles = theme => ({ - close: { - padding: theme.spacing.unit / 2 - } -}); +const useStyles = makeStyles(theme => + createStyles({ + close: { + padding: theme.spacing(0.5) + } + }) +); -const NotificationComponentInner = (props: Props) => { - const { classes, message, show, onClose } = props; +export const NotificationComponent = (props: Props) => { + const classes = useStyles(); + const { message, show, onClose } = props; return ( { /> ); }; - -export const NotificationComponent = withStyles(styles)( - NotificationComponentInner -); diff --git a/hooks/14_FormValidation/src/pages/loginPage.tsx b/hooks/14_FormValidation/src/pages/loginPage.tsx index 09de60d4..5dce227a 100644 --- a/hooks/14_FormValidation/src/pages/loginPage.tsx +++ b/hooks/14_FormValidation/src/pages/loginPage.tsx @@ -1,7 +1,8 @@ import * as React from "react"; import { Link } from "react-router-dom"; import { withRouter, RouteComponentProps } from "react-router-dom"; -import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; +import makeStyles from "@material-ui/styles/makeStyles"; +import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; @@ -18,16 +19,17 @@ import { import { loginFormValidation } from "./loginPage.validation"; import { TextFieldForm } from "../common"; -// https://material-ui.com/guides/typescript/ -const styles = theme => +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useStyles = makeStyles(theme => createStyles({ card: { maxWidth: 400, margin: "0 auto" } - }); + }) +); -interface Props extends RouteComponentProps, WithStyles {} +interface Props extends RouteComponentProps {} const LoginPageInner = (props: Props) => { const [loginInfo, setLoginInfo] = React.useState( @@ -37,7 +39,7 @@ const LoginPageInner = (props: Props) => { createDefaultLoginFormErrors() ); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const { classes } = props; + const classes = useStyles(); const onLogin = () => { loginFormValidation.validateForm(loginInfo).then(formValidationResult => { @@ -96,7 +98,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); +export const LoginPage = withRouter(LoginPageInner); interface PropsForm { onLogin: () => void; @@ -105,7 +107,19 @@ interface PropsForm { loginFormErrors: LoginFormErrors; } +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles(theme => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center" + } + }) +); + const LoginForm = (props: PropsForm) => { + const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea @@ -114,13 +128,7 @@ const LoginForm = (props: PropsForm) => { }; return ( -
+
Date: Fri, 31 May 2019 19:38:45 +0200 Subject: [PATCH 36/80] Updated NotificationComponent --- hooks/13_LoginForm/src/common/notification.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/src/common/notification.tsx b/hooks/13_LoginForm/src/common/notification.tsx index 097fb3a5..3fc14394 100644 --- a/hooks/13_LoginForm/src/common/notification.tsx +++ b/hooks/13_LoginForm/src/common/notification.tsx @@ -20,8 +20,8 @@ const useStyles = makeStyles(theme => ); export const NotificationComponent = (props: Props) => { - const { message, show, onClose } = props; const classes = useStyles(); + const { message, show, onClose } = props; return ( Date: Fri, 31 May 2019 20:00:25 +0200 Subject: [PATCH 37/80] Adding material-ui hooks to 15_Context example --- hooks/13_LoginForm/Readme.md | 8 ++++- hooks/15_Context/Readme.md | 4 +-- hooks/15_Context/package.json | 6 ++-- hooks/15_Context/src/common/notification.tsx | 26 +++++++------- hooks/15_Context/src/pages/loginPage.tsx | 36 ++++++++++++-------- 5 files changed, 46 insertions(+), 34 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 8671c23e..62837ec3 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -111,7 +111,13 @@ _./src/index.html_ - Let's build a proper _login_ layout, _loginPage.tsx_. To build a nice layout, we will install _@material-ui/core_ and _@material-ui/icons_ ```bash -npm install @material-ui/core @material-ui/icons --save +npm install @material-ui/core@^4.0.1 @material-ui/icons@^4.0.1 --save +``` + +- However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. For this example, we can install _typescript@3.3.3_ version. + +```bash +npm install typescript@3.3.3 --save ``` - Now we could create a login form it could look something like: diff --git a/hooks/15_Context/Readme.md b/hooks/15_Context/Readme.md index 8ede5a8d..38ef6245 100644 --- a/hooks/15_Context/Readme.md +++ b/hooks/15_Context/Readme.md @@ -32,7 +32,7 @@ export const createDefaultUser = (): SessionContextProps => ({ }); export const SessionContext = - React.createContext < SessionContextProps >(createDefaultUser()); + React.createContext < SessionContextProps > createDefaultUser(); ``` - This session context will expose a _provider_ (it will serve us to set the login name in the context), and a _consumer_ (that will let us consume the login name from the context at any point of the application). @@ -140,7 +140,7 @@ const LoginPageInner = (props: Props) => { createDefaultLoginFormErrors() ); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const { classes } = props; + const classes = useStyles(); const onLogin = () => { loginFormValidation.validateForm(loginInfo).then(formValidationResult => { diff --git a/hooks/15_Context/package.json b/hooks/15_Context/package.json index 38362431..1858735e 100644 --- a/hooks/15_Context/package.json +++ b/hooks/15_Context/package.json @@ -29,15 +29,15 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "^3.3.3", + "typescript": "3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.1.14" }, "dependencies": { - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", + "@material-ui/core": "^4.0.1", + "@material-ui/icons": "^4.0.1", "lc-form-validation": "^2.0.0", "react": "^16.8.2", "react-dom": "^16.8.2", diff --git a/hooks/15_Context/src/common/notification.tsx b/hooks/15_Context/src/common/notification.tsx index bcca8275..3fc14394 100644 --- a/hooks/15_Context/src/common/notification.tsx +++ b/hooks/15_Context/src/common/notification.tsx @@ -1,25 +1,27 @@ import * as React from "react"; -import Button from "@material-ui/core/Button"; import Snackbar from "@material-ui/core/Snackbar"; import IconButton from "@material-ui/core/IconButton"; import CloseIcon from "@material-ui/icons/Close"; -import { withStyles } from "@material-ui/core"; +import createStyles from "@material-ui/core/styles/createStyles"; +import makeStyles from "@material-ui/core/styles/makeStyles"; interface Props { - classes?: any; message: string; show: boolean; onClose: () => void; } -const styles = theme => ({ - close: { - padding: theme.spacing.unit / 2 - } -}); +const useStyles = makeStyles(theme => + createStyles({ + close: { + padding: theme.spacing(0.5) + } + }) +); -const NotificationComponentInner = (props: Props) => { - const { classes, message, show, onClose } = props; +export const NotificationComponent = (props: Props) => { + const classes = useStyles(); + const { message, show, onClose } = props; return ( { /> ); }; - -export const NotificationComponent = withStyles(styles)( - NotificationComponentInner -); diff --git a/hooks/15_Context/src/pages/loginPage.tsx b/hooks/15_Context/src/pages/loginPage.tsx index a81f9a4f..a2d10824 100644 --- a/hooks/15_Context/src/pages/loginPage.tsx +++ b/hooks/15_Context/src/pages/loginPage.tsx @@ -1,7 +1,8 @@ import * as React from "react"; import { Link } from "react-router-dom"; import { withRouter, RouteComponentProps } from "react-router-dom"; -import { withStyles, createStyles, WithStyles } from "@material-ui/core/styles"; +import makeStyles from "@material-ui/styles/makestyles"; +import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; @@ -18,16 +19,17 @@ import { import { loginFormValidation } from "./loginPage.validation"; import { TextFieldForm, SessionContext } from "../common"; -// https://material-ui.com/guides/typescript/ -const styles = theme => +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useStyles = makeStyles(theme => createStyles({ card: { maxWidth: 400, margin: "0 auto" } - }); + }) +); -interface Props extends RouteComponentProps, WithStyles {} +interface Props extends RouteComponentProps {} const LoginPageInner = (props: Props) => { const loginContext = React.useContext(SessionContext); @@ -39,7 +41,7 @@ const LoginPageInner = (props: Props) => { createDefaultLoginFormErrors() ); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const { classes } = props; + const classes = useStyles(); const onLogin = () => { loginFormValidation.validateForm(loginInfo).then(formValidationResult => { @@ -99,7 +101,7 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withStyles(styles)(withRouter(LoginPageInner)); +export const LoginPage = withRouter(LoginPageInner); interface PropsForm { onLogin: () => void; @@ -108,7 +110,19 @@ interface PropsForm { loginFormErrors: LoginFormErrors; } +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles(theme => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center" + } + }) +); + const LoginForm = (props: PropsForm) => { + const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea @@ -117,13 +131,7 @@ const LoginForm = (props: PropsForm) => { }; return ( -
+
Date: Sat, 1 Jun 2019 00:40:17 +0200 Subject: [PATCH 38/80] Readme issue fixed --- hooks/13_LoginForm/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 62837ec3..ed57bc7d 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -111,7 +111,7 @@ _./src/index.html_ - Let's build a proper _login_ layout, _loginPage.tsx_. To build a nice layout, we will install _@material-ui/core_ and _@material-ui/icons_ ```bash -npm install @material-ui/core@^4.0.1 @material-ui/icons@^4.0.1 --save +npm install @material-ui/core @material-ui/icons --save ``` - However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. For this example, we can install _typescript@3.3.3_ version. From b8a94893caabbd6964d3cd142ab3f561849ab0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= <43609530+v-borrego@users.noreply.github.com> Date: Sat, 1 Jun 2019 11:24:35 +0200 Subject: [PATCH 39/80] Update Readme.md --- hooks/13_LoginForm/Readme.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index ed57bc7d..50a1d8e5 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -114,11 +114,7 @@ _./src/index.html_ npm install @material-ui/core @material-ui/icons --save ``` -- However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. For this example, we can install _typescript@3.3.3_ version. - -```bash -npm install typescript@3.3.3 --save -``` +- However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. The latest version of typescript at this time (v.3.5.1) shows a TSERROR when using _useStyles()_. If you have the same error, you can solve it temporarily using typescript@3.3.3 version. - Now we could create a login form it could look something like: From c7e021feac9c7103051d33719c7cfb39206f7067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= <43609530+v-borrego@users.noreply.github.com> Date: Sat, 1 Jun 2019 11:25:02 +0200 Subject: [PATCH 40/80] Update package.json --- hooks/13_LoginForm/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/13_LoginForm/package.json b/hooks/13_LoginForm/package.json index 05668f87..d22ed28f 100644 --- a/hooks/13_LoginForm/package.json +++ b/hooks/13_LoginForm/package.json @@ -29,7 +29,7 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "3.3.3", + "typescript": "^3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", From 6ea66ab453f1760f077fea297df3d333c2c7375e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Borrego=20P=C3=A9rez?= Date: Thu, 6 Jun 2019 19:03:03 +0200 Subject: [PATCH 41/80] Updated Readme.md and package.json --- hooks/13_LoginForm/Readme.md | 2 +- hooks/14_FormValidation/package.json | 2 +- hooks/15_Context/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index 50a1d8e5..b505d8ba 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -114,7 +114,7 @@ _./src/index.html_ npm install @material-ui/core @material-ui/icons --save ``` -- However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. The latest version of typescript at this time (v.3.5.1) shows a TSERROR when using _useStyles()_. If you have the same error, you can solve it temporarily using typescript@3.3.3 version. +- However, we must be careful with the compatibility of certain versions of _typescript_ with the new _hooks_ of _material-ui_. For this example, we can install _typescript@3.3.3_ version. You can get more information about this issue in the following link https://github.com/mui-org/material-ui/issues/14018 - Now we could create a login form it could look something like: diff --git a/hooks/14_FormValidation/package.json b/hooks/14_FormValidation/package.json index 1858735e..2914eb69 100644 --- a/hooks/14_FormValidation/package.json +++ b/hooks/14_FormValidation/package.json @@ -29,7 +29,7 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "3.3.3", + "typescript": "^3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", diff --git a/hooks/15_Context/package.json b/hooks/15_Context/package.json index 1858735e..2914eb69 100644 --- a/hooks/15_Context/package.json +++ b/hooks/15_Context/package.json @@ -29,7 +29,7 @@ "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "style-loader": "^0.23.1", - "typescript": "3.3.3", + "typescript": "^3.3.3", "url-loader": "^1.1.2", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", From d2a1e18f91e880893f1da00feac1c86552d66253 Mon Sep 17 00:00:00 2001 From: TaroSunn Date: Sun, 9 Jun 2019 15:02:23 +0800 Subject: [PATCH 42/80] Update Readme.md --- hooks/03_State/Readme.md | 1 - 1 file changed, 1 deletion(-) diff --git a/hooks/03_State/Readme.md b/hooks/03_State/Readme.md index c3f63e2a..d56155d6 100644 --- a/hooks/03_State/Readme.md +++ b/hooks/03_State/Readme.md @@ -134,7 +134,6 @@ _./src/app.tsx_ import * as React from "react"; import { HelloComponent } from "./hello"; import { NameEditComponent } from './nameEdit'; -import { NameEditComponent } from './nameEdit'; export const App = () => { From eccc3284dbc2235e0fea8a0a725473cf4d77265c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ka=C4=9Fan=20EREN?= Date: Mon, 8 Jul 2019 13:25:52 +0300 Subject: [PATCH 43/80] Update colorPicker.tsx Parameter 'value' implicitly has an 'any' type. --- hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx b/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx index ea449834..945ab4c1 100644 --- a/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx +++ b/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx @@ -6,7 +6,7 @@ interface Props { onColorUpdated: (color: Color) => void; } -const updateColor = (props: Props, colorId: keyof Color) => value => { +const updateColor = (props: Props, colorId: keyof Color) => (value: any) => { // keyof Color ensures only 'red', 'blue' or 'green' can be passed in. props.onColorUpdated({ ...props.color, // this creates a clone of the current props.color object... From fa729d295802b44e2406c92dff711608d80b3dbd Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 10:17:05 +0200 Subject: [PATCH 44/80] ref: #187 starting readme Spanish translation --- readme.md | 4 +- readme_es.md | 241 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 readme_es.md diff --git a/readme.md b/readme.md index 7625f920..26e45432 100644 --- a/readme.md +++ b/readme.md @@ -1,14 +1,14 @@ # React Typescript by sample The goal of this project is to provide a set of simple samples, providing and step by step guide to -start working with React and Typescript. +start working with React and TypeScript. We have incorporated a set of examples based on hooks. Right now you got two main folders: - [Hooks](./hooks): set of samples migrated to hooks (right now 15 samples migrated), if you are new to - React, or you are going to start working on a new project, I recommend you going through these + React, or you are going to start working on a new project, We recommend you going through these examples. - [Old_class_components_samples](./old_class_components_samples): The old samples, just in case you need to work with older react diff --git a/readme_es.md b/readme_es.md new file mode 100644 index 00000000..92401985 --- /dev/null +++ b/readme_es.md @@ -0,0 +1,241 @@ +# React Typescript - ejemplos + +El objetivo de este proyecto es ofrecer un set de ejemplos simples, proporcionando una guía paso a paso +para empezar a trabajar con React y TypeScript. + +Hemos incorporado un set de ejemplos basados en hooks. + +Ahora mismo hay dos carpetas principales: + +- [Hooks](./hooks): set de ejemplos migrados a hooks (ahora mismo 15 ejemplos), si eres nuevo en React, o vas a empezar a trabajar en +un nuevo proyecto, Te recomendamos que lo hagas a través de ´estos ejemplos. + +- [Old_class_components_samples](./old_class_components_samples): The old samples, just in case you need to work with older react + versions or you need to maintain legacy code. + +If you want to make a deeper dive on React Hooks you can check this repo [React Hooks By Example](https://github.com/Lemoncode/react-hooks-by-example) + +Other guided repos available (react / redux + typescript): + +- [Redux By Sample](https://github.com/Lemoncode/redux-by-sample) +- [From React to Redux](https://github.com/Lemoncode/from-react-to-redux-ts) +- [Redux Sagas](https://github.com/Lemoncode/redux-sagas-typescript-by-example) + +# Examples + +The goal of this project is to provide a set of simple samples, providing and step by step guide to +start working with React and Typescript. Characteristics: + +- Bundling based on webpack. +- React + Typescript based. +- Simple navigation using react-router. +- Managing async calls and updates. +- Using Redux library (not available yet on hooks version, coming soon). +- Handling async calls via Redux-Thunk + Redux Saga (not available yet on hooks version, coming soon) +- Adding unit testing support (not available yet on hooks version, coming soon). +- Implementing Lazy Loading (not available yet on hooks version, coming soon). +- ... + +## To get started: + +1. Install [NodeJS](http://www.nodejs.org) +2. Download this repo +3. Open the command line of your choice and cd to a sample directory within this repo on your machine +4. `npm install` - Installs packages +5. `npm start` - Builds the project and launch a lite web server (webpack-dev-server). +6. Navigate to [http://localhost:8080/](http://localhost:8080/) if your browser doesn't open automatically. + +# samples + +## Hooks + +### [00 Boiler plate](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/00_BoilerPlate) + +Bundling + npm start based on webpack. + +### [01 Hello React](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/01_HelloReact) + +Display the text 'Hello React'. + +Hello world, simples react render sample. + +### [02 Properties](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/02_Properties) + +Display the text 'Hello {name}' (where name is a prop +that contains a given name). + +Introduce a basic React concept, handling properties. + +### [03 State](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/03_State) + +Starting from sample 02, let's the user change the name to be displayed. + +Introduce a basic React concept, handling State using hooks. + +### [04 Callback](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/04_Callback) + +Starting from sample 03, let the user change the name only +when he hits a _change_ button. + +Using callbacks. + +### [05 Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/05_Refactor) + +Refactor sample 04, cleanup and discussion on where to place the state. + +Refactor the job done. + +### [06 Enable](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/06_Enable) + +Starting from sample 05, enable / disable the _change_ button +when the text is empty or same name as original name,. + +Enable/disable components. + +### [07 ColorPicker](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/07_ColorPicker) + +Simple color picker demo (show how properties work). + +### [08 ColorPicker Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/08_ColorPickerRefactor) + +ColorPicker refactor. + +### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/09_Sidebar) + +Implementation of a single sidebar. + +### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_TableMock) + +Render a table and use a child component to render each row, using mock data. + +### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) + +Starting from sample 10, remove mock data, hit a real REST API (Github api), use +axios to perform the fetch call. + +### [12 React Router](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_ReactRouter) + +Starting from sample 03,start using React-Router (SPA navigation). + +### [13 Login Form](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) + +Starting from sample 12, implement a basic login page, that will redirect the user to another page whenever the login has completed successfully. + +### [14 Form Validation](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) + +Starting from sample 13, add validation support to login form. + +### [15 Context](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/15_Context) + +Starting from sample 14, learn how React 16 context api works. + +## Old Class folder + +### 00 Boiler plate + +Bundling + npm start based on webpack. + +### 01 Hello React + +Hello world, simples react render sample. + +### 02 Components + +Creating a common header and about page react components. + +### 03 Navigation + +Creating a "members" page, adding navigation using react-router. + +### 04 Display data + +Create a read only list component (table >> tr >> td), reading list of members +from a fake api and dumping it into component state. + +### 05 Presentational Components + +Breaking the list component into two: list and row compomenent, member row +entity passed via props. + +### 06 Handling asynchronous calls + +Members fake api replaced with async call to api github to retrieve list of +members of a given team. + +### 07 Forms + +In this sample we will add a link in the members page that will navigate to a +"new member page". This new page will display a form where you have to enter +the avatar url, login and id of a new member (just supossing we can edit that info). + +### 08 ParamNavigation + Validations + +Edit a given member, here we learn how to add params to a navigation link and +how to obtain them from a component. + +Validation performed so far: + +- Login: required, must be a string (at least length 3). + +### 09 Redux + +Added Redux support, isolated state into Redux reducers, implement load, save, +basic validation cycle. This sample uses the fake api, in following samples +we will call async operations and fitting them into Redux architecture. + +### 10 SpinnerAsync + +Display a busy indicator when an ajax request is in progress. + +To have a global count of promises gong on we are using [react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) + +### 11 Testing reducers + +Sample updated using Jest. + +### 12 Testing actions + +Sample updated using Jest. + +### 13 Testing components (Containers and Presentationals) + +Pending update Jest + Enzyme + +### 14 Replacing Redux Thunk with Redux Saga + +Pending update + +### 15 Lazy Loading and React-Router + +Pending update + +### 16 Add custom middlewares + +Pending update + +### 17 Add support for ReactHotloader and ReduxDev Tools. + +Pending update + +### 18 Hooks + +Replace class components by stateless components using Hooks. + +### 19 LoginForm + +Add a login page using Material-UI. + +# Contributors + +Special thanks to [Jehu Sagardoy](https://github.com/jsagardoy) for his contributions checking +and getting uptodate examples. + +# About Basefactor + Lemoncode + +We are an innovating team of Javascript experts, passionate about turning your ideas into robust products. + +[Basefactor, consultancy by Lemoncode](http://www.basefactor.com) provides consultancy and coaching services. + +[Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. + +For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend From b2ef0bf343ab454142a1754229d6a15ee4bf0d81 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 11:22:49 +0200 Subject: [PATCH 45/80] ref: #187 Spanish translation --- readme_es.md | 95 +++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/readme_es.md b/readme_es.md index 92401985..573ae324 100644 --- a/readme_es.md +++ b/readme_es.md @@ -10,126 +10,123 @@ Ahora mismo hay dos carpetas principales: - [Hooks](./hooks): set de ejemplos migrados a hooks (ahora mismo 15 ejemplos), si eres nuevo en React, o vas a empezar a trabajar en un nuevo proyecto, Te recomendamos que lo hagas a través de ´estos ejemplos. -- [Old_class_components_samples](./old_class_components_samples): The old samples, just in case you need to work with older react - versions or you need to maintain legacy code. +- [Old_class_components_samples](./old_class_components_samples): Los ejemplos viejos, sólo en caso de que necesite trabajar en un proyecto de versiones viejas de React o necesites mantener código legacy. -If you want to make a deeper dive on React Hooks you can check this repo [React Hooks By Example](https://github.com/Lemoncode/react-hooks-by-example) +Si quieres sumerjirte más en React Hooks puedes chequear este repo: [React Hooks By Example](https://github.com/Lemoncode/react-hooks-by-example) Other guided repos available (react / redux + typescript): - [Redux By Sample](https://github.com/Lemoncode/redux-by-sample) -- [From React to Redux](https://github.com/Lemoncode/from-react-to-redux-ts) +- [Desde React a Redux](https://github.com/Lemoncode/from-react-to-redux-ts) - [Redux Sagas](https://github.com/Lemoncode/redux-sagas-typescript-by-example) -# Examples +# Ejemplos -The goal of this project is to provide a set of simple samples, providing and step by step guide to -start working with React and Typescript. Characteristics: +Características: -- Bundling based on webpack. -- React + Typescript based. -- Simple navigation using react-router. -- Managing async calls and updates. -- Using Redux library (not available yet on hooks version, coming soon). -- Handling async calls via Redux-Thunk + Redux Saga (not available yet on hooks version, coming soon) -- Adding unit testing support (not available yet on hooks version, coming soon). -- Implementing Lazy Loading (not available yet on hooks version, coming soon). +- Bundling basado en webpack. +- Basado en React + Typescript. +- Navegación simple usando react-router. +- Gestionando llamadas asíncronas y actualizaciones. +- Usando la librería Redux (todavía no está disponible para la version en Hooks, próximamente). +- Manejando llamadas asíncronas vía Redux-Thunk + Redux Saga (todavía no está disponible para la version en Hooks, próximamente). +- Añadiendo sporte para test unitarios (todavía no está disponible para la version en Hooks, próximamente). +- Implementando Lazy Loading (todavía no está disponible para la version en Hooks, próximamente). - ... -## To get started: +## Para empezar: -1. Install [NodeJS](http://www.nodejs.org) -2. Download this repo -3. Open the command line of your choice and cd to a sample directory within this repo on your machine -4. `npm install` - Installs packages -5. `npm start` - Builds the project and launch a lite web server (webpack-dev-server). -6. Navigate to [http://localhost:8080/](http://localhost:8080/) if your browser doesn't open automatically. +1. Instalar [NodeJS](http://www.nodejs.org) +2. Descarga este repo +3. Abre la consola de comandos que prefieras y haz 'cd' en el directorio de ejemplo dentro de este repo en tu máquina. +4. `npm install` - Instalación de los paquetes +5. `npm start` - Build del proyecto y lanza el servidor web (webpack-dev-server). +6. Copia y pega esta dirección en tu navegador [http://localhost:8080/](http://localhost:8080/) si ´éste no se abre automáticamente. -# samples +# muestras ## Hooks ### [00 Boiler plate](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/00_BoilerPlate) -Bundling + npm start based on webpack. +Bundling + npm start basado en webpack. ### [01 Hello React](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/01_HelloReact) -Display the text 'Hello React'. +Muestra el texto 'Hello React'. -Hello world, simples react render sample. +Hello world, muestra siemple de React render. ### [02 Properties](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/02_Properties) -Display the text 'Hello {name}' (where name is a prop -that contains a given name). +Muestra el texto 'Hello {name}' (donde nombre es una propiedad que contiene el nombre). -Introduce a basic React concept, handling properties. +Introducción al concepto básico de React, manejando propiedades. ### [03 State](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/03_State) -Starting from sample 02, let's the user change the name to be displayed. +Empezando desde la muestra 02, permite que el usuario cambie el nombre que se muestra. -Introduce a basic React concept, handling State using hooks. +Introducción al concepto básico de React, manejando el Estado (State) usando Hooks. ### [04 Callback](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/04_Callback) -Starting from sample 03, let the user change the name only +Empezando desde la nuestra 03, permite que el usario cambie la propiedad name solo cuando presiona sobre el botón _change_ . when he hits a _change_ button. -Using callbacks. +Usando callbacks. ### [05 Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/05_Refactor) -Refactor sample 04, cleanup and discussion on where to place the state. +Refactor de la muestra 04, Limpieza y discusión sobre dónde debe estar el estado. -Refactor the job done. +Reafactorizar el trabajo realizado. ### [06 Enable](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/06_Enable) -Starting from sample 05, enable / disable the _change_ button -when the text is empty or same name as original name,. +Empezando desde la nuestra 05, enable / disable del botón _change_ +cuando el texto está vacío o tiene el mismo nombre que originalmente,. -Enable/disable components. +Componentes Enable/disable ### [07 ColorPicker](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/07_ColorPicker) -Simple color picker demo (show how properties work). +demo simple de color picker (muestras cómo funcionan las propiedades). ### [08 ColorPicker Refactor](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/08_ColorPickerRefactor) -ColorPicker refactor. +ColorPicker refactorizado. ### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/09_Sidebar) -Implementation of a single sidebar. +Simple implementación de un menú lateral. ### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_TableMock) -Render a table and use a child component to render each row, using mock data. +Renderiza una tabla y usa un componente hijo para renderizar cada fila, usando un mock de datos. ### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) -Starting from sample 10, remove mock data, hit a real REST API (Github api), use -axios to perform the fetch call. +Empezando desde la nuestra 10, elimina el mock de datos, utiliza una REST API real (api Github), utiliza axios para mejorar el rendimiento de la llamada fetch. ### [12 React Router](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_ReactRouter) -Starting from sample 03,start using React-Router (SPA navigation). +Empezando desde la nuestra 03, empezando a utilizar React-Router (navegación SPA). ### [13 Login Form](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) -Starting from sample 12, implement a basic login page, that will redirect the user to another page whenever the login has completed successfully. +Empezando desde la nuestra 12, implementa una página de login básica, que redireccione al usuario a otra página cuando el login haya completado satisfactoriamente. ### [14 Form Validation](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) -Starting from sample 13, add validation support to login form. +Empezando desde la nuestra 13, añadir validaciones al formulario de login. ### [15 Context](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/15_Context) -Starting from sample 14, learn how React 16 context api works. +SEmpezando desde la nuestra 14, learn how React 16 context api works. +SEmpezando desde la nuestra 14, emprender cómo funciona la API de React 16 Context. -## Old Class folder +## Carpeta class vieja ### 00 Boiler plate From 4393d3bdd380733cb9e4e5934bc1174e5f216539 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 12:06:35 +0200 Subject: [PATCH 46/80] ref: #187 Spanish translations and links to readme files --- readme.md | 4 +++- readme_es.md | 49 ++++++++++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/readme.md b/readme.md index 26e45432..62ff986a 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,7 @@ # React Typescript by sample +[🇪🇸 Versión Español](./readme_es.md) + The goal of this project is to provide a set of simple samples, providing and step by step guide to start working with React and TypeScript. @@ -161,7 +163,7 @@ entity passed via props. ### 06 Handling asynchronous calls Members fake api replaced with async call to api github to retrieve list of -members of a given team. +members of a given organization. ### 07 Forms diff --git a/readme_es.md b/readme_es.md index 573ae324..413f504a 100644 --- a/readme_es.md +++ b/readme_es.md @@ -1,5 +1,7 @@ # React Typescript - ejemplos +[🇬🇧 English version](./readme.md) + El objetivo de este proyecto es ofrecer un set de ejemplos simples, proporcionando una guía paso a paso para empezar a trabajar con React y TypeScript. @@ -71,8 +73,8 @@ Introducción al concepto básico de React, manejando el Estado (State) usando H ### [04 Callback](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/04_Callback) -Empezando desde la nuestra 03, permite que el usario cambie la propiedad name solo cuando presiona sobre el botón _change_ . -when he hits a _change_ button. +Empezando desde la nuestra 03, permite que el usario cambie la propiedad name +solo cuando presiona sobre el botón _change_ . Usando callbacks. @@ -107,7 +109,8 @@ Renderiza una tabla y usa un componente hijo para renderizar cada fila, usando u ### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) -Empezando desde la nuestra 10, elimina el mock de datos, utiliza una REST API real (api Github), utiliza axios para mejorar el rendimiento de la llamada fetch. +Empezando desde la nuestra 10, elimina el mock de datos, utiliza una REST API real (api Github), +utiliza axios para mejorar el rendimiento de la llamada fetch. ### [12 React Router](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/12_ReactRouter) @@ -115,7 +118,8 @@ Empezando desde la nuestra 03, empezando a utilizar React-Router (navegación SP ### [13 Login Form](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) -Empezando desde la nuestra 12, implementa una página de login básica, que redireccione al usuario a otra página cuando el login haya completado satisfactoriamente. +Empezando desde la nuestra 12, implementa una página de login básica, +que redireccione al usuario a otra página cuando el login haya completado satisfactoriamente. ### [14 Form Validation](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) @@ -130,49 +134,48 @@ SEmpezando desde la nuestra 14, emprender cómo funciona la API de React 16 Cont ### 00 Boiler plate -Bundling + npm start based on webpack. +Bundling + npm start basado en webpack. ### 01 Hello React -Hello world, simples react render sample. +Hello world, muestra siemple de React render. ### 02 Components -Creating a common header and about page react components. +Creando una cabecera común y una página 'about' con componentes de React. ### 03 Navigation -Creating a "members" page, adding navigation using react-router. +Creando una página de "miembros", añadir navegación usando react-router. ### 04 Display data -Create a read only list component (table >> tr >> td), reading list of members -from a fake api and dumping it into component state. +Crear un componenente de lista de 'sólo lectura' (table >> tr >> td), +leer una lista de miembros desde una API falsa y añadirlos dentro del componente 'state' ### 05 Presentational Components -Breaking the list component into two: list and row compomenent, member row -entity passed via props. +Dividir el componente de lista en dos: componente de Lista y Fila, +pasar la entidad del miembro a través de las 'props' del componente. ### 06 Handling asynchronous calls -Members fake api replaced with async call to api github to retrieve list of -members of a given team. +Reemplazar la API false con una llamada asíncrona a la API de github y obtener la lista de miembros de una organización. ### 07 Forms -In this sample we will add a link in the members page that will navigate to a -"new member page". This new page will display a form where you have to enter -the avatar url, login and id of a new member (just supossing we can edit that info). +En esta muestra añadiremos un link en la página de miembros que navegará hacia la 'página del miembro'. +Esta nueva página mostrará un formulario donde tendrás que introducir la url del avatar, el 'login' y el 'id' +del nuevo miembro (sólo suponiendo que podemos añadir esa info). ### 08 ParamNavigation + Validations -Edit a given member, here we learn how to add params to a navigation link and -how to obtain them from a component. +Editar un miembro seleccionado, aquí aprenderemos cómo añadir parámetros al link de navegación +y cómo obtenerlo desde el componente. -Validation performed so far: +La validación realizada hasta ahora: -- Login: required, must be a string (at least length 3). +- Login: requerido, debe ser una cadena de texto (al menos 3 caracteres de longitud). ### 09 Redux @@ -180,6 +183,10 @@ Added Redux support, isolated state into Redux reducers, implement load, save, basic validation cycle. This sample uses the fake api, in following samples we will call async operations and fitting them into Redux architecture. +Añadido soporte para Redux, estado aislado en 'Redux reducers', implementa carga, guardar, +ciclo de validación simple. Esta muestra usa una API falsa, en las siguientes muentras +haremos llamadas a operaciones asíncronas y las ajustaremos dentro de la arquitectura de Redux. + ### 10 SpinnerAsync Display a busy indicator when an ajax request is in progress. From 3a3c67b60486e43d46e01998e8c7b0bb3772b401 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 12:08:10 +0200 Subject: [PATCH 47/80] ref: #187 Spanish translations --- readme_es.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/readme_es.md b/readme_es.md index 413f504a..46855edd 100644 --- a/readme_es.md +++ b/readme_es.md @@ -179,10 +179,6 @@ La validación realizada hasta ahora: ### 09 Redux -Added Redux support, isolated state into Redux reducers, implement load, save, -basic validation cycle. This sample uses the fake api, in following samples -we will call async operations and fitting them into Redux architecture. - Añadido soporte para Redux, estado aislado en 'Redux reducers', implementa carga, guardar, ciclo de validación simple. Esta muestra usa una API falsa, en las siguientes muentras haremos llamadas a operaciones asíncronas y las ajustaremos dentro de la arquitectura de Redux. From a53071240b6c73602f692e9ad3fd3ac7d3ae8058 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 12:31:56 +0200 Subject: [PATCH 48/80] ref: #187 Spanish translations --- readme.md | 6 ++-- readme_es.md | 79 ++++++++++++++++++++++++++-------------------------- 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/readme.md b/readme.md index 62ff986a..b53b7d93 100644 --- a/readme.md +++ b/readme.md @@ -188,9 +188,11 @@ we will call async operations and fitting them into Redux architecture. ### 10 SpinnerAsync -Display a busy indicator when an ajax request is in progress. +Display a busy indicator while an ajax request is in progress. -To have a global count of promises gong on we are using [react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) +To have a global count of promises gong on we are using +[react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) +and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) ### 11 Testing reducers diff --git a/readme_es.md b/readme_es.md index 46855edd..62d02455 100644 --- a/readme_es.md +++ b/readme_es.md @@ -59,7 +59,7 @@ Muestra el texto 'Hello React'. Hello world, muestra siemple de React render. -### [02 Properties](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/02_Properties) +### [02 Propiedades](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/02_Properties) Muestra el texto 'Hello {name}' (donde nombre es una propiedad que contiene el nombre). @@ -99,15 +99,15 @@ demo simple de color picker (muestras cómo funcionan las propiedades). ColorPicker refactorizado. -### [09 Sidebar](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/09_Sidebar) +### [09 menú lateral](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/09_Sidebar) Simple implementación de un menú lateral. -### [10 Table Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_TableMock) +### [10 Tabla Mock](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/10_TableMock) Renderiza una tabla y usa un componente hijo para renderizar cada fila, usando un mock de datos. -### [11 Table Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) +### [11 Tabla Axios](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/11_TableAxios) Empezando desde la nuestra 10, elimina el mock de datos, utiliza una REST API real (api Github), utiliza axios para mejorar el rendimiento de la llamada fetch. @@ -116,12 +116,12 @@ utiliza axios para mejorar el rendimiento de la llamada fetch. Empezando desde la nuestra 03, empezando a utilizar React-Router (navegación SPA). -### [13 Login Form](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) +### [13 Formulario Login](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/13_LoginForm) Empezando desde la nuestra 12, implementa una página de login básica, que redireccione al usuario a otra página cuando el login haya completado satisfactoriamente. -### [14 Form Validation](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) +### [14 Validación de formulario](https://github.com/Lemoncode/react-typescript-samples/tree/master/hooks/14_FormValidation) Empezando desde la nuestra 13, añadir validaciones al formulario de login. @@ -140,35 +140,35 @@ Bundling + npm start basado en webpack. Hello world, muestra siemple de React render. -### 02 Components +### 02 Componentes Creando una cabecera común y una página 'about' con componentes de React. -### 03 Navigation +### 03 Navegación Creando una página de "miembros", añadir navegación usando react-router. -### 04 Display data +### 04 Motrar datos Crear un componenente de lista de 'sólo lectura' (table >> tr >> td), leer una lista de miembros desde una API falsa y añadirlos dentro del componente 'state' -### 05 Presentational Components +### 05 Prensentación de componentes Dividir el componente de lista en dos: componente de Lista y Fila, pasar la entidad del miembro a través de las 'props' del componente. -### 06 Handling asynchronous calls +### 06 Manejando llamadas asíncronas Reemplazar la API false con una llamada asíncrona a la API de github y obtener la lista de miembros de una organización. -### 07 Forms +### 07 Formularios En esta muestra añadiremos un link en la página de miembros que navegará hacia la 'página del miembro'. Esta nueva página mostrará un formulario donde tendrás que introducir la url del avatar, el 'login' y el 'id' del nuevo miembro (sólo suponiendo que podemos añadir esa info). -### 08 ParamNavigation + Validations +### 08 Parámetros de navegación + Validaciones Editar un miembro seleccionado, aquí aprenderemos cómo añadir parámetros al link de navegación y cómo obtenerlo desde el componente. @@ -185,57 +185,58 @@ haremos llamadas a operaciones asíncronas y las ajustaremos dentro de la arquit ### 10 SpinnerAsync -Display a busy indicator when an ajax request is in progress. +Muestra un indicador de carga mientras la petición ajax está en progreso. -To have a global count of promises gong on we are using [react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) and to display a cool spinner [react-spinner](https://github.com/davidhu2000/react-spinners) +Para tener un recuento global de las promesas que estamos usando +[react-promise-tracker](https://github.com/Lemoncode/react-promise-tracker) +y mostras un bonito spinner [react-spinner](https://github.com/davidhu2000/react-spinners) -### 11 Testing reducers +### 11 Testeando reducers -Sample updated using Jest. +Muestra actualizada usando Jest. -### 12 Testing actions +### 12 Testeando acciones -Sample updated using Jest. +Muestra actualizada usando Jest. -### 13 Testing components (Containers and Presentationals) +### 13 Testeando componentes (Contenedores y presentaciones) -Pending update Jest + Enzyme +Pendiente de actualizar Jest + Enzyme -### 14 Replacing Redux Thunk with Redux Saga +### 14 Reemplazando Redux Thunk con Redux Saga -Pending update +Pendiente de actualizar -### 15 Lazy Loading and React-Router +### 15 Lazy Loading y React-Router -Pending update +Pendiente de actualizar -### 16 Add custom middlewares +### 16 Añadir middlewares personalizados -Pending update +Pendiente de actualizar -### 17 Add support for ReactHotloader and ReduxDev Tools. +### 17 Añadir soporte para ReactHotloader y herramientas ReduxDev -Pending update +Pendiente de actualizar ### 18 Hooks Replace class components by stateless components using Hooks. -### 19 LoginForm +### 19 Formulario Login -Add a login page using Material-UI. +Añadir página de Login usando AMaterial-UI. -# Contributors +# Colaboradores -Special thanks to [Jehu Sagardoy](https://github.com/jsagardoy) for his contributions checking -and getting uptodate examples. +Gracias, en especial a [Jehu Sagardoy](https://github.com/jsagardoy) por su colaboración, revisión y actualizaciones de los ejemplos. -# About Basefactor + Lemoncode +# Sobre Basefactor + Lemoncode -We are an innovating team of Javascript experts, passionate about turning your ideas into robust products. +Somos un equipo innovador de expertos en JavaScript, apasionados en convertir tus ideas en productos robustos y consistentes. -[Basefactor, consultancy by Lemoncode](http://www.basefactor.com) provides consultancy and coaching services. +[Basefactor, consultoría por Lemoncode](http://www.basefactor.com) proporciona servicios de consultoría y servicios de orientación. -[Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. +[Lemoncode](http://lemoncode.net/services/en/#en-home) proporciona servicios de formación. -For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend +Para la audiencia de LATAM/España estamos llevando a cabo un Master Online Front End, más info: [http://lemoncode.net/master-frontend](http://lemoncode.net/master-frontend) From 942d642e0f036f0e5ededf4263fe96565d0e59e5 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 13:02:42 +0200 Subject: [PATCH 49/80] ref: #187 Spanish translations --- readme_es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme_es.md b/readme_es.md index 62d02455..5df6c0e1 100644 --- a/readme_es.md +++ b/readme_es.md @@ -16,7 +16,7 @@ un nuevo proyecto, Te recomendamos que lo hagas a través de ´estos ejemplos. Si quieres sumerjirte más en React Hooks puedes chequear este repo: [React Hooks By Example](https://github.com/Lemoncode/react-hooks-by-example) -Other guided repos available (react / redux + typescript): +Otros repos guiados disponibles (React / Redux + TypeScript): - [Redux By Sample](https://github.com/Lemoncode/redux-by-sample) - [Desde React a Redux](https://github.com/Lemoncode/from-react-to-redux-ts) From 70d927e35cd11671352473b7ea9907288b6d4e12 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 15:57:09 +0200 Subject: [PATCH 50/80] ref: #187 Spanish translations --- readme.md | 3 ++- readme_es.md | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index b53b7d93..7f214748 100644 --- a/readme.md +++ b/readme.md @@ -243,4 +243,5 @@ We are an innovating team of Javascript experts, passionate about turning your i [Lemoncode](http://lemoncode.net/services/en/#en-home) provides training services. -For the LATAM/Spanish audience we are running an Online Front End Master degree, more info: http://lemoncode.net/master-frontend +For the LATAM/Spanish audience we are running an Online Front End Master degree, +more info: [http://lemoncode.net/master-frontend](http://lemoncode.net/master-frontend) diff --git a/readme_es.md b/readme_es.md index 5df6c0e1..0940ba3a 100644 --- a/readme_es.md +++ b/readme_es.md @@ -36,7 +36,7 @@ Características: - Implementando Lazy Loading (todavía no está disponible para la version en Hooks, próximamente). - ... -## Para empezar: +## Para empezar 1. Instalar [NodeJS](http://www.nodejs.org) 2. Descarga este repo @@ -239,4 +239,5 @@ Somos un equipo innovador de expertos en JavaScript, apasionados en convertir tu [Lemoncode](http://lemoncode.net/services/en/#en-home) proporciona servicios de formación. -Para la audiencia de LATAM/España estamos llevando a cabo un Master Online Front End, más info: [http://lemoncode.net/master-frontend](http://lemoncode.net/master-frontend) +Para la audiencia de LATAM/España estamos llevando a cabo un Master Online Front End, más info: +[http://lemoncode.net/master-frontend](http://lemoncode.net/master-frontend) From 333e5d7e4712b4bf35fc48a91b416d685589cf4c Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 16:18:47 +0200 Subject: [PATCH 51/80] ref: #187 update 00 package.json --- hooks/00_BoilerPlate/package.json | 33 +++++++++++++------------- hooks/00_BoilerPlate/webpack.config.js | 29 +++++++++++----------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/hooks/00_BoilerPlate/package.json b/hooks/00_BoilerPlate/package.json index a259e937..fa5fa952 100644 --- a/hooks/00_BoilerPlate/package.json +++ b/hooks/00_BoilerPlate/package.json @@ -10,26 +10,27 @@ "keywords": [ "react", "typescript", - "hooks" + "hooks", + "lemoncode" ], "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" } } diff --git a/hooks/00_BoilerPlate/webpack.config.js b/hooks/00_BoilerPlate/webpack.config.js index bf1cad6c..08e2685c 100644 --- a/hooks/00_BoilerPlate/webpack.config.js +++ b/hooks/00_BoilerPlate/webpack.config.js @@ -8,12 +8,12 @@ var basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./main.ts"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From ecf553d4fef748e78f1b59e9f559008a087d8037 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 17:02:36 +0200 Subject: [PATCH 52/80] ref: #187 update 01 package.json --- hooks/01_HelloReact/package.json | 38 +++++++++++++-------------- hooks/01_HelloReact/webpack.config.js | 29 ++++++++++---------- 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/hooks/01_HelloReact/package.json b/hooks/01_HelloReact/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/01_HelloReact/package.json +++ b/hooks/01_HelloReact/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/01_HelloReact/webpack.config.js b/hooks/01_HelloReact/webpack.config.js index 31ab3dba..e4f92b3e 100644 --- a/hooks/01_HelloReact/webpack.config.js +++ b/hooks/01_HelloReact/webpack.config.js @@ -8,12 +8,12 @@ var basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From cca0948b99cff770a24c8e20081d740cd580fb21 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 17:03:01 +0200 Subject: [PATCH 53/80] ref: #187 update 00 package.json --- hooks/00_BoilerPlate/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hooks/00_BoilerPlate/package.json b/hooks/00_BoilerPlate/package.json index fa5fa952..12b2f5b2 100644 --- a/hooks/00_BoilerPlate/package.json +++ b/hooks/00_BoilerPlate/package.json @@ -10,8 +10,7 @@ "keywords": [ "react", "typescript", - "hooks", - "lemoncode" + "hooks" ], "author": "Braulio Diez Botella", "license": "MIT", From d38144d14eb55945b78299fdaaf6b27f3fc2d491 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 23:10:49 +0200 Subject: [PATCH 54/80] ref: #187 update 01,02 package.json --- hooks/00_BoilerPlate/webpack.config.js | 10 +++---- hooks/01_HelloReact/webpack.config.js | 10 +++---- hooks/02_Properties/package.json | 38 ++++++++++++------------- hooks/02_Properties/webpack.config.js | 39 +++++++++++++------------- 4 files changed, 49 insertions(+), 48 deletions(-) diff --git a/hooks/00_BoilerPlate/webpack.config.js b/hooks/00_BoilerPlate/webpack.config.js index 08e2685c..37715722 100644 --- a/hooks/00_BoilerPlate/webpack.config.js +++ b/hooks/00_BoilerPlate/webpack.config.js @@ -1,9 +1,9 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), diff --git a/hooks/01_HelloReact/webpack.config.js b/hooks/01_HelloReact/webpack.config.js index e4f92b3e..32eff849 100644 --- a/hooks/01_HelloReact/webpack.config.js +++ b/hooks/01_HelloReact/webpack.config.js @@ -1,9 +1,9 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), diff --git a/hooks/02_Properties/package.json b/hooks/02_Properties/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/02_Properties/package.json +++ b/hooks/02_Properties/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/02_Properties/webpack.config.js b/hooks/02_Properties/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/02_Properties/webpack.config.js +++ b/hooks/02_Properties/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From 5aca3e49691aefe2e65df146fa061aa51c1209b0 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Mon, 20 Jul 2020 23:17:28 +0200 Subject: [PATCH 55/80] ref: #187 update 03,04 package.json --- hooks/03_State/package.json | 38 ++++++++++++++-------------- hooks/03_State/webpack.config.js | 39 +++++++++++++++-------------- hooks/04_Callback/package.json | 38 ++++++++++++++-------------- hooks/04_Callback/webpack.config.js | 39 +++++++++++++++-------------- 4 files changed, 78 insertions(+), 76 deletions(-) diff --git a/hooks/03_State/package.json b/hooks/03_State/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/03_State/package.json +++ b/hooks/03_State/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/03_State/webpack.config.js b/hooks/03_State/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/03_State/webpack.config.js +++ b/hooks/03_State/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/04_Callback/package.json b/hooks/04_Callback/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/04_Callback/package.json +++ b/hooks/04_Callback/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/04_Callback/webpack.config.js b/hooks/04_Callback/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/04_Callback/webpack.config.js +++ b/hooks/04_Callback/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From 84ba4e55eb18c0344bf3dbf4a1fad1c6827f687d Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 09:57:23 +0200 Subject: [PATCH 56/80] ref: #187 update 05 - 09 and translations --- hooks/05_Refactor/package.json | 38 +++++++------- hooks/05_Refactor/webpack.config.js | 39 ++++++++------- hooks/06_Enable/package.json | 38 +++++++------- hooks/06_Enable/webpack.config.js | 39 ++++++++------- hooks/07_ColorPicker/package.json | 38 +++++++------- hooks/07_ColorPicker/webpack.config.js | 39 ++++++++------- hooks/08_ColorPickerRefactor/package.json | 38 +++++++------- .../08_ColorPickerRefactor/webpack.config.js | 39 ++++++++------- hooks/09_Sidebar/package.json | 40 +++++++-------- hooks/09_Sidebar/webpack.config.js | 50 +++++++++---------- 10 files changed, 199 insertions(+), 199 deletions(-) diff --git a/hooks/05_Refactor/package.json b/hooks/05_Refactor/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/05_Refactor/package.json +++ b/hooks/05_Refactor/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/05_Refactor/webpack.config.js b/hooks/05_Refactor/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/05_Refactor/webpack.config.js +++ b/hooks/05_Refactor/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/06_Enable/package.json b/hooks/06_Enable/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/06_Enable/package.json +++ b/hooks/06_Enable/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/06_Enable/webpack.config.js b/hooks/06_Enable/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/06_Enable/webpack.config.js +++ b/hooks/06_Enable/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/07_ColorPicker/package.json b/hooks/07_ColorPicker/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/07_ColorPicker/package.json +++ b/hooks/07_ColorPicker/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/07_ColorPicker/webpack.config.js b/hooks/07_ColorPicker/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/07_ColorPicker/webpack.config.js +++ b/hooks/07_ColorPicker/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/08_ColorPickerRefactor/package.json b/hooks/08_ColorPickerRefactor/package.json index bfa0e4eb..264e71d2 100644 --- a/hooks/08_ColorPickerRefactor/package.json +++ b/hooks/08_ColorPickerRefactor/package.json @@ -15,27 +15,27 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/08_ColorPickerRefactor/webpack.config.js b/hooks/08_ColorPickerRefactor/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/08_ColorPickerRefactor/webpack.config.js +++ b/hooks/08_ColorPickerRefactor/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/09_Sidebar/package.json b/hooks/09_Sidebar/package.json index eadce68d..40171b2f 100644 --- a/hooks/09_Sidebar/package.json +++ b/hooks/09_Sidebar/package.json @@ -15,28 +15,28 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/node": "^11.9.4", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index eebdc585..7420e37f 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx", ".css"] + extensions: [".js", ".ts", ".tsx", ".css"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,13 +31,8 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } - }, - { - test: /\.css$/, - include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, @@ -49,30 +44,31 @@ module.exports = { options: { modules: true, localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true - } - } - ] + camelCase: true, + }, + }, + ], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From 121ac7c9e4a726dd7b6c5dbae68ed254f1f9fa68 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 10:01:55 +0200 Subject: [PATCH 57/80] ref: #187 update 09, 10 and translations --- hooks/09_Sidebar/webpack.config.js | 5 ++++ hooks/10_TableMock/package.json | 40 ++++++++++++------------- hooks/10_TableMock/webpack.config.js | 45 ++++++++++++++-------------- readme.md | 5 ++-- readme_es.md | 4 ++- 5 files changed, 54 insertions(+), 45 deletions(-) diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index 7420e37f..750f00af 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -34,6 +34,11 @@ module.exports = { babelCore: "@babel/core", // needed for Babel v7 }, }, + { + test: /\.css$/, + include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"] + }, { test: /\.css$/, exclude: /node_modules/, diff --git a/hooks/10_TableMock/package.json b/hooks/10_TableMock/package.json index eadce68d..40171b2f 100644 --- a/hooks/10_TableMock/package.json +++ b/hooks/10_TableMock/package.json @@ -15,28 +15,28 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/node": "^11.9.4", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2" + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/10_TableMock/webpack.config.js b/hooks/10_TableMock/webpack.config.js index eebdc585..750f00af 100644 --- a/hooks/10_TableMock/webpack.config.js +++ b/hooks/10_TableMock/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx", ".css"] + extensions: [".js", ".ts", ".tsx", ".css"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,8 +31,8 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, @@ -49,30 +49,31 @@ module.exports = { options: { modules: true, localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true - } - } - ] + camelCase: true, + }, + }, + ], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/readme.md b/readme.md index 7f214748..e728a6aa 100644 --- a/readme.md +++ b/readme.md @@ -232,8 +232,9 @@ Add a login page using Material-UI. # Contributors -Special thanks to [Jehu Sagardoy](https://github.com/jsagardoy) for his contributions checking -and getting uptodate examples. +Thank you very much to the contributors for keeping the project updated in all the examples. + +- [Jehu Sagardoy](https://github.com/jsagardoy) # About Basefactor + Lemoncode diff --git a/readme_es.md b/readme_es.md index 0940ba3a..baccb55e 100644 --- a/readme_es.md +++ b/readme_es.md @@ -229,7 +229,9 @@ Añadir página de Login usando AMaterial-UI. # Colaboradores -Gracias, en especial a [Jehu Sagardoy](https://github.com/jsagardoy) por su colaboración, revisión y actualizaciones de los ejemplos. +Muchas gracias a los colaborades por mantener el proyecto actualizado en todos los ejemplos. + +- [Jehu Sagardoy](https://github.com/jsagardoy) # Sobre Basefactor + Lemoncode From 034ec6a27d935261a478a8a2547d8dbd49979ae4 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 10:27:00 +0200 Subject: [PATCH 58/80] ref: #187 update 09, 11 webpack --- hooks/09_Sidebar/webpack.config.js | 5 --- hooks/11_TableAxios/.babelrc | 7 ++-- hooks/11_TableAxios/package.json | 46 +++++++++++++----------- hooks/11_TableAxios/webpack.config.js | 50 ++++++++++++--------------- 4 files changed, 53 insertions(+), 55 deletions(-) diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index 750f00af..7420e37f 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -34,11 +34,6 @@ module.exports = { babelCore: "@babel/core", // needed for Babel v7 }, }, - { - test: /\.css$/, - include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] - }, { test: /\.css$/, exclude: /node_modules/, diff --git a/hooks/11_TableAxios/.babelrc b/hooks/11_TableAxios/.babelrc index 957cae3e..06770f7d 100644 --- a/hooks/11_TableAxios/.babelrc +++ b/hooks/11_TableAxios/.babelrc @@ -5,6 +5,9 @@ { "useBuiltIns": "entry" } - ] - ] + ], + "@babel/preset-typescript", + "@babel/preset-react" + ], + "plugins": ["@babel/plugin-transform-runtime"] } diff --git a/hooks/11_TableAxios/package.json b/hooks/11_TableAxios/package.json index 7ef95a14..0d0d92b0 100644 --- a/hooks/11_TableAxios/package.json +++ b/hooks/11_TableAxios/package.json @@ -15,29 +15,33 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/node": "^11.9.4", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/plugin-transform-runtime": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "axios": "^0.18.0", - "react": "^16.8.2", - "react-dom": "^16.8.2" + "@babel/runtime": "^7.10.5", + "axios": "^0.19.2", + "react": "^16.13.1", + "react-dom": "^16.13.1" } } diff --git a/hooks/11_TableAxios/webpack.config.js b/hooks/11_TableAxios/webpack.config.js index eebdc585..7420e37f 100644 --- a/hooks/11_TableAxios/webpack.config.js +++ b/hooks/11_TableAxios/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx", ".css"] + extensions: [".js", ".ts", ".tsx", ".css"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,13 +31,8 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } - }, - { - test: /\.css$/, - include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, @@ -49,30 +44,31 @@ module.exports = { options: { modules: true, localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true - } - } - ] + camelCase: true, + }, + }, + ], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From bb21e6a01c69234175a72e04960a36a8b119b953 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 10:41:42 +0200 Subject: [PATCH 59/80] ref: #187 update 09 webpack --- hooks/09_Sidebar/webpack.config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index 7420e37f..36373163 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -33,6 +33,11 @@ module.exports = { useBabel: true, babelCore: "@babel/core", // needed for Babel v7 }, + }, + { + test: /\.css$/, + include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"] }, { test: /\.css$/, From 7d45713f013c7ea337906027cd3f9ed89297cd5b Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 10:55:09 +0200 Subject: [PATCH 60/80] ref: #187 update 09 webpack --- hooks/09_Sidebar/webpack.config.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index 36373163..c4980707 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -33,11 +33,11 @@ module.exports = { useBabel: true, babelCore: "@babel/core", // needed for Babel v7 }, - }, - { - test: /\.css$/, - include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + }, + { + test: /\.css$/, + include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.css$/, From cd511060208fed4efef255fb6acb7d7661b91d1a Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 11:38:08 +0200 Subject: [PATCH 61/80] ref: #187 update 09 pending update readme --- hooks/09_Sidebar/webpack.config.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hooks/09_Sidebar/webpack.config.js b/hooks/09_Sidebar/webpack.config.js index c4980707..c9996585 100644 --- a/hooks/09_Sidebar/webpack.config.js +++ b/hooks/09_Sidebar/webpack.config.js @@ -47,9 +47,10 @@ module.exports = { { loader: "css-loader", options: { - modules: true, - localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true, + modules: { + localIdentName: "[name]__[local]___[hash:base64:5]", + }, + localsConvention: "camelCase", }, }, ], From c4fdd2cd1dc15b35a33160426f6bc96a203f1aa4 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Tue, 21 Jul 2020 11:57:11 +0200 Subject: [PATCH 62/80] ref: #187 update 09 - 11 pending update readme async await --- hooks/09_Sidebar/Readme.md | 7 ++++--- hooks/10_TableMock/webpack.config.js | 9 +++++---- hooks/11_TableAxios/src/components/memberTable.tsx | 9 ++++----- hooks/11_TableAxios/webpack.config.js | 12 +++++++++--- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/hooks/09_Sidebar/Readme.md b/hooks/09_Sidebar/Readme.md index be7bddb2..e3dda427 100644 --- a/hooks/09_Sidebar/Readme.md +++ b/hooks/09_Sidebar/Readme.md @@ -89,9 +89,10 @@ _./webpack.config.js_ + { + loader: 'css-loader', + options: { -+ modules: true, -+ localIdentName: '[name]__[local]___[hash:base64:5]', -+ camelCase: true, ++ modules: { ++ localIdentName: "[name]__[local]___[hash:base64:5]", ++ }, ++ localsConvention: "camelCase", + }, + }, + ] diff --git a/hooks/10_TableMock/webpack.config.js b/hooks/10_TableMock/webpack.config.js index 750f00af..c9996585 100644 --- a/hooks/10_TableMock/webpack.config.js +++ b/hooks/10_TableMock/webpack.config.js @@ -37,7 +37,7 @@ module.exports = { { test: /\.css$/, include: /node_modules/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.css$/, @@ -47,9 +47,10 @@ module.exports = { { loader: "css-loader", options: { - modules: true, - localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true, + modules: { + localIdentName: "[name]__[local]___[hash:base64:5]", + }, + localsConvention: "camelCase", }, }, ], diff --git a/hooks/11_TableAxios/src/components/memberTable.tsx b/hooks/11_TableAxios/src/components/memberTable.tsx index eee44798..4ae64fa6 100644 --- a/hooks/11_TableAxios/src/components/memberTable.tsx +++ b/hooks/11_TableAxios/src/components/memberTable.tsx @@ -7,10 +7,9 @@ const useMemberCollection = () => { MemberEntity[] >([]); - const loadMemberCollection = () => { - getMembersCollection().then(memberCollection => - setMemberCollection(memberCollection) - ); + const loadMemberCollection = async () => { + const memberCollection = await getMembersCollection(); + setMemberCollection(memberCollection); }; return { memberCollection, loadMemberCollection }; @@ -34,7 +33,7 @@ export const MemberTableComponent = () => { - {memberCollection.map(member => ( + {memberCollection.map((member) => ( ))} diff --git a/hooks/11_TableAxios/webpack.config.js b/hooks/11_TableAxios/webpack.config.js index 7420e37f..c9996585 100644 --- a/hooks/11_TableAxios/webpack.config.js +++ b/hooks/11_TableAxios/webpack.config.js @@ -34,6 +34,11 @@ module.exports = { babelCore: "@babel/core", // needed for Babel v7 }, }, + { + test: /\.css$/, + include: /node_modules/, + use: [MiniCssExtractPlugin.loader, "css-loader"], + }, { test: /\.css$/, exclude: /node_modules/, @@ -42,9 +47,10 @@ module.exports = { { loader: "css-loader", options: { - modules: true, - localIdentName: "[name]__[local]___[hash:base64:5]", - camelCase: true, + modules: { + localIdentName: "[name]__[local]___[hash:base64:5]", + }, + localsConvention: "camelCase", }, }, ], From bde0b830e89a9f6abb5c81899d9d2a811ae59c16 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Wed, 22 Jul 2020 14:38:52 +0200 Subject: [PATCH 63/80] ref: #187 update 09 - 11 update readme async await --- hooks/11_TableAxios/Readme.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/hooks/11_TableAxios/Readme.md b/hooks/11_TableAxios/Readme.md index 4808c875..7a5332d0 100644 --- a/hooks/11_TableAxios/Readme.md +++ b/hooks/11_TableAxios/Readme.md @@ -67,6 +67,31 @@ export const getMembersCollection = (): Promise => { + })); ``` +- Adding async await calling member api + +To make the async await work, we should install +- `npm install -D @babel/plugin-transform-runtime` +- `npm install -P @babel/runtime` + +and add to the .babelrc + +_.babelrc_ +```bash + "plugins": ["@babel/plugin-transform-runtime"] +``` + +_./src/components/memberTable.tsx_ +```diff +- const loadMemberCollection = () => { +- getMembersCollection().then(memberCollection => +- setMemberCollection(memberCollection) +- ); + ++ const loadMemberCollection = async () => { ++ const memberCollection = await getMembersCollection(); ++ setMemberCollection(memberCollection); +``` + - Aaaand... we don't need to add any update on the rest of the application, why? The function is providing the same contract, it returns a promise, let's give a try: From 57d15cf1cf3f9adc926755defd6d14b0e7c13aee Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 24 Jul 2020 12:45:08 +0200 Subject: [PATCH 64/80] ref: #187 update 12, 13 refactor routes --- hooks/12_ReactRouter/.babelrc | 4 +- hooks/12_ReactRouter/package.json | 45 ++++++++++---------- hooks/12_ReactRouter/webpack.config.js | 39 ++++++++--------- hooks/13_LoginForm/package.json | 49 ++++++++++++---------- hooks/13_LoginForm/src/pages/loginPage.tsx | 11 +++-- hooks/13_LoginForm/webpack.config.js | 39 ++++++++--------- 6 files changed, 98 insertions(+), 89 deletions(-) diff --git a/hooks/12_ReactRouter/.babelrc b/hooks/12_ReactRouter/.babelrc index 957cae3e..d09d473e 100644 --- a/hooks/12_ReactRouter/.babelrc +++ b/hooks/12_ReactRouter/.babelrc @@ -5,6 +5,8 @@ { "useBuiltIns": "entry" } - ] + ], + "@babel/preset-typescript", + "@babel/preset-react" ] } diff --git a/hooks/12_ReactRouter/package.json b/hooks/12_ReactRouter/package.json index 2ff4e9af..fb377361 100644 --- a/hooks/12_ReactRouter/package.json +++ b/hooks/12_ReactRouter/package.json @@ -15,29 +15,32 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", - "@types/react-router-dom": "^4.3.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "react": "^16.8.2", - "react-dom": "^16.8.2", - "react-router-dom": "^4.3.1" + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0" } } diff --git a/hooks/12_ReactRouter/webpack.config.js b/hooks/12_ReactRouter/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/12_ReactRouter/webpack.config.js +++ b/hooks/12_ReactRouter/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; diff --git a/hooks/13_LoginForm/package.json b/hooks/13_LoginForm/package.json index d22ed28f..258ceb77 100644 --- a/hooks/13_LoginForm/package.json +++ b/hooks/13_LoginForm/package.json @@ -15,31 +15,34 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", - "@types/react-router-dom": "^4.3.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "@material-ui/core": "^4.0.1", - "@material-ui/icons": "^4.0.1", - "react": "^16.8.2", - "react-dom": "^16.8.2", - "react-router-dom": "^4.3.1" + "@material-ui/core": "^4.11.0", + "@material-ui/icons": "^4.9.1", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0" } } diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index 05e51a77..a6fbf0cf 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { withRouter, RouteComponentProps } from "react-router-dom"; +import { useHistory } from "react-router-dom"; import makeStyles from "@material-ui/styles/makeStyles"; import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; @@ -21,18 +21,19 @@ const useStyles = makeStyles(theme => }) ); -interface Props extends RouteComponentProps {} +interface Props {}; -const LoginPageInner = (props: Props) => { +export const LoginPage = (props: Props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); + const history = useHistory(); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); const classes = useStyles(); const onLogin = () => { if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); + history.push("/pageB"); } else { setShowLoginFailedMsg(true); } @@ -66,8 +67,6 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withRouter(LoginPageInner); - interface PropsForm { onLogin: () => void; onUpdateField: (name: string, value: any) => void; diff --git a/hooks/13_LoginForm/webpack.config.js b/hooks/13_LoginForm/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/13_LoginForm/webpack.config.js +++ b/hooks/13_LoginForm/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From c940328331550b1bbd42df09322821ffb2ba79e7 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 24 Jul 2020 13:37:25 +0200 Subject: [PATCH 65/80] ref: #187 update 14 form validation --- hooks/14_FormValidation/package.json | 49 ++++++++++--------- .../14_FormValidation/src/pages/loginPage.tsx | 11 ++--- hooks/14_FormValidation/webpack.config.js | 39 ++++++++------- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/hooks/14_FormValidation/package.json b/hooks/14_FormValidation/package.json index 2914eb69..1360a87c 100644 --- a/hooks/14_FormValidation/package.json +++ b/hooks/14_FormValidation/package.json @@ -15,32 +15,35 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", - "@types/react-router-dom": "^4.3.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "@material-ui/core": "^4.0.1", - "@material-ui/icons": "^4.0.1", + "@material-ui/core": "^4.11.0", + "@material-ui/icons": "^4.9.1", "lc-form-validation": "^2.0.0", - "react": "^16.8.2", - "react-dom": "^16.8.2", - "react-router-dom": "^4.3.1" + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0" } } diff --git a/hooks/14_FormValidation/src/pages/loginPage.tsx b/hooks/14_FormValidation/src/pages/loginPage.tsx index 5dce227a..09f017c3 100644 --- a/hooks/14_FormValidation/src/pages/loginPage.tsx +++ b/hooks/14_FormValidation/src/pages/loginPage.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import { Link } from "react-router-dom"; -import { withRouter, RouteComponentProps } from "react-router-dom"; +import { useHistory } from "react-router-dom"; import makeStyles from "@material-ui/styles/makeStyles"; import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; @@ -29,9 +29,9 @@ const useStyles = makeStyles(theme => }) ); -interface Props extends RouteComponentProps {} +interface Props {} -const LoginPageInner = (props: Props) => { +export const LoginPage = (props: Props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); @@ -40,12 +40,13 @@ const LoginPageInner = (props: Props) => { ); const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); const classes = useStyles(); + const history = useHistory(); const onLogin = () => { loginFormValidation.validateForm(loginInfo).then(formValidationResult => { if (formValidationResult.succeeded) { if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); + history.push("/pageB"); } else { setShowLoginFailedMsg(true); } @@ -98,8 +99,6 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withRouter(LoginPageInner); - interface PropsForm { onLogin: () => void; onUpdateField: (string, any) => void; diff --git a/hooks/14_FormValidation/webpack.config.js b/hooks/14_FormValidation/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/14_FormValidation/webpack.config.js +++ b/hooks/14_FormValidation/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From 4bad05d34ddea5c97bcb8fe816cf84bb68ff830a Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 24 Jul 2020 13:40:36 +0200 Subject: [PATCH 66/80] ref: #187 update 15 context from 14 --- hooks/15_Context/package.json | 49 ++++++++++++++++-------------- hooks/15_Context/webpack.config.js | 39 ++++++++++++------------ 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/hooks/15_Context/package.json b/hooks/15_Context/package.json index 2914eb69..1360a87c 100644 --- a/hooks/15_Context/package.json +++ b/hooks/15_Context/package.json @@ -15,32 +15,35 @@ "author": "Braulio Diez Botella", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.3.1", - "@types/react": "^16.8.3", - "@types/react-dom": "^16.8.1", - "@types/react-router-dom": "^4.3.1", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/node": "^14.0.24", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.5", - "css-loader": "^2.1.0", - "file-loader": "^3.0.1", - "html-webpack-plugin": "^3.2.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.23.1", - "typescript": "^3.3.3", - "url-loader": "^1.1.2", - "webpack": "^4.29.3", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "babel-loader": "^8.1.0", + "css-loader": "^3.6.0", + "file-loader": "^6.0.0", + "html-webpack-plugin": "^4.3.0", + "mini-css-extract-plugin": "^0.9.0", + "style-loader": "^1.2.1", + "typescript": "^3.9.7", + "url-loader": "^4.1.0", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "dependencies": { - "@material-ui/core": "^4.0.1", - "@material-ui/icons": "^4.0.1", + "@material-ui/core": "^4.11.0", + "@material-ui/icons": "^4.9.1", "lc-form-validation": "^2.0.0", - "react": "^16.8.2", - "react-dom": "^16.8.2", - "react-router-dom": "^4.3.1" + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0" } } diff --git a/hooks/15_Context/webpack.config.js b/hooks/15_Context/webpack.config.js index 31ab3dba..32eff849 100644 --- a/hooks/15_Context/webpack.config.js +++ b/hooks/15_Context/webpack.config.js @@ -1,19 +1,19 @@ -var HtmlWebpackPlugin = require("html-webpack-plugin"); -var MiniCssExtractPlugin = require("mini-css-extract-plugin"); -var webpack = require("webpack"); -var path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const webpack = require("webpack"); +const path = require("path"); -var basePath = __dirname; +const basePath = __dirname; module.exports = { context: path.join(basePath, "src"), resolve: { - extensions: [".js", ".ts", ".tsx"] + extensions: [".js", ".ts", ".tsx"], }, entry: ["@babel/polyfill", "./index.tsx"], output: { path: path.join(basePath, "dist"), - filename: "bundle.js" + filename: "bundle.js", }, devtool: "source-map", devServer: { @@ -21,7 +21,7 @@ module.exports = { inline: true, // Enable watch and live reload host: "localhost", port: 8080, - stats: "errors-only" + stats: "errors-only", }, module: { rules: [ @@ -31,32 +31,33 @@ module.exports = { loader: "awesome-typescript-loader", options: { useBabel: true, - babelCore: "@babel/core" // needed for Babel v7 - } + babelCore: "@babel/core", // needed for Babel v7 + }, }, { test: /\.css$/, - use: [MiniCssExtractPlugin.loader, "css-loader"] + use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /\.(png|jpg|gif|svg)$/, loader: "file-loader", options: { - name: "assets/img/[name].[ext]?[hash]" - } - } - ] + name: "assets/img/[name].[ext]?[hash]", + esModule: false, + }, + }, + ], }, plugins: [ //Generate index.html in /dist => https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: "index.html", //Name of file in ./dist/ template: "index.html", //Name of template in ./src - hash: true + hash: true, }), new MiniCssExtractPlugin({ filename: "[name].css", - chunkFilename: "[id].css" - }) - ] + chunkFilename: "[id].css", + }), + ], }; From 4b9952e5464a7688bbc197f683be72dd5fb6cb4e Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 24 Jul 2020 15:28:42 +0200 Subject: [PATCH 67/80] ref: #187 thanks delamux --- readme.md | 1 + readme_es.md | 1 + 2 files changed, 2 insertions(+) diff --git a/readme.md b/readme.md index e728a6aa..9036f076 100644 --- a/readme.md +++ b/readme.md @@ -235,6 +235,7 @@ Add a login page using Material-UI. Thank you very much to the contributors for keeping the project updated in all the examples. - [Jehu Sagardoy](https://github.com/jsagardoy) +- [Luis del Amo](https://github.com/delamux) # About Basefactor + Lemoncode diff --git a/readme_es.md b/readme_es.md index baccb55e..2107c97f 100644 --- a/readme_es.md +++ b/readme_es.md @@ -232,6 +232,7 @@ Añadir página de Login usando AMaterial-UI. Muchas gracias a los colaborades por mantener el proyecto actualizado en todos los ejemplos. - [Jehu Sagardoy](https://github.com/jsagardoy) +- [Luis del Amo](https://github.com/delamux) # Sobre Basefactor + Lemoncode From 70641258b9b83af6b97095c039e1b13a64a58941 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Sat, 25 Jul 2020 13:40:46 +0200 Subject: [PATCH 68/80] ref: #187 adding types --- hooks/02_Properties/src/hello.tsx | 6 +-- hooks/03_State/src/hello.tsx | 2 +- hooks/03_State/src/nameEdit.tsx | 2 +- hooks/04_Callback/src/hello.tsx | 2 +- hooks/04_Callback/src/nameEdit.tsx | 2 +- hooks/05_Refactor/src/hello.tsx | 2 +- hooks/05_Refactor/src/nameEdit.tsx | 2 +- hooks/06_Enable/src/hello.tsx | 2 +- hooks/06_Enable/src/nameEdit.tsx | 11 +++-- .../src/components/colorBrowser.tsx | 6 +-- .../src/components/colorPicker.tsx | 2 +- hooks/07_ColorPicker/src/components/hello.tsx | 2 +- .../src/components/nameEdit.tsx | 2 +- .../src/components/colorBrowser.tsx | 2 +- .../src/components/colorPicker.tsx | 8 ++-- .../src/components/hello.tsx | 2 +- .../src/components/nameEdit.tsx | 11 +++-- .../src/components/colorBrowser.tsx | 6 +-- .../09_Sidebar/src/components/colorPicker.tsx | 10 ++--- hooks/09_Sidebar/src/components/hello.tsx | 2 +- hooks/09_Sidebar/src/components/nameEdit.tsx | 11 +++-- hooks/09_Sidebar/src/components/sidebar.tsx | 6 +-- .../src/components/colorBrowser.tsx | 6 +-- .../src/components/colorPicker.tsx | 10 ++--- hooks/10_TableMock/src/components/hello.tsx | 2 +- .../10_TableMock/src/components/nameEdit.tsx | 11 +++-- .../src/components/colorBrowser.tsx | 6 +-- .../src/components/colorPicker.tsx | 10 ++--- hooks/11_TableAxios/src/components/hello.tsx | 2 +- .../11_TableAxios/src/components/nameEdit.tsx | 11 +++-- .../13_LoginForm/src/common/notification.tsx | 14 +++---- hooks/13_LoginForm/src/pages/loginPage.tsx | 22 +++++----- .../src/common/notification.tsx | 14 +++---- .../src/common/textFieldForm.tsx | 8 ++-- .../14_FormValidation/src/pages/loginPage.tsx | 30 ++++++------- hooks/15_Context/src/common/notification.tsx | 14 +++---- .../15_Context/src/common/sessionContext.tsx | 6 +-- hooks/15_Context/src/common/textFieldForm.tsx | 8 ++-- hooks/15_Context/src/pages/loginPage.tsx | 42 ++++++++----------- 39 files changed, 148 insertions(+), 169 deletions(-) diff --git a/hooks/02_Properties/src/hello.tsx b/hooks/02_Properties/src/hello.tsx index 38df41c1..b9b1d810 100644 --- a/hooks/02_Properties/src/hello.tsx +++ b/hooks/02_Properties/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => ( -

Hello user: {props.userName} !

-); \ No newline at end of file +export const HelloComponent: React.FC = (props) => ( +

Hello user: {props.userName} !

+); diff --git a/hooks/03_State/src/hello.tsx b/hooks/03_State/src/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/03_State/src/hello.tsx +++ b/hooks/03_State/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/03_State/src/nameEdit.tsx b/hooks/03_State/src/nameEdit.tsx index 09c4cd1c..02f7e36d 100644 --- a/hooks/03_State/src/nameEdit.tsx +++ b/hooks/03_State/src/nameEdit.tsx @@ -5,7 +5,7 @@ interface Props { onChange: (e: React.ChangeEvent) => void; } -export const NameEditComponent = (props: Props) => ( +export const NameEditComponent: React.FC = (props) => ( <> diff --git a/hooks/04_Callback/src/hello.tsx b/hooks/04_Callback/src/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/04_Callback/src/hello.tsx +++ b/hooks/04_Callback/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/04_Callback/src/nameEdit.tsx b/hooks/04_Callback/src/nameEdit.tsx index 53edae95..8b1a5ca8 100644 --- a/hooks/04_Callback/src/nameEdit.tsx +++ b/hooks/04_Callback/src/nameEdit.tsx @@ -5,7 +5,7 @@ interface Props { onNameUpdated: (newName: string) => any; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const [editingName, setEditingName] = React.useState(props.initialUserName); const onChange = (e: React.ChangeEvent) => { diff --git a/hooks/05_Refactor/src/hello.tsx b/hooks/05_Refactor/src/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/05_Refactor/src/hello.tsx +++ b/hooks/05_Refactor/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/05_Refactor/src/nameEdit.tsx b/hooks/05_Refactor/src/nameEdit.tsx index 57f53dd0..c2eebf31 100644 --- a/hooks/05_Refactor/src/nameEdit.tsx +++ b/hooks/05_Refactor/src/nameEdit.tsx @@ -7,7 +7,7 @@ interface Props { onEditingNameUpdated: (newEditingName: string) => any; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; diff --git a/hooks/06_Enable/src/hello.tsx b/hooks/06_Enable/src/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/06_Enable/src/hello.tsx +++ b/hooks/06_Enable/src/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/06_Enable/src/nameEdit.tsx b/hooks/06_Enable/src/nameEdit.tsx index 646a4d26..7f9091e3 100644 --- a/hooks/06_Enable/src/nameEdit.tsx +++ b/hooks/06_Enable/src/nameEdit.tsx @@ -5,10 +5,10 @@ interface Props { editingName: string; onNameUpdated: () => any; onEditingNameUpdated: (newEditingName: string) => any; - disabled : boolean; + disabled: boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; @@ -21,10 +21,9 @@ export const NameEditComponent = (props: Props) => { <> - + ); }; diff --git a/hooks/07_ColorPicker/src/components/colorBrowser.tsx b/hooks/07_ColorPicker/src/components/colorBrowser.tsx index 7dcc3905..813746ce 100644 --- a/hooks/07_ColorPicker/src/components/colorBrowser.tsx +++ b/hooks/07_ColorPicker/src/components/colorBrowser.tsx @@ -5,13 +5,11 @@ interface Props { color: Color; } -export const ColorBrowser = (props: Props) => { +export const ColorBrowser: React.FC = (props) => { const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", - backgroundColor: `rgb(${props.color.red},${props.color.green}, ${ - props.color.blue - })` + backgroundColor: `rgb(${props.color.red},${props.color.green}, ${props.color.blue})`, }; return
; diff --git a/hooks/07_ColorPicker/src/components/colorPicker.tsx b/hooks/07_ColorPicker/src/components/colorPicker.tsx index 91283505..23bdca3c 100644 --- a/hooks/07_ColorPicker/src/components/colorPicker.tsx +++ b/hooks/07_ColorPicker/src/components/colorPicker.tsx @@ -6,7 +6,7 @@ interface Props { onColorUpdated: (color: Color) => void; } -export const ColorPicker = (props: Props) => ( +export const ColorPicker: React.FC = (props) => (
{ +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/07_ColorPicker/src/components/nameEdit.tsx b/hooks/07_ColorPicker/src/components/nameEdit.tsx index 646a4d26..5461073e 100644 --- a/hooks/07_ColorPicker/src/components/nameEdit.tsx +++ b/hooks/07_ColorPicker/src/components/nameEdit.tsx @@ -8,7 +8,7 @@ interface Props { disabled : boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; diff --git a/hooks/08_ColorPickerRefactor/src/components/colorBrowser.tsx b/hooks/08_ColorPickerRefactor/src/components/colorBrowser.tsx index 7dcc3905..a28e438e 100644 --- a/hooks/08_ColorPickerRefactor/src/components/colorBrowser.tsx +++ b/hooks/08_ColorPickerRefactor/src/components/colorBrowser.tsx @@ -5,7 +5,7 @@ interface Props { color: Color; } -export const ColorBrowser = (props: Props) => { +export const ColorBrowser: React.FC = (props) => { const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", diff --git a/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx b/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx index 945ab4c1..ff4cbcdc 100644 --- a/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx +++ b/hooks/08_ColorPickerRefactor/src/components/colorPicker.tsx @@ -10,11 +10,11 @@ const updateColor = (props: Props, colorId: keyof Color) => (value: any) => { // keyof Color ensures only 'red', 'blue' or 'green' can be passed in. props.onColorUpdated({ ...props.color, // this creates a clone of the current props.color object... - [colorId]: value // ... which gets one of its properties (colorId) immediately replaced by a new value. + [colorId]: value, // ... which gets one of its properties (colorId) immediately replaced by a new value. }); }; -export const ColorPicker = (props: Props) => ( +export const ColorPicker: React.FC = (props) => (
void; } -const ColorSliderComponent = (props: PropsColorSlider) => { +const ColorSliderComponent: React.FC = (props: PropsColorSlider) => { return (
{ min="0" max="255" value={props.value} - onChange={event => props.onValueUpdated(+event.target.value)} + onChange={(event) => props.onValueUpdated(+event.target.value)} /> {props.value}
diff --git a/hooks/08_ColorPickerRefactor/src/components/hello.tsx b/hooks/08_ColorPickerRefactor/src/components/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/08_ColorPickerRefactor/src/components/hello.tsx +++ b/hooks/08_ColorPickerRefactor/src/components/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/08_ColorPickerRefactor/src/components/nameEdit.tsx b/hooks/08_ColorPickerRefactor/src/components/nameEdit.tsx index 646a4d26..7f9091e3 100644 --- a/hooks/08_ColorPickerRefactor/src/components/nameEdit.tsx +++ b/hooks/08_ColorPickerRefactor/src/components/nameEdit.tsx @@ -5,10 +5,10 @@ interface Props { editingName: string; onNameUpdated: () => any; onEditingNameUpdated: (newEditingName: string) => any; - disabled : boolean; + disabled: boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; @@ -21,10 +21,9 @@ export const NameEditComponent = (props: Props) => { <> - + ); }; diff --git a/hooks/09_Sidebar/src/components/colorBrowser.tsx b/hooks/09_Sidebar/src/components/colorBrowser.tsx index 7dcc3905..813746ce 100644 --- a/hooks/09_Sidebar/src/components/colorBrowser.tsx +++ b/hooks/09_Sidebar/src/components/colorBrowser.tsx @@ -5,13 +5,11 @@ interface Props { color: Color; } -export const ColorBrowser = (props: Props) => { +export const ColorBrowser: React.FC = (props) => { const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", - backgroundColor: `rgb(${props.color.red},${props.color.green}, ${ - props.color.blue - })` + backgroundColor: `rgb(${props.color.red},${props.color.green}, ${props.color.blue})`, }; return
; diff --git a/hooks/09_Sidebar/src/components/colorPicker.tsx b/hooks/09_Sidebar/src/components/colorPicker.tsx index ea449834..4346cd4d 100644 --- a/hooks/09_Sidebar/src/components/colorPicker.tsx +++ b/hooks/09_Sidebar/src/components/colorPicker.tsx @@ -6,15 +6,15 @@ interface Props { onColorUpdated: (color: Color) => void; } -const updateColor = (props: Props, colorId: keyof Color) => value => { +const updateColor = (props: Props, colorId: keyof Color) => (value) => { // keyof Color ensures only 'red', 'blue' or 'green' can be passed in. props.onColorUpdated({ ...props.color, // this creates a clone of the current props.color object... - [colorId]: value // ... which gets one of its properties (colorId) immediately replaced by a new value. + [colorId]: value, // ... which gets one of its properties (colorId) immediately replaced by a new value. }); }; -export const ColorPicker = (props: Props) => ( +export const ColorPicker: React.FC = (props) => (
void; } -const ColorSliderComponent = (props: PropsColorSlider) => { +const ColorSliderComponent: React.FC = (props) => { return (
{ min="0" max="255" value={props.value} - onChange={event => props.onValueUpdated(+event.target.value)} + onChange={(event) => props.onValueUpdated(+event.target.value)} /> {props.value}
diff --git a/hooks/09_Sidebar/src/components/hello.tsx b/hooks/09_Sidebar/src/components/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/09_Sidebar/src/components/hello.tsx +++ b/hooks/09_Sidebar/src/components/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/09_Sidebar/src/components/nameEdit.tsx b/hooks/09_Sidebar/src/components/nameEdit.tsx index 646a4d26..7f9091e3 100644 --- a/hooks/09_Sidebar/src/components/nameEdit.tsx +++ b/hooks/09_Sidebar/src/components/nameEdit.tsx @@ -5,10 +5,10 @@ interface Props { editingName: string; onNameUpdated: () => any; onEditingNameUpdated: (newEditingName: string) => any; - disabled : boolean; + disabled: boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; @@ -21,10 +21,9 @@ export const NameEditComponent = (props: Props) => { <> - + ); }; diff --git a/hooks/09_Sidebar/src/components/sidebar.tsx b/hooks/09_Sidebar/src/components/sidebar.tsx index 762991eb..0847a552 100644 --- a/hooks/09_Sidebar/src/components/sidebar.tsx +++ b/hooks/09_Sidebar/src/components/sidebar.tsx @@ -7,13 +7,11 @@ interface Props { } const divStyle = (props: Props): React.CSSProperties => ({ - width: props.isVisible ? "23rem" : "0rem" + width: props.isVisible ? "23rem" : "0rem", }); -export const SidebarComponent: React.StatelessComponent = props => ( +export const SidebarComponent: React.StatelessComponent = (props) => (
{props.children}
); - - diff --git a/hooks/10_TableMock/src/components/colorBrowser.tsx b/hooks/10_TableMock/src/components/colorBrowser.tsx index 7dcc3905..813746ce 100644 --- a/hooks/10_TableMock/src/components/colorBrowser.tsx +++ b/hooks/10_TableMock/src/components/colorBrowser.tsx @@ -5,13 +5,11 @@ interface Props { color: Color; } -export const ColorBrowser = (props: Props) => { +export const ColorBrowser: React.FC = (props) => { const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", - backgroundColor: `rgb(${props.color.red},${props.color.green}, ${ - props.color.blue - })` + backgroundColor: `rgb(${props.color.red},${props.color.green}, ${props.color.blue})`, }; return
; diff --git a/hooks/10_TableMock/src/components/colorPicker.tsx b/hooks/10_TableMock/src/components/colorPicker.tsx index ea449834..4346cd4d 100644 --- a/hooks/10_TableMock/src/components/colorPicker.tsx +++ b/hooks/10_TableMock/src/components/colorPicker.tsx @@ -6,15 +6,15 @@ interface Props { onColorUpdated: (color: Color) => void; } -const updateColor = (props: Props, colorId: keyof Color) => value => { +const updateColor = (props: Props, colorId: keyof Color) => (value) => { // keyof Color ensures only 'red', 'blue' or 'green' can be passed in. props.onColorUpdated({ ...props.color, // this creates a clone of the current props.color object... - [colorId]: value // ... which gets one of its properties (colorId) immediately replaced by a new value. + [colorId]: value, // ... which gets one of its properties (colorId) immediately replaced by a new value. }); }; -export const ColorPicker = (props: Props) => ( +export const ColorPicker: React.FC = (props) => (
void; } -const ColorSliderComponent = (props: PropsColorSlider) => { +const ColorSliderComponent: React.FC = (props) => { return (
{ min="0" max="255" value={props.value} - onChange={event => props.onValueUpdated(+event.target.value)} + onChange={(event) => props.onValueUpdated(+event.target.value)} /> {props.value}
diff --git a/hooks/10_TableMock/src/components/hello.tsx b/hooks/10_TableMock/src/components/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/10_TableMock/src/components/hello.tsx +++ b/hooks/10_TableMock/src/components/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/10_TableMock/src/components/nameEdit.tsx b/hooks/10_TableMock/src/components/nameEdit.tsx index 646a4d26..7f9091e3 100644 --- a/hooks/10_TableMock/src/components/nameEdit.tsx +++ b/hooks/10_TableMock/src/components/nameEdit.tsx @@ -5,10 +5,10 @@ interface Props { editingName: string; onNameUpdated: () => any; onEditingNameUpdated: (newEditingName: string) => any; - disabled : boolean; + disabled: boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; @@ -21,10 +21,9 @@ export const NameEditComponent = (props: Props) => { <> - + ); }; diff --git a/hooks/11_TableAxios/src/components/colorBrowser.tsx b/hooks/11_TableAxios/src/components/colorBrowser.tsx index 7dcc3905..813746ce 100644 --- a/hooks/11_TableAxios/src/components/colorBrowser.tsx +++ b/hooks/11_TableAxios/src/components/colorBrowser.tsx @@ -5,13 +5,11 @@ interface Props { color: Color; } -export const ColorBrowser = (props: Props) => { +export const ColorBrowser: React.FC = (props) => { const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", - backgroundColor: `rgb(${props.color.red},${props.color.green}, ${ - props.color.blue - })` + backgroundColor: `rgb(${props.color.red},${props.color.green}, ${props.color.blue})`, }; return
; diff --git a/hooks/11_TableAxios/src/components/colorPicker.tsx b/hooks/11_TableAxios/src/components/colorPicker.tsx index ea449834..4346cd4d 100644 --- a/hooks/11_TableAxios/src/components/colorPicker.tsx +++ b/hooks/11_TableAxios/src/components/colorPicker.tsx @@ -6,15 +6,15 @@ interface Props { onColorUpdated: (color: Color) => void; } -const updateColor = (props: Props, colorId: keyof Color) => value => { +const updateColor = (props: Props, colorId: keyof Color) => (value) => { // keyof Color ensures only 'red', 'blue' or 'green' can be passed in. props.onColorUpdated({ ...props.color, // this creates a clone of the current props.color object... - [colorId]: value // ... which gets one of its properties (colorId) immediately replaced by a new value. + [colorId]: value, // ... which gets one of its properties (colorId) immediately replaced by a new value. }); }; -export const ColorPicker = (props: Props) => ( +export const ColorPicker: React.FC = (props) => (
void; } -const ColorSliderComponent = (props: PropsColorSlider) => { +const ColorSliderComponent: React.FC = (props) => { return (
{ min="0" max="255" value={props.value} - onChange={event => props.onValueUpdated(+event.target.value)} + onChange={(event) => props.onValueUpdated(+event.target.value)} /> {props.value}
diff --git a/hooks/11_TableAxios/src/components/hello.tsx b/hooks/11_TableAxios/src/components/hello.tsx index 33a0ab73..b6b7aca4 100644 --- a/hooks/11_TableAxios/src/components/hello.tsx +++ b/hooks/11_TableAxios/src/components/hello.tsx @@ -4,6 +4,6 @@ interface Props { userName: string; } -export const HelloComponent = (props: Props) => { +export const HelloComponent: React.FC = (props) => { return

Hello user: {props.userName} !

; }; diff --git a/hooks/11_TableAxios/src/components/nameEdit.tsx b/hooks/11_TableAxios/src/components/nameEdit.tsx index 646a4d26..7f9091e3 100644 --- a/hooks/11_TableAxios/src/components/nameEdit.tsx +++ b/hooks/11_TableAxios/src/components/nameEdit.tsx @@ -5,10 +5,10 @@ interface Props { editingName: string; onNameUpdated: () => any; onEditingNameUpdated: (newEditingName: string) => any; - disabled : boolean; + disabled: boolean; } -export const NameEditComponent = (props: Props) => { +export const NameEditComponent: React.FC = (props) => { const onChange = (e: React.ChangeEvent) => { props.onEditingNameUpdated(e.target.value); }; @@ -21,10 +21,9 @@ export const NameEditComponent = (props: Props) => { <> - + ); }; diff --git a/hooks/13_LoginForm/src/common/notification.tsx b/hooks/13_LoginForm/src/common/notification.tsx index 3fc14394..7f1a3336 100644 --- a/hooks/13_LoginForm/src/common/notification.tsx +++ b/hooks/13_LoginForm/src/common/notification.tsx @@ -11,15 +11,15 @@ interface Props { onClose: () => void; } -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ close: { - padding: theme.spacing(0.5) - } + padding: theme.spacing(0.5), + }, }) ); -export const NotificationComponent = (props: Props) => { +export const NotificationComponent: React.FC = (props) => { const classes = useStyles(); const { message, show, onClose } = props; @@ -27,13 +27,13 @@ export const NotificationComponent = (props: Props) => { {message}} action={[ @@ -45,7 +45,7 @@ export const NotificationComponent = (props: Props) => { onClick={onClose} > - + , ]} /> ); diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx index a6fbf0cf..9caa627d 100644 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ b/hooks/13_LoginForm/src/pages/loginPage.tsx @@ -12,18 +12,18 @@ import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ card: { maxWidth: 400, - margin: "0 auto" - } + margin: "0 auto", + }, }) ); -interface Props {}; +interface Props {} -export const LoginPage = (props: Props) => { +export const LoginPage: React.FC = (props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); @@ -42,7 +42,7 @@ export const LoginPage = (props: Props) => { const onUpdateLoginField = (name, value) => { setLoginInfo({ ...loginInfo, - [name]: value + [name]: value, }); }; @@ -74,22 +74,22 @@ interface PropsForm { } // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles(theme => +const useFormStyles = makeStyles((theme) => createStyles({ formContainer: { display: "flex", flexDirection: "column", - justifyContent: "center" - } + justifyContent: "center", + }, }) ); -const LoginForm = (props: PropsForm) => { +const LoginForm: React.FC = (props) => { const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = fieldId => e => { + const onTexFieldChange = (fieldId) => (e) => { onUpdateField(fieldId, e.target.value); }; diff --git a/hooks/14_FormValidation/src/common/notification.tsx b/hooks/14_FormValidation/src/common/notification.tsx index 3fc14394..7f1a3336 100644 --- a/hooks/14_FormValidation/src/common/notification.tsx +++ b/hooks/14_FormValidation/src/common/notification.tsx @@ -11,15 +11,15 @@ interface Props { onClose: () => void; } -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ close: { - padding: theme.spacing(0.5) - } + padding: theme.spacing(0.5), + }, }) ); -export const NotificationComponent = (props: Props) => { +export const NotificationComponent: React.FC = (props) => { const classes = useStyles(); const { message, show, onClose } = props; @@ -27,13 +27,13 @@ export const NotificationComponent = (props: Props) => { {message}} action={[ @@ -45,7 +45,7 @@ export const NotificationComponent = (props: Props) => { onClick={onClose} > - + , ]} /> ); diff --git a/hooks/14_FormValidation/src/common/textFieldForm.tsx b/hooks/14_FormValidation/src/common/textFieldForm.tsx index 221010ef..5be9a8be 100644 --- a/hooks/14_FormValidation/src/common/textFieldForm.tsx +++ b/hooks/14_FormValidation/src/common/textFieldForm.tsx @@ -12,17 +12,17 @@ interface Props { } const defaultProps: Partial = { - type: "text" + type: "text", }; const onTextFieldChange = ( fieldId: string, onChange: (fieldId, value) => void -) => e => { +) => (e) => { onChange(fieldId, e.target.value); }; -export const TextFieldForm: React.StatelessComponent = props => { +export const TextFieldForm: React.StatelessComponent = (props) => { const { name, label, onChange, value, error, type } = props; return ( <> @@ -34,7 +34,7 @@ export const TextFieldForm: React.StatelessComponent = props => { onChange={onTextFieldChange(name, onChange)} /> - {props.error} + {error} ); diff --git a/hooks/14_FormValidation/src/pages/loginPage.tsx b/hooks/14_FormValidation/src/pages/loginPage.tsx index 09f017c3..03567eac 100644 --- a/hooks/14_FormValidation/src/pages/loginPage.tsx +++ b/hooks/14_FormValidation/src/pages/loginPage.tsx @@ -14,24 +14,24 @@ import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; import { LoginFormErrors, - createDefaultLoginFormErrors + createDefaultLoginFormErrors, } from "./loginPage.viewmodel"; import { loginFormValidation } from "./loginPage.validation"; import { TextFieldForm } from "../common"; // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ card: { maxWidth: 400, - margin: "0 auto" - } + margin: "0 auto", + }, }) ); interface Props {} -export const LoginPage = (props: Props) => { +export const LoginPage: React.FC = (props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); @@ -43,7 +43,7 @@ export const LoginPage = (props: Props) => { const history = useHistory(); const onLogin = () => { - loginFormValidation.validateForm(loginInfo).then(formValidationResult => { + loginFormValidation.validateForm(loginInfo).then((formValidationResult) => { if (formValidationResult.succeeded) { if (isValidLogin(loginInfo)) { history.push("/pageB"); @@ -54,7 +54,7 @@ export const LoginPage = (props: Props) => { alert("error, review the fields"); const updatedLoginFormErrors = { ...loginFormErrors, - ...formValidationResult.fieldErrors + ...formValidationResult.fieldErrors, }; setLoginFormErrors(updatedLoginFormErrors); } @@ -64,15 +64,15 @@ export const LoginPage = (props: Props) => { const onUpdateLoginField = (name, value) => { setLoginInfo({ ...loginInfo, - [name]: value + [name]: value, }); loginFormValidation .validateField(loginInfo, name, value) - .then(fieldValidationResult => { + .then((fieldValidationResult) => { setLoginFormErrors({ ...loginFormErrors, - [name]: fieldValidationResult + [name]: fieldValidationResult, }); }); }; @@ -107,22 +107,22 @@ interface PropsForm { } // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles(theme => +const useFormStyles = makeStyles((theme) => createStyles({ formContainer: { display: "flex", flexDirection: "column", - justifyContent: "center" - } + justifyContent: "center", + }, }) ); -const LoginForm = (props: PropsForm) => { +const LoginForm: React.FC = (props) => { const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = fieldId => e => { + const onTexFieldChange = (fieldId) => (e) => { onUpdateField(fieldId, e.target.value); }; diff --git a/hooks/15_Context/src/common/notification.tsx b/hooks/15_Context/src/common/notification.tsx index 3fc14394..7f1a3336 100644 --- a/hooks/15_Context/src/common/notification.tsx +++ b/hooks/15_Context/src/common/notification.tsx @@ -11,15 +11,15 @@ interface Props { onClose: () => void; } -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ close: { - padding: theme.spacing(0.5) - } + padding: theme.spacing(0.5), + }, }) ); -export const NotificationComponent = (props: Props) => { +export const NotificationComponent: React.FC = (props) => { const classes = useStyles(); const { message, show, onClose } = props; @@ -27,13 +27,13 @@ export const NotificationComponent = (props: Props) => { {message}} action={[ @@ -45,7 +45,7 @@ export const NotificationComponent = (props: Props) => { onClick={onClose} > - + , ]} /> ); diff --git a/hooks/15_Context/src/common/sessionContext.tsx b/hooks/15_Context/src/common/sessionContext.tsx index 4d1c0384..4edab12f 100644 --- a/hooks/15_Context/src/common/sessionContext.tsx +++ b/hooks/15_Context/src/common/sessionContext.tsx @@ -7,18 +7,18 @@ export interface SessionContextProps { export const createDefaultUser = (): SessionContextProps => ({ login: "no user", - updateLogin: value => { + updateLogin: (value) => { console.warn( "if you are reading this, likely you forgot to add the provider on top of your app" ); - } + }, }); export const SessionContext = React.createContext( createDefaultUser() ); -export const SessionProvider: React.FunctionComponent = props => { +export const SessionProvider: React.FC = (props) => { const [login, setLogin] = React.useState(""); return ( diff --git a/hooks/15_Context/src/common/textFieldForm.tsx b/hooks/15_Context/src/common/textFieldForm.tsx index 221010ef..5be9a8be 100644 --- a/hooks/15_Context/src/common/textFieldForm.tsx +++ b/hooks/15_Context/src/common/textFieldForm.tsx @@ -12,17 +12,17 @@ interface Props { } const defaultProps: Partial = { - type: "text" + type: "text", }; const onTextFieldChange = ( fieldId: string, onChange: (fieldId, value) => void -) => e => { +) => (e) => { onChange(fieldId, e.target.value); }; -export const TextFieldForm: React.StatelessComponent = props => { +export const TextFieldForm: React.StatelessComponent = (props) => { const { name, label, onChange, value, error, type } = props; return ( <> @@ -34,7 +34,7 @@ export const TextFieldForm: React.StatelessComponent = props => { onChange={onTextFieldChange(name, onChange)} /> - {props.error} + {error} ); diff --git a/hooks/15_Context/src/pages/loginPage.tsx b/hooks/15_Context/src/pages/loginPage.tsx index a2d10824..2d3fed4c 100644 --- a/hooks/15_Context/src/pages/loginPage.tsx +++ b/hooks/15_Context/src/pages/loginPage.tsx @@ -1,38 +1,34 @@ import * as React from "react"; -import { Link } from "react-router-dom"; -import { withRouter, RouteComponentProps } from "react-router-dom"; +import { useHistory } from "react-router-dom"; import makeStyles from "@material-ui/styles/makestyles"; import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; -import TextField from "@material-ui/core/TextField"; import Button from "@material-ui/core/Button"; -import { FormHelperText } from "@material-ui/core"; import { LoginEntity, createEmptyLogin } from "../model/login"; import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; import { LoginFormErrors, - createDefaultLoginFormErrors + createDefaultLoginFormErrors, } from "./loginPage.viewmodel"; import { loginFormValidation } from "./loginPage.validation"; import { TextFieldForm, SessionContext } from "../common"; // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles(theme => +const useStyles = makeStyles((theme) => createStyles({ card: { maxWidth: 400, - margin: "0 auto" - } + margin: "0 auto", + }, }) ); -interface Props extends RouteComponentProps {} - -const LoginPageInner = (props: Props) => { +const LoginPage: React.FC = (props) => { const loginContext = React.useContext(SessionContext); + const history = useHistory(); const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() @@ -44,10 +40,10 @@ const LoginPageInner = (props: Props) => { const classes = useStyles(); const onLogin = () => { - loginFormValidation.validateForm(loginInfo).then(formValidationResult => { + loginFormValidation.validateForm(loginInfo).then((formValidationResult) => { if (formValidationResult.succeeded) { if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); + history.push("/pageB"); loginContext.updateLogin(loginInfo.login); } else { setShowLoginFailedMsg(true); @@ -56,7 +52,7 @@ const LoginPageInner = (props: Props) => { alert("error, review the fields"); const updatedLoginFormErrors = { ...loginFormErrors, - ...formValidationResult.fieldErrors + ...formValidationResult.fieldErrors, }; setLoginFormErrors(updatedLoginFormErrors); } @@ -66,15 +62,15 @@ const LoginPageInner = (props: Props) => { const onUpdateLoginField = (name, value) => { setLoginInfo({ ...loginInfo, - [name]: value + [name]: value, }); loginFormValidation .validateField(loginInfo, name, value) - .then(fieldValidationResult => { + .then((fieldValidationResult) => { setLoginFormErrors({ ...loginFormErrors, - [name]: fieldValidationResult + [name]: fieldValidationResult, }); }); }; @@ -101,8 +97,6 @@ const LoginPageInner = (props: Props) => { ); }; -export const LoginPage = withRouter(LoginPageInner); - interface PropsForm { onLogin: () => void; onUpdateField: (string, any) => void; @@ -111,22 +105,22 @@ interface PropsForm { } // https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles(theme => +const useFormStyles = makeStyles((theme) => createStyles({ formContainer: { display: "flex", flexDirection: "column", - justifyContent: "center" - } + justifyContent: "center", + }, }) ); -const LoginForm = (props: PropsForm) => { +const LoginForm: React.FC = (props) => { const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = fieldId => e => { + const onTexFieldChange = (fieldId) => (e) => { onUpdateField(fieldId, e.target.value); }; From 9da5146729ab28d569ebf5da9f78743a1258f244 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Sat, 25 Jul 2020 13:51:53 +0200 Subject: [PATCH 69/80] ref: #187 adding types --- hooks/04_Callback/src/nameEdit.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/04_Callback/src/nameEdit.tsx b/hooks/04_Callback/src/nameEdit.tsx index 8b1a5ca8..b471fd42 100644 --- a/hooks/04_Callback/src/nameEdit.tsx +++ b/hooks/04_Callback/src/nameEdit.tsx @@ -13,7 +13,7 @@ export const NameEditComponent: React.FC = (props) => { }; const onNameSubmit = (event: any): any => { - props.onNameUpdated(editingName); + props. }; return ( From e6b8f88ceaa14bd0c2b3aafb3deaa535bec71627 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Sat, 25 Jul 2020 13:54:43 +0200 Subject: [PATCH 70/80] ref: #187 delete accidentaly --- hooks/04_Callback/src/nameEdit.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/04_Callback/src/nameEdit.tsx b/hooks/04_Callback/src/nameEdit.tsx index b471fd42..8b1a5ca8 100644 --- a/hooks/04_Callback/src/nameEdit.tsx +++ b/hooks/04_Callback/src/nameEdit.tsx @@ -13,7 +13,7 @@ export const NameEditComponent: React.FC = (props) => { }; const onNameSubmit = (event: any): any => { - props. + props.onNameUpdated(editingName); }; return ( From b6846947efb302943d289662af4de9f2f165154f Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Sat, 25 Jul 2020 16:10:16 +0200 Subject: [PATCH 71/80] ref: #187 adding formik pendind setLoginInfo --- hooks/14_FormValidation/Readme.md | 29 ++--- hooks/14_FormValidation/package.json | 4 +- .../src/pages/loginFormComponent.tsx | 57 +++++++++ .../14_FormValidation/src/pages/loginPage.tsx | 119 +++--------------- .../src/pages/loginPage.validation.ts | 21 ++-- .../src/pages/loginPage.viewmodel.ts | 11 -- 6 files changed, 98 insertions(+), 143 deletions(-) create mode 100644 hooks/14_FormValidation/src/pages/loginFormComponent.tsx delete mode 100644 hooks/14_FormValidation/src/pages/loginPage.viewmodel.ts diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index f906f597..8447ad96 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -6,7 +6,7 @@ For this we will use lc-form-validation library Summary steps: -- Install lc-form-validation library. +- Install formik, fonk, fonk-formik library. - Refactor input component to a common component and include error validation info. - Let's define the validation for the form. - Let's hook it. @@ -19,10 +19,10 @@ Summary steps: npm install ``` -- Let's install the _lc-form-validation-library_. +- Let's install the _formik, @lemoncode/fonk, @lemoncode/fonk-formik _. ```bash -npm install lc-form-validation --save +npm install formik @lemoncode/fonk @lemoncode/fonk-formik --save ``` - To avoid having too much repeated code let's move to common an input component, including it's @@ -88,22 +88,17 @@ export * from './notification'; _./src/pages/loginPage.validation.ts_ ```typescript -import { - createFormValidation, - ValidationConstraints, - Validators -} from "lc-form-validation"; - -const loginFormValidationConstraints: ValidationConstraints = { - fields: { - login: [{ validator: Validators.required }], - password: [{ validator: Validators.required }] - } +import { ValidationSchema, Validators } from "@lemoncode/fonk"; +import { createFormikValidation } from "@lemoncode/fonk-formik"; + +const validationSchema: ValidationSchema = { + field: { + login: [Validators.required], + password: [Validators.required], + }, }; -export const loginFormValidation = createFormValidation( - loginFormValidationConstraints -); +export const loginFormValidation = createFormikValidation(validationSchema); ``` - Let's create now a class to hold the dataFormErrors. diff --git a/hooks/14_FormValidation/package.json b/hooks/14_FormValidation/package.json index 1360a87c..79169511 100644 --- a/hooks/14_FormValidation/package.json +++ b/hooks/14_FormValidation/package.json @@ -39,9 +39,11 @@ "webpack-dev-server": "^3.11.0" }, "dependencies": { + "@lemoncode/fonk": "^1.3.0", + "@lemoncode/fonk-formik": "^4.0.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", - "lc-form-validation": "^2.0.0", + "formik": "^2.1.5", "react": "^16.13.1", "react-dom": "^16.13.1", "react-router-dom": "^5.2.0" diff --git a/hooks/14_FormValidation/src/pages/loginFormComponent.tsx b/hooks/14_FormValidation/src/pages/loginFormComponent.tsx new file mode 100644 index 00000000..5bb57ebe --- /dev/null +++ b/hooks/14_FormValidation/src/pages/loginFormComponent.tsx @@ -0,0 +1,57 @@ +import * as React from "react"; +import { LoginEntity } from "../model/login"; +import { TextFieldForm } from "../common"; +import { Form } from "formik"; +import createStyles from "@material-ui/styles/createStyles"; +import makeStyles from "@material-ui/styles/makeStyles"; +import Button from "@material-ui/core/Button"; + +interface PropsForm { + onLogin: () => void; + onUpdateField: (string, any) => void; + loginInfo: LoginEntity; +} + +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center", + }, + }) +); + +export const LoginForm: React.FC = (props) => { + const classes = useFormStyles(); + const { onLogin, onUpdateField, loginInfo } = props; + + // TODO: Enhacement move this outside the stateless component discuss why is a good idea + const onTexFieldChange = (fieldID) => (e) => { + onUpdateField(fieldID, e.target.value); + }; + + return ( +
+
+ + + +
+
+ ); +}; diff --git a/hooks/14_FormValidation/src/pages/loginPage.tsx b/hooks/14_FormValidation/src/pages/loginPage.tsx index 03567eac..9344b27e 100644 --- a/hooks/14_FormValidation/src/pages/loginPage.tsx +++ b/hooks/14_FormValidation/src/pages/loginPage.tsx @@ -1,23 +1,15 @@ import * as React from "react"; -import { Link } from "react-router-dom"; import { useHistory } from "react-router-dom"; import makeStyles from "@material-ui/styles/makeStyles"; import createStyles from "@material-ui/styles/createStyles"; import Card from "@material-ui/core/Card"; import CardHeader from "@material-ui/core/CardHeader"; import CardContent from "@material-ui/core/CardContent"; -import TextField from "@material-ui/core/TextField"; -import Button from "@material-ui/core/Button"; -import { FormHelperText } from "@material-ui/core"; import { LoginEntity, createEmptyLogin } from "../model/login"; import { isValidLogin } from "../api/login"; -import { NotificationComponent } from "../common"; -import { - LoginFormErrors, - createDefaultLoginFormErrors, -} from "./loginPage.viewmodel"; import { loginFormValidation } from "./loginPage.validation"; -import { TextFieldForm } from "../common"; +import { Formik } from "formik"; +import { LoginForm } from "./loginFormComponent"; // https://material-ui.com/styles/api/#makestyles-styles-options-hook const useStyles = makeStyles((theme) => @@ -35,30 +27,13 @@ export const LoginPage: React.FC = (props) => { const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); - const [loginFormErrors, setLoginFormErrors] = React.useState( - createDefaultLoginFormErrors() - ); - const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); const classes = useStyles(); const history = useHistory(); const onLogin = () => { - loginFormValidation.validateForm(loginInfo).then((formValidationResult) => { - if (formValidationResult.succeeded) { - if (isValidLogin(loginInfo)) { - history.push("/pageB"); - } else { - setShowLoginFailedMsg(true); - } - } else { - alert("error, review the fields"); - const updatedLoginFormErrors = { - ...loginFormErrors, - ...formValidationResult.fieldErrors, - }; - setLoginFormErrors(updatedLoginFormErrors); - } - }); + if (isValidLogin(loginInfo)) { + history.push("/pageB"); + } }; const onUpdateLoginField = (name, value) => { @@ -66,15 +41,6 @@ export const LoginPage: React.FC = (props) => { ...loginInfo, [name]: value, }); - - loginFormValidation - .validateField(loginInfo, name, value) - .then((fieldValidationResult) => { - setLoginFormErrors({ - ...loginFormErrors, - [name]: fieldValidationResult, - }); - }); }; return ( @@ -82,70 +48,21 @@ export const LoginPage: React.FC = (props) => { - + + {() => ( + + )} + - setShowLoginFailedMsg(false)} - /> ); }; - -interface PropsForm { - onLogin: () => void; - onUpdateField: (string, any) => void; - loginInfo: LoginEntity; - loginFormErrors: LoginFormErrors; -} - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles((theme) => - createStyles({ - formContainer: { - display: "flex", - flexDirection: "column", - justifyContent: "center", - }, - }) -); - -const LoginForm: React.FC = (props) => { - const classes = useFormStyles(); - const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; - - // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = (fieldId) => (e) => { - onUpdateField(fieldId, e.target.value); - }; - - return ( -
- - - -
- ); -}; diff --git a/hooks/14_FormValidation/src/pages/loginPage.validation.ts b/hooks/14_FormValidation/src/pages/loginPage.validation.ts index ae379b5d..20942129 100644 --- a/hooks/14_FormValidation/src/pages/loginPage.validation.ts +++ b/hooks/14_FormValidation/src/pages/loginPage.validation.ts @@ -1,16 +1,11 @@ -import { - createFormValidation, - ValidationConstraints, - Validators -} from "lc-form-validation"; +import { ValidationSchema, Validators } from "@lemoncode/fonk"; +import { createFormikValidation } from "@lemoncode/fonk-formik"; -const loginFormValidationConstraints: ValidationConstraints = { - fields: { - login: [{ validator: Validators.required }], - password: [{ validator: Validators.required }] - } +const validationSchema: ValidationSchema = { + field: { + login: [Validators.required], + password: [Validators.required], + }, }; -export const loginFormValidation = createFormValidation( - loginFormValidationConstraints -); +export const loginFormValidation = createFormikValidation(validationSchema); diff --git a/hooks/14_FormValidation/src/pages/loginPage.viewmodel.ts b/hooks/14_FormValidation/src/pages/loginPage.viewmodel.ts deleted file mode 100644 index 4b3cf5b4..00000000 --- a/hooks/14_FormValidation/src/pages/loginPage.viewmodel.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { FieldValidationResult } from "lc-form-validation"; - -export interface LoginFormErrors { - login: FieldValidationResult; - password: FieldValidationResult; -} - -export const createDefaultLoginFormErrors = (): LoginFormErrors => ({ - login: new FieldValidationResult(), - password: new FieldValidationResult() -}); From cca74bee4869c2e5bdfefa629ef66793d466390a Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Sat, 25 Jul 2020 18:33:22 +0200 Subject: [PATCH 72/80] ref: #187 adding formik pendind setLoginInfo --- hooks/14_FormValidation/src/pages/loginFormComponent.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/hooks/14_FormValidation/src/pages/loginFormComponent.tsx b/hooks/14_FormValidation/src/pages/loginFormComponent.tsx index 5bb57ebe..d2ea4c0b 100644 --- a/hooks/14_FormValidation/src/pages/loginFormComponent.tsx +++ b/hooks/14_FormValidation/src/pages/loginFormComponent.tsx @@ -27,11 +27,6 @@ export const LoginForm: React.FC = (props) => { const classes = useFormStyles(); const { onLogin, onUpdateField, loginInfo } = props; - // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = (fieldID) => (e) => { - onUpdateField(fieldID, e.target.value); - }; - return (
@@ -39,14 +34,14 @@ export const LoginForm: React.FC = (props) => { label="Name" name="login" value={loginInfo.login} - onChange={onTexFieldChange("login")} + onChange={onUpdateField} /> +
+
+ )} + + + + ); +}; diff --git a/hooks/14_FormValidation/src/pages/login.container.tsx b/hooks/14_FormValidation/src/pages/login.container.tsx new file mode 100644 index 00000000..f8c11af9 --- /dev/null +++ b/hooks/14_FormValidation/src/pages/login.container.tsx @@ -0,0 +1,37 @@ +import * as React from "react"; +import { useHistory } from "react-router-dom"; +import { LoginEntity } from "../model/login"; +import { isValidLogin } from "../api/login"; +import { LoginComponent } from "./login.component"; +import { NotificationComponent } from "../common"; + +interface Props {} + +export const LoginContainer: React.FC = (props) => { + const history = useHistory(); + const [isShowAlert, setShowAlert] = React.useState(false); + + const loginSucceeded = (isValid: boolean) => { + if (isValid) { + history.push("/pageB"); + } else { + setShowAlert(true); + } + }; + + const handleLogin = (login: LoginEntity) => { + isValidLogin(login).then(loginSucceeded); + }; + + return ( + <> + + setShowAlert(false)} + /> + ; + + ); +}; diff --git a/hooks/14_FormValidation/src/pages/loginPage.validation.ts b/hooks/14_FormValidation/src/pages/login.validation.ts similarity index 100% rename from hooks/14_FormValidation/src/pages/loginPage.validation.ts rename to hooks/14_FormValidation/src/pages/login.validation.ts diff --git a/hooks/14_FormValidation/src/pages/loginFormComponent.tsx b/hooks/14_FormValidation/src/pages/loginFormComponent.tsx deleted file mode 100644 index d2ea4c0b..00000000 --- a/hooks/14_FormValidation/src/pages/loginFormComponent.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from "react"; -import { LoginEntity } from "../model/login"; -import { TextFieldForm } from "../common"; -import { Form } from "formik"; -import createStyles from "@material-ui/styles/createStyles"; -import makeStyles from "@material-ui/styles/makeStyles"; -import Button from "@material-ui/core/Button"; - -interface PropsForm { - onLogin: () => void; - onUpdateField: (string, any) => void; - loginInfo: LoginEntity; -} - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles((theme) => - createStyles({ - formContainer: { - display: "flex", - flexDirection: "column", - justifyContent: "center", - }, - }) -); - -export const LoginForm: React.FC = (props) => { - const classes = useFormStyles(); - const { onLogin, onUpdateField, loginInfo } = props; - - return ( -
-
- - - -
-
- ); -}; diff --git a/hooks/14_FormValidation/src/pages/loginPage.tsx b/hooks/14_FormValidation/src/pages/loginPage.tsx deleted file mode 100644 index 9344b27e..00000000 --- a/hooks/14_FormValidation/src/pages/loginPage.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from "react"; -import { useHistory } from "react-router-dom"; -import makeStyles from "@material-ui/styles/makeStyles"; -import createStyles from "@material-ui/styles/createStyles"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; -import { LoginEntity, createEmptyLogin } from "../model/login"; -import { isValidLogin } from "../api/login"; -import { loginFormValidation } from "./loginPage.validation"; -import { Formik } from "formik"; -import { LoginForm } from "./loginFormComponent"; - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles((theme) => - createStyles({ - card: { - maxWidth: 400, - margin: "0 auto", - }, - }) -); - -interface Props {} - -export const LoginPage: React.FC = (props) => { - const [loginInfo, setLoginInfo] = React.useState( - createEmptyLogin() - ); - const classes = useStyles(); - const history = useHistory(); - - const onLogin = () => { - if (isValidLogin(loginInfo)) { - history.push("/pageB"); - } - }; - - const onUpdateLoginField = (name, value) => { - setLoginInfo({ - ...loginInfo, - [name]: value, - }); - }; - - return ( - <> - - - - - {() => ( - - )} - - - - - ); -}; From 292d24d31b13c2334ae12f2b930761c4525d8678 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Wed, 12 Aug 2020 11:38:40 +0200 Subject: [PATCH 74/80] ref:#187 14_FormValidation semicolon typo --- hooks/14_FormValidation/src/pages/login.container.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/hooks/14_FormValidation/src/pages/login.container.tsx b/hooks/14_FormValidation/src/pages/login.container.tsx index f8c11af9..eef45302 100644 --- a/hooks/14_FormValidation/src/pages/login.container.tsx +++ b/hooks/14_FormValidation/src/pages/login.container.tsx @@ -31,7 +31,6 @@ export const LoginContainer: React.FC = (props) => { message="Invalid Form" onClose={() => setShowAlert(false)} /> - ; ); }; From 722a324b326f092320fd1671d513fc47260971f0 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Wed, 12 Aug 2020 11:39:27 +0200 Subject: [PATCH 75/80] ref:#187 14_FormValidation top message --- hooks/14_FormValidation/src/common/notification.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/14_FormValidation/src/common/notification.tsx b/hooks/14_FormValidation/src/common/notification.tsx index 7f1a3336..50e2b706 100644 --- a/hooks/14_FormValidation/src/common/notification.tsx +++ b/hooks/14_FormValidation/src/common/notification.tsx @@ -26,8 +26,8 @@ export const NotificationComponent: React.FC = (props) => { return ( Date: Wed, 12 Aug 2020 12:22:51 +0200 Subject: [PATCH 76/80] ref:#187 15 adding context form validation --- hooks/15_Context/package.json | 4 +- hooks/15_Context/src/api/login.ts | 11 +- hooks/15_Context/src/app.tsx | 4 +- hooks/15_Context/src/common/index.ts | 2 +- hooks/15_Context/src/common/notification.tsx | 4 +- .../src/common/textField.component.tsx | 25 +++ hooks/15_Context/src/common/textFieldForm.tsx | 41 ----- .../15_Context/src/pages/login.component.tsx | 65 ++++++++ .../15_Context/src/pages/login.container.tsx | 39 +++++ .../15_Context/src/pages/login.validation.ts | 11 ++ hooks/15_Context/src/pages/loginPage.tsx | 149 ------------------ .../src/pages/loginPage.validation.ts | 16 -- .../src/pages/loginPage.viewmodel.ts | 11 -- hooks/15_Context/src/pages/pageB.tsx | 2 +- 14 files changed, 157 insertions(+), 227 deletions(-) create mode 100644 hooks/15_Context/src/common/textField.component.tsx delete mode 100644 hooks/15_Context/src/common/textFieldForm.tsx create mode 100644 hooks/15_Context/src/pages/login.component.tsx create mode 100644 hooks/15_Context/src/pages/login.container.tsx create mode 100644 hooks/15_Context/src/pages/login.validation.ts delete mode 100644 hooks/15_Context/src/pages/loginPage.tsx delete mode 100644 hooks/15_Context/src/pages/loginPage.validation.ts delete mode 100644 hooks/15_Context/src/pages/loginPage.viewmodel.ts diff --git a/hooks/15_Context/package.json b/hooks/15_Context/package.json index 1360a87c..79169511 100644 --- a/hooks/15_Context/package.json +++ b/hooks/15_Context/package.json @@ -39,9 +39,11 @@ "webpack-dev-server": "^3.11.0" }, "dependencies": { + "@lemoncode/fonk": "^1.3.0", + "@lemoncode/fonk-formik": "^4.0.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", - "lc-form-validation": "^2.0.0", + "formik": "^2.1.5", "react": "^16.13.1", "react-dom": "^16.13.1", "react-router-dom": "^5.2.0" diff --git a/hooks/15_Context/src/api/login.ts b/hooks/15_Context/src/api/login.ts index 1f7d4f3b..6fd3e26c 100644 --- a/hooks/15_Context/src/api/login.ts +++ b/hooks/15_Context/src/api/login.ts @@ -1,5 +1,10 @@ -import {LoginEntity} from '../model/login'; +import { LoginEntity } from "../model/login"; // Just a fake loginAPI -export const isValidLogin = (loginInfo : LoginEntity) : boolean => - (loginInfo.login === 'admin' && loginInfo.password === 'test'); +export const isValidLogin = (loginInfo: LoginEntity): Promise => + new Promise((resolve) => { + setTimeout(() => { + // mock call + resolve(loginInfo.login === "admin" && loginInfo.password === "test"); + }, 500); + }); diff --git a/hooks/15_Context/src/app.tsx b/hooks/15_Context/src/app.tsx index 44bd6549..89ae2660 100644 --- a/hooks/15_Context/src/app.tsx +++ b/hooks/15_Context/src/app.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import { HashRouter, Switch, Route } from "react-router-dom"; -import { LoginPage } from "./pages/loginPage"; +import { LoginContainer } from "./pages/login.container"; import { PageB } from "./pages/pageB"; import { SessionProvider } from "./common"; @@ -10,7 +10,7 @@ export const App = () => { - + diff --git a/hooks/15_Context/src/common/index.ts b/hooks/15_Context/src/common/index.ts index c6185541..feefdf2a 100644 --- a/hooks/15_Context/src/common/index.ts +++ b/hooks/15_Context/src/common/index.ts @@ -1,3 +1,3 @@ export * from "./notification"; -export * from "./textFieldForm"; +export * from "./textField.component"; export * from "./sessionContext"; diff --git a/hooks/15_Context/src/common/notification.tsx b/hooks/15_Context/src/common/notification.tsx index 7f1a3336..50e2b706 100644 --- a/hooks/15_Context/src/common/notification.tsx +++ b/hooks/15_Context/src/common/notification.tsx @@ -26,8 +26,8 @@ export const NotificationComponent: React.FC = (props) => { return ( = (props) => { + const [field, meta] = useField(props.name); + const textFieldProps = Boolean(field) ? field : props; + const hasError = Boolean(meta && meta.touched && meta.error); + + return ( + <> + + + ); +}; diff --git a/hooks/15_Context/src/common/textFieldForm.tsx b/hooks/15_Context/src/common/textFieldForm.tsx deleted file mode 100644 index 5be9a8be..00000000 --- a/hooks/15_Context/src/common/textFieldForm.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import * as React from "react"; -import TextField from "@material-ui/core/TextField"; -import Typography from "@material-ui/core/Typography/Typography"; - -interface Props { - name: string; - label: string; - onChange: any; - value: string; - error?: string; - type?: string; -} - -const defaultProps: Partial = { - type: "text", -}; - -const onTextFieldChange = ( - fieldId: string, - onChange: (fieldId, value) => void -) => (e) => { - onChange(fieldId, e.target.value); -}; - -export const TextFieldForm: React.StatelessComponent = (props) => { - const { name, label, onChange, value, error, type } = props; - return ( - <> - - - {error} - - - ); -}; diff --git a/hooks/15_Context/src/pages/login.component.tsx b/hooks/15_Context/src/pages/login.component.tsx new file mode 100644 index 00000000..8af9f671 --- /dev/null +++ b/hooks/15_Context/src/pages/login.component.tsx @@ -0,0 +1,65 @@ +import * as React from "react"; +import { LoginEntity, createEmptyLogin } from "../model/login"; +import { TextFieldComponent } from "../common"; +import { Form } from "formik"; +import createStyles from "@material-ui/styles/createStyles"; +import makeStyles from "@material-ui/styles/makeStyles"; +import Button from "@material-ui/core/Button"; +import Card from "@material-ui/core/Card"; +import CardHeader from "@material-ui/core/CardHeader"; +import CardContent from "@material-ui/core/CardContent"; +import { loginFormValidation } from "./login.validation"; +import { Formik } from "formik"; + +interface PropsForm { + onLogin: (login: LoginEntity) => void; +} + +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center", + }, + card: { + maxWidth: 400, + margin: "0 auto", + }, + }) +); + +export const LoginComponent: React.FC = (props) => { + const classes = useFormStyles(); + const { onLogin } = props; + + return ( + + + + + {() => ( +
+
+ + + +
+
+ )} +
+
+
+ ); +}; diff --git a/hooks/15_Context/src/pages/login.container.tsx b/hooks/15_Context/src/pages/login.container.tsx new file mode 100644 index 00000000..76e13d30 --- /dev/null +++ b/hooks/15_Context/src/pages/login.container.tsx @@ -0,0 +1,39 @@ +import * as React from "react"; +import { useHistory } from "react-router-dom"; +import { LoginEntity } from "../model/login"; +import { isValidLogin } from "../api/login"; +import { LoginComponent } from "./login.component"; +import { NotificationComponent, SessionContext } from "../common"; +import { light } from "@material-ui/core/styles/createPalette"; + +interface Props {} + +export const LoginContainer: React.FC = (props) => { + const loginContext = React.useContext(SessionContext); + const history = useHistory(); + const [isShowAlert, setShowAlert] = React.useState(false); + + const loginSucceeded = (isValid: boolean, login: LoginEntity) => { + if (isValid) { + history.push("/pageB"); + loginContext.updateLogin(login.login); + } else { + setShowAlert(true); + } + }; + + const handleLogin = (login: LoginEntity) => { + isValidLogin(login).then((isValid) => loginSucceeded(isValid, login)); + }; + + return ( + <> + + setShowAlert(false)} + /> + + ); +}; diff --git a/hooks/15_Context/src/pages/login.validation.ts b/hooks/15_Context/src/pages/login.validation.ts new file mode 100644 index 00000000..20942129 --- /dev/null +++ b/hooks/15_Context/src/pages/login.validation.ts @@ -0,0 +1,11 @@ +import { ValidationSchema, Validators } from "@lemoncode/fonk"; +import { createFormikValidation } from "@lemoncode/fonk-formik"; + +const validationSchema: ValidationSchema = { + field: { + login: [Validators.required], + password: [Validators.required], + }, +}; + +export const loginFormValidation = createFormikValidation(validationSchema); diff --git a/hooks/15_Context/src/pages/loginPage.tsx b/hooks/15_Context/src/pages/loginPage.tsx deleted file mode 100644 index 2d3fed4c..00000000 --- a/hooks/15_Context/src/pages/loginPage.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import * as React from "react"; -import { useHistory } from "react-router-dom"; -import makeStyles from "@material-ui/styles/makestyles"; -import createStyles from "@material-ui/styles/createStyles"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; -import Button from "@material-ui/core/Button"; -import { LoginEntity, createEmptyLogin } from "../model/login"; -import { isValidLogin } from "../api/login"; -import { NotificationComponent } from "../common"; -import { - LoginFormErrors, - createDefaultLoginFormErrors, -} from "./loginPage.viewmodel"; -import { loginFormValidation } from "./loginPage.validation"; -import { TextFieldForm, SessionContext } from "../common"; - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles((theme) => - createStyles({ - card: { - maxWidth: 400, - margin: "0 auto", - }, - }) -); - -const LoginPage: React.FC = (props) => { - const loginContext = React.useContext(SessionContext); - const history = useHistory(); - - const [loginInfo, setLoginInfo] = React.useState( - createEmptyLogin() - ); - const [loginFormErrors, setLoginFormErrors] = React.useState( - createDefaultLoginFormErrors() - ); - const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const classes = useStyles(); - - const onLogin = () => { - loginFormValidation.validateForm(loginInfo).then((formValidationResult) => { - if (formValidationResult.succeeded) { - if (isValidLogin(loginInfo)) { - history.push("/pageB"); - loginContext.updateLogin(loginInfo.login); - } else { - setShowLoginFailedMsg(true); - } - } else { - alert("error, review the fields"); - const updatedLoginFormErrors = { - ...loginFormErrors, - ...formValidationResult.fieldErrors, - }; - setLoginFormErrors(updatedLoginFormErrors); - } - }); - }; - - const onUpdateLoginField = (name, value) => { - setLoginInfo({ - ...loginInfo, - [name]: value, - }); - - loginFormValidation - .validateField(loginInfo, name, value) - .then((fieldValidationResult) => { - setLoginFormErrors({ - ...loginFormErrors, - [name]: fieldValidationResult, - }); - }); - }; - - return ( - <> - - - - - - - setShowLoginFailedMsg(false)} - /> - - ); -}; - -interface PropsForm { - onLogin: () => void; - onUpdateField: (string, any) => void; - loginInfo: LoginEntity; - loginFormErrors: LoginFormErrors; -} - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles((theme) => - createStyles({ - formContainer: { - display: "flex", - flexDirection: "column", - justifyContent: "center", - }, - }) -); - -const LoginForm: React.FC = (props) => { - const classes = useFormStyles(); - const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; - - // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = (fieldId) => (e) => { - onUpdateField(fieldId, e.target.value); - }; - - return ( -
- - - -
- ); -}; diff --git a/hooks/15_Context/src/pages/loginPage.validation.ts b/hooks/15_Context/src/pages/loginPage.validation.ts deleted file mode 100644 index ae379b5d..00000000 --- a/hooks/15_Context/src/pages/loginPage.validation.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - createFormValidation, - ValidationConstraints, - Validators -} from "lc-form-validation"; - -const loginFormValidationConstraints: ValidationConstraints = { - fields: { - login: [{ validator: Validators.required }], - password: [{ validator: Validators.required }] - } -}; - -export const loginFormValidation = createFormValidation( - loginFormValidationConstraints -); diff --git a/hooks/15_Context/src/pages/loginPage.viewmodel.ts b/hooks/15_Context/src/pages/loginPage.viewmodel.ts deleted file mode 100644 index 4b3cf5b4..00000000 --- a/hooks/15_Context/src/pages/loginPage.viewmodel.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { FieldValidationResult } from "lc-form-validation"; - -export interface LoginFormErrors { - login: FieldValidationResult; - password: FieldValidationResult; -} - -export const createDefaultLoginFormErrors = (): LoginFormErrors => ({ - login: new FieldValidationResult(), - password: new FieldValidationResult() -}); diff --git a/hooks/15_Context/src/pages/pageB.tsx b/hooks/15_Context/src/pages/pageB.tsx index af5c08a3..ccf75980 100644 --- a/hooks/15_Context/src/pages/pageB.tsx +++ b/hooks/15_Context/src/pages/pageB.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import { Link } from "react-router-dom"; import { SessionContext } from "../common"; -export const PageB = () => { +export const PageB: React.FC = () => { const loginContext = React.useContext(SessionContext); return ( From 87b2a985d1b6750d58487ec29efc7528bb97b4b9 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Wed, 12 Aug 2020 13:45:43 +0200 Subject: [PATCH 77/80] ref:#187 13 login form change to continue the line of 14 15 --- hooks/13_LoginForm/src/api/login.ts | 11 +- hooks/13_LoginForm/src/app.tsx | 4 +- .../13_LoginForm/src/common/notification.tsx | 4 +- .../src/pages/login.component.tsx | 72 +++++++++++ .../src/pages/login.container.tsx | 36 ++++++ hooks/13_LoginForm/src/pages/loginPage.tsx | 116 ------------------ 6 files changed, 120 insertions(+), 123 deletions(-) create mode 100644 hooks/13_LoginForm/src/pages/login.component.tsx create mode 100644 hooks/13_LoginForm/src/pages/login.container.tsx delete mode 100644 hooks/13_LoginForm/src/pages/loginPage.tsx diff --git a/hooks/13_LoginForm/src/api/login.ts b/hooks/13_LoginForm/src/api/login.ts index 1f7d4f3b..6fd3e26c 100644 --- a/hooks/13_LoginForm/src/api/login.ts +++ b/hooks/13_LoginForm/src/api/login.ts @@ -1,5 +1,10 @@ -import {LoginEntity} from '../model/login'; +import { LoginEntity } from "../model/login"; // Just a fake loginAPI -export const isValidLogin = (loginInfo : LoginEntity) : boolean => - (loginInfo.login === 'admin' && loginInfo.password === 'test'); +export const isValidLogin = (loginInfo: LoginEntity): Promise => + new Promise((resolve) => { + setTimeout(() => { + // mock call + resolve(loginInfo.login === "admin" && loginInfo.password === "test"); + }, 500); + }); diff --git a/hooks/13_LoginForm/src/app.tsx b/hooks/13_LoginForm/src/app.tsx index 9c1b1a24..169d50d8 100644 --- a/hooks/13_LoginForm/src/app.tsx +++ b/hooks/13_LoginForm/src/app.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import { HashRouter, Switch, Route } from "react-router-dom"; -import { LoginPage } from "./pages/loginPage"; +import { LoginContainer } from "./pages/login.container"; import { PageB } from "./pages/pageB"; export const App = () => { @@ -8,7 +8,7 @@ export const App = () => { <> - + diff --git a/hooks/13_LoginForm/src/common/notification.tsx b/hooks/13_LoginForm/src/common/notification.tsx index 7f1a3336..50e2b706 100644 --- a/hooks/13_LoginForm/src/common/notification.tsx +++ b/hooks/13_LoginForm/src/common/notification.tsx @@ -26,8 +26,8 @@ export const NotificationComponent: React.FC = (props) => { return ( void; +} + +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + formContainer: { + display: "flex", + flexDirection: "column", + justifyContent: "center", + }, + card: { + maxWidth: 400, + margin: "0 auto", + }, + }) +); + +export const LoginComponent: React.FC = (props) => { + const { onLogin } = props; + const [loginInfo, setLoginInfo] = React.useState( + createEmptyLogin() + ); + const classes = useFormStyles(); + const onTexFieldChange = (fieldId) => (e) => { + setLoginInfo({ + ...loginInfo, + [fieldId]: e.target.value, + }); + }; + + return ( + + + +
+ + + +
+
+
+ ); +}; diff --git a/hooks/13_LoginForm/src/pages/login.container.tsx b/hooks/13_LoginForm/src/pages/login.container.tsx new file mode 100644 index 00000000..eef45302 --- /dev/null +++ b/hooks/13_LoginForm/src/pages/login.container.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { useHistory } from "react-router-dom"; +import { LoginEntity } from "../model/login"; +import { isValidLogin } from "../api/login"; +import { LoginComponent } from "./login.component"; +import { NotificationComponent } from "../common"; + +interface Props {} + +export const LoginContainer: React.FC = (props) => { + const history = useHistory(); + const [isShowAlert, setShowAlert] = React.useState(false); + + const loginSucceeded = (isValid: boolean) => { + if (isValid) { + history.push("/pageB"); + } else { + setShowAlert(true); + } + }; + + const handleLogin = (login: LoginEntity) => { + isValidLogin(login).then(loginSucceeded); + }; + + return ( + <> + + setShowAlert(false)} + /> + + ); +}; diff --git a/hooks/13_LoginForm/src/pages/loginPage.tsx b/hooks/13_LoginForm/src/pages/loginPage.tsx deleted file mode 100644 index 9caa627d..00000000 --- a/hooks/13_LoginForm/src/pages/loginPage.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import * as React from "react"; -import { useHistory } from "react-router-dom"; -import makeStyles from "@material-ui/styles/makeStyles"; -import createStyles from "@material-ui/styles/createStyles"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; -import TextField from "@material-ui/core/TextField"; -import Button from "@material-ui/core/Button"; -import { LoginEntity, createEmptyLogin } from "../model/login"; -import { isValidLogin } from "../api/login"; -import { NotificationComponent } from "../common"; - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useStyles = makeStyles((theme) => - createStyles({ - card: { - maxWidth: 400, - margin: "0 auto", - }, - }) -); - -interface Props {} - -export const LoginPage: React.FC = (props) => { - const [loginInfo, setLoginInfo] = React.useState( - createEmptyLogin() - ); - const history = useHistory(); - const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const classes = useStyles(); - - const onLogin = () => { - if (isValidLogin(loginInfo)) { - history.push("/pageB"); - } else { - setShowLoginFailedMsg(true); - } - }; - - const onUpdateLoginField = (name, value) => { - setLoginInfo({ - ...loginInfo, - [name]: value, - }); - }; - - return ( - <> - - - - - - - setShowLoginFailedMsg(false)} - /> - - ); -}; - -interface PropsForm { - onLogin: () => void; - onUpdateField: (name: string, value: any) => void; - loginInfo: LoginEntity; -} - -// https://material-ui.com/styles/api/#makestyles-styles-options-hook -const useFormStyles = makeStyles((theme) => - createStyles({ - formContainer: { - display: "flex", - flexDirection: "column", - justifyContent: "center", - }, - }) -); - -const LoginForm: React.FC = (props) => { - const classes = useFormStyles(); - const { onLogin, onUpdateField, loginInfo } = props; - - // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = (fieldId) => (e) => { - onUpdateField(fieldId, e.target.value); - }; - - return ( -
- - - -
- ); -}; From d14cad38544e1db28cbf71d6226b4f93febb1f30 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Wed, 12 Aug 2020 14:58:14 +0200 Subject: [PATCH 78/80] ref:#187 13, 14, 15 making continue and improve the container --- .../src/pages/login.component.tsx | 56 ++++++++----------- .../src/pages/login.container.tsx | 33 +++++++++-- .../src/pages/login.component.tsx | 54 +++++++----------- .../src/pages/login.container.tsx | 34 +++++++++-- .../15_Context/src/pages/login.component.tsx | 50 +++++++---------- .../15_Context/src/pages/login.container.tsx | 34 ++++++++--- 6 files changed, 146 insertions(+), 115 deletions(-) diff --git a/hooks/13_LoginForm/src/pages/login.component.tsx b/hooks/13_LoginForm/src/pages/login.component.tsx index 1a54103d..c78a4851 100644 --- a/hooks/13_LoginForm/src/pages/login.component.tsx +++ b/hooks/13_LoginForm/src/pages/login.component.tsx @@ -3,9 +3,6 @@ import makeStyles from "@material-ui/styles/makeStyles"; import createStyles from "@material-ui/styles/createStyles"; import TextField from "@material-ui/core/TextField"; import Button from "@material-ui/core/Button"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; import { LoginEntity, createEmptyLogin } from "../model/login"; interface PropsForm { @@ -20,10 +17,6 @@ const useFormStyles = makeStyles((theme) => flexDirection: "column", justifyContent: "center", }, - card: { - maxWidth: 400, - margin: "0 auto", - }, }) ); @@ -41,32 +34,27 @@ export const LoginComponent: React.FC = (props) => { }; return ( - - - -
- - - -
-
-
+
+ + + +
); }; diff --git a/hooks/13_LoginForm/src/pages/login.container.tsx b/hooks/13_LoginForm/src/pages/login.container.tsx index eef45302..0bf329ad 100644 --- a/hooks/13_LoginForm/src/pages/login.container.tsx +++ b/hooks/13_LoginForm/src/pages/login.container.tsx @@ -3,13 +3,29 @@ import { useHistory } from "react-router-dom"; import { LoginEntity } from "../model/login"; import { isValidLogin } from "../api/login"; import { LoginComponent } from "./login.component"; +import Card from "@material-ui/core/Card"; +import CardHeader from "@material-ui/core/CardHeader"; +import CardContent from "@material-ui/core/CardContent"; +import createStyles from "@material-ui/styles/createStyles"; +import makeStyles from "@material-ui/styles/makeStyles"; import { NotificationComponent } from "../common"; +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + card: { + maxWidth: 400, + margin: "0 auto", + }, + }) +); + interface Props {} export const LoginContainer: React.FC = (props) => { const history = useHistory(); const [isShowAlert, setShowAlert] = React.useState(false); + const classes = useFormStyles(); const loginSucceeded = (isValid: boolean) => { if (isValid) { @@ -25,12 +41,17 @@ export const LoginContainer: React.FC = (props) => { return ( <> - - setShowAlert(false)} - /> + + + + + setShowAlert(false)} + /> + + ); }; diff --git a/hooks/14_FormValidation/src/pages/login.component.tsx b/hooks/14_FormValidation/src/pages/login.component.tsx index 8af9f671..e968d5d6 100644 --- a/hooks/14_FormValidation/src/pages/login.component.tsx +++ b/hooks/14_FormValidation/src/pages/login.component.tsx @@ -5,9 +5,6 @@ import { Form } from "formik"; import createStyles from "@material-ui/styles/createStyles"; import makeStyles from "@material-ui/styles/makeStyles"; import Button from "@material-ui/core/Button"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; import { loginFormValidation } from "./login.validation"; import { Formik } from "formik"; @@ -23,10 +20,6 @@ const useFormStyles = makeStyles((theme) => flexDirection: "column", justifyContent: "center", }, - card: { - maxWidth: 400, - margin: "0 auto", - }, }) ); @@ -35,31 +28,26 @@ export const LoginComponent: React.FC = (props) => { const { onLogin } = props; return ( - - - - - {() => ( -
-
- - - -
-
- )} -
-
-
+ + {() => ( +
+
+ + + +
+
+ )} +
); }; diff --git a/hooks/14_FormValidation/src/pages/login.container.tsx b/hooks/14_FormValidation/src/pages/login.container.tsx index eef45302..55d1f0c5 100644 --- a/hooks/14_FormValidation/src/pages/login.container.tsx +++ b/hooks/14_FormValidation/src/pages/login.container.tsx @@ -3,13 +3,30 @@ import { useHistory } from "react-router-dom"; import { LoginEntity } from "../model/login"; import { isValidLogin } from "../api/login"; import { LoginComponent } from "./login.component"; +import Card from "@material-ui/core/Card"; +import CardHeader from "@material-ui/core/CardHeader"; +import CardContent from "@material-ui/core/CardContent"; +import createStyles from "@material-ui/styles/createStyles"; +import makeStyles from "@material-ui/styles/makeStyles"; import { NotificationComponent } from "../common"; +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + card: { + maxWidth: 400, + margin: "0 auto", + }, + }) +); + +interface Props {} interface Props {} export const LoginContainer: React.FC = (props) => { const history = useHistory(); const [isShowAlert, setShowAlert] = React.useState(false); + const classes = useFormStyles(); const loginSucceeded = (isValid: boolean) => { if (isValid) { @@ -25,12 +42,17 @@ export const LoginContainer: React.FC = (props) => { return ( <> - - setShowAlert(false)} - /> + + + + + setShowAlert(false)} + /> + + ); }; diff --git a/hooks/15_Context/src/pages/login.component.tsx b/hooks/15_Context/src/pages/login.component.tsx index 8af9f671..2c4adb0e 100644 --- a/hooks/15_Context/src/pages/login.component.tsx +++ b/hooks/15_Context/src/pages/login.component.tsx @@ -5,9 +5,6 @@ import { Form } from "formik"; import createStyles from "@material-ui/styles/createStyles"; import makeStyles from "@material-ui/styles/makeStyles"; import Button from "@material-ui/core/Button"; -import Card from "@material-ui/core/Card"; -import CardHeader from "@material-ui/core/CardHeader"; -import CardContent from "@material-ui/core/CardContent"; import { loginFormValidation } from "./login.validation"; import { Formik } from "formik"; @@ -35,31 +32,26 @@ export const LoginComponent: React.FC = (props) => { const { onLogin } = props; return ( - - - - - {() => ( -
-
- - - -
-
- )} -
-
-
+ + {() => ( +
+
+ + + +
+
+ )} +
); }; diff --git a/hooks/15_Context/src/pages/login.container.tsx b/hooks/15_Context/src/pages/login.container.tsx index 76e13d30..59574c3f 100644 --- a/hooks/15_Context/src/pages/login.container.tsx +++ b/hooks/15_Context/src/pages/login.container.tsx @@ -3,8 +3,22 @@ import { useHistory } from "react-router-dom"; import { LoginEntity } from "../model/login"; import { isValidLogin } from "../api/login"; import { LoginComponent } from "./login.component"; +import Card from "@material-ui/core/Card"; +import CardHeader from "@material-ui/core/CardHeader"; +import CardContent from "@material-ui/core/CardContent"; +import createStyles from "@material-ui/styles/createStyles"; +import makeStyles from "@material-ui/styles/makeStyles"; import { NotificationComponent, SessionContext } from "../common"; -import { light } from "@material-ui/core/styles/createPalette"; + +// https://material-ui.com/styles/api/#makestyles-styles-options-hook +const useFormStyles = makeStyles((theme) => + createStyles({ + card: { + maxWidth: 400, + margin: "0 auto", + }, + }) +); interface Props {} @@ -12,6 +26,7 @@ export const LoginContainer: React.FC = (props) => { const loginContext = React.useContext(SessionContext); const history = useHistory(); const [isShowAlert, setShowAlert] = React.useState(false); + const classes = useFormStyles(); const loginSucceeded = (isValid: boolean, login: LoginEntity) => { if (isValid) { @@ -28,12 +43,17 @@ export const LoginContainer: React.FC = (props) => { return ( <> - - setShowAlert(false)} - /> + + + + + setShowAlert(false)} + /> + + ); }; From 8269e57a422c47c9bab00dc710e69328a6c69a5b Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 14 Aug 2020 10:35:50 +0200 Subject: [PATCH 79/80] ref:#187 update doc 13 --- hooks/13_LoginForm/Readme.md | 171 +++++++++--------- .../src/pages/login.container.tsx | 2 +- .../src/pages/login.container.tsx | 2 +- .../15_Context/src/pages/login.container.tsx | 2 +- 4 files changed, 92 insertions(+), 85 deletions(-) diff --git a/hooks/13_LoginForm/Readme.md b/hooks/13_LoginForm/Readme.md index b505d8ba..5cef8683 100644 --- a/hooks/13_LoginForm/Readme.md +++ b/hooks/13_LoginForm/Readme.md @@ -18,14 +18,14 @@ npm install - Let's update as well the name of the component. -_./src/pages/loginPage.tsx_ +_./src/pages/login.component.tsx_ ```diff import * as React from "react"; import { Link } from "react-router-dom"; - export const PageA = () => ( -+ export const LoginPage = () => ( ++ export const LoginComponent: React.FC = (props) => {
-

Hello from page A

+

Hello from login Page

@@ -43,7 +43,7 @@ _./src/app.tsx_ import * as React from "react"; import { HashRouter, Switch, Route } from "react-router-dom"; - import { PageA } from "./pages/pageA"; -+ import { LoginPage } from "./pages/loginPage"; ++ import { LoginComponent } from "./pages/login.component"; import { PageB } from "./pages/pageB"; export const App = () => { @@ -53,7 +53,7 @@ export const App = () => { - -+ ++ @@ -118,7 +118,7 @@ npm install @material-ui/core @material-ui/icons --save - Now we could create a login form it could look something like: -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```javascript import * as React from "react"; @@ -143,7 +143,7 @@ const useStyles = makeStyles(theme => interface Props extends RouteComponentProps {} -const LoginPageInner = (props: Props) => { +export const LoginContainer: React.FC = (props) => { const classes = useStyles(); return ( @@ -167,8 +167,6 @@ const LoginPageInner = (props: Props) => { ); }; - -export const LoginPage = withRouter < Props > LoginPageInner; ``` - This can be ok, but if we take a deeper look to this component, we could break down into two, one is the card itself the other the form dialog, so it should finally look like: @@ -186,10 +184,10 @@ export const LoginPage = withRouter < Props > LoginPageInner; - Let's create the LoginForm component (append it to the loginPage file): -_./src/pages/loginPage.tsx_ +_./src/pages/login.component.tsx_ ```javascript -const LoginForm = props => { +export const LoginComponent: React.FC = (props) => { return (
{ justifyContent: "center" }} > - - -
@@ -208,16 +216,16 @@ const LoginForm = props => { }; ``` -- And let's update the _loginPage.tsx_ +- And let's update the _login.container.tsx_ -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff return ( -+ ++ -
- interface Props extends RouteComponentProps {} -const LoginPageInner = (props) => { +export const LoginContainer: React.FC = (props) => { const { classes } = props; + const onLogin = () => { @@ -282,14 +290,13 @@ const LoginPageInner = (props) => { ) } -export const LoginPage = withRouter(LoginPageInner); ``` - Let's add the navigation on button clicked (later on we will check for user and pwd) _form.tsx_. In order to do this we have used react-router 4 "withRouter" HoC (High order component), and pass it down to the LoginForm component. -_./src/pages/loginPage.tsx_ +_./src/pages/login.component.tsx_ ```diff +interface PropsForm { @@ -351,62 +358,59 @@ _./src/api/login.ts_ import { LoginEntity } from "../model/login"; // Just a fake loginAPI -export const isValidLogin = (loginInfo: LoginEntity): boolean => - loginInfo.login === "admin" && loginInfo.password === "test"; +export const isValidLogin = (loginInfo: LoginEntity): Promise => + new Promise((resolve) => { + setTimeout(() => { + // mock call + resolve(loginInfo.login === "admin" && loginInfo.password === "test"); + }, 500); + }); ``` - Let's add the _api_ integration, plus navigation on login succeeded: - First let's create a login state and add the api integration. -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff + import { LoginEntity, createEmptyLogin } from '../model/login'; + import { isValidLogin } from '../api/login'; ``` -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff const LoginPageInner = (props: Props) => { -+ const [loginInfo, setLoginInfo] = React.useState(createEmptyLogin()); ++ const [loginInfo, setLoginInfo] = React.useState( ++ createEmptyLogin() ++ ); const { classes } = props; - const onLogin = () => { -+ if(isValidLogin(loginInfo)) { - props.history.push("/pageB"); -+ } + const loginSucceeded = (isValid: boolean) => { + if (isValid) { + history.push("/pageB"); + } else { + setShowAlert(true); + } + }; + + const handleLogin = (login: LoginEntity) => { + isValidLogin(login).then(loginSucceeded); }; ``` - Now let's read the data from the textfields components (user and password). -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff - const onLogin = () => { - if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); - } - }; - -+ const onUpdateLoginField = (name, value) => { -+ setLoginInfo({ -+ ...loginInfo, -+ [name]: value, -+ }) -+ } - return ( - ++ ); @@ -414,23 +418,25 @@ _./src/pages/loginPage.tsx_ - And update _LoginForm_ props and textField onChange. -_./src/pages/loginPage.tsx_ +_./src/pages/login.component.tsx_ ```diff interface PropsForm { - onLogin: () => void; -+ onUpdateField: (name: string, value: any) => void; -+ loginInfo : LoginEntity; ++ onLogin: (login: LoginEntity) => void; } -const LoginForm = (props: PropsForm) => { -- const { onLogin } = props; -+ const { onLogin, onUpdateField, loginInfo } = props; - -+ // TODO: Enhacement move this outside the stateless component discuss why is a good idea +export const LoginComponent: React.FC = (props) => { ++ const [loginInfo, setLoginInfo] = React.useState( ++ const { onLogin } = props; ++ createEmptyLogin() ++ ); ++ const classes = useFormStyles(); + const onTexFieldChange = (fieldId) => (e) => { -+ onUpdateField(fieldId, e.target.value); -+ } ++ setLoginInfo({ ++ ...loginInfo, ++ [fieldId]: e.target.value, ++ }); ++ }; return (
{ justifyContent: "center" }} > - - -
@@ -458,13 +473,11 @@ const LoginForm = (props: PropsForm) => { - We will add material-ui classes to LoginForm component. -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff interface PropsForm { - onLogin: () => void; - onUpdateField: (name: string, value: any) => void; - loginInfo : LoginEntity; + onLogin: (login: LoginEntity) => void; } + // https://material-ui.com/styles/api/#makestyles-styles-options-hook @@ -478,14 +491,8 @@ interface PropsForm { + }) + ); -const LoginForm = (props: PropsForm) => { +export const LoginComponent: React.FC = (props) => { + const classes = useFormStyles(); - const { onLogin, onUpdateField, loginInfo } = props; - - // TODO: Enhacement move this outside the stateless component discuss why is a good idea - const onTexFieldChange = (fieldId) => (e) => { - onUpdateField(fieldId, e.target.value); - } return ( -
{ const [loginInfo, setLoginInfo] = React.useState( createEmptyLogin() ); -+ const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); ++ const [isShowAlert, setShowAlert] = React.useState(false); const classes = useStyles(); const onLogin = () => { @@ -602,7 +609,7 @@ const LoginPageInner = (props: Props) => { props.history.push("/pageB"); - } + } else { -+ setShowLoginFailedMsg(true); ++ setShowAlert(true); + } } @@ -625,11 +632,11 @@ const LoginPageInner = (props: Props) => { /> -+ setShowLoginFailedMsg(false)} -+ /> ++ setShowAlert(false)} ++ /> + ); }; diff --git a/hooks/13_LoginForm/src/pages/login.container.tsx b/hooks/13_LoginForm/src/pages/login.container.tsx index 0bf329ad..943c433b 100644 --- a/hooks/13_LoginForm/src/pages/login.container.tsx +++ b/hooks/13_LoginForm/src/pages/login.container.tsx @@ -47,7 +47,7 @@ export const LoginContainer: React.FC = (props) => { setShowAlert(false)} /> diff --git a/hooks/14_FormValidation/src/pages/login.container.tsx b/hooks/14_FormValidation/src/pages/login.container.tsx index 55d1f0c5..1da3ed87 100644 --- a/hooks/14_FormValidation/src/pages/login.container.tsx +++ b/hooks/14_FormValidation/src/pages/login.container.tsx @@ -48,7 +48,7 @@ export const LoginContainer: React.FC = (props) => { setShowAlert(false)} /> diff --git a/hooks/15_Context/src/pages/login.container.tsx b/hooks/15_Context/src/pages/login.container.tsx index 59574c3f..e3e65ca0 100644 --- a/hooks/15_Context/src/pages/login.container.tsx +++ b/hooks/15_Context/src/pages/login.container.tsx @@ -49,7 +49,7 @@ export const LoginContainer: React.FC = (props) => { setShowAlert(false)} /> From 21a0f2166aafd1c60ea32adde1b8b1400b5a9f18 Mon Sep 17 00:00:00 2001 From: Luis del Amo Date: Fri, 14 Aug 2020 12:08:40 +0200 Subject: [PATCH 80/80] ref:#187 doc 14 and 15 --- hooks/14_FormValidation/Readme.md | 213 ++++++++---------------------- hooks/15_Context/Readme.md | 48 +++---- 2 files changed, 72 insertions(+), 189 deletions(-) diff --git a/hooks/14_FormValidation/Readme.md b/hooks/14_FormValidation/Readme.md index d0b0b97a..f8538d50 100644 --- a/hooks/14_FormValidation/Readme.md +++ b/hooks/14_FormValidation/Readme.md @@ -28,47 +28,31 @@ npm install formik @lemoncode/fonk @lemoncode/fonk-formik --save - To avoid having too much repeated code let's move to common an input component, including it's label plus validation text. -_./common/textFieldForm.tsx_ +_./common/textField.component.tsx_ ```tsx import * as React from "react"; -import TextField from "@material-ui/core/TextField"; -import Typography from "@material-ui/core/Typography/Typography"; - -interface Props { - name: string; - label: string; - onChange: any; - value: string; - error?: string; - type?: string; -} - -const defaultProps: Partial = { - type: "text" -}; +import { useField } from "formik"; +import MuiTextField, { TextFieldProps } from "@material-ui/core/TextField"; -const onTextFieldChange = ( - fieldId: string, - onChange: (fieldId, value) => void -) => e => { - onChange(fieldId, e.target.value); -}; +export const TextFieldComponent: React.FC = (props) => { + const [field, meta] = useField(props.name); + const textFieldProps = Boolean(field) ? field : props; + const hasError = Boolean(meta && meta.touched && meta.error); -export const TextFieldForm: React.StatelessComponent = props => { - const { name, label, onChange, value, error, type } = props; return ( <> - - - {props.error} - ); }; @@ -80,12 +64,12 @@ _./src/common/index.ts_ ```diff export * from './notification'; -+ export * from './textFieldForm'; ++ export * from './TextFieldComponent'; ``` - Now let's define a basic validation for the form, we want to ensure both fields are informed. -_./src/pages/loginPage.validation.ts_ +_./src/pages/login.validation.ts_ ```typescript import { ValidationSchema, Validators } from "@lemoncode/fonk"; @@ -105,151 +89,62 @@ export const loginFormValidation = createFormikValidation(validationSchema); - First let's add the dataFormErrors to the state of the component. -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff import { isValidLogin } from "../api/login"; import { NotificationComponent } from "../common"; ``` -_./src/pages/loginPage.tsx_ - -```diff -const LoginPageInner = (props: Props) => { - const [loginInfo, setLoginInfo] = React.useState( - createEmptyLogin() - ); -+ const [loginFormErrors, setLoginFormErrors] = React.useState(createDefaultLoginFormErrors()); - const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); -``` - -- Let's fire the validation on viewmodel update. - -_./src/pages/loginPage.tsx_ - -```diff -+ import { loginFormValidation } from "./loginPage.validation"; -``` - -_./src/pages/loginPage.tsx_ - -```diff -const onUpdateLoginField = (name, value) => { - setLoginInfo({ - ...loginInfo, - [name]: value - }); - -+ loginFormValidation.validateField(loginInfo, name, value) -+ .then((fieldValidationResult) => { - -+ setLoginFormErrors({ -+ ...loginFormErrors, -+ [name]: fieldValidationResult, -+ }); -+ }); - }; -``` - -- We need to pass down dataFormErrors - -_./src/pages/loginPage.tsx_ - -```diff - -``` - -_./src/pages/loginPage.tsx_ -```diff -interface PropsForm { - onLogin: () => void; - onUpdateField: (string, any) => void; - loginInfo: LoginEntity; -+ loginFormErrors : LoginFormErrors; -} -``` - -- Let's replace the _TextFieldForm_ entries with the wrapper we have created (includes +- Let's fire the validation on viewmodel update and replace the _TextFieldForm_ entries with the wrapper we have created (includes displaying validation errors). -_./src/pages/loginPage.tsx_ - -```diff -+ import { TextFieldForm } from '../common'; -``` - -_./src/pages/loginPage.tsx_ - -```diff -const LoginForm = (props: PropsForm) => { -- const { onLogin, onUpdateField, loginInfo } = props; -+ const { onLogin, onUpdateField, loginInfo, loginFormErrors } = props; -``` +_./src/pages/login.component.tsx_ ```diff -- -- ++ import { loginFormValidation } from "./login.validation"; ++ import { TextFieldComponent } from '../common'; + ++ ++ {() => ( ++
++
+- +- ++
++
++ )} ++
``` - Let's give a try -``` +```bash npm start ``` - And let's add an alert (Excercise and a notification) when the user clicks and the form all the fields are valid. -_./src/pages/loginPage.tsx_ - -```diff -const onLogin = () => { -+ loginFormValidation.validateForm(loginInfo) -+ .then((formValidationResult) => { -+ if(formValidationResult.succeeded) { - if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); - } else { - setShowLoginFailedMsg(true); - } -+ } else { -+ alert('error, review the fields'); -+ const updatedLoginFormErrors = { -+ ...loginFormErrors, -+ ...formValidationResult.fieldErrors, -+ } -+ setLoginFormErrors(updatedLoginFormErrors); -+ } - - -+ }); -}; -``` - > Excercise, refactor this method following single abstraction level principle and single responsibility principle. # About Basefactor + Lemoncode diff --git a/hooks/15_Context/Readme.md b/hooks/15_Context/Readme.md index 38ef6245..fb20ed96 100644 --- a/hooks/15_Context/Readme.md +++ b/hooks/15_Context/Readme.md @@ -119,7 +119,7 @@ import { Link } from "react-router-dom"; - Let's update the loginPage. -_./src/pages/loginPage.tsx_ +_./src/pages/login.container.tsx_ ```diff - import { TextFieldForm } from "../common"; @@ -130,37 +130,25 @@ _./src/pages/loginPage.tsx_ _./src/pages/loginPage.tsx_ ```diff -const LoginPageInner = (props: Props) => { -+ const loginContext = React.useContext(SessionContext); +export const LoginContainer: React.FC = (props) => { ++ const loginContext = React.useContext(SessionContext); + const history = useHistory(); + const [isShowAlert, setShowAlert] = React.useState(false); + const classes = useFormStyles(); + + const loginSucceeded = (isValid: boolean, login: LoginEntity) => { + if (isValid) { + history.push("/pageB"); ++ loginContext.updateLogin(login.login); + } else { + setShowAlert(true); + } + }; - const [loginInfo, setLoginInfo] = React.useState( - createEmptyLogin() - ); - const [loginFormErrors, setLoginFormErrors] = React.useState( - createDefaultLoginFormErrors() - ); - const [showLoginFailedMsg, setShowLoginFailedMsg] = React.useState(false); - const classes = useStyles(); - - const onLogin = () => { - loginFormValidation.validateForm(loginInfo).then(formValidationResult => { - if (formValidationResult.succeeded) { - if (isValidLogin(loginInfo)) { - props.history.push("/pageB"); -+ loginContext.updateLogin(loginInfo.login); - } else { - setShowLoginFailedMsg(true); - } - } else { - alert("error, review the fields"); - const updatedLoginFormErrors = { - ...loginFormErrors, - ...formValidationResult.fieldErrors - }; - setLoginFormErrors(updatedLoginFormErrors); - } - }); + const handleLogin = (login: LoginEntity) => { + isValidLogin(login).then((isValid) => loginSucceeded(isValid, login)); }; +}; ``` - Let's give a try.