├── .gitignore ├── .travis.yml ├── README.md ├── client ├── .babelrc ├── .dockerignore ├── Dockerfile ├── Dockerfile.dev ├── __tests__ │ ├── __snapshots__ │ │ └── index.test.js.snap │ ├── index.test.js │ └── setup │ │ └── setupEnzyme.js ├── components │ ├── Auth │ │ ├── RequestReset.js │ │ ├── Reset.js │ │ ├── Signin.js │ │ ├── Signout.js │ │ ├── Signup.js │ │ └── User.js │ ├── Hoc │ │ └── WithAuth.js │ ├── Index.js │ ├── Layout │ │ ├── Footer.js │ │ ├── Header.js │ │ └── Layout.js │ ├── Messages │ │ ├── MessageForm.js │ │ ├── MessageList.js │ │ └── index.js │ └── Protected.js ├── config.js ├── lib │ └── withApollo.js ├── nginx │ └── default.conf ├── package.json ├── pages │ ├── _app.js │ ├── _document.js │ ├── index.js │ ├── password.js │ ├── protected.js │ ├── reset.js │ ├── signin.js │ └── signup.js ├── static │ └── favicon.png └── yarn.lock ├── docker-compose.yml ├── k8s ├── client-cluster-ip-service.yaml ├── client-deployment.yaml ├── database-cluster-ip-service.yaml ├── database-deployment.yaml ├── ingress-service.yaml ├── server-cluster-ip-service.yaml └── server-deployment.yaml ├── nginx ├── Dockerfile ├── Dockerfile.dev └── default.conf └── server ├── .dockerignore ├── Dockerfile ├── Dockerfile.dev ├── graphql ├── resolvers │ ├── Mutation.js │ ├── Query.js │ ├── Subscription.js │ ├── Type.js │ └── index.js └── schema.graphql ├── index.js ├── models ├── Message.js └── User.js ├── package.json ├── utils ├── createToken.js └── mail.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # parcel-bundler cache (https://parceljs.org/) 61 | .cache 62 | 63 | # next.js build output 64 | .next 65 | 66 | # nuxt.js build output 67 | .nuxt 68 | 69 | # vuepress build output 70 | .vuepress/dist 71 | 72 | # Serverless directories 73 | .serverless/ 74 | 75 | # FuseBox cache 76 | .fusebox/ 77 | 78 | #DynamoDB Local files 79 | .dynamodb/ 80 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | services: 3 | - docker 4 | 5 | before_install: 6 | - docker build -t nreoch9/nextjs-graphql-auth-client-test -f ./client/Dockerfile.dev ./client 7 | 8 | script: 9 | - docker run nreoch9/nextjs-graphql-auth-client-test yarn test -- --coverage 10 | 11 | after_success: 12 | # Build images 13 | - docker build -t nreoch9/nextjs-graphql-auth-client:latest ./client 14 | - docker build -t nreoch9/nextjs-graphql-auth-nginx:latest ./nginx 15 | - docker build -t nreoch9/nextjs-graphql-auth-server:latest ./server 16 | # Login to the docker CLI 17 | - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_ID" --password-stdin 18 | # Push images to docker hub 19 | - docker push nreoch9/nextjs-graphql-auth-client:latest 20 | - docker push nreoch9/nextjs-graphql-auth-nginx:latest 21 | - docker push nreoch9/nextjs-graphql-auth-server:latest 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NextJS GraphQL Auth 2 | 3 | ### Authentication system boilerplate application using NextJS, GraphQL, MongoDB, and Nginx 4 | 5 | ## There is a new version using Apollo Hooks on the client instead of Render props. [check it out] 6 | 7 | _You will need a .env file in the server directory with the following environment variables_ 8 | 9 | ``` 10 | MONGO_URI - URI pointing to your mongodb instance 11 | CLIENT_URI - Client side URI 12 | JWT_SECRET - Secret for jsonwebtoken 13 | PORT - GraphQL server port 14 | MAIL_HOST - Mailtrap host 15 | MAIL_PORT - Mailtrap port 16 | MAIL_USER - Mailtrap user 17 | MAIL_PASS - Mailtrap password 18 | ``` 19 | 20 | To run in development mode 21 | 22 | ```sh 23 | $ docker-compose up 24 | ``` 25 | 26 | **NOTE: There is a production deployment pipeline setup with TravisCI, DockerHub, and Kubernetes that runs in a Minikube cluster. I can supply full instructions if needed to get you setup for the production deployment pipeline** 27 | 28 | [check it out]: https://github.com/nreoch25/nextjs-graphql-hooks-auth 29 | -------------------------------------------------------------------------------- /client/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "development": { 4 | "presets": ["next/babel"] 5 | }, 6 | "production": { 7 | "presets": ["next/babel"] 8 | }, 9 | "test": { 10 | "presets": [ 11 | [ 12 | "next/babel", 13 | { 14 | "preset-env": { 15 | "modules": "commonjs" 16 | } 17 | } 18 | ] 19 | ] 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /client/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /client/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | WORKDIR /app 3 | COPY ./package.json ./ 4 | COPY yarn.lock ./ 5 | RUN yarn install --frozen-lockfile 6 | COPY . . 7 | RUN yarn build 8 | CMD ["yarn", "start"] -------------------------------------------------------------------------------- /client/Dockerfile.dev: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | WORKDIR /app 3 | COPY ./package.json ./ 4 | COPY yarn.lock ./ 5 | RUN yarn install --frozen-lockfile 6 | COPY . . 7 | CMD ["yarn", "dev"] -------------------------------------------------------------------------------- /client/__tests__/__snapshots__/index.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Index Page matches the snapshot 1`] = ` 4 | 5 | 6 | 7 | `; 8 | -------------------------------------------------------------------------------- /client/__tests__/index.test.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { shallow } from "enzyme"; 3 | import toJson from "enzyme-to-json"; 4 | import IndexPage from "../pages/index"; 5 | 6 | describe("Index Page", () => { 7 | it("matches the snapshot", () => { 8 | const wrapper = shallow(); 9 | expect(toJson(wrapper)).toMatchSnapshot(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /client/__tests__/setup/setupEnzyme.js: -------------------------------------------------------------------------------- 1 | import Enzyme from "enzyme"; 2 | import Adapter from "enzyme-adapter-react-16"; 3 | Enzyme.configure({ adapter: new Adapter() }); 4 | -------------------------------------------------------------------------------- /client/components/Auth/RequestReset.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import { Mutation } from "react-apollo"; 3 | import gql from "graphql-tag"; 4 | import { 5 | Alert, 6 | Button, 7 | Form, 8 | FormGroup, 9 | Input, 10 | Row, 11 | Col, 12 | Card, 13 | CardBody, 14 | CardFooter, 15 | CardHeader 16 | } from "reactstrap"; 17 | 18 | const REQUEST_RESET_MUTATION = gql` 19 | mutation REQUEST_RESET_MUTATION($email: String!) { 20 | requestReset(email: $email) { 21 | message 22 | } 23 | } 24 | `; 25 | 26 | class RequestReset extends Component { 27 | state = { 28 | email: "", 29 | mutationCompleted: false 30 | }; 31 | saveToState = evt => { 32 | this.setState({ [evt.target.name]: evt.target.value }); 33 | }; 34 | render() { 35 | return ( 36 | this.setState({ mutationComplete: true })} 40 | > 41 | {(requestReset, { error, loading }) => ( 42 | 43 | 48 | 49 | 50 | Request Password reset 51 | 52 | 53 |
{ 56 | evt.preventDefault(); 57 | await requestReset(); 58 | this.setState({ email: "" }); 59 | }} 60 | > 61 | 62 | 69 | 70 | 73 |
74 |
75 | {error && ( 76 | 77 | 78 | {error.message} 79 | 80 | 81 | )} 82 | {this.state.mutationComplete && !error && ( 83 | 84 | 85 | Please check your email for a reset link 86 | 87 | 88 | )} 89 |
90 | 91 |
92 | )} 93 |
94 | ); 95 | } 96 | } 97 | 98 | export default RequestReset; 99 | -------------------------------------------------------------------------------- /client/components/Auth/Reset.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import PropTypes from "prop-types"; 3 | import { Mutation } from "react-apollo"; 4 | import gql from "graphql-tag"; 5 | import { 6 | Alert, 7 | Button, 8 | Form, 9 | FormGroup, 10 | Input, 11 | Row, 12 | Col, 13 | Card, 14 | CardBody, 15 | CardFooter, 16 | CardHeader 17 | } from "reactstrap"; 18 | import { CURRENT_USER_QUERY } from "../Auth/User"; 19 | 20 | const RESET_MUTATION = gql` 21 | mutation RESET_MUTATION( 22 | $password: String! 23 | $passwordConfirm: String! 24 | $resetToken: String! 25 | ) { 26 | resetPassword( 27 | password: $password 28 | passwordConfirm: $passwordConfirm 29 | resetToken: $resetToken 30 | ) { 31 | username 32 | email 33 | } 34 | } 35 | `; 36 | 37 | class Reset extends Component { 38 | static propTypes = { 39 | resetToken: PropTypes.string.isRequired 40 | }; 41 | state = { 42 | password: "", 43 | passwordConfirm: "", 44 | mutationCompleted: false 45 | }; 46 | saveToState = evt => { 47 | this.setState({ [evt.target.name]: evt.target.value }); 48 | }; 49 | render() { 50 | return ( 51 | this.setState({ mutationComplete: true })} 60 | > 61 | {(resetPassword, { error, loading }) => ( 62 | 63 | 68 | 69 | 70 | Reset your password 71 | 72 | 73 |
{ 76 | evt.preventDefault(); 77 | await resetPassword(); 78 | this.setState({ password: "", passwordConfirm: "" }); 79 | }} 80 | > 81 | 82 | 89 | 90 | 91 | 98 | 99 | 102 |
103 |
104 | {error && ( 105 | 106 | 107 | {error.message} 108 | 109 | 110 | )} 111 | {this.state.mutationComplete && !error && ( 112 | 113 | 114 | You have successfully reset your password 115 | 116 | 117 | )} 118 |
119 | 120 |
121 | )} 122 |
123 | ); 124 | } 125 | } 126 | 127 | export default Reset; 128 | -------------------------------------------------------------------------------- /client/components/Auth/Signin.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import { Mutation } from "react-apollo"; 3 | import gql from "graphql-tag"; 4 | import { 5 | Alert, 6 | Button, 7 | Form, 8 | FormGroup, 9 | Input, 10 | Row, 11 | Col, 12 | Card, 13 | CardBody, 14 | CardFooter, 15 | CardHeader 16 | } from "reactstrap"; 17 | import { CURRENT_USER_QUERY } from "../Auth/User"; 18 | 19 | const SIGNIN_MUTATION = gql` 20 | mutation SIGNIN_MUTATION($email: String!, $password: String!) { 21 | signinUser(email: $email, password: $password) { 22 | token 23 | } 24 | } 25 | `; 26 | 27 | class Signin extends Component { 28 | state = { 29 | email: "", 30 | password: "", 31 | mutationComplete: false 32 | }; 33 | saveToState = evt => { 34 | this.setState({ [evt.target.name]: evt.target.value }); 35 | }; 36 | render() { 37 | return ( 38 | { 40 | if (signinUser.token) { 41 | localStorage.setItem("token", signinUser.token); 42 | } 43 | }} 44 | mutation={SIGNIN_MUTATION} 45 | variables={this.state} 46 | refetchQueries={[{ query: CURRENT_USER_QUERY }]} 47 | onCompleted={() => this.setState({ mutationComplete: true })} 48 | > 49 | {(signinUser, { error, loading }) => ( 50 | 51 | 56 | 57 | 58 | {this.props.text} 59 | 60 | 61 |
{ 64 | evt.preventDefault(); 65 | await signinUser(); 66 | this.setState({ email: "", password: "" }); 67 | }} 68 | > 69 | 70 | 77 | 78 | 79 | 86 | 87 | 90 |
91 |
92 | {error && ( 93 | 94 | 95 | {error.message} 96 | 97 | 98 | )} 99 | {this.state.mutationComplete && !error && ( 100 | 101 | 102 | User successfully signed in 103 | 104 | 105 | )} 106 |
107 | 108 |
109 | )} 110 |
111 | ); 112 | } 113 | } 114 | 115 | export default Signin; 116 | -------------------------------------------------------------------------------- /client/components/Auth/Signout.js: -------------------------------------------------------------------------------- 1 | import { Mutation } from "react-apollo"; 2 | import gql from "graphql-tag"; 3 | import { CURRENT_USER_QUERY } from "./User"; 4 | import { DropdownItem } from "reactstrap"; 5 | 6 | const SIGN_OUT_MUTATION = gql` 7 | mutation SIGN_OUT_MUTATION { 8 | signoutUser { 9 | message 10 | } 11 | } 12 | `; 13 | 14 | const Signout = props => ( 15 | { 17 | localStorage.removeItem("token"); 18 | }} 19 | mutation={SIGN_OUT_MUTATION} 20 | refetchQueries={[{ query: CURRENT_USER_QUERY }]} 21 | > 22 | {signoutUser => ( 23 | 24 | Signout 25 | 26 | )} 27 | 28 | ); 29 | export default Signout; 30 | -------------------------------------------------------------------------------- /client/components/Auth/Signup.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import { Mutation } from "react-apollo"; 3 | import gql from "graphql-tag"; 4 | import { 5 | Alert, 6 | Button, 7 | Form, 8 | FormGroup, 9 | Input, 10 | Row, 11 | Col, 12 | Card, 13 | CardBody, 14 | CardFooter, 15 | CardHeader 16 | } from "reactstrap"; 17 | import { CURRENT_USER_QUERY } from "../Auth/User"; 18 | 19 | const SIGNUP_MUTATION = gql` 20 | mutation SIGNUP_MUTATION( 21 | $username: String! 22 | $email: String! 23 | $password: String! 24 | $passwordConfirm: String! 25 | ) { 26 | signupUser( 27 | email: $email 28 | username: $username 29 | password: $password 30 | passwordConfirm: $passwordConfirm 31 | ) { 32 | token 33 | } 34 | } 35 | `; 36 | 37 | class Signup extends Component { 38 | state = { 39 | username: "", 40 | email: "", 41 | password: "", 42 | passwordConfirm: "", 43 | mutationComplete: false 44 | }; 45 | saveToState = evt => { 46 | this.setState({ [evt.target.name]: evt.target.value }); 47 | }; 48 | render() { 49 | return ( 50 | { 52 | if (signupUser.token) { 53 | localStorage.setItem("token", signupUser.token); 54 | } 55 | }} 56 | mutation={SIGNUP_MUTATION} 57 | variables={this.state} 58 | refetchQueries={[{ query: CURRENT_USER_QUERY }]} 59 | onCompleted={() => this.setState({ mutationComplete: true })} 60 | > 61 | {(signupUser, { data, error, loading }) => { 62 | if (loading) return

Loading...

; 63 | return ( 64 | 65 | 70 | 71 | Sign up 72 | 73 |
{ 76 | evt.preventDefault(); 77 | await signupUser(); 78 | this.setState({ 79 | username: "", 80 | email: "", 81 | password: "", 82 | passwordConfirm: "" 83 | }); 84 | }} 85 | > 86 | 87 | 94 | 95 | 96 | 103 | 104 | 105 | 112 | 113 | 114 | 121 | 122 | 125 |
126 |
127 | {error && ( 128 | 129 | 130 | {error.message} 131 | 132 | 133 | )} 134 | {this.state.mutationComplete && !error && ( 135 | 136 | 137 | User successfully signed up 138 | 139 | 140 | )} 141 |
142 | 143 |
144 | ); 145 | }} 146 |
147 | ); 148 | } 149 | } 150 | 151 | export default Signup; 152 | -------------------------------------------------------------------------------- /client/components/Auth/User.js: -------------------------------------------------------------------------------- 1 | import { Query } from "react-apollo"; 2 | import gql from "graphql-tag"; 3 | import PropTypes from "prop-types"; 4 | 5 | const CURRENT_USER_QUERY = gql` 6 | query { 7 | me { 8 | username 9 | email 10 | } 11 | } 12 | `; 13 | 14 | const User = props => ( 15 | 16 | {payload => props.children(payload)} 17 | 18 | ); 19 | 20 | User.propTypes = { 21 | children: PropTypes.func.isRequired 22 | }; 23 | 24 | export default User; 25 | export { CURRENT_USER_QUERY }; 26 | -------------------------------------------------------------------------------- /client/components/Hoc/WithAuth.js: -------------------------------------------------------------------------------- 1 | import { Query } from "react-apollo"; 2 | import { CURRENT_USER_QUERY } from "../Auth/User"; 3 | import Signin from "../Auth/Signin"; 4 | 5 | const WithAuth = props => ( 6 | 7 | {({ data, loading }) => { 8 | if (loading) return

Loading...

; 9 | if (!data.me) { 10 | return ( 11 |
12 | 13 |
14 | ); 15 | } 16 | return props.children; 17 | }} 18 |
19 | ); 20 | 21 | export default WithAuth; 22 | -------------------------------------------------------------------------------- /client/components/Index.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | 3 | class Index extends Component { 4 | render() { 5 | return ( 6 |
7 |

Index Page

8 |
9 | ); 10 | } 11 | } 12 | 13 | export default Index; 14 | -------------------------------------------------------------------------------- /client/components/Layout/Footer.js: -------------------------------------------------------------------------------- 1 | function Footer() { 2 | return ; 3 | } 4 | 5 | export default Footer; 6 | -------------------------------------------------------------------------------- /client/components/Layout/Header.js: -------------------------------------------------------------------------------- 1 | import { Component, Fragment } from "react"; 2 | import { 3 | Collapse, 4 | Navbar, 5 | NavbarToggler, 6 | NavbarBrand, 7 | Nav, 8 | NavItem, 9 | NavLink, 10 | UncontrolledDropdown, 11 | DropdownToggle, 12 | DropdownMenu, 13 | DropdownItem 14 | } from "reactstrap"; 15 | import Link from "next/link"; 16 | import User from "../Auth/User"; 17 | import Signout from "../Auth/Signout"; 18 | 19 | class Header extends Component { 20 | constructor(props) { 21 | super(props); 22 | 23 | this.toggle = this.toggle.bind(this); 24 | this.state = { 25 | isOpen: false 26 | }; 27 | } 28 | toggle() { 29 | this.setState({ 30 | isOpen: !this.state.isOpen 31 | }); 32 | } 33 | render() { 34 | return ( 35 | 36 | {({ data: { me } }) => ( 37 | 38 | 39 | NextJS GraphQL Auth 40 | 41 | 42 | 43 | 108 | 109 | 110 | )} 111 | 112 | ); 113 | } 114 | } 115 | 116 | export default Header; 117 | -------------------------------------------------------------------------------- /client/components/Layout/Layout.js: -------------------------------------------------------------------------------- 1 | import { Component, Fragment } from "react"; 2 | import { Container } from "reactstrap"; 3 | import Router from "next/router"; 4 | import NProgress from "nprogress"; 5 | import Header from "./Header"; 6 | import Footer from "./Footer"; 7 | 8 | Router.onRouteChangeStart = () => NProgress.start(); 9 | Router.onRouteChangeComplete = () => NProgress.done(); 10 | Router.onRouteChangeError = () => NProgress.done(); 11 | 12 | class Layout extends Component { 13 | render() { 14 | return ( 15 | 16 |
17 | {this.props.children} 18 | 19 | ); 20 | } 21 | } 22 | 23 | export default Layout; 24 | -------------------------------------------------------------------------------- /client/components/Messages/MessageForm.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import gql from "graphql-tag"; 3 | import { Mutation } from "react-apollo"; 4 | import { Card, CardBody, Button, Form, FormGroup, Input } from "reactstrap"; 5 | 6 | const POST_MESSAGE = gql` 7 | mutation postMessage($text: String!) { 8 | postMessage(text: $text) { 9 | _id 10 | text 11 | sender { 12 | _id 13 | username 14 | email 15 | password 16 | } 17 | } 18 | } 19 | `; 20 | 21 | class MessageForm extends Component { 22 | render() { 23 | return ( 24 | 25 | {(postMessage, { data, loading, error }) => { 26 | if (loading) return

Loading...

; 27 | if (error) return

Error: {error.message}

; 28 | const handleSubmit = evt => { 29 | evt.preventDefault(); 30 | const text = evt.target.text.value; 31 | if (!text) return; 32 | postMessage({ 33 | variables: { 34 | text 35 | } 36 | }); 37 | evt.target.text.value = ""; 38 | }; 39 | return ( 40 | 41 | 42 |
43 | 44 | 49 | 50 | 53 |
54 |
55 |
56 | ); 57 | }} 58 |
59 | ); 60 | } 61 | } 62 | 63 | export default MessageForm; 64 | -------------------------------------------------------------------------------- /client/components/Messages/MessageList.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import { ListGroup, ListGroupItem } from "reactstrap"; 3 | 4 | class MessageList extends Component { 5 | componentDidMount() { 6 | this.props.subscribeToNewMessages(); 7 | } 8 | render() { 9 | const { data } = this.props; 10 | return ( 11 | 12 | {data.messages.map(message => { 13 | return ( 14 | 15 | {message.sender.username}: {message.text} 16 | 17 | ); 18 | })} 19 | 20 | ); 21 | } 22 | } 23 | 24 | export default MessageList; 25 | -------------------------------------------------------------------------------- /client/components/Messages/index.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import { Query } from "react-apollo"; 3 | import gql from "graphql-tag"; 4 | import MessageList from "./MessageList"; 5 | 6 | const MESSAGES = gql` 7 | query { 8 | messages { 9 | _id 10 | text 11 | sender { 12 | _id 13 | username 14 | email 15 | password 16 | } 17 | } 18 | } 19 | `; 20 | 21 | const NEW_MESSAGE = gql` 22 | subscription { 23 | newMessage { 24 | _id 25 | text 26 | sender { 27 | _id 28 | username 29 | email 30 | password 31 | } 32 | } 33 | } 34 | `; 35 | 36 | class Messages extends Component { 37 | render() { 38 | return ( 39 | 40 | {({ subscribeToMore, data, loading, error }) => { 41 | if (loading) return

Loading...

; 42 | if (error) return

Error: {error.message}

; 43 | const subscribeToNewMessages = () => 44 | subscribeToMore({ 45 | document: NEW_MESSAGE, 46 | updateQuery: (prev, { subscriptionData }) => { 47 | if (!subscriptionData) return; 48 | const newMessage = subscriptionData.data.newMessage; 49 | return Object.assign({}, prev, { 50 | messages: [newMessage, ...prev.messages] 51 | }); 52 | } 53 | }); 54 | return ( 55 | 59 | ); 60 | }} 61 |
62 | ); 63 | } 64 | } 65 | 66 | export default Messages; 67 | -------------------------------------------------------------------------------- /client/components/Protected.js: -------------------------------------------------------------------------------- 1 | import { Component, Fragment } from "react"; 2 | import MessageForm from "./Messages/MessageForm"; 3 | import Messages from "./Messages"; 4 | import { Row, Col } from "reactstrap"; 5 | 6 | class Protected extends Component { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | ); 22 | } 23 | } 24 | 25 | export default Protected; 26 | -------------------------------------------------------------------------------- /client/config.js: -------------------------------------------------------------------------------- 1 | const env = process.env.NODE_ENV || "development"; 2 | const config = { 3 | development: { 4 | clientEndpoint: "http://localhost/graphql", 5 | serverEndpoint: "http://nginx/graphql", 6 | wsEndpoint: "ws://localhost/graphql" 7 | }, 8 | production: { 9 | clientEndpoint: "http://192.168.55.141/graphql", 10 | serverEndpoint: "http://192.168.55.141/graphql", 11 | wsEndpoint: "ws://192.168.55.141/graphql" 12 | } 13 | }[env]; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /client/lib/withApollo.js: -------------------------------------------------------------------------------- 1 | import withApollo from "next-with-apollo"; 2 | import { ApolloClient } from "apollo-client"; 3 | import { InMemoryCache } from "apollo-cache-inmemory"; 4 | import { createHttpLink } from "apollo-link-http"; 5 | import { ApolloLink, split } from "apollo-link"; 6 | import { WebSocketLink } from "apollo-link-ws"; 7 | import { getMainDefinition } from "apollo-utilities"; 8 | import config from "../config"; 9 | 10 | const endpoint = process.browser 11 | ? config.clientEndpoint 12 | : config.serverEndpoint; 13 | 14 | function createClient({ headers }) { 15 | const cache = new InMemoryCache(); 16 | const authLink = new ApolloLink((operation, forward) => { 17 | operation.setContext({ 18 | fetchOptions: { 19 | credentials: "include" 20 | }, 21 | headers 22 | }); 23 | return forward(operation); 24 | }); 25 | 26 | const httpLink = createHttpLink({ 27 | uri: endpoint 28 | }); 29 | 30 | const wsLink = process.browser 31 | ? new WebSocketLink({ 32 | uri: config.wsEndpoint, 33 | options: { 34 | reconnect: true, 35 | connectionParams: () => { 36 | const token = localStorage.getItem("token"); 37 | if (token) { 38 | return { authToken: token }; 39 | } 40 | return {}; 41 | } 42 | } 43 | }) 44 | : () => { 45 | console.log("SSR"); 46 | }; 47 | 48 | const link = split( 49 | ({ query }) => { 50 | const { kind, operation } = getMainDefinition(query); 51 | return ( 52 | kind === "OperationDefinition" && 53 | operation === "subscription" && 54 | process.browser 55 | ); 56 | }, 57 | wsLink, 58 | httpLink 59 | ); 60 | 61 | return new ApolloClient({ 62 | cache, 63 | link: authLink.concat(link) 64 | }); 65 | } 66 | 67 | export default withApollo(createClient); 68 | 69 | // const endpoint = process.browser 70 | // ? config.clientEndpoint 71 | // : config.serverEndpoint; 72 | 73 | // function createClient() { 74 | // const cache = new InMemoryCache(); 75 | // const httpLink = new HttpLink({ 76 | // uri: endpoint, 77 | // credentials: "same-origin" 78 | // }); 79 | // const wsLink = process.browser 80 | // ? new WebSocketLink({ 81 | // uri: "ws://localhost/graphql", 82 | // options: { 83 | // reconnect: true 84 | // } 85 | // }) 86 | // : () => { 87 | // console.log("SSR"); 88 | // }; 89 | // const link = split( 90 | // ({ query }) => { 91 | // const { kind, operation } = getMainDefinition(query); 92 | // return ( 93 | // kind === "OperationDefinition" && 94 | // operation === "subscription" && 95 | // process.browser 96 | // ); 97 | // }, 98 | // wsLink, 99 | // httpLink 100 | // ); 101 | 102 | // return new ApolloClient({ 103 | // link, 104 | // cache 105 | // }); 106 | // } 107 | -------------------------------------------------------------------------------- /client/nginx/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 3000; 3 | 4 | location / { 5 | root /usr/share/nginx/html; 6 | index index.html index.htm; 7 | try_files $uri $uri/ /index.html; 8 | } 9 | } -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nextjs-graphql-auth-client", 3 | "version": "1.0.0", 4 | "description": "A GraphQL client for NextJs GraphQL Auth", 5 | "author": "Nigel Reoch", 6 | "license": "MIT", 7 | "scripts": { 8 | "dev": "next", 9 | "build": "next build", 10 | "start": "next start", 11 | "test": "NODE_ENV=test jest" 12 | }, 13 | "dependencies": { 14 | "apollo-cache-inmemory": "^1.5.1", 15 | "apollo-client": "^2.5.1", 16 | "apollo-link": "^1.2.8", 17 | "apollo-link-http": "^1.5.11", 18 | "apollo-link-ws": "^1.0.14", 19 | "apollo-utilities": "^1.2.1", 20 | "graphql": "^14.0.2", 21 | "graphql-tag": "^2.10.1", 22 | "next": "^7.0.2", 23 | "next-with-apollo": "^3.3.0", 24 | "nprogress": "^0.2.0", 25 | "react": "^16.6.3", 26 | "react-apollo": "^2.3.3", 27 | "react-dom": "^16.6.3", 28 | "reactstrap": "^6.5.0", 29 | "subscriptions-transport-ws": "^0.9.15" 30 | }, 31 | "devDependencies": { 32 | "babel-core": "7.0.0-bridge.0", 33 | "babel-jest": "^23.6.0", 34 | "enzyme": "^3.8.0", 35 | "enzyme-adapter-react-16": "^1.7.1", 36 | "enzyme-to-json": "^3.3.5", 37 | "jest": "24.3.0" 38 | }, 39 | "jest": { 40 | "verbose": true, 41 | "setupFilesAfterEnv": [ 42 | "/__tests__/setup/setupEnzyme.js" 43 | ], 44 | "testPathIgnorePatterns": [ 45 | "/__tests__/setup/" 46 | ], 47 | "transform": { 48 | "^.+\\.js$": "babel-jest" 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /client/pages/_app.js: -------------------------------------------------------------------------------- 1 | import App, { Container } from "next/app"; 2 | import { ApolloProvider } from "react-apollo"; 3 | import withApollo from "../lib/withApollo"; 4 | 5 | class MyApp extends App { 6 | static async getInitialProps({ Component, ctx }) { 7 | let pageProps = {}; 8 | 9 | if (Component.getInitialProps) { 10 | pageProps = await Component.getInitialProps(ctx); 11 | } 12 | pageProps.query = ctx.query; 13 | return { pageProps }; 14 | } 15 | render() { 16 | const { Component, pageProps, apollo } = this.props; 17 | return ( 18 | 19 | 20 | 21 | 22 | 23 | ); 24 | } 25 | } 26 | 27 | export default withApollo(MyApp); 28 | -------------------------------------------------------------------------------- /client/pages/_document.js: -------------------------------------------------------------------------------- 1 | import Document, { Head, Main, NextScript } from "next/document"; 2 | 3 | class MyDocument extends Document { 4 | render() { 5 | return ( 6 | 7 | 8 | 12 | 16 | 22 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | ); 34 | } 35 | } 36 | 37 | export default MyDocument; 38 | -------------------------------------------------------------------------------- /client/pages/index.js: -------------------------------------------------------------------------------- 1 | import { Component } from "react"; 2 | import Layout from "../components/Layout/Layout"; 3 | import Index from "../components/Index"; 4 | 5 | class IndexPage extends Component { 6 | render() { 7 | return ( 8 | 9 | 10 | 11 | ); 12 | } 13 | } 14 | 15 | export default IndexPage; 16 | -------------------------------------------------------------------------------- /client/pages/password.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout/Layout"; 2 | import RequestReset from "../components/Auth/RequestReset"; 3 | 4 | const PasswordPage = () => ( 5 | 6 | 7 | 8 | ); 9 | 10 | export default PasswordPage; 11 | -------------------------------------------------------------------------------- /client/pages/protected.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout/Layout"; 2 | import Protected from "../components/Protected"; 3 | import WithAuth from "../components/Hoc/WithAuth"; 4 | 5 | const ProtectedPage = props => ( 6 | 7 | 8 | 9 | 10 | 11 | ); 12 | 13 | export default ProtectedPage; 14 | -------------------------------------------------------------------------------- /client/pages/reset.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout/Layout"; 2 | import Reset from "../components/Auth/Reset"; 3 | 4 | const ResetPage = props => ( 5 | 6 | 7 | 8 | ); 9 | 10 | export default ResetPage; 11 | -------------------------------------------------------------------------------- /client/pages/signin.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout/Layout"; 2 | import Signin from "../components/Auth/Signin"; 3 | 4 | const SigninPage = props => ( 5 | 6 | 7 | 8 | ); 9 | 10 | export default SigninPage; 11 | -------------------------------------------------------------------------------- /client/pages/signup.js: -------------------------------------------------------------------------------- 1 | import Layout from "../components/Layout/Layout"; 2 | import Signup from "../components/Auth/Signup"; 3 | 4 | const SignupPage = props => ( 5 | 6 | 7 | 8 | ); 9 | 10 | export default SignupPage; 11 | -------------------------------------------------------------------------------- /client/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nreoch25/nextjs-graphql-auth/c6540af86a330063dfbf126233a58ce4f9b2963d/client/static/favicon.png -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | db: 4 | image: "mongo:latest" 5 | ports: 6 | - "27017:27017" 7 | nginx: 8 | build: 9 | dockerfile: Dockerfile.dev 10 | context: ./nginx 11 | ports: 12 | - "80:80" 13 | depends_on: 14 | - graphql 15 | - client 16 | graphql: 17 | build: 18 | dockerfile: Dockerfile.dev 19 | context: ./server 20 | volumes: 21 | - /app/node_modules 22 | - ./server:/app 23 | depends_on: 24 | - db 25 | client: 26 | build: 27 | dockerfile: Dockerfile.dev 28 | context: ./client 29 | volumes: 30 | - /app/node_modules 31 | - ./client:/app 32 | depends_on: 33 | - graphql 34 | -------------------------------------------------------------------------------- /k8s/client-cluster-ip-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: client-cluster-ip-service 5 | spec: 6 | type: ClusterIP 7 | selector: 8 | component: web 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 12 | -------------------------------------------------------------------------------- /k8s/client-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: client-deployment 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | component: web 10 | template: 11 | metadata: 12 | labels: 13 | component: web 14 | spec: 15 | containers: 16 | - name: client 17 | image: nreoch9/nextjs-graphql-auth-client:latest 18 | ports: 19 | - containerPort: 3000 20 | -------------------------------------------------------------------------------- /k8s/database-cluster-ip-service.yaml: -------------------------------------------------------------------------------- 1 | kind: Service 2 | apiVersion: v1 3 | metadata: 4 | name: database 5 | spec: 6 | selector: 7 | app: database 8 | ports: 9 | - name: mongoport 10 | port: 27017 11 | type: ClusterIP 12 | -------------------------------------------------------------------------------- /k8s/database-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: database 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: database 9 | replicas: 1 10 | template: 11 | metadata: 12 | labels: 13 | app: database 14 | spec: 15 | containers: 16 | - name: database 17 | image: mongo:3.6.5-jessie 18 | volumeMounts: 19 | - name: mongo-persistent-storage 20 | mountPath: /data/db 21 | volumes: 22 | - name: mongo-persistent-storage 23 | hostPath: 24 | path: /mnt/data/db 25 | type: DirectoryOrCreate 26 | -------------------------------------------------------------------------------- /k8s/ingress-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: ingress-service 5 | annotations: 6 | kubernetes.io/ingress.class: nginx 7 | nginx.ingress.kubernetes.io/ssl-redirect: "false" 8 | spec: 9 | rules: 10 | - http: 11 | paths: 12 | - path: / 13 | backend: 14 | serviceName: client-cluster-ip-service 15 | servicePort: 3000 16 | - path: /graphql 17 | backend: 18 | serviceName: server-cluster-ip-service 19 | servicePort: 8000 20 | -------------------------------------------------------------------------------- /k8s/server-cluster-ip-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: server-cluster-ip-service 5 | spec: 6 | type: ClusterIP 7 | selector: 8 | component: server 9 | ports: 10 | - port: 8000 11 | targetPort: 8000 12 | -------------------------------------------------------------------------------- /k8s/server-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: server-deployment 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | component: server 10 | template: 11 | metadata: 12 | labels: 13 | component: server 14 | spec: 15 | containers: 16 | - name: server 17 | image: nreoch9/nextjs-graphql-auth-server:latest 18 | ports: 19 | - containerPort: 8000 20 | env: 21 | - name: MONGO_URI 22 | value: "mongodb://database:27017/nextjs-graphql-auth" 23 | - name: JWT_SECRET 24 | value: "thisisthenextjsgraphqlauthsecret" 25 | - name: CLIENT_URI 26 | value: "192.168.55.141" 27 | - name: PORT 28 | value: "8000" 29 | - name: MAIL_HOST 30 | value: "smtp.mailtrap.io" 31 | - name: MAIL_PORT 32 | value: "2525" 33 | - name: MAIL_USER 34 | valueFrom: 35 | secretKeyRef: 36 | name: mailuser 37 | key: MAIL_USER 38 | - name: MAIL_PASS 39 | valueFrom: 40 | secretKeyRef: 41 | name: mailpass 42 | key: MAIL_PASS 43 | -------------------------------------------------------------------------------- /nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:latest 2 | COPY ./default.conf /etc/nginx/conf.d/default.conf -------------------------------------------------------------------------------- /nginx/Dockerfile.dev: -------------------------------------------------------------------------------- 1 | FROM nginx:latest 2 | COPY ./default.conf /etc/nginx/conf.d/default.conf -------------------------------------------------------------------------------- /nginx/default.conf: -------------------------------------------------------------------------------- 1 | upstream client { 2 | server client:3000; 3 | } 4 | upstream graphql{ 5 | server graphql:8000; 6 | } 7 | server { 8 | listen 80; 9 | location / { 10 | proxy_pass http://client; 11 | } 12 | location /graphql { 13 | proxy_pass http://graphql; 14 | proxy_http_version 1.1; 15 | proxy_set_header Upgrade $http_upgrade; 16 | proxy_set_header Connection "Upgrade"; 17 | } 18 | location /playground { 19 | proxy_pass http://graphql; 20 | proxy_http_version 1.1; 21 | proxy_set_header Upgrade $http_upgrade; 22 | proxy_set_header Connection "Upgrade"; 23 | } 24 | } -------------------------------------------------------------------------------- /server/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | RUN apk update && apk --no-cache add --virtual builds-deps build-base python 3 | WORKDIR /app 4 | COPY ./package.json ./ 5 | COPY yarn.lock ./ 6 | RUN yarn install --frozen-lockfile 7 | COPY . . 8 | CMD ["yarn", "start"] -------------------------------------------------------------------------------- /server/Dockerfile.dev: -------------------------------------------------------------------------------- 1 | FROM node:10.15-alpine 2 | RUN apk update && apk --no-cache add --virtual builds-deps build-base python tini 3 | WORKDIR /app 4 | COPY ./package.json yarn.lock ./ 5 | RUN yarn install --frozen-lockfile && yarn cache clean --force 6 | COPY . . 7 | ENTRYPOINT ["/sbin/tini", "--"] 8 | CMD ["yarn", "dev"] -------------------------------------------------------------------------------- /server/graphql/resolvers/Mutation.js: -------------------------------------------------------------------------------- 1 | const bcrypt = require("bcrypt"); 2 | const { randomBytes } = require("crypto"); 3 | const { promisify } = require("util"); 4 | const { transport, passwordResetEmail } = require("../../utils/mail"); 5 | const createToken = require("../../utils/createToken"); 6 | 7 | const Mutation = { 8 | signupUser: async ( 9 | root, 10 | { username, email, password, passwordConfirm }, 11 | { User, res } 12 | ) => { 13 | const user = await User.findOne({ username }); 14 | email = email.toLowerCase(); 15 | if (user) { 16 | throw new Error("User already exists"); 17 | } 18 | // check if passwords match 19 | if (password !== passwordConfirm) { 20 | throw new Error("Your passwords don't match"); 21 | } 22 | const newUser = await new User({ 23 | username, 24 | email, 25 | password 26 | }).save(); 27 | 28 | const token = createToken(newUser, process.env.JWT_SECRET); 29 | // set the jwt as a cookie on the response 30 | res.cookie("token", token, { 31 | httpOnly: true, 32 | maxAge: 1000 * 60 * 60 * 24 // 1 day cookie 33 | }); 34 | 35 | return { token }; 36 | }, 37 | signinUser: async (root, { email, password }, { User, res }) => { 38 | email = email.toLowerCase(); 39 | const user = await User.findOne({ email }); 40 | if (!user) { 41 | throw new Error(`No user found for email ${email}`); 42 | } 43 | // validate password 44 | const valid = await bcrypt.compare(password, user.password); 45 | if (!valid) { 46 | throw new Error("Invalid password"); 47 | } 48 | const token = createToken(user, process.env.JWT_SECRET); 49 | // set the jwt as a cookie on the response 50 | res.cookie("token", token, { 51 | httpOnly: true, 52 | maxAge: 1000 * 60 * 60 * 24 // 1 day cookie 53 | }); 54 | return { 55 | token 56 | }; 57 | }, 58 | signoutUser: async (root, args, { res }) => { 59 | res.clearCookie("token"); 60 | return { message: "Come back soon" }; 61 | }, 62 | requestReset: async (root, { email }, { User, res }) => { 63 | // check if there is a user with that email 64 | email = email.toLowerCase(); 65 | console.log(email); 66 | const user = await User.findOne({ email }); 67 | if (!user) { 68 | throw new Error(`No such user found for email ${email}`); 69 | } 70 | // set a reset token and expiry on that user 71 | const randomBytesPromise = promisify(randomBytes); 72 | const resetToken = (await randomBytesPromise(20)).toString("hex"); 73 | const resetTokenExpiry = Date.now() + 36000000; // 1 hour from now 74 | // update user with resetToken and resetTokenExpiry 75 | const updatedUser = await User.updateOne( 76 | { email }, 77 | { 78 | resetToken, 79 | resetTokenExpiry 80 | } 81 | ); 82 | console.log("user updated", updatedUser); 83 | // send an email with the reset token 84 | const mailRes = await transport.sendMail({ 85 | from: "nreoch15@icloud.com", 86 | to: user.email, 87 | subject: "Your Password Reset Token", 88 | html: passwordResetEmail(`Your Password Reset Token is here! 89 | \n\n 90 | Click Here to Reset`) 93 | }); 94 | console.log("EMAIL", mailRes); 95 | return { message: "Thanks" }; 96 | }, 97 | resetPassword: async ( 98 | root, 99 | { password, passwordConfirm, resetToken }, 100 | { User, res } 101 | ) => { 102 | // check if passwords match 103 | if (password !== passwordConfirm) { 104 | throw new Error("Your passwords don't match"); 105 | } 106 | // check if the reset token is legit 107 | // check if it is expired 108 | const expiryCheck = Date.now() - 3600000; 109 | const user = await User.findOne({ 110 | resetToken, 111 | resetTokenExpiry: { $gt: expiryCheck } 112 | }); 113 | if (!user) { 114 | throw new Error("This token is either invalid or expired"); 115 | } 116 | // hash the new password 117 | const hashedPassword = await bcrypt.hash(password, 10); 118 | // save the new password to the user and remove old reset token 119 | // findOneAndUpdate will return the user to be returned 120 | const updatedUser = await User.findOneAndUpdate( 121 | { email: user.email }, 122 | { 123 | password: hashedPassword, 124 | resetToken: null, 125 | resetTokenExpiry: null 126 | } 127 | ); 128 | // generate a JWT 129 | const token = createToken(updatedUser, process.env.JWT_SECRET); 130 | // set the JWT cookie 131 | res.cookie("token", token, { 132 | httpOnly: true, 133 | maxAge: 1000 * 60 * 60 * 24 // 1 day cookie 134 | }); 135 | return updatedUser; 136 | }, 137 | postMessage: async (parent, { text }, { Message, req, pubsub }) => { 138 | if (!req.userId) { 139 | throw new Error("You must be an authenticated user"); 140 | } 141 | const newMessage = new Message({ 142 | text, 143 | sender: req.userId 144 | }); 145 | const message = await newMessage.save(); 146 | const populatedMessage = await message.populate("sender").execPopulate(); 147 | console.log(populatedMessage); 148 | pubsub.publish("message-added", { newMessage: populatedMessage }); 149 | return populatedMessage; 150 | } 151 | }; 152 | 153 | module.exports = Mutation; 154 | -------------------------------------------------------------------------------- /server/graphql/resolvers/Query.js: -------------------------------------------------------------------------------- 1 | const Query = { 2 | users: async (parent, args, { User }) => { 3 | return await User.find(); 4 | }, 5 | me: async (parent, args, { User, req }) => { 6 | if (!req.userId) { 7 | return null; 8 | } 9 | const user = User.findById(req.userId); 10 | return user; 11 | }, 12 | messages: async (parent, args, { Message }) => { 13 | return await Message.find({}).populate("sender"); 14 | } 15 | }; 16 | 17 | module.exports = Query; 18 | -------------------------------------------------------------------------------- /server/graphql/resolvers/Subscription.js: -------------------------------------------------------------------------------- 1 | const Subscription = { 2 | newMessage: { 3 | subscribe: (parent, args, { pubsub, subUser }) => { 4 | if (subUser) { 5 | return pubsub.asyncIterator("message-added"); 6 | } 7 | throw new Error("User is not authenticated"); 8 | } 9 | } 10 | }; 11 | 12 | module.exports = Subscription; 13 | -------------------------------------------------------------------------------- /server/graphql/resolvers/Type.js: -------------------------------------------------------------------------------- 1 | const Type = { 2 | User: { 3 | password: (parent, args, context) => "Password not available" 4 | } 5 | }; 6 | 7 | module.exports = Type; 8 | -------------------------------------------------------------------------------- /server/graphql/resolvers/index.js: -------------------------------------------------------------------------------- 1 | const Query = require("./Query"); 2 | const Mutation = require("./Mutation"); 3 | const Subscription = require("./Subscription"); 4 | const Type = require("./Type"); 5 | 6 | module.exports = { 7 | Query, 8 | Mutation, 9 | Subscription, 10 | ...Type 11 | }; 12 | -------------------------------------------------------------------------------- /server/graphql/schema.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | _id: ID! 3 | username: String! 4 | email: String! 5 | password: String! 6 | } 7 | 8 | type Message { 9 | _id: ID! 10 | text: String! 11 | sender: User! 12 | } 13 | 14 | type SuccessMessage { 15 | message: String 16 | } 17 | 18 | type Auth { 19 | token: String! 20 | } 21 | 22 | type Query { 23 | users: [User!]! 24 | me: User 25 | messages: [Message!]! 26 | } 27 | 28 | type Mutation { 29 | signupUser( 30 | username: String! 31 | email: String! 32 | password: String! 33 | passwordConfirm: String! 34 | ): Auth! 35 | signinUser(email: String!, password: String!): Auth! 36 | signoutUser: SuccessMessage! 37 | requestReset(email: String!): SuccessMessage! 38 | resetPassword( 39 | password: String! 40 | passwordConfirm: String! 41 | resetToken: String! 42 | ): User! 43 | postMessage(text: String!): Message! 44 | } 45 | 46 | type Subscription { 47 | newMessage: Message! 48 | } 49 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const mongoose = require("mongoose"); 3 | const { ApolloServer, gql, PubSub } = require("apollo-server-express"); 4 | const jwt = require("jsonwebtoken"); 5 | const expressPlayground = require("graphql-playground-middleware-express") 6 | .default; 7 | const { readFileSync } = require("fs"); 8 | const { createServer } = require("http"); 9 | const cookieParser = require("cookie-parser"); 10 | const User = require("./models/User"); 11 | const Message = require("./models/Message"); 12 | require("dotenv").config(); 13 | 14 | const typeDefs = gql( 15 | readFileSync("./graphql/schema.graphql", { encoding: "utf-8" }) 16 | ); 17 | const resolvers = require("./graphql/resolvers"); 18 | 19 | const app = express(); 20 | const port = process.env.PORT || 8000; 21 | const pubsub = new PubSub(); 22 | 23 | mongoose.Promise = global.Promise; 24 | mongoose 25 | .connect(process.env.MONGO_URI, { 26 | useNewUrlParser: true, 27 | useCreateIndex: true 28 | }) 29 | .then(() => console.log(`MongoDB connected at ${process.env.MONGO_URI}`)) 30 | .catch(error => console.error(error)); 31 | 32 | const { ObjectId } = mongoose.Types; 33 | ObjectId.prototype.valueOf = function() { 34 | return this.toString(); 35 | }; 36 | 37 | app.use(cookieParser()); 38 | // use cookie parser to populate current user 39 | app.use((req, res, next) => { 40 | const { token } = req.cookies; 41 | if (token) { 42 | const { _id } = jwt.verify(token, process.env.JWT_SECRET); 43 | // put the userId onto the req for future requests to access 44 | req.userId = _id; 45 | } 46 | next(); 47 | }); 48 | 49 | const graphQLServer = new ApolloServer({ 50 | typeDefs, 51 | resolvers, 52 | context: ({ req, res, connection }) => { 53 | const subUser = connection ? connection.context.subUser : null; 54 | return { User, Message, req, res, pubsub, subUser }; 55 | }, 56 | subscriptions: { 57 | onConnect: async (params, socket) => { 58 | const token = params.authToken; 59 | if (token) { 60 | const user = jwt.verify(token, process.env.JWT_SECRET); 61 | if (user) { 62 | return Object.assign({}, socket.upgradeReq, { subUser: user }); 63 | } 64 | } 65 | throw new Error("User is not authenticated"); 66 | } 67 | } 68 | }); 69 | 70 | graphQLServer.applyMiddleware({ 71 | app, 72 | path: "/graphql", 73 | cors: { origin: `http://${process.env.CLIENT_URI}`, credentials: true } 74 | }); 75 | 76 | app.get( 77 | "/playground", 78 | expressPlayground({ 79 | endpoint: "/graphql", 80 | subscriptionEndpoint: `ws://${process.env.CLIENT_URI}${ 81 | graphQLServer.graphqlPath 82 | }` 83 | }) 84 | ); 85 | 86 | const httpServer = createServer(app); 87 | graphQLServer.installSubscriptionHandlers(httpServer); 88 | 89 | httpServer.listen({ port }, () => { 90 | console.log( 91 | `GraphQL Server running @ http://${process.env.CLIENT_URI}:${port}${ 92 | graphQLServer.graphqlPath 93 | }` 94 | ); 95 | }); 96 | -------------------------------------------------------------------------------- /server/models/Message.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const Schema = mongoose.Schema; 3 | 4 | const MessageSchema = new Schema({ 5 | text: { type: String, required: true }, 6 | sender: { ref: "User", type: Schema.Types.ObjectId } 7 | }); 8 | 9 | module.exports = mongoose.model("Message", MessageSchema); 10 | -------------------------------------------------------------------------------- /server/models/User.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const bcrypt = require("bcrypt"); 3 | const Schema = mongoose.Schema; 4 | 5 | const UserSchema = new Schema({ 6 | username: { type: String, unique: true, required: true }, 7 | email: { type: String, required: true }, 8 | password: { type: String, required: true }, 9 | resetToken: { type: String }, 10 | resetTokenExpiry: { type: Number } 11 | }); 12 | 13 | UserSchema.pre("save", function(next) { 14 | if (!this.isModified("password")) { 15 | return next; 16 | } 17 | bcrypt.genSalt(10, (err, salt) => { 18 | if (err) { 19 | return next(err); 20 | } 21 | bcrypt.hash(this.password, salt, (err, hash) => { 22 | if (err) { 23 | return next(err); 24 | } 25 | this.password = hash; 26 | next(); 27 | }); 28 | }); 29 | }); 30 | 31 | module.exports = mongoose.model("User", UserSchema); 32 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nextjs-graphql-auth-server", 3 | "version": "1.0.0", 4 | "description": "A GraphQL server for NextJs GraphQL Auth", 5 | "author": "Nigel Reoch", 6 | "license": "MIT", 7 | "scripts": { 8 | "dev": "nodemon index.js", 9 | "start": "node index.js" 10 | }, 11 | "dependencies": { 12 | "apollo-server-express": "^2.3.1", 13 | "bcrypt": "^3.0.2", 14 | "cookie-parser": "^1.4.3", 15 | "dotenv": "^6.2.0", 16 | "express": "^4.16.4", 17 | "graphql": "^14.0.2", 18 | "graphql-playground-middleware-express": "^1.7.12", 19 | "graphql-tools": "^4.0.3", 20 | "jsonwebtoken": "^8.4.0", 21 | "mongoose": "^5.4.0", 22 | "nodemailer": "^5.0.0" 23 | }, 24 | "devDependencies": { 25 | "nodemon": "^1.18.9" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /server/utils/createToken.js: -------------------------------------------------------------------------------- 1 | const jwt = require("jsonwebtoken"); 2 | 3 | const createToken = (user, secret) => { 4 | const { _id, username, email } = user; 5 | return jwt.sign({ _id, username, email }, secret); 6 | }; 7 | 8 | module.exports = createToken; 9 | -------------------------------------------------------------------------------- /server/utils/mail.js: -------------------------------------------------------------------------------- 1 | const nodemailer = require("nodemailer"); 2 | 3 | const transport = nodemailer.createTransport({ 4 | host: process.env.MAIL_HOST, 5 | port: process.env.MAIL_PORT, 6 | auth: { 7 | user: process.env.MAIL_USER, 8 | pass: process.env.MAIL_PASS 9 | } 10 | }); 11 | 12 | const passwordResetEmail = text => ` 13 |
20 |

Hello

21 |

${text}

22 |

Thank you

23 |
24 | `; 25 | 26 | module.exports = { passwordResetEmail, transport }; 27 | -------------------------------------------------------------------------------- /server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@apollo/protobufjs@^1.0.3": 6 | version "1.0.3" 7 | resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.0.3.tgz#02c655aedd4ba7c7f64cbc3d2b1dd9a000a391ba" 8 | integrity sha512-gqeT810Ect9WIqsrgfUvr+ljSB5m1PyBae9HGdrRyQ3HjHjTcjVvxpsMYXlUk4rUHnrfUqyoGvLSy2yLlRGEOw== 9 | dependencies: 10 | "@protobufjs/aspromise" "^1.1.2" 11 | "@protobufjs/base64" "^1.1.2" 12 | "@protobufjs/codegen" "^2.0.4" 13 | "@protobufjs/eventemitter" "^1.1.0" 14 | "@protobufjs/fetch" "^1.1.0" 15 | "@protobufjs/float" "^1.0.2" 16 | "@protobufjs/inquire" "^1.1.0" 17 | "@protobufjs/path" "^1.1.2" 18 | "@protobufjs/pool" "^1.1.0" 19 | "@protobufjs/utf8" "^1.1.0" 20 | "@types/long" "^4.0.0" 21 | "@types/node" "^10.1.0" 22 | long "^4.0.0" 23 | 24 | "@apollographql/apollo-tools@^0.4.0": 25 | version "0.4.2" 26 | resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.2.tgz#46372dc059a6506ac4b70b3c4d9a6cf3e3b19ac5" 27 | integrity sha512-/kTaguTNSowXR/zWU4hjeL41yAdEbQO05f882c6cRIrVE7xIgJcBNEcYz2kzi94eaUbE2YY3SSxDJ6vPeV07OQ== 28 | dependencies: 29 | apollo-env "^0.6.0" 30 | 31 | "@apollographql/graphql-playground-html@1.6.24": 32 | version "1.6.24" 33 | resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc" 34 | integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ== 35 | 36 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 37 | version "1.1.2" 38 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" 39 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= 40 | 41 | "@protobufjs/base64@^1.1.2": 42 | version "1.1.2" 43 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" 44 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== 45 | 46 | "@protobufjs/codegen@^2.0.4": 47 | version "2.0.4" 48 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" 49 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== 50 | 51 | "@protobufjs/eventemitter@^1.1.0": 52 | version "1.1.0" 53 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" 54 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= 55 | 56 | "@protobufjs/fetch@^1.1.0": 57 | version "1.1.0" 58 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" 59 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= 60 | dependencies: 61 | "@protobufjs/aspromise" "^1.1.1" 62 | "@protobufjs/inquire" "^1.1.0" 63 | 64 | "@protobufjs/float@^1.0.2": 65 | version "1.0.2" 66 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" 67 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= 68 | 69 | "@protobufjs/inquire@^1.1.0": 70 | version "1.1.0" 71 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" 72 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= 73 | 74 | "@protobufjs/path@^1.1.2": 75 | version "1.1.2" 76 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" 77 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= 78 | 79 | "@protobufjs/pool@^1.1.0": 80 | version "1.1.0" 81 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" 82 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= 83 | 84 | "@protobufjs/utf8@^1.1.0": 85 | version "1.1.0" 86 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" 87 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= 88 | 89 | "@types/accepts@*", "@types/accepts@^1.3.5": 90 | version "1.3.5" 91 | resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" 92 | integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== 93 | dependencies: 94 | "@types/node" "*" 95 | 96 | "@types/body-parser@*", "@types/body-parser@1.17.1": 97 | version "1.17.1" 98 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.1.tgz#18fcf61768fb5c30ccc508c21d6fd2e8b3bf7897" 99 | integrity sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w== 100 | dependencies: 101 | "@types/connect" "*" 102 | "@types/node" "*" 103 | 104 | "@types/connect@*": 105 | version "3.4.33" 106 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" 107 | integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== 108 | dependencies: 109 | "@types/node" "*" 110 | 111 | "@types/cookies@*": 112 | version "0.7.4" 113 | resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.4.tgz#26dedf791701abc0e36b5b79a5722f40e455f87b" 114 | integrity sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw== 115 | dependencies: 116 | "@types/connect" "*" 117 | "@types/express" "*" 118 | "@types/keygrip" "*" 119 | "@types/node" "*" 120 | 121 | "@types/cors@^2.8.4": 122 | version "2.8.6" 123 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.6.tgz#cfaab33c49c15b1ded32f235111ce9123009bd02" 124 | integrity sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg== 125 | dependencies: 126 | "@types/express" "*" 127 | 128 | "@types/express-serve-static-core@*": 129 | version "4.17.0" 130 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz#e80c25903df5800e926402b7e8267a675c54a281" 131 | integrity sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g== 132 | dependencies: 133 | "@types/node" "*" 134 | "@types/range-parser" "*" 135 | 136 | "@types/express@*": 137 | version "4.17.2" 138 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c" 139 | integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA== 140 | dependencies: 141 | "@types/body-parser" "*" 142 | "@types/express-serve-static-core" "*" 143 | "@types/serve-static" "*" 144 | 145 | "@types/express@4.17.1": 146 | version "4.17.1" 147 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.1.tgz#4cf7849ae3b47125a567dfee18bfca4254b88c5c" 148 | integrity sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w== 149 | dependencies: 150 | "@types/body-parser" "*" 151 | "@types/express-serve-static-core" "*" 152 | "@types/serve-static" "*" 153 | 154 | "@types/fs-capacitor@*": 155 | version "2.0.0" 156 | resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e" 157 | integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ== 158 | dependencies: 159 | "@types/node" "*" 160 | 161 | "@types/graphql-upload@^8.0.0": 162 | version "8.0.3" 163 | resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.3.tgz#b371edb5f305a2a1f7b7843a890a2a7adc55c3ec" 164 | integrity sha512-hmLg9pCU/GmxBscg8GCr1vmSoEmbItNNxdD5YH2TJkXm//8atjwuprB+xJBK714JG1dkxbbhp5RHX+Pz1KsCMA== 165 | dependencies: 166 | "@types/express" "*" 167 | "@types/fs-capacitor" "*" 168 | "@types/koa" "*" 169 | graphql "^14.5.3" 170 | 171 | "@types/http-assert@*": 172 | version "1.5.1" 173 | resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" 174 | integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== 175 | 176 | "@types/keygrip@*": 177 | version "1.0.1" 178 | resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878" 179 | integrity sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg= 180 | 181 | "@types/koa-compose@*": 182 | version "3.2.5" 183 | resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" 184 | integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== 185 | dependencies: 186 | "@types/koa" "*" 187 | 188 | "@types/koa@*": 189 | version "2.11.0" 190 | resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.0.tgz#394a3e9ec94f796003a6c8374b4dbc2778746f20" 191 | integrity sha512-Hgx/1/rVlJvqYBrdeCsS7PDiR2qbxlMt1RnmNWD4Uxi5FF9nwkYqIldo7urjc+dfNpk+2NRGcnAYd4L5xEhCcQ== 192 | dependencies: 193 | "@types/accepts" "*" 194 | "@types/cookies" "*" 195 | "@types/http-assert" "*" 196 | "@types/keygrip" "*" 197 | "@types/koa-compose" "*" 198 | "@types/node" "*" 199 | 200 | "@types/long@^4.0.0": 201 | version "4.0.0" 202 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" 203 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== 204 | 205 | "@types/mime@*": 206 | version "2.0.1" 207 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" 208 | integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== 209 | 210 | "@types/node@*": 211 | version "12.12.21" 212 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.21.tgz#aa44a6363291c7037111c47e4661ad210aded23f" 213 | integrity sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA== 214 | 215 | "@types/node@^10.1.0": 216 | version "10.17.11" 217 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.11.tgz#46ba035fb917b31c948280dbea22ab8838f386a4" 218 | integrity sha512-dNd2pp8qTzzNLAs3O8nH3iU9DG9866KHq9L3ISPB7DOGERZN81nW/5/g/KzMJpCU8jrbCiMRBzV9/sCEdRosig== 219 | 220 | "@types/range-parser@*": 221 | version "1.2.3" 222 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 223 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 224 | 225 | "@types/serve-static@*": 226 | version "1.13.3" 227 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" 228 | integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== 229 | dependencies: 230 | "@types/express-serve-static-core" "*" 231 | "@types/mime" "*" 232 | 233 | "@types/ws@^6.0.0": 234 | version "6.0.4" 235 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.4.tgz#7797707c8acce8f76d8c34b370d4645b70421ff1" 236 | integrity sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg== 237 | dependencies: 238 | "@types/node" "*" 239 | 240 | "@wry/equality@^0.1.2": 241 | version "0.1.9" 242 | resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.9.tgz#b13e18b7a8053c6858aa6c85b54911fb31e3a909" 243 | integrity sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ== 244 | dependencies: 245 | tslib "^1.9.3" 246 | 247 | abbrev@1: 248 | version "1.1.1" 249 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 250 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 251 | 252 | accepts@^1.3.5, accepts@~1.3.7: 253 | version "1.3.7" 254 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 255 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 256 | dependencies: 257 | mime-types "~2.1.24" 258 | negotiator "0.6.2" 259 | 260 | ansi-align@^2.0.0: 261 | version "2.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 263 | integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= 264 | dependencies: 265 | string-width "^2.0.0" 266 | 267 | ansi-regex@^2.0.0: 268 | version "2.1.1" 269 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 270 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 271 | 272 | ansi-regex@^3.0.0: 273 | version "3.0.0" 274 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 275 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 276 | 277 | ansi-styles@^3.2.1: 278 | version "3.2.1" 279 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 280 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 281 | dependencies: 282 | color-convert "^1.9.0" 283 | 284 | anymatch@^2.0.0: 285 | version "2.0.0" 286 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 287 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 288 | dependencies: 289 | micromatch "^3.1.4" 290 | normalize-path "^2.1.1" 291 | 292 | apollo-cache-control@^0.8.9: 293 | version "0.8.9" 294 | resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.8.9.tgz#1c53dcb6cc209646b73b4ba8803ff6ea50bea2a7" 295 | integrity sha512-EFRAEL13QkMbXhl0NSABVS0wfiKYIVV4sDR+XNtRy3EWf2rWw7xulYFDMPiujjtElF2qjTswzcpLtYOXgOZN9A== 296 | dependencies: 297 | apollo-server-env "^2.4.3" 298 | graphql-extensions "^0.10.8" 299 | 300 | apollo-datasource@^0.6.3: 301 | version "0.6.3" 302 | resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.6.3.tgz#b31e089e52adb92fabb536ab8501c502573ffe13" 303 | integrity sha512-gRYyFVpJgHE2hhS+VxMeOerxXQ/QYxWG7T6QddfugJWYAG9DRCl65e2b7txcGq2NP3r+O1iCm4GNwhRBDJbd8A== 304 | dependencies: 305 | apollo-server-caching "^0.5.0" 306 | apollo-server-env "^2.4.3" 307 | 308 | apollo-engine-reporting-protobuf@^0.4.4: 309 | version "0.4.4" 310 | resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.4.tgz#73a064f8c9f2d6605192d1673729c66ec47d9cb7" 311 | integrity sha512-SGrIkUR7Q/VjU8YG98xcvo340C4DaNUhg/TXOtGsMlfiJDzHwVau/Bv6zifAzBafp2lj0XND6Daj5kyT/eSI/w== 312 | dependencies: 313 | "@apollo/protobufjs" "^1.0.3" 314 | 315 | apollo-engine-reporting@^1.4.12: 316 | version "1.4.12" 317 | resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.4.12.tgz#b33a6eae0ffa7b827dd813bed335260e6ad012d2" 318 | integrity sha512-W1PpXaXSrqZu4Ae9NrjWXtTL9HFbQPynQLiGDAsDmCsL/wRAVyl6qRhVteSj7drwgXgAH5TwtUCnjJgSI+ixlg== 319 | dependencies: 320 | apollo-engine-reporting-protobuf "^0.4.4" 321 | apollo-graphql "^0.3.4" 322 | apollo-server-caching "^0.5.0" 323 | apollo-server-env "^2.4.3" 324 | apollo-server-types "^0.2.9" 325 | async-retry "^1.2.1" 326 | graphql-extensions "^0.10.8" 327 | 328 | apollo-env@^0.6.0: 329 | version "0.6.0" 330 | resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.0.tgz#124c2ab6bac0a9c6761aa7c1f036964fd282b3ac" 331 | integrity sha512-DttHOpLISRej8STjbXjQCXq3YeE2pATaC4UEd2YE7TjjYhQmp9yxohlkHfSR78BvPzczhyDs6WQQEzasHv0M0A== 332 | dependencies: 333 | core-js "^3.0.1" 334 | node-fetch "^2.2.0" 335 | sha.js "^2.4.11" 336 | 337 | apollo-graphql@^0.3.4: 338 | version "0.3.6" 339 | resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.3.6.tgz#c30e503c1f5ff478953e48b6267d4bb9c093e27a" 340 | integrity sha512-PUBfW6t20U4CgPODTZB+3Z1Z+qhca8SNEHMPreiw+qEjXwEJF7SZItOIAs93HO0mA2K7eiZjCtZQZknaaQRZNA== 341 | dependencies: 342 | apollo-env "^0.6.0" 343 | lodash.sortby "^4.7.0" 344 | 345 | apollo-link@^1.2.3: 346 | version "1.2.13" 347 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.13.tgz#dff00fbf19dfcd90fddbc14b6a3f9a771acac6c4" 348 | integrity sha512-+iBMcYeevMm1JpYgwDEIDt/y0BB7VWyvlm/7x+TIPNLHCTCMgcEgDuW5kH86iQZWo0I7mNwQiTOz+/3ShPFmBw== 349 | dependencies: 350 | apollo-utilities "^1.3.0" 351 | ts-invariant "^0.4.0" 352 | tslib "^1.9.3" 353 | zen-observable-ts "^0.8.20" 354 | 355 | apollo-server-caching@^0.5.0: 356 | version "0.5.0" 357 | resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.0.tgz#446a37ce2d4e24c81833e276638330a634f7bd46" 358 | integrity sha512-l7ieNCGxUaUAVAAp600HjbUJxVaxjJygtPV0tPTe1Q3HkPy6LEWoY6mNHV7T268g1hxtPTxcdRu7WLsJrg7ufw== 359 | dependencies: 360 | lru-cache "^5.0.0" 361 | 362 | apollo-server-core@^2.9.14: 363 | version "2.9.14" 364 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.9.14.tgz#9f68ec605df15cbe509a1b9f384923aef63d4169" 365 | integrity sha512-Vc8TicXFFZGuEgo5AY1Ey0XuvHn7NQS1y7WxOQnr85KJ2zeRa6uIT8tU+73ZObzan3nlm9ysYtfSXh2QL21oyg== 366 | dependencies: 367 | "@apollographql/apollo-tools" "^0.4.0" 368 | "@apollographql/graphql-playground-html" "1.6.24" 369 | "@types/graphql-upload" "^8.0.0" 370 | "@types/ws" "^6.0.0" 371 | apollo-cache-control "^0.8.9" 372 | apollo-datasource "^0.6.3" 373 | apollo-engine-reporting "^1.4.12" 374 | apollo-server-caching "^0.5.0" 375 | apollo-server-env "^2.4.3" 376 | apollo-server-errors "^2.3.4" 377 | apollo-server-plugin-base "^0.6.9" 378 | apollo-server-types "^0.2.9" 379 | apollo-tracing "^0.8.9" 380 | fast-json-stable-stringify "^2.0.0" 381 | graphql-extensions "^0.10.8" 382 | graphql-tag "^2.9.2" 383 | graphql-tools "^4.0.0" 384 | graphql-upload "^8.0.2" 385 | sha.js "^2.4.11" 386 | subscriptions-transport-ws "^0.9.11" 387 | ws "^6.0.0" 388 | 389 | apollo-server-env@^2.4.3: 390 | version "2.4.3" 391 | resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.3.tgz#9bceedaae07eafb96becdfd478f8d92617d825d2" 392 | integrity sha512-23R5Xo9OMYX0iyTu2/qT0EUb+AULCBriA9w8HDfMoChB8M+lFClqUkYtaTTHDfp6eoARLW8kDBhPOBavsvKAjA== 393 | dependencies: 394 | node-fetch "^2.1.2" 395 | util.promisify "^1.0.0" 396 | 397 | apollo-server-errors@^2.3.4: 398 | version "2.3.4" 399 | resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.4.tgz#b70ef01322f616cbcd876f3e0168a1a86b82db34" 400 | integrity sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA== 401 | 402 | apollo-server-express@^2.3.1: 403 | version "2.9.14" 404 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.9.14.tgz#32b9c46248f7f4e71d51bfbdbec34e1880f1c93b" 405 | integrity sha512-ai+VKPlOUzJsbSQcazjATNtWwdgcvZBWBCbTF7ZUC9Uo6FfSlKOmP3raQAq+gKqsnFwv34p4k17c/Asw5ZjSMQ== 406 | dependencies: 407 | "@apollographql/graphql-playground-html" "1.6.24" 408 | "@types/accepts" "^1.3.5" 409 | "@types/body-parser" "1.17.1" 410 | "@types/cors" "^2.8.4" 411 | "@types/express" "4.17.1" 412 | accepts "^1.3.5" 413 | apollo-server-core "^2.9.14" 414 | apollo-server-types "^0.2.9" 415 | body-parser "^1.18.3" 416 | cors "^2.8.4" 417 | express "^4.17.1" 418 | graphql-subscriptions "^1.0.0" 419 | graphql-tools "^4.0.0" 420 | parseurl "^1.3.2" 421 | subscriptions-transport-ws "^0.9.16" 422 | type-is "^1.6.16" 423 | 424 | apollo-server-plugin-base@^0.6.9: 425 | version "0.6.9" 426 | resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.9.tgz#0b47028f75066f2429935b0234fe58217bcc6de6" 427 | integrity sha512-75rorl0y07PK7A/U1Oe9unLIGgbmy1T6uaCQ5zl8zy+mtmFFcH1nYERfXZha1eTDWLCx0F/xNI6YJmWxSisc5w== 428 | dependencies: 429 | apollo-server-types "^0.2.9" 430 | 431 | apollo-server-types@^0.2.9: 432 | version "0.2.9" 433 | resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.2.9.tgz#d943817772e8712c7479be2403878be849183995" 434 | integrity sha512-Iu9twx3lycH41F8shmrb33b4y0mNBz1chBdTIaSgIMmNwPDR4xs4eB6iyTK5swnaYC1eW+c+t5lHRUk7yexs/g== 435 | dependencies: 436 | apollo-engine-reporting-protobuf "^0.4.4" 437 | apollo-server-caching "^0.5.0" 438 | apollo-server-env "^2.4.3" 439 | 440 | apollo-tracing@^0.8.9: 441 | version "0.8.9" 442 | resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.8.9.tgz#2fde222dd60d21a211ebdbe4bc8d8674fdfb5e14" 443 | integrity sha512-DYHPUW0rFcxxtI8+qU3leNU+fKfq9NPTjgPMr/AJmxKfsdOI6QgfVzVP/khiik0kU0+BMl5zBplwEDDdgbkUlg== 444 | dependencies: 445 | apollo-server-env "^2.4.3" 446 | graphql-extensions "^0.10.8" 447 | 448 | apollo-utilities@^1.0.1, apollo-utilities@^1.3.0: 449 | version "1.3.3" 450 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.3.tgz#f1854715a7be80cd810bc3ac95df085815c0787c" 451 | integrity sha512-F14aX2R/fKNYMvhuP2t9GD9fggID7zp5I96MF5QeKYWDWTrkRdHRp4+SVfXUVN+cXOaB/IebfvRtzPf25CM0zw== 452 | dependencies: 453 | "@wry/equality" "^0.1.2" 454 | fast-json-stable-stringify "^2.0.0" 455 | ts-invariant "^0.4.0" 456 | tslib "^1.10.0" 457 | 458 | aproba@^1.0.3: 459 | version "1.2.0" 460 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 461 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 462 | 463 | are-we-there-yet@~1.1.2: 464 | version "1.1.5" 465 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 466 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 467 | dependencies: 468 | delegates "^1.0.0" 469 | readable-stream "^2.0.6" 470 | 471 | arr-diff@^4.0.0: 472 | version "4.0.0" 473 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 474 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 475 | 476 | arr-flatten@^1.1.0: 477 | version "1.1.0" 478 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 479 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 480 | 481 | arr-union@^3.1.0: 482 | version "3.1.0" 483 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 484 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 485 | 486 | array-flatten@1.1.1: 487 | version "1.1.1" 488 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 489 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 490 | 491 | array-unique@^0.3.2: 492 | version "0.3.2" 493 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 494 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 495 | 496 | assign-symbols@^1.0.0: 497 | version "1.0.0" 498 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 499 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 500 | 501 | async-each@^1.0.1: 502 | version "1.0.3" 503 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" 504 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== 505 | 506 | async-limiter@~1.0.0: 507 | version "1.0.1" 508 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 509 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 510 | 511 | async-retry@^1.2.1: 512 | version "1.2.3" 513 | resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" 514 | integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== 515 | dependencies: 516 | retry "0.12.0" 517 | 518 | atob@^2.1.1: 519 | version "2.1.2" 520 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 521 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 522 | 523 | backo2@^1.0.2: 524 | version "1.0.2" 525 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 526 | integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= 527 | 528 | balanced-match@^1.0.0: 529 | version "1.0.0" 530 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 531 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 532 | 533 | base@^0.11.1: 534 | version "0.11.2" 535 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 536 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 537 | dependencies: 538 | cache-base "^1.0.1" 539 | class-utils "^0.3.5" 540 | component-emitter "^1.2.1" 541 | define-property "^1.0.0" 542 | isobject "^3.0.1" 543 | mixin-deep "^1.2.0" 544 | pascalcase "^0.1.1" 545 | 546 | bcrypt@^3.0.2: 547 | version "3.0.7" 548 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-3.0.7.tgz#1187d29df2e1cde44268152b13e3d4a655a7c7de" 549 | integrity sha512-K5UglF9VQvBMHl/1elNyyFvAfOY9Bj+rpKrCSR9sFwcW8FywAYJSRwTURNej5TaAK2TEJkcJ6r6lh1YPmspx5Q== 550 | dependencies: 551 | nan "2.14.0" 552 | node-pre-gyp "0.13.0" 553 | 554 | binary-extensions@^1.0.0: 555 | version "1.13.1" 556 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" 557 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== 558 | 559 | bindings@^1.5.0: 560 | version "1.5.0" 561 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 562 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 563 | dependencies: 564 | file-uri-to-path "1.0.0" 565 | 566 | bluebird@3.5.1: 567 | version "3.5.1" 568 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 569 | integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== 570 | 571 | body-parser@1.19.0, body-parser@^1.18.3: 572 | version "1.19.0" 573 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 574 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 575 | dependencies: 576 | bytes "3.1.0" 577 | content-type "~1.0.4" 578 | debug "2.6.9" 579 | depd "~1.1.2" 580 | http-errors "1.7.2" 581 | iconv-lite "0.4.24" 582 | on-finished "~2.3.0" 583 | qs "6.7.0" 584 | raw-body "2.4.0" 585 | type-is "~1.6.17" 586 | 587 | boxen@^1.2.1: 588 | version "1.3.0" 589 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 590 | integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== 591 | dependencies: 592 | ansi-align "^2.0.0" 593 | camelcase "^4.0.0" 594 | chalk "^2.0.1" 595 | cli-boxes "^1.0.0" 596 | string-width "^2.0.0" 597 | term-size "^1.2.0" 598 | widest-line "^2.0.0" 599 | 600 | brace-expansion@^1.1.7: 601 | version "1.1.11" 602 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 603 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 604 | dependencies: 605 | balanced-match "^1.0.0" 606 | concat-map "0.0.1" 607 | 608 | braces@^2.3.1, braces@^2.3.2: 609 | version "2.3.2" 610 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 611 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 612 | dependencies: 613 | arr-flatten "^1.1.0" 614 | array-unique "^0.3.2" 615 | extend-shallow "^2.0.1" 616 | fill-range "^4.0.0" 617 | isobject "^3.0.1" 618 | repeat-element "^1.1.2" 619 | snapdragon "^0.8.1" 620 | snapdragon-node "^2.0.1" 621 | split-string "^3.0.2" 622 | to-regex "^3.0.1" 623 | 624 | bson@^1.1.1, bson@~1.1.1: 625 | version "1.1.3" 626 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.3.tgz#aa82cb91f9a453aaa060d6209d0675114a8154d3" 627 | integrity sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg== 628 | 629 | buffer-equal-constant-time@1.0.1: 630 | version "1.0.1" 631 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 632 | integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= 633 | 634 | busboy@^0.3.1: 635 | version "0.3.1" 636 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" 637 | integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== 638 | dependencies: 639 | dicer "0.3.0" 640 | 641 | bytes@3.1.0: 642 | version "3.1.0" 643 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 644 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 645 | 646 | cache-base@^1.0.1: 647 | version "1.0.1" 648 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 649 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 650 | dependencies: 651 | collection-visit "^1.0.0" 652 | component-emitter "^1.2.1" 653 | get-value "^2.0.6" 654 | has-value "^1.0.0" 655 | isobject "^3.0.1" 656 | set-value "^2.0.0" 657 | to-object-path "^0.3.0" 658 | union-value "^1.0.0" 659 | unset-value "^1.0.0" 660 | 661 | camelcase@^4.0.0: 662 | version "4.1.0" 663 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 664 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 665 | 666 | capture-stack-trace@^1.0.0: 667 | version "1.0.1" 668 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" 669 | integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== 670 | 671 | chalk@^2.0.1: 672 | version "2.4.2" 673 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 674 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 675 | dependencies: 676 | ansi-styles "^3.2.1" 677 | escape-string-regexp "^1.0.5" 678 | supports-color "^5.3.0" 679 | 680 | chokidar@^2.1.8: 681 | version "2.1.8" 682 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" 683 | integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== 684 | dependencies: 685 | anymatch "^2.0.0" 686 | async-each "^1.0.1" 687 | braces "^2.3.2" 688 | glob-parent "^3.1.0" 689 | inherits "^2.0.3" 690 | is-binary-path "^1.0.0" 691 | is-glob "^4.0.0" 692 | normalize-path "^3.0.0" 693 | path-is-absolute "^1.0.0" 694 | readdirp "^2.2.1" 695 | upath "^1.1.1" 696 | optionalDependencies: 697 | fsevents "^1.2.7" 698 | 699 | chownr@^1.1.1: 700 | version "1.1.3" 701 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" 702 | integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== 703 | 704 | ci-info@^1.5.0: 705 | version "1.6.0" 706 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" 707 | integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== 708 | 709 | class-utils@^0.3.5: 710 | version "0.3.6" 711 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 712 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 713 | dependencies: 714 | arr-union "^3.1.0" 715 | define-property "^0.2.5" 716 | isobject "^3.0.0" 717 | static-extend "^0.1.1" 718 | 719 | cli-boxes@^1.0.0: 720 | version "1.0.0" 721 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 722 | integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= 723 | 724 | code-point-at@^1.0.0: 725 | version "1.1.0" 726 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 727 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 728 | 729 | collection-visit@^1.0.0: 730 | version "1.0.0" 731 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 732 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 733 | dependencies: 734 | map-visit "^1.0.0" 735 | object-visit "^1.0.0" 736 | 737 | color-convert@^1.9.0: 738 | version "1.9.3" 739 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 740 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 741 | dependencies: 742 | color-name "1.1.3" 743 | 744 | color-name@1.1.3: 745 | version "1.1.3" 746 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 747 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 748 | 749 | component-emitter@^1.2.1: 750 | version "1.3.0" 751 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 752 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 753 | 754 | concat-map@0.0.1: 755 | version "0.0.1" 756 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 757 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 758 | 759 | configstore@^3.0.0: 760 | version "3.1.2" 761 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" 762 | integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== 763 | dependencies: 764 | dot-prop "^4.1.0" 765 | graceful-fs "^4.1.2" 766 | make-dir "^1.0.0" 767 | unique-string "^1.0.0" 768 | write-file-atomic "^2.0.0" 769 | xdg-basedir "^3.0.0" 770 | 771 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 772 | version "1.1.0" 773 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 774 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 775 | 776 | content-disposition@0.5.3: 777 | version "0.5.3" 778 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 779 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 780 | dependencies: 781 | safe-buffer "5.1.2" 782 | 783 | content-type@~1.0.4: 784 | version "1.0.4" 785 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 786 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 787 | 788 | cookie-parser@^1.4.3: 789 | version "1.4.4" 790 | resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188" 791 | integrity sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw== 792 | dependencies: 793 | cookie "0.3.1" 794 | cookie-signature "1.0.6" 795 | 796 | cookie-signature@1.0.6: 797 | version "1.0.6" 798 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 799 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 800 | 801 | cookie@0.3.1: 802 | version "0.3.1" 803 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 804 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= 805 | 806 | cookie@0.4.0: 807 | version "0.4.0" 808 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 809 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 810 | 811 | copy-descriptor@^0.1.0: 812 | version "0.1.1" 813 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 814 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 815 | 816 | core-js@^3.0.1: 817 | version "3.6.0" 818 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.0.tgz#2b854e451de1967d1e29896025cdc13a2518d9ea" 819 | integrity sha512-AHPTNKzyB+YwgDWoSOCaid9PUSEF6781vsfiK8qUz62zRR448/XgK2NtCbpiUGizbep8Lrpt0Du19PpGGZvw3Q== 820 | 821 | core-util-is@~1.0.0: 822 | version "1.0.2" 823 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 824 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 825 | 826 | cors@^2.8.4: 827 | version "2.8.5" 828 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 829 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 830 | dependencies: 831 | object-assign "^4" 832 | vary "^1" 833 | 834 | create-error-class@^3.0.0: 835 | version "3.0.2" 836 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 837 | integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= 838 | dependencies: 839 | capture-stack-trace "^1.0.0" 840 | 841 | cross-spawn@^5.0.1: 842 | version "5.1.0" 843 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 844 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 845 | dependencies: 846 | lru-cache "^4.0.1" 847 | shebang-command "^1.2.0" 848 | which "^1.2.9" 849 | 850 | crypto-random-string@^1.0.0: 851 | version "1.0.0" 852 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 853 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= 854 | 855 | debug@2.6.9, debug@^2.2.0, debug@^2.3.3: 856 | version "2.6.9" 857 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 858 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 859 | dependencies: 860 | ms "2.0.0" 861 | 862 | debug@3.1.0: 863 | version "3.1.0" 864 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 865 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 866 | dependencies: 867 | ms "2.0.0" 868 | 869 | debug@^3.2.6: 870 | version "3.2.6" 871 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 872 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 873 | dependencies: 874 | ms "^2.1.1" 875 | 876 | decode-uri-component@^0.2.0: 877 | version "0.2.0" 878 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 879 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 880 | 881 | deep-extend@^0.6.0: 882 | version "0.6.0" 883 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 884 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 885 | 886 | define-properties@^1.1.2, define-properties@^1.1.3: 887 | version "1.1.3" 888 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 889 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 890 | dependencies: 891 | object-keys "^1.0.12" 892 | 893 | define-property@^0.2.5: 894 | version "0.2.5" 895 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 896 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 897 | dependencies: 898 | is-descriptor "^0.1.0" 899 | 900 | define-property@^1.0.0: 901 | version "1.0.0" 902 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 903 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 904 | dependencies: 905 | is-descriptor "^1.0.0" 906 | 907 | define-property@^2.0.2: 908 | version "2.0.2" 909 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 910 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 911 | dependencies: 912 | is-descriptor "^1.0.2" 913 | isobject "^3.0.1" 914 | 915 | delegates@^1.0.0: 916 | version "1.0.0" 917 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 918 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 919 | 920 | depd@~1.1.2: 921 | version "1.1.2" 922 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 923 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 924 | 925 | deprecated-decorator@^0.1.6: 926 | version "0.1.6" 927 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 928 | integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= 929 | 930 | destroy@~1.0.4: 931 | version "1.0.4" 932 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 933 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 934 | 935 | detect-libc@^1.0.2: 936 | version "1.0.3" 937 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 938 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 939 | 940 | dicer@0.3.0: 941 | version "0.3.0" 942 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" 943 | integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== 944 | dependencies: 945 | streamsearch "0.1.2" 946 | 947 | dot-prop@^4.1.0: 948 | version "4.2.0" 949 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 950 | integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== 951 | dependencies: 952 | is-obj "^1.0.0" 953 | 954 | dotenv@^6.2.0: 955 | version "6.2.0" 956 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" 957 | integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== 958 | 959 | duplexer3@^0.1.4: 960 | version "0.1.4" 961 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 962 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 963 | 964 | ecdsa-sig-formatter@1.0.11: 965 | version "1.0.11" 966 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" 967 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== 968 | dependencies: 969 | safe-buffer "^5.0.1" 970 | 971 | ee-first@1.1.1: 972 | version "1.1.1" 973 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 974 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 975 | 976 | encodeurl@~1.0.2: 977 | version "1.0.2" 978 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 979 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 980 | 981 | es-abstract@^1.17.0-next.1: 982 | version "1.17.0-next.1" 983 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" 984 | integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== 985 | dependencies: 986 | es-to-primitive "^1.2.1" 987 | function-bind "^1.1.1" 988 | has "^1.0.3" 989 | has-symbols "^1.0.1" 990 | is-callable "^1.1.4" 991 | is-regex "^1.0.4" 992 | object-inspect "^1.7.0" 993 | object-keys "^1.1.1" 994 | object.assign "^4.1.0" 995 | string.prototype.trimleft "^2.1.0" 996 | string.prototype.trimright "^2.1.0" 997 | 998 | es-to-primitive@^1.2.1: 999 | version "1.2.1" 1000 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1001 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1002 | dependencies: 1003 | is-callable "^1.1.4" 1004 | is-date-object "^1.0.1" 1005 | is-symbol "^1.0.2" 1006 | 1007 | escape-html@~1.0.3: 1008 | version "1.0.3" 1009 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1010 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 1011 | 1012 | escape-string-regexp@^1.0.5: 1013 | version "1.0.5" 1014 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1015 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1016 | 1017 | etag@~1.8.1: 1018 | version "1.8.1" 1019 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1020 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1021 | 1022 | eventemitter3@^3.1.0: 1023 | version "3.1.2" 1024 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" 1025 | integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== 1026 | 1027 | execa@^0.7.0: 1028 | version "0.7.0" 1029 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 1030 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 1031 | dependencies: 1032 | cross-spawn "^5.0.1" 1033 | get-stream "^3.0.0" 1034 | is-stream "^1.1.0" 1035 | npm-run-path "^2.0.0" 1036 | p-finally "^1.0.0" 1037 | signal-exit "^3.0.0" 1038 | strip-eof "^1.0.0" 1039 | 1040 | expand-brackets@^2.1.4: 1041 | version "2.1.4" 1042 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1043 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 1044 | dependencies: 1045 | debug "^2.3.3" 1046 | define-property "^0.2.5" 1047 | extend-shallow "^2.0.1" 1048 | posix-character-classes "^0.1.0" 1049 | regex-not "^1.0.0" 1050 | snapdragon "^0.8.1" 1051 | to-regex "^3.0.1" 1052 | 1053 | express@^4.16.4, express@^4.17.1: 1054 | version "4.17.1" 1055 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 1056 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 1057 | dependencies: 1058 | accepts "~1.3.7" 1059 | array-flatten "1.1.1" 1060 | body-parser "1.19.0" 1061 | content-disposition "0.5.3" 1062 | content-type "~1.0.4" 1063 | cookie "0.4.0" 1064 | cookie-signature "1.0.6" 1065 | debug "2.6.9" 1066 | depd "~1.1.2" 1067 | encodeurl "~1.0.2" 1068 | escape-html "~1.0.3" 1069 | etag "~1.8.1" 1070 | finalhandler "~1.1.2" 1071 | fresh "0.5.2" 1072 | merge-descriptors "1.0.1" 1073 | methods "~1.1.2" 1074 | on-finished "~2.3.0" 1075 | parseurl "~1.3.3" 1076 | path-to-regexp "0.1.7" 1077 | proxy-addr "~2.0.5" 1078 | qs "6.7.0" 1079 | range-parser "~1.2.1" 1080 | safe-buffer "5.1.2" 1081 | send "0.17.1" 1082 | serve-static "1.14.1" 1083 | setprototypeof "1.1.1" 1084 | statuses "~1.5.0" 1085 | type-is "~1.6.18" 1086 | utils-merge "1.0.1" 1087 | vary "~1.1.2" 1088 | 1089 | extend-shallow@^2.0.1: 1090 | version "2.0.1" 1091 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1092 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 1093 | dependencies: 1094 | is-extendable "^0.1.0" 1095 | 1096 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1097 | version "3.0.2" 1098 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1099 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 1100 | dependencies: 1101 | assign-symbols "^1.0.0" 1102 | is-extendable "^1.0.1" 1103 | 1104 | extglob@^2.0.4: 1105 | version "2.0.4" 1106 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1107 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 1108 | dependencies: 1109 | array-unique "^0.3.2" 1110 | define-property "^1.0.0" 1111 | expand-brackets "^2.1.4" 1112 | extend-shallow "^2.0.1" 1113 | fragment-cache "^0.2.1" 1114 | regex-not "^1.0.0" 1115 | snapdragon "^0.8.1" 1116 | to-regex "^3.0.1" 1117 | 1118 | fast-json-stable-stringify@^2.0.0: 1119 | version "2.1.0" 1120 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1121 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1122 | 1123 | file-uri-to-path@1.0.0: 1124 | version "1.0.0" 1125 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1126 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1127 | 1128 | fill-range@^4.0.0: 1129 | version "4.0.0" 1130 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1131 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 1132 | dependencies: 1133 | extend-shallow "^2.0.1" 1134 | is-number "^3.0.0" 1135 | repeat-string "^1.6.1" 1136 | to-regex-range "^2.1.0" 1137 | 1138 | finalhandler@~1.1.2: 1139 | version "1.1.2" 1140 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1141 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1142 | dependencies: 1143 | debug "2.6.9" 1144 | encodeurl "~1.0.2" 1145 | escape-html "~1.0.3" 1146 | on-finished "~2.3.0" 1147 | parseurl "~1.3.3" 1148 | statuses "~1.5.0" 1149 | unpipe "~1.0.0" 1150 | 1151 | for-in@^1.0.2: 1152 | version "1.0.2" 1153 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1154 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 1155 | 1156 | forwarded@~0.1.2: 1157 | version "0.1.2" 1158 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1159 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 1160 | 1161 | fragment-cache@^0.2.1: 1162 | version "0.2.1" 1163 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1164 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 1165 | dependencies: 1166 | map-cache "^0.2.2" 1167 | 1168 | fresh@0.5.2: 1169 | version "0.5.2" 1170 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1171 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1172 | 1173 | fs-capacitor@^2.0.4: 1174 | version "2.0.4" 1175 | resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c" 1176 | integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA== 1177 | 1178 | fs-minipass@^1.2.5: 1179 | version "1.2.7" 1180 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 1181 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 1182 | dependencies: 1183 | minipass "^2.6.0" 1184 | 1185 | fs.realpath@^1.0.0: 1186 | version "1.0.0" 1187 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1188 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1189 | 1190 | fsevents@^1.2.7: 1191 | version "1.2.11" 1192 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" 1193 | integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== 1194 | dependencies: 1195 | bindings "^1.5.0" 1196 | nan "^2.12.1" 1197 | 1198 | function-bind@^1.1.1: 1199 | version "1.1.1" 1200 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1201 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1202 | 1203 | gauge@~2.7.3: 1204 | version "2.7.4" 1205 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1206 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 1207 | dependencies: 1208 | aproba "^1.0.3" 1209 | console-control-strings "^1.0.0" 1210 | has-unicode "^2.0.0" 1211 | object-assign "^4.1.0" 1212 | signal-exit "^3.0.0" 1213 | string-width "^1.0.1" 1214 | strip-ansi "^3.0.1" 1215 | wide-align "^1.1.0" 1216 | 1217 | get-stream@^3.0.0: 1218 | version "3.0.0" 1219 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1220 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 1221 | 1222 | get-value@^2.0.3, get-value@^2.0.6: 1223 | version "2.0.6" 1224 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1225 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 1226 | 1227 | glob-parent@^3.1.0: 1228 | version "3.1.0" 1229 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 1230 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 1231 | dependencies: 1232 | is-glob "^3.1.0" 1233 | path-dirname "^1.0.0" 1234 | 1235 | glob@^7.1.3: 1236 | version "7.1.6" 1237 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1238 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1239 | dependencies: 1240 | fs.realpath "^1.0.0" 1241 | inflight "^1.0.4" 1242 | inherits "2" 1243 | minimatch "^3.0.4" 1244 | once "^1.3.0" 1245 | path-is-absolute "^1.0.0" 1246 | 1247 | global-dirs@^0.1.0: 1248 | version "0.1.1" 1249 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" 1250 | integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= 1251 | dependencies: 1252 | ini "^1.3.4" 1253 | 1254 | got@^6.7.1: 1255 | version "6.7.1" 1256 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 1257 | integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= 1258 | dependencies: 1259 | create-error-class "^3.0.0" 1260 | duplexer3 "^0.1.4" 1261 | get-stream "^3.0.0" 1262 | is-redirect "^1.0.0" 1263 | is-retry-allowed "^1.0.0" 1264 | is-stream "^1.0.0" 1265 | lowercase-keys "^1.0.0" 1266 | safe-buffer "^5.0.1" 1267 | timed-out "^4.0.0" 1268 | unzip-response "^2.0.1" 1269 | url-parse-lax "^1.0.0" 1270 | 1271 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 1272 | version "4.2.3" 1273 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 1274 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 1275 | 1276 | graphql-extensions@^0.10.8: 1277 | version "0.10.8" 1278 | resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.10.8.tgz#d338048dfd9f09ec7953c6da2c8c06b3520cbb20" 1279 | integrity sha512-cUcc014vz+pfwcER8pc4ts/WWhDCrC9jhNFIiWYYntd2TshS+tZFsZ362i4P2VYLbpYCgFiO+xRY1f2mylyz5A== 1280 | dependencies: 1281 | "@apollographql/apollo-tools" "^0.4.0" 1282 | apollo-server-env "^2.4.3" 1283 | apollo-server-types "^0.2.9" 1284 | 1285 | graphql-playground-html@1.6.12: 1286 | version "1.6.12" 1287 | resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz#8b3b34ab6013e2c877f0ceaae478fafc8ca91b85" 1288 | integrity sha512-yOYFwwSMBL0MwufeL8bkrNDgRE7eF/kTHiwrqn9FiR9KLcNIl1xw9l9a+6yIRZM56JReQOHpbQFXTZn1IuSKRg== 1289 | 1290 | graphql-playground-middleware-express@^1.7.12: 1291 | version "1.7.12" 1292 | resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.12.tgz#de4b2402a02159b2125561fe38eb378b56cf6d99" 1293 | integrity sha512-17szgonnVSxWVrgblLRHHLjWnMUONfkULIwSunaMvYx8k5oG3yL86cyGCbHuDFUFkyr2swLhdfYl4mDfDXuvOA== 1294 | dependencies: 1295 | graphql-playground-html "1.6.12" 1296 | 1297 | graphql-subscriptions@^1.0.0: 1298 | version "1.1.0" 1299 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" 1300 | integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== 1301 | dependencies: 1302 | iterall "^1.2.1" 1303 | 1304 | graphql-tag@^2.9.2: 1305 | version "2.10.1" 1306 | resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.1.tgz#10aa41f1cd8fae5373eaf11f1f67260a3cad5e02" 1307 | integrity sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg== 1308 | 1309 | graphql-tools@^4.0.0, graphql-tools@^4.0.3: 1310 | version "4.0.6" 1311 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.6.tgz#0e729e73db05ade3df10a2f92511be544972a844" 1312 | integrity sha512-jHLQw8x3xmSNRBCsaZqelXXsFfUSUSktSCUP8KYHiX1Z9qEuwcMpAf+FkdBzk8aTAFqOlPdNZ3OI4DKKqGKUqg== 1313 | dependencies: 1314 | apollo-link "^1.2.3" 1315 | apollo-utilities "^1.0.1" 1316 | deprecated-decorator "^0.1.6" 1317 | iterall "^1.1.3" 1318 | uuid "^3.1.0" 1319 | 1320 | graphql-upload@^8.0.2: 1321 | version "8.1.0" 1322 | resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.1.0.tgz#6d0ab662db5677a68bfb1f2c870ab2544c14939a" 1323 | integrity sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q== 1324 | dependencies: 1325 | busboy "^0.3.1" 1326 | fs-capacitor "^2.0.4" 1327 | http-errors "^1.7.3" 1328 | object-path "^0.11.4" 1329 | 1330 | graphql@^14.0.2, graphql@^14.5.3: 1331 | version "14.5.8" 1332 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.5.8.tgz#504f3d3114cb9a0a3f359bbbcf38d9e5bf6a6b3c" 1333 | integrity sha512-MMwmi0zlVLQKLdGiMfWkgQD7dY/TUKt4L+zgJ/aR0Howebod3aNgP5JkgvAULiR2HPVZaP2VEElqtdidHweLkg== 1334 | dependencies: 1335 | iterall "^1.2.2" 1336 | 1337 | has-flag@^3.0.0: 1338 | version "3.0.0" 1339 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1340 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1341 | 1342 | has-symbols@^1.0.0, has-symbols@^1.0.1: 1343 | version "1.0.1" 1344 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1345 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1346 | 1347 | has-unicode@^2.0.0: 1348 | version "2.0.1" 1349 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1350 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1351 | 1352 | has-value@^0.3.1: 1353 | version "0.3.1" 1354 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1355 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 1356 | dependencies: 1357 | get-value "^2.0.3" 1358 | has-values "^0.1.4" 1359 | isobject "^2.0.0" 1360 | 1361 | has-value@^1.0.0: 1362 | version "1.0.0" 1363 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1364 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 1365 | dependencies: 1366 | get-value "^2.0.6" 1367 | has-values "^1.0.0" 1368 | isobject "^3.0.0" 1369 | 1370 | has-values@^0.1.4: 1371 | version "0.1.4" 1372 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1373 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 1374 | 1375 | has-values@^1.0.0: 1376 | version "1.0.0" 1377 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1378 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 1379 | dependencies: 1380 | is-number "^3.0.0" 1381 | kind-of "^4.0.0" 1382 | 1383 | has@^1.0.3: 1384 | version "1.0.3" 1385 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1386 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1387 | dependencies: 1388 | function-bind "^1.1.1" 1389 | 1390 | http-errors@1.7.2: 1391 | version "1.7.2" 1392 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1393 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1394 | dependencies: 1395 | depd "~1.1.2" 1396 | inherits "2.0.3" 1397 | setprototypeof "1.1.1" 1398 | statuses ">= 1.5.0 < 2" 1399 | toidentifier "1.0.0" 1400 | 1401 | http-errors@^1.7.3, http-errors@~1.7.2: 1402 | version "1.7.3" 1403 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1404 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1405 | dependencies: 1406 | depd "~1.1.2" 1407 | inherits "2.0.4" 1408 | setprototypeof "1.1.1" 1409 | statuses ">= 1.5.0 < 2" 1410 | toidentifier "1.0.0" 1411 | 1412 | iconv-lite@0.4.24, iconv-lite@^0.4.4: 1413 | version "0.4.24" 1414 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1415 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1416 | dependencies: 1417 | safer-buffer ">= 2.1.2 < 3" 1418 | 1419 | ignore-by-default@^1.0.1: 1420 | version "1.0.1" 1421 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1422 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 1423 | 1424 | ignore-walk@^3.0.1: 1425 | version "3.0.3" 1426 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" 1427 | integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== 1428 | dependencies: 1429 | minimatch "^3.0.4" 1430 | 1431 | import-lazy@^2.1.0: 1432 | version "2.1.0" 1433 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1434 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1435 | 1436 | imurmurhash@^0.1.4: 1437 | version "0.1.4" 1438 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1439 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1440 | 1441 | inflight@^1.0.4: 1442 | version "1.0.6" 1443 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1444 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1445 | dependencies: 1446 | once "^1.3.0" 1447 | wrappy "1" 1448 | 1449 | inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 1450 | version "2.0.4" 1451 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1452 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1453 | 1454 | inherits@2.0.3: 1455 | version "2.0.3" 1456 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1457 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1458 | 1459 | ini@^1.3.4, ini@~1.3.0: 1460 | version "1.3.5" 1461 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1462 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 1463 | 1464 | ipaddr.js@1.9.0: 1465 | version "1.9.0" 1466 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 1467 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 1468 | 1469 | is-accessor-descriptor@^0.1.6: 1470 | version "0.1.6" 1471 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1472 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 1473 | dependencies: 1474 | kind-of "^3.0.2" 1475 | 1476 | is-accessor-descriptor@^1.0.0: 1477 | version "1.0.0" 1478 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1479 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 1480 | dependencies: 1481 | kind-of "^6.0.0" 1482 | 1483 | is-binary-path@^1.0.0: 1484 | version "1.0.1" 1485 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1486 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= 1487 | dependencies: 1488 | binary-extensions "^1.0.0" 1489 | 1490 | is-buffer@^1.1.5: 1491 | version "1.1.6" 1492 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1493 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 1494 | 1495 | is-callable@^1.1.4: 1496 | version "1.1.4" 1497 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1498 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1499 | 1500 | is-ci@^1.0.10: 1501 | version "1.2.1" 1502 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 1503 | integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== 1504 | dependencies: 1505 | ci-info "^1.5.0" 1506 | 1507 | is-data-descriptor@^0.1.4: 1508 | version "0.1.4" 1509 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1510 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 1511 | dependencies: 1512 | kind-of "^3.0.2" 1513 | 1514 | is-data-descriptor@^1.0.0: 1515 | version "1.0.0" 1516 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1517 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 1518 | dependencies: 1519 | kind-of "^6.0.0" 1520 | 1521 | is-date-object@^1.0.1: 1522 | version "1.0.2" 1523 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1524 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1525 | 1526 | is-descriptor@^0.1.0: 1527 | version "0.1.6" 1528 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1529 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 1530 | dependencies: 1531 | is-accessor-descriptor "^0.1.6" 1532 | is-data-descriptor "^0.1.4" 1533 | kind-of "^5.0.0" 1534 | 1535 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1536 | version "1.0.2" 1537 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1538 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 1539 | dependencies: 1540 | is-accessor-descriptor "^1.0.0" 1541 | is-data-descriptor "^1.0.0" 1542 | kind-of "^6.0.2" 1543 | 1544 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1545 | version "0.1.1" 1546 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1547 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1548 | 1549 | is-extendable@^1.0.1: 1550 | version "1.0.1" 1551 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1552 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 1553 | dependencies: 1554 | is-plain-object "^2.0.4" 1555 | 1556 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1557 | version "2.1.1" 1558 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1559 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1560 | 1561 | is-fullwidth-code-point@^1.0.0: 1562 | version "1.0.0" 1563 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1564 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1565 | dependencies: 1566 | number-is-nan "^1.0.0" 1567 | 1568 | is-fullwidth-code-point@^2.0.0: 1569 | version "2.0.0" 1570 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1571 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1572 | 1573 | is-glob@^3.1.0: 1574 | version "3.1.0" 1575 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1576 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 1577 | dependencies: 1578 | is-extglob "^2.1.0" 1579 | 1580 | is-glob@^4.0.0: 1581 | version "4.0.1" 1582 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1583 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1584 | dependencies: 1585 | is-extglob "^2.1.1" 1586 | 1587 | is-installed-globally@^0.1.0: 1588 | version "0.1.0" 1589 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 1590 | integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= 1591 | dependencies: 1592 | global-dirs "^0.1.0" 1593 | is-path-inside "^1.0.0" 1594 | 1595 | is-npm@^1.0.0: 1596 | version "1.0.0" 1597 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1598 | integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= 1599 | 1600 | is-number@^3.0.0: 1601 | version "3.0.0" 1602 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1603 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 1604 | dependencies: 1605 | kind-of "^3.0.2" 1606 | 1607 | is-obj@^1.0.0: 1608 | version "1.0.1" 1609 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1610 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 1611 | 1612 | is-path-inside@^1.0.0: 1613 | version "1.0.1" 1614 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1615 | integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= 1616 | dependencies: 1617 | path-is-inside "^1.0.1" 1618 | 1619 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1620 | version "2.0.4" 1621 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1622 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1623 | dependencies: 1624 | isobject "^3.0.1" 1625 | 1626 | is-redirect@^1.0.0: 1627 | version "1.0.0" 1628 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1629 | integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= 1630 | 1631 | is-regex@^1.0.4: 1632 | version "1.0.5" 1633 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 1634 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 1635 | dependencies: 1636 | has "^1.0.3" 1637 | 1638 | is-retry-allowed@^1.0.0: 1639 | version "1.2.0" 1640 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" 1641 | integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== 1642 | 1643 | is-stream@^1.0.0, is-stream@^1.1.0: 1644 | version "1.1.0" 1645 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1646 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1647 | 1648 | is-symbol@^1.0.2: 1649 | version "1.0.3" 1650 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1651 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1652 | dependencies: 1653 | has-symbols "^1.0.1" 1654 | 1655 | is-windows@^1.0.2: 1656 | version "1.0.2" 1657 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1658 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1659 | 1660 | isarray@1.0.0, isarray@~1.0.0: 1661 | version "1.0.0" 1662 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1663 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1664 | 1665 | isexe@^2.0.0: 1666 | version "2.0.0" 1667 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1668 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1669 | 1670 | isobject@^2.0.0: 1671 | version "2.1.0" 1672 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1673 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1674 | dependencies: 1675 | isarray "1.0.0" 1676 | 1677 | isobject@^3.0.0, isobject@^3.0.1: 1678 | version "3.0.1" 1679 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1680 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 1681 | 1682 | iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: 1683 | version "1.2.2" 1684 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 1685 | integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== 1686 | 1687 | jsonwebtoken@^8.4.0: 1688 | version "8.5.1" 1689 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" 1690 | integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== 1691 | dependencies: 1692 | jws "^3.2.2" 1693 | lodash.includes "^4.3.0" 1694 | lodash.isboolean "^3.0.3" 1695 | lodash.isinteger "^4.0.4" 1696 | lodash.isnumber "^3.0.3" 1697 | lodash.isplainobject "^4.0.6" 1698 | lodash.isstring "^4.0.1" 1699 | lodash.once "^4.0.0" 1700 | ms "^2.1.1" 1701 | semver "^5.6.0" 1702 | 1703 | jwa@^1.4.1: 1704 | version "1.4.1" 1705 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" 1706 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== 1707 | dependencies: 1708 | buffer-equal-constant-time "1.0.1" 1709 | ecdsa-sig-formatter "1.0.11" 1710 | safe-buffer "^5.0.1" 1711 | 1712 | jws@^3.2.2: 1713 | version "3.2.2" 1714 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" 1715 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== 1716 | dependencies: 1717 | jwa "^1.4.1" 1718 | safe-buffer "^5.0.1" 1719 | 1720 | kareem@2.3.1: 1721 | version "2.3.1" 1722 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87" 1723 | integrity sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw== 1724 | 1725 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1726 | version "3.2.2" 1727 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1728 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 1729 | dependencies: 1730 | is-buffer "^1.1.5" 1731 | 1732 | kind-of@^4.0.0: 1733 | version "4.0.0" 1734 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1735 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 1736 | dependencies: 1737 | is-buffer "^1.1.5" 1738 | 1739 | kind-of@^5.0.0: 1740 | version "5.1.0" 1741 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1742 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 1743 | 1744 | kind-of@^6.0.0, kind-of@^6.0.2: 1745 | version "6.0.2" 1746 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1747 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== 1748 | 1749 | latest-version@^3.0.0: 1750 | version "3.1.0" 1751 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" 1752 | integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= 1753 | dependencies: 1754 | package-json "^4.0.0" 1755 | 1756 | lodash.includes@^4.3.0: 1757 | version "4.3.0" 1758 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 1759 | integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= 1760 | 1761 | lodash.isboolean@^3.0.3: 1762 | version "3.0.3" 1763 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 1764 | integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= 1765 | 1766 | lodash.isinteger@^4.0.4: 1767 | version "4.0.4" 1768 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 1769 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= 1770 | 1771 | lodash.isnumber@^3.0.3: 1772 | version "3.0.3" 1773 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 1774 | integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= 1775 | 1776 | lodash.isplainobject@^4.0.6: 1777 | version "4.0.6" 1778 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 1779 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= 1780 | 1781 | lodash.isstring@^4.0.1: 1782 | version "4.0.1" 1783 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 1784 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= 1785 | 1786 | lodash.once@^4.0.0: 1787 | version "4.1.1" 1788 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 1789 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= 1790 | 1791 | lodash.sortby@^4.7.0: 1792 | version "4.7.0" 1793 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1794 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 1795 | 1796 | long@^4.0.0: 1797 | version "4.0.0" 1798 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" 1799 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== 1800 | 1801 | lowercase-keys@^1.0.0: 1802 | version "1.0.1" 1803 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1804 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1805 | 1806 | lru-cache@^4.0.1: 1807 | version "4.1.5" 1808 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1809 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1810 | dependencies: 1811 | pseudomap "^1.0.2" 1812 | yallist "^2.1.2" 1813 | 1814 | lru-cache@^5.0.0: 1815 | version "5.1.1" 1816 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1817 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1818 | dependencies: 1819 | yallist "^3.0.2" 1820 | 1821 | make-dir@^1.0.0: 1822 | version "1.3.0" 1823 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 1824 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== 1825 | dependencies: 1826 | pify "^3.0.0" 1827 | 1828 | map-cache@^0.2.2: 1829 | version "0.2.2" 1830 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1831 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 1832 | 1833 | map-visit@^1.0.0: 1834 | version "1.0.0" 1835 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1836 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 1837 | dependencies: 1838 | object-visit "^1.0.0" 1839 | 1840 | media-typer@0.3.0: 1841 | version "0.3.0" 1842 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1843 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1844 | 1845 | memory-pager@^1.0.2: 1846 | version "1.5.0" 1847 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 1848 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 1849 | 1850 | merge-descriptors@1.0.1: 1851 | version "1.0.1" 1852 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1853 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1854 | 1855 | methods@~1.1.2: 1856 | version "1.1.2" 1857 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1858 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1859 | 1860 | micromatch@^3.1.10, micromatch@^3.1.4: 1861 | version "3.1.10" 1862 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1863 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 1864 | dependencies: 1865 | arr-diff "^4.0.0" 1866 | array-unique "^0.3.2" 1867 | braces "^2.3.1" 1868 | define-property "^2.0.2" 1869 | extend-shallow "^3.0.2" 1870 | extglob "^2.0.4" 1871 | fragment-cache "^0.2.1" 1872 | kind-of "^6.0.2" 1873 | nanomatch "^1.2.9" 1874 | object.pick "^1.3.0" 1875 | regex-not "^1.0.0" 1876 | snapdragon "^0.8.1" 1877 | to-regex "^3.0.2" 1878 | 1879 | mime-db@1.42.0: 1880 | version "1.42.0" 1881 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" 1882 | integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== 1883 | 1884 | mime-types@~2.1.24: 1885 | version "2.1.25" 1886 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" 1887 | integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== 1888 | dependencies: 1889 | mime-db "1.42.0" 1890 | 1891 | mime@1.6.0: 1892 | version "1.6.0" 1893 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1894 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1895 | 1896 | minimatch@^3.0.4: 1897 | version "3.0.4" 1898 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1899 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1900 | dependencies: 1901 | brace-expansion "^1.1.7" 1902 | 1903 | minimist@0.0.8: 1904 | version "0.0.8" 1905 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1906 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1907 | 1908 | minimist@^1.2.0: 1909 | version "1.2.0" 1910 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1911 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1912 | 1913 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 1914 | version "2.9.0" 1915 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 1916 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 1917 | dependencies: 1918 | safe-buffer "^5.1.2" 1919 | yallist "^3.0.0" 1920 | 1921 | minizlib@^1.2.1: 1922 | version "1.3.3" 1923 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 1924 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 1925 | dependencies: 1926 | minipass "^2.9.0" 1927 | 1928 | mixin-deep@^1.2.0: 1929 | version "1.3.2" 1930 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 1931 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 1932 | dependencies: 1933 | for-in "^1.0.2" 1934 | is-extendable "^1.0.1" 1935 | 1936 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1937 | version "0.5.1" 1938 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1939 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1940 | dependencies: 1941 | minimist "0.0.8" 1942 | 1943 | mongodb@3.3.5: 1944 | version "3.3.5" 1945 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.3.5.tgz#38d531013afede92b0dd282e3b9f3c08c9bdff3b" 1946 | integrity sha512-6NAv5gTFdwRyVfCz+O+KDszvjpyxmZw+VlmqmqKR2GmpkeKrKFRv/ZslgTtZba2dc9JYixIf99T5Gih7TIWv7Q== 1947 | dependencies: 1948 | bson "^1.1.1" 1949 | require_optional "^1.0.1" 1950 | safe-buffer "^5.1.2" 1951 | optionalDependencies: 1952 | saslprep "^1.0.0" 1953 | 1954 | mongoose-legacy-pluralize@1.0.2: 1955 | version "1.0.2" 1956 | resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" 1957 | integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== 1958 | 1959 | mongoose@^5.4.0: 1960 | version "5.8.1" 1961 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.8.1.tgz#9a14a17a1e764d3d3397db95326b7ba03146b8eb" 1962 | integrity sha512-8Cffl52cMK2iBlpLipoRKW/RdrhkxvVzXsy+xVsfbKHQBCWkFiS0T0jU4smYzomTMP4gW0sReJoRA7Gu/7VVgQ== 1963 | dependencies: 1964 | bson "~1.1.1" 1965 | kareem "2.3.1" 1966 | mongodb "3.3.5" 1967 | mongoose-legacy-pluralize "1.0.2" 1968 | mpath "0.6.0" 1969 | mquery "3.2.2" 1970 | ms "2.1.2" 1971 | regexp-clone "1.0.0" 1972 | safe-buffer "5.1.2" 1973 | sift "7.0.1" 1974 | sliced "1.0.1" 1975 | 1976 | mpath@0.6.0: 1977 | version "0.6.0" 1978 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.6.0.tgz#aa922029fca4f0f641f360e74c5c1b6a4c47078e" 1979 | integrity sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw== 1980 | 1981 | mquery@3.2.2: 1982 | version "3.2.2" 1983 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.2.tgz#e1383a3951852ce23e37f619a9b350f1fb3664e7" 1984 | integrity sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q== 1985 | dependencies: 1986 | bluebird "3.5.1" 1987 | debug "3.1.0" 1988 | regexp-clone "^1.0.0" 1989 | safe-buffer "5.1.2" 1990 | sliced "1.0.1" 1991 | 1992 | ms@2.0.0: 1993 | version "2.0.0" 1994 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1995 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1996 | 1997 | ms@2.1.1: 1998 | version "2.1.1" 1999 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2000 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 2001 | 2002 | ms@2.1.2, ms@^2.1.1: 2003 | version "2.1.2" 2004 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2005 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2006 | 2007 | nan@2.14.0, nan@^2.12.1: 2008 | version "2.14.0" 2009 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" 2010 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 2011 | 2012 | nanomatch@^1.2.9: 2013 | version "1.2.13" 2014 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2015 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 2016 | dependencies: 2017 | arr-diff "^4.0.0" 2018 | array-unique "^0.3.2" 2019 | define-property "^2.0.2" 2020 | extend-shallow "^3.0.2" 2021 | fragment-cache "^0.2.1" 2022 | is-windows "^1.0.2" 2023 | kind-of "^6.0.2" 2024 | object.pick "^1.3.0" 2025 | regex-not "^1.0.0" 2026 | snapdragon "^0.8.1" 2027 | to-regex "^3.0.1" 2028 | 2029 | needle@^2.2.1: 2030 | version "2.4.0" 2031 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" 2032 | integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== 2033 | dependencies: 2034 | debug "^3.2.6" 2035 | iconv-lite "^0.4.4" 2036 | sax "^1.2.4" 2037 | 2038 | negotiator@0.6.2: 2039 | version "0.6.2" 2040 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 2041 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 2042 | 2043 | node-fetch@^2.1.2, node-fetch@^2.2.0: 2044 | version "2.6.0" 2045 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" 2046 | integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== 2047 | 2048 | node-pre-gyp@*: 2049 | version "0.14.0" 2050 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" 2051 | integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== 2052 | dependencies: 2053 | detect-libc "^1.0.2" 2054 | mkdirp "^0.5.1" 2055 | needle "^2.2.1" 2056 | nopt "^4.0.1" 2057 | npm-packlist "^1.1.6" 2058 | npmlog "^4.0.2" 2059 | rc "^1.2.7" 2060 | rimraf "^2.6.1" 2061 | semver "^5.3.0" 2062 | tar "^4.4.2" 2063 | 2064 | node-pre-gyp@0.13.0: 2065 | version "0.13.0" 2066 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz#df9ab7b68dd6498137717838e4f92a33fc9daa42" 2067 | integrity sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ== 2068 | dependencies: 2069 | detect-libc "^1.0.2" 2070 | mkdirp "^0.5.1" 2071 | needle "^2.2.1" 2072 | nopt "^4.0.1" 2073 | npm-packlist "^1.1.6" 2074 | npmlog "^4.0.2" 2075 | rc "^1.2.7" 2076 | rimraf "^2.6.1" 2077 | semver "^5.3.0" 2078 | tar "^4" 2079 | 2080 | nodemailer@^5.0.0: 2081 | version "5.1.1" 2082 | resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-5.1.1.tgz#0c48d1ecab02e86d9ff6c620ee75ed944b763505" 2083 | integrity sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ== 2084 | 2085 | nodemon@^1.18.9: 2086 | version "1.19.4" 2087 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" 2088 | integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== 2089 | dependencies: 2090 | chokidar "^2.1.8" 2091 | debug "^3.2.6" 2092 | ignore-by-default "^1.0.1" 2093 | minimatch "^3.0.4" 2094 | pstree.remy "^1.1.7" 2095 | semver "^5.7.1" 2096 | supports-color "^5.5.0" 2097 | touch "^3.1.0" 2098 | undefsafe "^2.0.2" 2099 | update-notifier "^2.5.0" 2100 | 2101 | nopt@^4.0.1: 2102 | version "4.0.1" 2103 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2104 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= 2105 | dependencies: 2106 | abbrev "1" 2107 | osenv "^0.1.4" 2108 | 2109 | nopt@~1.0.10: 2110 | version "1.0.10" 2111 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 2112 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 2113 | dependencies: 2114 | abbrev "1" 2115 | 2116 | normalize-path@^2.1.1: 2117 | version "2.1.1" 2118 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2119 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 2120 | dependencies: 2121 | remove-trailing-separator "^1.0.1" 2122 | 2123 | normalize-path@^3.0.0: 2124 | version "3.0.0" 2125 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2126 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2127 | 2128 | npm-bundled@^1.0.1: 2129 | version "1.1.1" 2130 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" 2131 | integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== 2132 | dependencies: 2133 | npm-normalize-package-bin "^1.0.1" 2134 | 2135 | npm-normalize-package-bin@^1.0.1: 2136 | version "1.0.1" 2137 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" 2138 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 2139 | 2140 | npm-packlist@^1.1.6: 2141 | version "1.4.7" 2142 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" 2143 | integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== 2144 | dependencies: 2145 | ignore-walk "^3.0.1" 2146 | npm-bundled "^1.0.1" 2147 | 2148 | npm-run-path@^2.0.0: 2149 | version "2.0.2" 2150 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2151 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 2152 | dependencies: 2153 | path-key "^2.0.0" 2154 | 2155 | npmlog@^4.0.2: 2156 | version "4.1.2" 2157 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2158 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 2159 | dependencies: 2160 | are-we-there-yet "~1.1.2" 2161 | console-control-strings "~1.1.0" 2162 | gauge "~2.7.3" 2163 | set-blocking "~2.0.0" 2164 | 2165 | number-is-nan@^1.0.0: 2166 | version "1.0.1" 2167 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2168 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 2169 | 2170 | object-assign@^4, object-assign@^4.1.0: 2171 | version "4.1.1" 2172 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2173 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 2174 | 2175 | object-copy@^0.1.0: 2176 | version "0.1.0" 2177 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2178 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 2179 | dependencies: 2180 | copy-descriptor "^0.1.0" 2181 | define-property "^0.2.5" 2182 | kind-of "^3.0.3" 2183 | 2184 | object-inspect@^1.7.0: 2185 | version "1.7.0" 2186 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 2187 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 2188 | 2189 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 2190 | version "1.1.1" 2191 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2192 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2193 | 2194 | object-path@^0.11.4: 2195 | version "0.11.4" 2196 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" 2197 | integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= 2198 | 2199 | object-visit@^1.0.0: 2200 | version "1.0.1" 2201 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2202 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 2203 | dependencies: 2204 | isobject "^3.0.0" 2205 | 2206 | object.assign@^4.1.0: 2207 | version "4.1.0" 2208 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 2209 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 2210 | dependencies: 2211 | define-properties "^1.1.2" 2212 | function-bind "^1.1.1" 2213 | has-symbols "^1.0.0" 2214 | object-keys "^1.0.11" 2215 | 2216 | object.getownpropertydescriptors@^2.0.3: 2217 | version "2.1.0" 2218 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 2219 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 2220 | dependencies: 2221 | define-properties "^1.1.3" 2222 | es-abstract "^1.17.0-next.1" 2223 | 2224 | object.pick@^1.3.0: 2225 | version "1.3.0" 2226 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2227 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 2228 | dependencies: 2229 | isobject "^3.0.1" 2230 | 2231 | on-finished@~2.3.0: 2232 | version "2.3.0" 2233 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2234 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 2235 | dependencies: 2236 | ee-first "1.1.1" 2237 | 2238 | once@^1.3.0: 2239 | version "1.4.0" 2240 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2241 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2242 | dependencies: 2243 | wrappy "1" 2244 | 2245 | os-homedir@^1.0.0: 2246 | version "1.0.2" 2247 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2248 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 2249 | 2250 | os-tmpdir@^1.0.0: 2251 | version "1.0.2" 2252 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2253 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 2254 | 2255 | osenv@^0.1.4: 2256 | version "0.1.5" 2257 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2258 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 2259 | dependencies: 2260 | os-homedir "^1.0.0" 2261 | os-tmpdir "^1.0.0" 2262 | 2263 | p-finally@^1.0.0: 2264 | version "1.0.0" 2265 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2266 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 2267 | 2268 | package-json@^4.0.0: 2269 | version "4.0.1" 2270 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" 2271 | integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= 2272 | dependencies: 2273 | got "^6.7.1" 2274 | registry-auth-token "^3.0.1" 2275 | registry-url "^3.0.3" 2276 | semver "^5.1.0" 2277 | 2278 | parseurl@^1.3.2, parseurl@~1.3.3: 2279 | version "1.3.3" 2280 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 2281 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 2282 | 2283 | pascalcase@^0.1.1: 2284 | version "0.1.1" 2285 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2286 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 2287 | 2288 | path-dirname@^1.0.0: 2289 | version "1.0.2" 2290 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 2291 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 2292 | 2293 | path-is-absolute@^1.0.0: 2294 | version "1.0.1" 2295 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2296 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2297 | 2298 | path-is-inside@^1.0.1: 2299 | version "1.0.2" 2300 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 2301 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 2302 | 2303 | path-key@^2.0.0: 2304 | version "2.0.1" 2305 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2306 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2307 | 2308 | path-to-regexp@0.1.7: 2309 | version "0.1.7" 2310 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2311 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2312 | 2313 | pify@^3.0.0: 2314 | version "3.0.0" 2315 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2316 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2317 | 2318 | posix-character-classes@^0.1.0: 2319 | version "0.1.1" 2320 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2321 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 2322 | 2323 | prepend-http@^1.0.1: 2324 | version "1.0.4" 2325 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 2326 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 2327 | 2328 | process-nextick-args@~2.0.0: 2329 | version "2.0.1" 2330 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2331 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2332 | 2333 | proxy-addr@~2.0.5: 2334 | version "2.0.5" 2335 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 2336 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 2337 | dependencies: 2338 | forwarded "~0.1.2" 2339 | ipaddr.js "1.9.0" 2340 | 2341 | pseudomap@^1.0.2: 2342 | version "1.0.2" 2343 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2344 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 2345 | 2346 | pstree.remy@^1.1.7: 2347 | version "1.1.7" 2348 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" 2349 | integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== 2350 | 2351 | qs@6.7.0: 2352 | version "6.7.0" 2353 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2354 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2355 | 2356 | range-parser@~1.2.1: 2357 | version "1.2.1" 2358 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2359 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2360 | 2361 | raw-body@2.4.0: 2362 | version "2.4.0" 2363 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2364 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2365 | dependencies: 2366 | bytes "3.1.0" 2367 | http-errors "1.7.2" 2368 | iconv-lite "0.4.24" 2369 | unpipe "1.0.0" 2370 | 2371 | rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: 2372 | version "1.2.8" 2373 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2374 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 2375 | dependencies: 2376 | deep-extend "^0.6.0" 2377 | ini "~1.3.0" 2378 | minimist "^1.2.0" 2379 | strip-json-comments "~2.0.1" 2380 | 2381 | readable-stream@^2.0.2, readable-stream@^2.0.6: 2382 | version "2.3.6" 2383 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2384 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 2385 | dependencies: 2386 | core-util-is "~1.0.0" 2387 | inherits "~2.0.3" 2388 | isarray "~1.0.0" 2389 | process-nextick-args "~2.0.0" 2390 | safe-buffer "~5.1.1" 2391 | string_decoder "~1.1.1" 2392 | util-deprecate "~1.0.1" 2393 | 2394 | readdirp@^2.2.1: 2395 | version "2.2.1" 2396 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 2397 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== 2398 | dependencies: 2399 | graceful-fs "^4.1.11" 2400 | micromatch "^3.1.10" 2401 | readable-stream "^2.0.2" 2402 | 2403 | regex-not@^1.0.0, regex-not@^1.0.2: 2404 | version "1.0.2" 2405 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2406 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 2407 | dependencies: 2408 | extend-shallow "^3.0.2" 2409 | safe-regex "^1.1.0" 2410 | 2411 | regexp-clone@1.0.0, regexp-clone@^1.0.0: 2412 | version "1.0.0" 2413 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" 2414 | integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== 2415 | 2416 | registry-auth-token@^3.0.1: 2417 | version "3.4.0" 2418 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" 2419 | integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== 2420 | dependencies: 2421 | rc "^1.1.6" 2422 | safe-buffer "^5.0.1" 2423 | 2424 | registry-url@^3.0.3: 2425 | version "3.1.0" 2426 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 2427 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= 2428 | dependencies: 2429 | rc "^1.0.1" 2430 | 2431 | remove-trailing-separator@^1.0.1: 2432 | version "1.1.0" 2433 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2434 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 2435 | 2436 | repeat-element@^1.1.2: 2437 | version "1.1.3" 2438 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2439 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 2440 | 2441 | repeat-string@^1.6.1: 2442 | version "1.6.1" 2443 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2444 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 2445 | 2446 | require_optional@^1.0.1: 2447 | version "1.0.1" 2448 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" 2449 | integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== 2450 | dependencies: 2451 | resolve-from "^2.0.0" 2452 | semver "^5.1.0" 2453 | 2454 | resolve-from@^2.0.0: 2455 | version "2.0.0" 2456 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 2457 | integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= 2458 | 2459 | resolve-url@^0.2.1: 2460 | version "0.2.1" 2461 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2462 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 2463 | 2464 | ret@~0.1.10: 2465 | version "0.1.15" 2466 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2467 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 2468 | 2469 | retry@0.12.0: 2470 | version "0.12.0" 2471 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" 2472 | integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= 2473 | 2474 | rimraf@^2.6.1: 2475 | version "2.7.1" 2476 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2477 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2478 | dependencies: 2479 | glob "^7.1.3" 2480 | 2481 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2482 | version "5.1.2" 2483 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2484 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2485 | 2486 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 2487 | version "5.2.0" 2488 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 2489 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 2490 | 2491 | safe-regex@^1.1.0: 2492 | version "1.1.0" 2493 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2494 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 2495 | dependencies: 2496 | ret "~0.1.10" 2497 | 2498 | "safer-buffer@>= 2.1.2 < 3": 2499 | version "2.1.2" 2500 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2501 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2502 | 2503 | saslprep@^1.0.0: 2504 | version "1.0.3" 2505 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 2506 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 2507 | dependencies: 2508 | sparse-bitfield "^3.0.3" 2509 | 2510 | sax@^1.2.4: 2511 | version "1.2.4" 2512 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2513 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 2514 | 2515 | semver-diff@^2.0.0: 2516 | version "2.1.0" 2517 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 2518 | integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= 2519 | dependencies: 2520 | semver "^5.0.3" 2521 | 2522 | semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: 2523 | version "5.7.1" 2524 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2525 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2526 | 2527 | send@0.17.1: 2528 | version "0.17.1" 2529 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2530 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2531 | dependencies: 2532 | debug "2.6.9" 2533 | depd "~1.1.2" 2534 | destroy "~1.0.4" 2535 | encodeurl "~1.0.2" 2536 | escape-html "~1.0.3" 2537 | etag "~1.8.1" 2538 | fresh "0.5.2" 2539 | http-errors "~1.7.2" 2540 | mime "1.6.0" 2541 | ms "2.1.1" 2542 | on-finished "~2.3.0" 2543 | range-parser "~1.2.1" 2544 | statuses "~1.5.0" 2545 | 2546 | serve-static@1.14.1: 2547 | version "1.14.1" 2548 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2549 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2550 | dependencies: 2551 | encodeurl "~1.0.2" 2552 | escape-html "~1.0.3" 2553 | parseurl "~1.3.3" 2554 | send "0.17.1" 2555 | 2556 | set-blocking@~2.0.0: 2557 | version "2.0.0" 2558 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2559 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2560 | 2561 | set-value@^2.0.0, set-value@^2.0.1: 2562 | version "2.0.1" 2563 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 2564 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 2565 | dependencies: 2566 | extend-shallow "^2.0.1" 2567 | is-extendable "^0.1.1" 2568 | is-plain-object "^2.0.3" 2569 | split-string "^3.0.1" 2570 | 2571 | setprototypeof@1.1.1: 2572 | version "1.1.1" 2573 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2574 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2575 | 2576 | sha.js@^2.4.11: 2577 | version "2.4.11" 2578 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 2579 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== 2580 | dependencies: 2581 | inherits "^2.0.1" 2582 | safe-buffer "^5.0.1" 2583 | 2584 | shebang-command@^1.2.0: 2585 | version "1.2.0" 2586 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2587 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2588 | dependencies: 2589 | shebang-regex "^1.0.0" 2590 | 2591 | shebang-regex@^1.0.0: 2592 | version "1.0.0" 2593 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2594 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2595 | 2596 | sift@7.0.1: 2597 | version "7.0.1" 2598 | resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" 2599 | integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== 2600 | 2601 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2602 | version "3.0.2" 2603 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2604 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 2605 | 2606 | sliced@1.0.1: 2607 | version "1.0.1" 2608 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 2609 | integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= 2610 | 2611 | snapdragon-node@^2.0.1: 2612 | version "2.1.1" 2613 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2614 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 2615 | dependencies: 2616 | define-property "^1.0.0" 2617 | isobject "^3.0.0" 2618 | snapdragon-util "^3.0.1" 2619 | 2620 | snapdragon-util@^3.0.1: 2621 | version "3.0.1" 2622 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2623 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 2624 | dependencies: 2625 | kind-of "^3.2.0" 2626 | 2627 | snapdragon@^0.8.1: 2628 | version "0.8.2" 2629 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2630 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 2631 | dependencies: 2632 | base "^0.11.1" 2633 | debug "^2.2.0" 2634 | define-property "^0.2.5" 2635 | extend-shallow "^2.0.1" 2636 | map-cache "^0.2.2" 2637 | source-map "^0.5.6" 2638 | source-map-resolve "^0.5.0" 2639 | use "^3.1.0" 2640 | 2641 | source-map-resolve@^0.5.0: 2642 | version "0.5.2" 2643 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 2644 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== 2645 | dependencies: 2646 | atob "^2.1.1" 2647 | decode-uri-component "^0.2.0" 2648 | resolve-url "^0.2.1" 2649 | source-map-url "^0.4.0" 2650 | urix "^0.1.0" 2651 | 2652 | source-map-url@^0.4.0: 2653 | version "0.4.0" 2654 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2655 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 2656 | 2657 | source-map@^0.5.6: 2658 | version "0.5.7" 2659 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2660 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2661 | 2662 | sparse-bitfield@^3.0.3: 2663 | version "3.0.3" 2664 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 2665 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= 2666 | dependencies: 2667 | memory-pager "^1.0.2" 2668 | 2669 | split-string@^3.0.1, split-string@^3.0.2: 2670 | version "3.1.0" 2671 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 2672 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 2673 | dependencies: 2674 | extend-shallow "^3.0.0" 2675 | 2676 | static-extend@^0.1.1: 2677 | version "0.1.2" 2678 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2679 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 2680 | dependencies: 2681 | define-property "^0.2.5" 2682 | object-copy "^0.1.0" 2683 | 2684 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2685 | version "1.5.0" 2686 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2687 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2688 | 2689 | streamsearch@0.1.2: 2690 | version "0.1.2" 2691 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 2692 | integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= 2693 | 2694 | string-width@^1.0.1: 2695 | version "1.0.2" 2696 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2697 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2698 | dependencies: 2699 | code-point-at "^1.0.0" 2700 | is-fullwidth-code-point "^1.0.0" 2701 | strip-ansi "^3.0.0" 2702 | 2703 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 2704 | version "2.1.1" 2705 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2706 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2707 | dependencies: 2708 | is-fullwidth-code-point "^2.0.0" 2709 | strip-ansi "^4.0.0" 2710 | 2711 | string.prototype.trimleft@^2.1.0: 2712 | version "2.1.1" 2713 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" 2714 | integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== 2715 | dependencies: 2716 | define-properties "^1.1.3" 2717 | function-bind "^1.1.1" 2718 | 2719 | string.prototype.trimright@^2.1.0: 2720 | version "2.1.1" 2721 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" 2722 | integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== 2723 | dependencies: 2724 | define-properties "^1.1.3" 2725 | function-bind "^1.1.1" 2726 | 2727 | string_decoder@~1.1.1: 2728 | version "1.1.1" 2729 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2730 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2731 | dependencies: 2732 | safe-buffer "~5.1.0" 2733 | 2734 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2735 | version "3.0.1" 2736 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2737 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2738 | dependencies: 2739 | ansi-regex "^2.0.0" 2740 | 2741 | strip-ansi@^4.0.0: 2742 | version "4.0.0" 2743 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2744 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2745 | dependencies: 2746 | ansi-regex "^3.0.0" 2747 | 2748 | strip-eof@^1.0.0: 2749 | version "1.0.0" 2750 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2751 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 2752 | 2753 | strip-json-comments@~2.0.1: 2754 | version "2.0.1" 2755 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2756 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2757 | 2758 | subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16: 2759 | version "0.9.16" 2760 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" 2761 | integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== 2762 | dependencies: 2763 | backo2 "^1.0.2" 2764 | eventemitter3 "^3.1.0" 2765 | iterall "^1.2.1" 2766 | symbol-observable "^1.0.4" 2767 | ws "^5.2.0" 2768 | 2769 | supports-color@^5.3.0, supports-color@^5.5.0: 2770 | version "5.5.0" 2771 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2772 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2773 | dependencies: 2774 | has-flag "^3.0.0" 2775 | 2776 | symbol-observable@^1.0.4: 2777 | version "1.2.0" 2778 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 2779 | integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== 2780 | 2781 | tar@^4, tar@^4.4.2: 2782 | version "4.4.13" 2783 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 2784 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 2785 | dependencies: 2786 | chownr "^1.1.1" 2787 | fs-minipass "^1.2.5" 2788 | minipass "^2.8.6" 2789 | minizlib "^1.2.1" 2790 | mkdirp "^0.5.0" 2791 | safe-buffer "^5.1.2" 2792 | yallist "^3.0.3" 2793 | 2794 | term-size@^1.2.0: 2795 | version "1.2.0" 2796 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 2797 | integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= 2798 | dependencies: 2799 | execa "^0.7.0" 2800 | 2801 | timed-out@^4.0.0: 2802 | version "4.0.1" 2803 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 2804 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= 2805 | 2806 | to-object-path@^0.3.0: 2807 | version "0.3.0" 2808 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2809 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 2810 | dependencies: 2811 | kind-of "^3.0.2" 2812 | 2813 | to-regex-range@^2.1.0: 2814 | version "2.1.1" 2815 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2816 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 2817 | dependencies: 2818 | is-number "^3.0.0" 2819 | repeat-string "^1.6.1" 2820 | 2821 | to-regex@^3.0.1, to-regex@^3.0.2: 2822 | version "3.0.2" 2823 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 2824 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 2825 | dependencies: 2826 | define-property "^2.0.2" 2827 | extend-shallow "^3.0.2" 2828 | regex-not "^1.0.2" 2829 | safe-regex "^1.1.0" 2830 | 2831 | toidentifier@1.0.0: 2832 | version "1.0.0" 2833 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2834 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2835 | 2836 | touch@^3.1.0: 2837 | version "3.1.0" 2838 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 2839 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 2840 | dependencies: 2841 | nopt "~1.0.10" 2842 | 2843 | ts-invariant@^0.4.0: 2844 | version "0.4.4" 2845 | resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" 2846 | integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== 2847 | dependencies: 2848 | tslib "^1.9.3" 2849 | 2850 | tslib@^1.10.0, tslib@^1.9.3: 2851 | version "1.10.0" 2852 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 2853 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 2854 | 2855 | type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: 2856 | version "1.6.18" 2857 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2858 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2859 | dependencies: 2860 | media-typer "0.3.0" 2861 | mime-types "~2.1.24" 2862 | 2863 | undefsafe@^2.0.2: 2864 | version "2.0.2" 2865 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" 2866 | integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= 2867 | dependencies: 2868 | debug "^2.2.0" 2869 | 2870 | union-value@^1.0.0: 2871 | version "1.0.1" 2872 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" 2873 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== 2874 | dependencies: 2875 | arr-union "^3.1.0" 2876 | get-value "^2.0.6" 2877 | is-extendable "^0.1.1" 2878 | set-value "^2.0.1" 2879 | 2880 | unique-string@^1.0.0: 2881 | version "1.0.0" 2882 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 2883 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= 2884 | dependencies: 2885 | crypto-random-string "^1.0.0" 2886 | 2887 | unpipe@1.0.0, unpipe@~1.0.0: 2888 | version "1.0.0" 2889 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2890 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2891 | 2892 | unset-value@^1.0.0: 2893 | version "1.0.0" 2894 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2895 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 2896 | dependencies: 2897 | has-value "^0.3.1" 2898 | isobject "^3.0.0" 2899 | 2900 | unzip-response@^2.0.1: 2901 | version "2.0.1" 2902 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 2903 | integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= 2904 | 2905 | upath@^1.1.1: 2906 | version "1.2.0" 2907 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" 2908 | integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== 2909 | 2910 | update-notifier@^2.5.0: 2911 | version "2.5.0" 2912 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" 2913 | integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== 2914 | dependencies: 2915 | boxen "^1.2.1" 2916 | chalk "^2.0.1" 2917 | configstore "^3.0.0" 2918 | import-lazy "^2.1.0" 2919 | is-ci "^1.0.10" 2920 | is-installed-globally "^0.1.0" 2921 | is-npm "^1.0.0" 2922 | latest-version "^3.0.0" 2923 | semver-diff "^2.0.0" 2924 | xdg-basedir "^3.0.0" 2925 | 2926 | urix@^0.1.0: 2927 | version "0.1.0" 2928 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2929 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 2930 | 2931 | url-parse-lax@^1.0.0: 2932 | version "1.0.0" 2933 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2934 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= 2935 | dependencies: 2936 | prepend-http "^1.0.1" 2937 | 2938 | use@^3.1.0: 2939 | version "3.1.1" 2940 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 2941 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 2942 | 2943 | util-deprecate@~1.0.1: 2944 | version "1.0.2" 2945 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2946 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2947 | 2948 | util.promisify@^1.0.0: 2949 | version "1.0.0" 2950 | resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 2951 | integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== 2952 | dependencies: 2953 | define-properties "^1.1.2" 2954 | object.getownpropertydescriptors "^2.0.3" 2955 | 2956 | utils-merge@1.0.1: 2957 | version "1.0.1" 2958 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2959 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2960 | 2961 | uuid@^3.1.0: 2962 | version "3.3.3" 2963 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" 2964 | integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== 2965 | 2966 | vary@^1, vary@~1.1.2: 2967 | version "1.1.2" 2968 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2969 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2970 | 2971 | which@^1.2.9: 2972 | version "1.3.1" 2973 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2974 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2975 | dependencies: 2976 | isexe "^2.0.0" 2977 | 2978 | wide-align@^1.1.0: 2979 | version "1.1.3" 2980 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2981 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2982 | dependencies: 2983 | string-width "^1.0.2 || 2" 2984 | 2985 | widest-line@^2.0.0: 2986 | version "2.0.1" 2987 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" 2988 | integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== 2989 | dependencies: 2990 | string-width "^2.1.1" 2991 | 2992 | wrappy@1: 2993 | version "1.0.2" 2994 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2995 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2996 | 2997 | write-file-atomic@^2.0.0: 2998 | version "2.4.3" 2999 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 3000 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 3001 | dependencies: 3002 | graceful-fs "^4.1.11" 3003 | imurmurhash "^0.1.4" 3004 | signal-exit "^3.0.2" 3005 | 3006 | ws@^5.2.0: 3007 | version "5.2.2" 3008 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 3009 | integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== 3010 | dependencies: 3011 | async-limiter "~1.0.0" 3012 | 3013 | ws@^6.0.0: 3014 | version "6.2.1" 3015 | resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" 3016 | integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== 3017 | dependencies: 3018 | async-limiter "~1.0.0" 3019 | 3020 | xdg-basedir@^3.0.0: 3021 | version "3.0.0" 3022 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 3023 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= 3024 | 3025 | yallist@^2.1.2: 3026 | version "2.1.2" 3027 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 3028 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 3029 | 3030 | yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: 3031 | version "3.1.1" 3032 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 3033 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 3034 | 3035 | zen-observable-ts@^0.8.20: 3036 | version "0.8.20" 3037 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.20.tgz#44091e335d3fcbc97f6497e63e7f57d5b516b163" 3038 | integrity sha512-2rkjiPALhOtRaDX6pWyNqK1fnP5KkJJybYebopNSn6wDG1lxBoFs2+nwwXKoA6glHIrtwrfBBy6da0stkKtTAA== 3039 | dependencies: 3040 | tslib "^1.9.3" 3041 | zen-observable "^0.8.0" 3042 | 3043 | zen-observable@^0.8.0: 3044 | version "0.8.15" 3045 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" 3046 | integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== 3047 | --------------------------------------------------------------------------------