├── .gitignore ├── LICENSE ├── README.md ├── backend.png ├── package.json ├── packages ├── graphql │ ├── .babelrc │ ├── .env.example │ ├── .gitignore │ ├── .vscode │ │ └── settings.json │ ├── package.json │ ├── src │ │ ├── __test__ │ │ │ └── index.test.ts │ │ ├── auth.ts │ │ ├── database.ts │ │ ├── index.ts │ │ ├── model │ │ │ ├── article.ts │ │ │ ├── comment.ts │ │ │ └── users.ts │ │ ├── modules │ │ │ ├── helper │ │ │ │ ├── GetRandom.ts │ │ │ │ ├── GetSlug.ts │ │ │ │ └── Slugify.ts │ │ │ └── main │ │ │ │ ├── ArticleType.ts │ │ │ │ ├── CommentType.ts │ │ │ │ └── mutation │ │ │ │ ├── article │ │ │ │ ├── createArticleMutation.ts │ │ │ │ ├── deleteArticleMutation.ts │ │ │ │ └── updateArticleMutation.ts │ │ │ │ ├── comment │ │ │ │ ├── createCommentMutation.ts │ │ │ │ ├── deleteCommentMutation.ts │ │ │ │ └── updateCommentMutation.ts │ │ │ │ ├── index.ts │ │ │ │ └── user │ │ │ │ ├── createUserMutation.ts │ │ │ │ └── loginUserMutation.ts │ │ ├── schema.ts │ │ ├── server.ts │ │ └── type │ │ │ ├── MutationType.ts │ │ │ └── QueryType.ts │ ├── tsconfig.json │ └── tslint.json └── rest │ ├── .babelrc │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── app.js │ ├── auth.js │ ├── controllers │ │ ├── articles │ │ │ └── index.js │ │ ├── comments │ │ │ └── index.js │ │ └── users │ │ │ └── index.js │ ├── database.js │ ├── helper │ │ ├── GetRandom.js │ │ ├── GetSlug.js │ │ └── Slugify.js │ ├── index.js │ ├── middleware │ │ └── errorHandling.js │ ├── models │ │ ├── article.js │ │ ├── comment.js │ │ └── users.js │ └── routes │ │ └── blog.js │ └── test.js └── yarn-error.log /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn.lock -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Wellerson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 |

5 |

Backend-diff

6 |

7 | 8 |
9 | 10 | ## Backend-diff JS and TS 11 | 12 | Backend-diff uses a stack full `JS/TS` on the backend, I'm making this project to improve 13 | my skills in the backend. 14 | 15 | ## Initing in the your PC 16 | 17 | - For clone the project `git clone https://github.com/Wellers0n/Backend-diff.git` 18 | - Enter in the folder `cd Backend-diff/` 19 | - To install project dependency: `yarn install` 20 | - After the installation of the dependencies `yarn start` in the default directory 21 | 22 | ## Routes 23 | 24 | #### Login and create user 25 | - `POST` => `/api/login` return -> `TOKEN` 26 | - `POST` => `/api/createUser` return -> `status 200` 27 | 28 | #### Articles 29 | - `GET` => `/api/articles` return -> `json articles` 30 | - `GET` => `/api/article/:id` return -> `json one article` 31 | - `POST` => `/api/article` return -> `status 200 = create one article` 32 | - `DELETE` => `/api/article/:id` return -> `status 200 = delete one article` 33 | - `PUT` => `/api/article/:id` return -> `status 200 = update one article` 34 | 35 | #### Comments 36 | - `GET` => `/api/comment/:idArticle` return -> `json comments of an article` 37 | - `POST` => `/api/comment` return -> `status 200 = create one comments` 38 | - `DELETE` => `/api/comment/:id` return -> `status 200 = delete one article` 39 | - `PUT` => `/api/comment` return -> `status 200 = update one article` 40 | 41 | ## Stack used 42 | 43 | [NodeJS](https://nodejs.org/en/)
44 | [KoaJS](https://koajs.com/)
45 | [MongoDB](https://www.mongodb.com/)
46 | [GraphQL](https://graphql.org/)
47 | [Yarn](https://yarnpkg.com/en/)
48 | [WorkSpaces](https://yarnpkg.com/lang/en/docs/workspaces/)
49 | 50 | ## Profile 51 | @nandosangenetto 52 | -------------------------------------------------------------------------------- /backend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wellers0n/Backend-diff/ba68a295ddf50664ca6eb68c7f4de3fbe067ef7c/backend.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Main", 3 | "version": "0.0.1", 4 | "description": "Api graphql and rest", 5 | "main": "index.js", 6 | "author": "Wellerson", 7 | "license": "MIT", 8 | "private": true, 9 | "scripts": { 10 | "start": "yarn start:rest & yarn start:graphql", 11 | "start:rest": "yarn workspace @rest/server run start", 12 | "start:graphql": "yarn workspace @graphql/server run start", 13 | "build": "react-scripts build", 14 | "test": "react-scripts test", 15 | "eject": "react-scripts eject" 16 | }, 17 | "workspaces": { 18 | "packages": [ 19 | "packages/*" 20 | ], 21 | "nohoist": [ 22 | "**/react-native", 23 | "**/react-native-*" 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/graphql/.babelrc: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "presets": [ 4 | "@babel/env", 5 | "@babel/typescript" 6 | ], 7 | "plugins": [ 8 | "@babel/proposal-class-properties", 9 | "@babel/proposal-object-rest-spread", 10 | "babel-plugin-idx" 11 | ] 12 | } -------------------------------------------------------------------------------- /packages/graphql/.env.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wellers0n/Backend-diff/ba68a295ddf50664ca6eb68c7f4de3fbe067ef7c/packages/graphql/.env.example -------------------------------------------------------------------------------- /packages/graphql/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | package-lock.json -------------------------------------------------------------------------------- /packages/graphql/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorCustomizations": { 3 | "activityBar.background": "#5ece50", 4 | "activityBar.foreground": "#15202b", 5 | "activityBar.inactiveForeground": "#15202b99", 6 | "activityBarBadge.background": "#6a76d5", 7 | "activityBarBadge.foreground": "#e7e7e7", 8 | "statusBar.background": "#42b833", 9 | "statusBarItem.hoverBackground": "#349028", 10 | "statusBar.foreground": "#15202b" 11 | } 12 | } -------------------------------------------------------------------------------- /packages/graphql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@graphql/server", 3 | "version": "1.0.0", 4 | "description": "GraphQL test", 5 | "main": "index.js", 6 | "repository": "https://github.com/Wellers0n/Backend-diff.git", 7 | "author": "Wellerson ", 8 | "license": "MIT", 9 | "private": true, 10 | "scripts": { 11 | "start": "nodemon --exec ts-node ./src/index.ts", 12 | "tslint": "tslint --project .", 13 | "test": "jest", 14 | "test:watch": "jest --watchAll --coverage" 15 | }, 16 | "devDependencies": { 17 | "@babel/cli": "^7.4.3", 18 | "@babel/core": "^7.4.3", 19 | "@babel/plugin-proposal-class-properties": "^7.4.0", 20 | "@babel/plugin-proposal-object-rest-spread": "^7.4.3", 21 | "@babel/preset-env": "^7.4.3", 22 | "@babel/preset-typescript": "^7.3.3", 23 | "@types/jest": "^24.0.11", 24 | "@types/kcors": "^2.2.3", 25 | "@types/koa": "^2.0.48", 26 | "@types/koa-bodyparser": "^4.2.2", 27 | "@types/koa-json": "^2.0.18", 28 | "@types/koa-logger": "^3.1.1", 29 | "@types/koa-router": "^7.0.40", 30 | "get-graphql-schema": "^2.1.2", 31 | "jest": "^24.7.0", 32 | "nodemon": "^1.18.10", 33 | "ts-jest": "^24.0.1", 34 | "ts-node": "^8.0.3", 35 | "tslint": "^5.15.0", 36 | "tslint-config-airbnb": "^5.11.1", 37 | "typescript": "^3.4.1" 38 | }, 39 | "dependencies": { 40 | "@types/dotenv-safe": "^5.0.3", 41 | "@types/form-data": "^2.2.1", 42 | "@types/graphql": "^14.2.0", 43 | "@types/graphql-relay": "^0.4.9", 44 | "@types/jsonwebtoken": "^8.3.2", 45 | "@types/koa-multer": "^1.0.0", 46 | "@types/mongoose": "^5.3.25", 47 | "@types/node-fetch": "^2.3.7", 48 | "babel-plugin-idx": "^2.4.0", 49 | "dataloader": "^1.4.0", 50 | "dotenv-safe": "^6.1.0", 51 | "form-data": "^2.4.0", 52 | "graphql": "^14.2.1", 53 | "graphql-relay": "^0.6.0", 54 | "idx": "^2.5.6", 55 | "jsonwebtoken": "^8.5.1", 56 | "kcors": "^2.2.2", 57 | "koa": "^2.7.0", 58 | "koa-bodyparser": "^4.2.1", 59 | "koa-graphql": "^0.8.0", 60 | "koa-json": "^2.0.2", 61 | "koa-logger": "^3.2.0", 62 | "koa-multer": "^1.0.2", 63 | "koa-router": "^7.4.0", 64 | "mongoose": "^5.5.6", 65 | "multer": "^1.4.1", 66 | "multer-gridfs-storage": "^3.2.3", 67 | "node-fetch": "^2.6.0" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /packages/graphql/src/__test__/index.test.ts: -------------------------------------------------------------------------------- 1 | import {greeter} from '../server' 2 | 3 | describe('func test', () => { 4 | it('should return an string with name: Hello, wellerson', () => { 5 | expect(greeter('wellerson')).toBe('Hello, wellerson'); 6 | }); 7 | it('should return an string with name: Hello, moreira', () => { 8 | expect(greeter('moreira')).toBe('Hello, moreira'); 9 | }); 10 | }) -------------------------------------------------------------------------------- /packages/graphql/src/auth.ts: -------------------------------------------------------------------------------- 1 | 2 | import jwt from 'jsonwebtoken'; 3 | import User from './model/users'; 4 | import mongoose from 'mongoose' 5 | 6 | export async function getUser(token: string) { 7 | if (!token) return { user: null }; 8 | 9 | try { 10 | const decodedToken:any = jwt.verify(token, 'batman'); 11 | 12 | const user = await User.findOne({ _id: decodedToken.id }); 13 | 14 | return { 15 | user, 16 | }; 17 | } catch (err) { 18 | return { user: null }; 19 | } 20 | } 21 | 22 | type UserType = { 23 | _id: string, 24 | }; 25 | 26 | export function generateToken(user: UserType) { 27 | return jwt.sign({id: user._id}, 'batman'); 28 | } 29 | -------------------------------------------------------------------------------- /packages/graphql/src/database.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | export default function connectDatabase() { 4 | return new Promise((resolve, reject) => { 5 | mongoose.Promise = global.Promise; 6 | mongoose.connection 7 | .on("error", error => reject(error)) 8 | .on("close", () => console.log("Database connection closed.")) 9 | .once("open", () => resolve(mongoose.connections[0])); 10 | 11 | mongoose.connect( 12 | "mongodb+srv://Wellerson:0000@cluster0-0bwqz.mongodb.net/blog?retryWrites=true&w=majority", 13 | { 14 | useNewUrlParser: true, 15 | useCreateIndex: true 16 | } 17 | ); 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /packages/graphql/src/index.ts: -------------------------------------------------------------------------------- 1 | import "@babel/polyfill"; 2 | import { createServer } from "http"; 3 | import app from "./server"; 4 | import connectDatabase from "./database"; 5 | 6 | (async () => { 7 | try { 8 | await connectDatabase(); 9 | } catch (error) { 10 | console.log("Could not connect to database", { error }); 11 | throw error; 12 | } 13 | 14 | const server = createServer(app.callback()); 15 | 16 | server.listen(5000, () => { 17 | return console.log( 18 | `SERVER ON: http://localhost:${process.env.PORT || 5000}/graphql` 19 | ); 20 | }); 21 | })(); 22 | 23 | -------------------------------------------------------------------------------- /packages/graphql/src/model/article.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | const Schema = mongoose.Schema; 3 | 4 | const article = new Schema({ 5 | idUser: { 6 | type: String, 7 | required: "idUser is requerid" 8 | }, 9 | title: { 10 | type: String, 11 | required: "title is requerid" 12 | }, 13 | subtitle: { 14 | type: String, 15 | required: "subtitle is requerid" 16 | }, 17 | description: { 18 | type: String, 19 | required: "author is requerid" 20 | }, 21 | author: { 22 | type: [String], 23 | required: "author is requerid" 24 | }, 25 | date: { 26 | type: Date, 27 | default: Date.now, 28 | }, 29 | date_update: { 30 | type: Date 31 | }, 32 | slug: { 33 | type: String, 34 | required: "slug is requerid" 35 | } 36 | }); 37 | 38 | export default mongoose.model("articles", article); 39 | -------------------------------------------------------------------------------- /packages/graphql/src/model/comment.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | const Schema = mongoose.Schema; 3 | 4 | const comment = new Schema({ 5 | username: { 6 | type: String, 7 | required: "name is required" 8 | }, 9 | description: { 10 | type: String, 11 | required: "description is required" 12 | }, 13 | idArticle: { 14 | type: String, 15 | required: "idArticle required" 16 | }, 17 | idUser: { 18 | type: String, 19 | required: "idUser required" 20 | } 21 | }); 22 | 23 | export default mongoose.model("comments", comment); 24 | -------------------------------------------------------------------------------- /packages/graphql/src/model/users.ts: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | const Schema = mongoose.Schema; 3 | 4 | const users = new Schema({ 5 | name: { 6 | type: String, 7 | required: 'name is requerid', 8 | }, 9 | email:{ 10 | type: String, 11 | required: 'email is requerid', 12 | }, 13 | password:{ 14 | type: String, 15 | required: 'password is requerid', 16 | } 17 | 18 | }); 19 | 20 | export default mongoose.model('users', users) 21 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/helper/GetRandom.ts: -------------------------------------------------------------------------------- 1 | function getRandom(min:number, max:number) { 2 | min = Math.ceil(min); 3 | max = Math.floor(max); 4 | return Math.floor(Math.random() * (max - min)) + min; 5 | } 6 | 7 | export default getRandom -------------------------------------------------------------------------------- /packages/graphql/src/modules/helper/GetSlug.ts: -------------------------------------------------------------------------------- 1 | import GetRandom from "./GetRandom"; 2 | import Slugify from "./Slugify"; 3 | 4 | function getSlug(url: string, title: string) { 5 | const slug = Slugify(title); 6 | const random = GetRandom(1, 100000000); 7 | const permalink = `${url}/${slug}-${random}`; 8 | return permalink; 9 | } 10 | 11 | export default getSlug -------------------------------------------------------------------------------- /packages/graphql/src/modules/helper/Slugify.ts: -------------------------------------------------------------------------------- 1 | function slugify(title: string) { 2 | const a = 'àáäâãåăæąçćčđďèéěėëêęğǵḧìíïîįłḿǹńňñòóöôœøṕŕřßşśšșťțùúüûǘůűūųẃẍÿýźžż·/_,:;' 3 | const b = 'aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz------' 4 | const p = new RegExp(a.split('').join('|'), 'g') 5 | 6 | return title.toString().toLowerCase() 7 | .replace(/\s+/g, '-') // Replace spaces with - 8 | .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters 9 | .replace(/&/g, '-and-') // Replace & with 'and' 10 | .replace(/[^\w\-]+/g, '') // Remove all non-word characters 11 | .replace(/\-\-+/g, '-') // Replace multiple - with single - 12 | .replace(/^-+/, '') // Trim - from start of text 13 | .replace(/-+$/, '') // Trim - from end of text 14 | } 15 | 16 | export default slugify -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/ArticleType.ts: -------------------------------------------------------------------------------- 1 | import { 2 | GraphQLObjectType, 3 | GraphQLString, 4 | GraphQLID, 5 | GraphQLList 6 | } from 'graphql' 7 | import {globalIdField} from 'graphql-relay' 8 | 9 | export default new GraphQLObjectType({ 10 | name: 'Articles', 11 | fields: () => ({ 12 | id: globalIdField('Articles'), 13 | _id:{ 14 | type: GraphQLID 15 | }, 16 | author:{ 17 | type: new GraphQLList(GraphQLString), 18 | }, 19 | date:{ 20 | type: GraphQLString 21 | }, 22 | date_update:{ 23 | type: GraphQLString 24 | }, 25 | title:{ 26 | type: GraphQLString 27 | }, 28 | subtitle:{ 29 | type: GraphQLString 30 | }, 31 | description:{ 32 | type: GraphQLString 33 | }, 34 | idUser: { 35 | type: GraphQLString 36 | }, 37 | slug: { 38 | type: GraphQLString 39 | } 40 | }) 41 | }) 42 | 43 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/CommentType.ts: -------------------------------------------------------------------------------- 1 | import { 2 | GraphQLObjectType, 3 | GraphQLString, 4 | GraphQLID, 5 | } from 'graphql' 6 | import {globalIdField} from 'graphql-relay' 7 | 8 | export default new GraphQLObjectType({ 9 | name: 'Comments', 10 | fields: () => ({ 11 | id: globalIdField('Comments'), 12 | _id:{ 13 | type: GraphQLID 14 | }, 15 | username:{ 16 | type: GraphQLString, 17 | }, 18 | description:{ 19 | type: GraphQLString 20 | }, 21 | idArticle: { 22 | type: GraphQLString 23 | } 24 | }) 25 | }) 26 | 27 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/article/createArticleMutation.ts: -------------------------------------------------------------------------------- 1 | import Article from "./../../../../model/article"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import ArticleType from "../../ArticleType"; 5 | import GetSlug from './../../../helper/GetSlug' 6 | 7 | export default mutationWithClientMutationId({ 8 | name: "createArticleMutation", 9 | inputFields: { 10 | idUser: { 11 | type: new GraphQLNonNull(GraphQLString) 12 | }, 13 | title: { 14 | type: new GraphQLNonNull(GraphQLString) 15 | }, 16 | subtitle: { 17 | type: new GraphQLNonNull(GraphQLString) 18 | }, 19 | description: { 20 | type: new GraphQLNonNull(GraphQLString) 21 | }, 22 | author: { 23 | type: new GraphQLNonNull(new GraphQLList(GraphQLString)) 24 | }, 25 | }, 26 | mutateAndGetPayload: async ( 27 | { idUser, title, subtitle, description, author }, 28 | context, 29 | options 30 | ) => { 31 | // permalink and slug 32 | const slug = GetSlug("articles", title) 33 | console.log(slug) 34 | const date = Date.now(); 35 | 36 | const article = await Article.create({ 37 | idUser, 38 | title, 39 | subtitle, 40 | description, 41 | author, 42 | date, 43 | date_update: null, 44 | slug 45 | }); 46 | 47 | const ArticleUpdate = await Article.find({}); 48 | if (article) { 49 | return { 50 | success: "success", 51 | article: ArticleUpdate 52 | }; 53 | } 54 | return { 55 | error: "Error in create an article" 56 | }; 57 | }, 58 | outputFields: { 59 | success: { 60 | type: GraphQLString, 61 | resolve: ({ success }) => success 62 | }, 63 | error: { 64 | type: GraphQLString, 65 | resolve: ({ error }) => error 66 | }, 67 | article: { 68 | type: new GraphQLList(ArticleType), 69 | resolve: ({ article }) => article 70 | } 71 | } 72 | }); 73 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/article/deleteArticleMutation.ts: -------------------------------------------------------------------------------- 1 | import Article from "./../../../../model/article"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import ArticleType from "../../ArticleType"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "deleteArticleMutation", 8 | inputFields: { 9 | id: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | } 12 | }, 13 | mutateAndGetPayload: async ({ id }, context, options) => { 14 | // const idUser = context.user.id; 15 | // const article = await Article.findOne({ name }); 16 | // if (!idUser) return { error: "User null" }; 17 | 18 | const article = await Article.deleteOne({ _id: id }); 19 | 20 | const ArticleUpdate = await Article.find({}); 21 | if (article) { 22 | return { 23 | success: "success", 24 | article: ArticleUpdate 25 | }; 26 | } 27 | return { 28 | error: "Error in delete an article" 29 | }; 30 | }, 31 | outputFields: { 32 | success: { 33 | type: GraphQLString, 34 | resolve: ({ success }) => success 35 | }, 36 | error: { 37 | type: GraphQLString, 38 | resolve: ({ error }) => error 39 | }, 40 | article: { 41 | type: new GraphQLList(ArticleType), 42 | resolve: ({ article }) => article 43 | } 44 | } 45 | }); 46 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/article/updateArticleMutation.ts: -------------------------------------------------------------------------------- 1 | import Article from "./../../../../model/article"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import ArticleType from "../../ArticleType"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "updateArticleMutation", 8 | inputFields: { 9 | id: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | }, 12 | title: { 13 | type: GraphQLString 14 | }, 15 | subtitle: { 16 | type: GraphQLString 17 | }, 18 | description: { 19 | type: GraphQLString 20 | }, 21 | date_update: { 22 | type: GraphQLString 23 | } 24 | }, 25 | mutateAndGetPayload: async ( 26 | { title, subtitle, description, date_update, id }, 27 | context, 28 | options 29 | ) => { 30 | const date = Date.now(); 31 | const article = await Article.updateOne( 32 | { _id: id }, 33 | { title, subtitle, description, date_update: date } 34 | ); 35 | 36 | const ArticleUpdate = await Article.find({}); 37 | if (article) { 38 | return { 39 | success: "success", 40 | article: ArticleUpdate 41 | }; 42 | } 43 | return { 44 | error: "Error in update an article" 45 | }; 46 | }, 47 | outputFields: { 48 | success: { 49 | type: GraphQLString, 50 | resolve: ({ success }) => success 51 | }, 52 | error: { 53 | type: GraphQLString, 54 | resolve: ({ error }) => error 55 | }, 56 | article: { 57 | type: new GraphQLList(ArticleType), 58 | resolve: ({ article }) => article 59 | } 60 | } 61 | }); 62 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/comment/createCommentMutation.ts: -------------------------------------------------------------------------------- 1 | import Comment from "./../../../../model/comment"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import CommentType from "../../CommentType"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "createCommentMutation", 8 | inputFields: { 9 | idArticle: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | }, 12 | username: { 13 | type: new GraphQLNonNull(GraphQLString) 14 | }, 15 | description: { 16 | type: new GraphQLNonNull(GraphQLString) 17 | }, 18 | idUser: { 19 | type: new GraphQLNonNull(GraphQLString) 20 | } 21 | }, 22 | mutateAndGetPayload: async ( 23 | { idArticle, username, description, idUser }, 24 | context, 25 | options 26 | ) => { 27 | // const idUser = context.user.id; <- o certo seria usar o id do user logado, mas estou colocando direto 28 | const comment = await Comment.create({ 29 | idArticle, 30 | username, 31 | description, 32 | idUser 33 | }); 34 | 35 | const CommentUpdate = await Comment.find({ idArticle }); 36 | if (comment) { 37 | return { 38 | success: "success", 39 | comment: CommentUpdate 40 | }; 41 | } 42 | return { 43 | error: "Error in create an comment" 44 | }; 45 | }, 46 | outputFields: { 47 | success: { 48 | type: GraphQLString, 49 | resolve: ({ success }) => success 50 | }, 51 | error: { 52 | type: GraphQLString, 53 | resolve: ({ error }) => error 54 | }, 55 | comment: { 56 | type: new GraphQLList(CommentType), 57 | resolve: ({ comment }) => comment 58 | } 59 | } 60 | }); 61 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/comment/deleteCommentMutation.ts: -------------------------------------------------------------------------------- 1 | import Comment from "./../../../../model/comment"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import CommentType from "../../CommentType"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "deleteMyCommentMutation", 8 | inputFields: { 9 | _id: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | }, 12 | idArticle: { 13 | type: new GraphQLNonNull(GraphQLString) 14 | } 15 | }, 16 | mutateAndGetPayload: async ({ _id, idArticle }, context, options) => { 17 | // const idUser = context.user.id; <- o certo seria usar o id do user logado, mas estou colocando direto 18 | const comment = await Comment.deleteOne({ _id }); 19 | const CommentUpdate = await Comment.find({ idArticle }); 20 | if (comment) { 21 | return { 22 | success: "success", 23 | comment: CommentUpdate 24 | }; 25 | } 26 | 27 | return { 28 | error: "Error in delete my an comment" 29 | }; 30 | }, 31 | outputFields: { 32 | success: { 33 | type: GraphQLString, 34 | resolve: ({ success }) => success 35 | }, 36 | error: { 37 | type: GraphQLString, 38 | resolve: ({ error }) => error 39 | }, 40 | comment: { 41 | type: new GraphQLList(CommentType), 42 | resolve: ({ comment }) => comment 43 | } 44 | } 45 | }); 46 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/comment/updateCommentMutation.ts: -------------------------------------------------------------------------------- 1 | import Comment from "./../../../../model/comment"; 2 | import { GraphQLString, GraphQLNonNull, GraphQLList } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import CommentType from "../../CommentType"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "updateCommentMutation", 8 | inputFields: { 9 | _id: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | }, 12 | description: { 13 | type: GraphQLString 14 | }, 15 | idArticle: { 16 | type: new GraphQLNonNull(GraphQLString) 17 | } 18 | }, 19 | mutateAndGetPayload: async ( 20 | { description, _id, idArticle }, 21 | context, 22 | options 23 | ) => { 24 | const comment = await Comment.updateOne( 25 | { _id }, 26 | { description } 27 | ); 28 | 29 | const CommentUpdate = await Comment.find({idArticle}); 30 | if (comment) { 31 | return { 32 | success: "success", 33 | comment: CommentUpdate 34 | }; 35 | } 36 | return { 37 | error: "Error in update an comment" 38 | }; 39 | }, 40 | outputFields: { 41 | success: { 42 | type: GraphQLString, 43 | resolve: ({ success }) => success 44 | }, 45 | error: { 46 | type: GraphQLString, 47 | resolve: ({ error }) => error 48 | }, 49 | comment: { 50 | type: new GraphQLList(CommentType), 51 | resolve: ({ comment }) => comment 52 | } 53 | } 54 | }); 55 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/index.ts: -------------------------------------------------------------------------------- 1 | import loginMutation from './user/loginUserMutation' 2 | import createUserMutation from './user/createUserMutation' 3 | import createArticleMutation from './article/createArticleMutation' 4 | import createCommentMutation from './comment/createCommentMutation' 5 | import deleteArticleMutation from './article/deleteArticleMutation' 6 | import updateArticleMutation from './article/updateArticleMutation' 7 | import deleteCommentMutation from './comment/deleteCommentMutation' 8 | import updateCommentMutation from './comment/updateCommentMutation' 9 | 10 | export default { 11 | loginMutation, 12 | createUserMutation, 13 | createArticleMutation, 14 | createCommentMutation, 15 | deleteArticleMutation, 16 | updateArticleMutation, 17 | deleteCommentMutation, 18 | updateCommentMutation 19 | } -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/user/createUserMutation.ts: -------------------------------------------------------------------------------- 1 | import Users from "./../../../../model/users"; 2 | import { GraphQLString, GraphQLNonNull } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | 5 | export default mutationWithClientMutationId({ 6 | name: "createUserMutation", 7 | inputFields: { 8 | name: { 9 | type: new GraphQLNonNull(GraphQLString) 10 | }, 11 | email: { 12 | type: new GraphQLNonNull(GraphQLString) 13 | }, 14 | password: { 15 | type: new GraphQLNonNull(GraphQLString) 16 | } 17 | }, 18 | mutateAndGetPayload: async ({ name, email, password }) => { 19 | const user = await Users.findOne({ email }); 20 | // msg's 21 | const createUserSuccess = "User created successfully"; 22 | const userExist = "User exist"; 23 | 24 | if (!user) { 25 | await Users.create({ name, email, password }); 26 | return { 27 | msg: createUserSuccess 28 | }; 29 | } 30 | return { 31 | userExist: userExist 32 | }; 33 | }, 34 | outputFields: { 35 | msg: { 36 | type: GraphQLString, 37 | resolve: ({ msg }) => msg 38 | }, 39 | userExist: { 40 | type: GraphQLString, 41 | resolve: ({ userExist }) => userExist 42 | } 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /packages/graphql/src/modules/main/mutation/user/loginUserMutation.ts: -------------------------------------------------------------------------------- 1 | import Users from "./../../../../model/users"; 2 | import { GraphQLString, GraphQLNonNull } from "graphql"; 3 | import { mutationWithClientMutationId } from "graphql-relay"; 4 | import { generateToken } from "../../../../auth"; 5 | 6 | export default mutationWithClientMutationId({ 7 | name: "loginUserMutation", 8 | inputFields: { 9 | email: { 10 | type: new GraphQLNonNull(GraphQLString) 11 | }, 12 | password: { 13 | type: new GraphQLNonNull(GraphQLString) 14 | } 15 | }, 16 | mutateAndGetPayload: async ({ email, password }) => { 17 | const user = await Users.findOne({ email, password }); 18 | 19 | const defaultErrorMessage = "Invalid login or password"; 20 | if (!user) { 21 | return { 22 | error: defaultErrorMessage 23 | }; 24 | } 25 | 26 | return { 27 | token: generateToken(user) 28 | }; 29 | }, 30 | outputFields: { 31 | token: { 32 | type: GraphQLString, 33 | resolve: ({ token }) => token 34 | }, 35 | error: { 36 | type: GraphQLString, 37 | resolve: ({ error }) => error 38 | } 39 | } 40 | }); 41 | -------------------------------------------------------------------------------- /packages/graphql/src/schema.ts: -------------------------------------------------------------------------------- 1 | import { GraphQLSchema } from 'graphql' 2 | import QueryType from './type/QueryType' 3 | import MutationType from './type/MutationType' 4 | 5 | const schema = new GraphQLSchema({ 6 | query: QueryType, 7 | mutation: MutationType 8 | }) 9 | 10 | export default schema -------------------------------------------------------------------------------- /packages/graphql/src/server.ts: -------------------------------------------------------------------------------- 1 | import koa, { Request, Response } from "koa"; 2 | import route from "koa-router"; 3 | import logger from "koa-logger"; 4 | import json from "koa-json"; 5 | import bodyparser from "koa-bodyparser"; 6 | import cors from "kcors"; 7 | import dotenv from "dotenv-safe"; 8 | const graphqlHTTP = require("koa-graphql"); 9 | import schema from "./schema"; 10 | // import mongoose from 'mongoose'; 11 | import { getUser } from "./auth"; 12 | // import database from './database'; 13 | import multer from "koa-multer"; 14 | 15 | // init router and koa 16 | const app = new koa(); 17 | const router = new route(); 18 | //init doenv 19 | dotenv.load(); 20 | 21 | // middlewares 22 | app.use(logger()); 23 | app.use(cors()); 24 | app.use(json()); 25 | app.use(bodyparser()); 26 | app.use(router.routes()); 27 | app.use(router.allowedMethods()); 28 | 29 | const graphqlSettingsPerReq = async (req: Request, ctx: Response) => { 30 | const { user } = await getUser(req.header.authorization); 31 | 32 | // const dataloaders = Object.keys(loaders).reduce( 33 | // (acc, loaderKey) => ({ 34 | // ...acc, 35 | // [loaderKey]: loaders[loaderKey].getLoader(), 36 | // }), 37 | // {}, 38 | // ); 39 | 40 | return { 41 | graphiql: true, 42 | schema, 43 | rootValue: { 44 | request: ctx.req 45 | }, 46 | context: { 47 | user, 48 | req 49 | // dataloaders, 50 | } 51 | }; 52 | }; 53 | 54 | const graphqlServer = graphqlHTTP(graphqlSettingsPerReq); 55 | 56 | const storage = multer.memoryStorage(); 57 | const limits = { 58 | // Increasing max upload size to 30 mb, since busboy default is only 1 mb 59 | fieldSize: 30 * 1024 * 1024 60 | }; 61 | 62 | router.all("/graphql", multer({ storage, limits }).any(), graphqlServer); 63 | 64 | // app.listen(process.env.PORT || 5000, () => { 65 | // return console.log(`SERVER ON: http://localhost:${process.env.PORT || 5000}/graphql`) 66 | // }) 67 | 68 | export default app; 69 | -------------------------------------------------------------------------------- /packages/graphql/src/type/MutationType.ts: -------------------------------------------------------------------------------- 1 | import { GraphQLObjectType } from 'graphql'; 2 | 3 | import CompanyMutations from '../modules/main/mutation'; 4 | 5 | export default new GraphQLObjectType({ 6 | name: 'MutationType', 7 | fields: () => ({ 8 | ...CompanyMutations, 9 | }), 10 | }); -------------------------------------------------------------------------------- /packages/graphql/src/type/QueryType.ts: -------------------------------------------------------------------------------- 1 | import { 2 | GraphQLObjectType, 3 | GraphQLList, 4 | GraphQLNonNull, 5 | GraphQLID, 6 | GraphQLString, 7 | GraphQLInt 8 | } from "graphql"; 9 | import ArticleType from "../modules/main/ArticleType"; 10 | import CommentType from "./../modules/main/CommentType"; 11 | import articleModel from "../model/article"; 12 | import commentModel from "../model/comment"; 13 | import Slugify from "./../modules/helper/Slugify"; 14 | 15 | export default new GraphQLObjectType({ 16 | name: "QueryType", 17 | description: "Get planets[] and planet", 18 | fields: () => ({ 19 | article: { 20 | type: ArticleType, 21 | args: { 22 | id: { 23 | type: new GraphQLNonNull(GraphQLID) 24 | } 25 | }, 26 | resolve: (parentValue, args, ctx) => { 27 | return articleModel.findOne({ _id: args.id }); 28 | } 29 | }, 30 | articles: { 31 | type: new GraphQLList(ArticleType), 32 | args: { 33 | skip: { 34 | type: GraphQLInt 35 | }, 36 | limit: { 37 | type: GraphQLInt 38 | } 39 | }, 40 | resolve: (parentValue, args, ctx) => { 41 | // const idUser = ctx.user.id; 42 | const limit = args.limit; 43 | const skip = Math.max(0, args.skip); 44 | return articleModel 45 | .find({}) 46 | .limit(limit) 47 | .skip(skip); 48 | } 49 | }, 50 | comments: { 51 | type: new GraphQLList(CommentType), 52 | args: { 53 | idArticle: { 54 | type: new GraphQLNonNull(GraphQLID) 55 | }, 56 | skip: { 57 | type: GraphQLInt 58 | }, 59 | limit: { 60 | type: GraphQLInt 61 | } 62 | }, 63 | resolve: (parentValue, args, ctx) => { 64 | const limit = args.limit; 65 | const skip = Math.max(0, args.skip); 66 | const idArticle = args.idArticle; 67 | return commentModel 68 | .find({ idArticle }) 69 | .limit(limit) 70 | .skip(skip); 71 | } 72 | }, 73 | findPermalink: { 74 | type: ArticleType, 75 | args: { 76 | slug: { 77 | type: new GraphQLNonNull(GraphQLString) 78 | } 79 | }, 80 | resolve: (parentValue, args, ctx) => { 81 | const slug = args.slug; 82 | return articleModel.findOne({ slug }); 83 | } 84 | } 85 | }) 86 | }); 87 | -------------------------------------------------------------------------------- /packages/graphql/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "es2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | "lib": [ /* Specify library files to be included in the compilation. */ 7 | "esnext" 8 | ], 9 | // "allowJs": true, /* Allow javascript files to be compiled. */ 10 | // "checkJs": true, /* Report errors in .js files. */ 11 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 12 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 13 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 14 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 15 | // "outFile": "./", /* Concatenate and emit output to single file. */ 16 | "outDir": "./distTs", /* Redirect output structure to the directory. */ 17 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 18 | // "composite": true, /* Enable project compilation */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | 25 | /* Strict Type-Checking Options */ 26 | "strict": true, /* Enable all strict type-checking options. */ 27 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 28 | // "strictNullChecks": true, /* Enable strict null checks. */ 29 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 30 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 31 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 32 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 33 | 34 | /* Additional Checks */ 35 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 36 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 37 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 38 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 39 | 40 | /* Module Resolution Options */ 41 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 42 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 43 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 44 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 45 | // "typeRoots": [], /* List of folders to include type definitions from. */ 46 | // "types": [], /* Type declaration files to be included in compilation. */ 47 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 48 | "resolveJsonModule": true, 49 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 50 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 51 | 52 | /* Source Map Options */ 53 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 54 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 55 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 56 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 57 | 58 | /* Experimental Options */ 59 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 60 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 61 | }, 62 | "include": [ 63 | "src/**/*" 64 | ] 65 | } -------------------------------------------------------------------------------- /packages/graphql/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "tslint:recommended", 4 | "tslint-config-airbnb" 5 | ], 6 | "rules": { 7 | "no-any": true, 8 | "prefer-array-literal": [true, { "allow-type-parameters": true }], 9 | "variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case", "allow-leading-underscore"] 10 | } 11 | } -------------------------------------------------------------------------------- /packages/rest/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "@babel/preset-env" 4 | ] 5 | } -------------------------------------------------------------------------------- /packages/rest/.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 (http://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 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /packages/rest/README.md: -------------------------------------------------------------------------------- 1 | # koa-crud 2 | 🗃️ A simple CRUD using Koa.js 3 | -------------------------------------------------------------------------------- /packages/rest/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@rest/server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/cli": { 8 | "version": "7.5.5", 9 | "dev": true, 10 | "requires": { 11 | "chokidar": "^2.0.4", 12 | "commander": "^2.8.1", 13 | "convert-source-map": "^1.1.0", 14 | "fs-readdir-recursive": "^1.1.0", 15 | "glob": "^7.0.0", 16 | "lodash": "^4.17.13", 17 | "mkdirp": "^0.5.1", 18 | "output-file-sync": "^2.0.0", 19 | "slash": "^2.0.0", 20 | "source-map": "^0.5.0" 21 | } 22 | }, 23 | "@babel/code-frame": { 24 | "version": "7.5.5", 25 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 26 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 27 | "dev": true, 28 | "requires": { 29 | "@babel/highlight": "^7.0.0" 30 | } 31 | }, 32 | "@babel/core": { 33 | "version": "7.5.5", 34 | "dev": true, 35 | "requires": { 36 | "@babel/code-frame": "^7.5.5", 37 | "@babel/generator": "^7.5.5", 38 | "@babel/helpers": "^7.5.5", 39 | "@babel/parser": "^7.5.5", 40 | "@babel/template": "^7.4.4", 41 | "@babel/traverse": "^7.5.5", 42 | "@babel/types": "^7.5.5", 43 | "convert-source-map": "^1.1.0", 44 | "debug": "^4.1.0", 45 | "json5": "^2.1.0", 46 | "lodash": "^4.17.13", 47 | "resolve": "^1.3.2", 48 | "semver": "^5.4.1", 49 | "source-map": "^0.5.0" 50 | }, 51 | "dependencies": { 52 | "debug": { 53 | "version": "4.1.1", 54 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 55 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 56 | "dev": true, 57 | "requires": { 58 | "ms": "^2.1.1" 59 | } 60 | }, 61 | "ms": { 62 | "version": "2.1.2", 63 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 64 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 65 | "dev": true 66 | } 67 | } 68 | }, 69 | "@babel/generator": { 70 | "version": "7.5.5", 71 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", 72 | "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", 73 | "dev": true, 74 | "requires": { 75 | "@babel/types": "^7.5.5", 76 | "jsesc": "^2.5.1", 77 | "lodash": "^4.17.13", 78 | "source-map": "^0.5.0", 79 | "trim-right": "^1.0.1" 80 | } 81 | }, 82 | "@babel/helper-annotate-as-pure": { 83 | "version": "7.0.0", 84 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", 85 | "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", 86 | "dev": true, 87 | "requires": { 88 | "@babel/types": "^7.0.0" 89 | } 90 | }, 91 | "@babel/helper-builder-binary-assignment-operator-visitor": { 92 | "version": "7.1.0", 93 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", 94 | "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", 95 | "dev": true, 96 | "requires": { 97 | "@babel/helper-explode-assignable-expression": "^7.1.0", 98 | "@babel/types": "^7.0.0" 99 | } 100 | }, 101 | "@babel/helper-call-delegate": { 102 | "version": "7.4.4", 103 | "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", 104 | "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", 105 | "dev": true, 106 | "requires": { 107 | "@babel/helper-hoist-variables": "^7.4.4", 108 | "@babel/traverse": "^7.4.4", 109 | "@babel/types": "^7.4.4" 110 | } 111 | }, 112 | "@babel/helper-define-map": { 113 | "version": "7.5.5", 114 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", 115 | "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", 116 | "dev": true, 117 | "requires": { 118 | "@babel/helper-function-name": "^7.1.0", 119 | "@babel/types": "^7.5.5", 120 | "lodash": "^4.17.13" 121 | } 122 | }, 123 | "@babel/helper-explode-assignable-expression": { 124 | "version": "7.1.0", 125 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", 126 | "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", 127 | "dev": true, 128 | "requires": { 129 | "@babel/traverse": "^7.1.0", 130 | "@babel/types": "^7.0.0" 131 | } 132 | }, 133 | "@babel/helper-function-name": { 134 | "version": "7.1.0", 135 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", 136 | "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", 137 | "dev": true, 138 | "requires": { 139 | "@babel/helper-get-function-arity": "^7.0.0", 140 | "@babel/template": "^7.1.0", 141 | "@babel/types": "^7.0.0" 142 | } 143 | }, 144 | "@babel/helper-get-function-arity": { 145 | "version": "7.0.0", 146 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", 147 | "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", 148 | "dev": true, 149 | "requires": { 150 | "@babel/types": "^7.0.0" 151 | } 152 | }, 153 | "@babel/helper-hoist-variables": { 154 | "version": "7.4.4", 155 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", 156 | "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", 157 | "dev": true, 158 | "requires": { 159 | "@babel/types": "^7.4.4" 160 | } 161 | }, 162 | "@babel/helper-member-expression-to-functions": { 163 | "version": "7.5.5", 164 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", 165 | "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", 166 | "dev": true, 167 | "requires": { 168 | "@babel/types": "^7.5.5" 169 | } 170 | }, 171 | "@babel/helper-module-imports": { 172 | "version": "7.0.0", 173 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", 174 | "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", 175 | "dev": true, 176 | "requires": { 177 | "@babel/types": "^7.0.0" 178 | } 179 | }, 180 | "@babel/helper-module-transforms": { 181 | "version": "7.5.5", 182 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", 183 | "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", 184 | "dev": true, 185 | "requires": { 186 | "@babel/helper-module-imports": "^7.0.0", 187 | "@babel/helper-simple-access": "^7.1.0", 188 | "@babel/helper-split-export-declaration": "^7.4.4", 189 | "@babel/template": "^7.4.4", 190 | "@babel/types": "^7.5.5", 191 | "lodash": "^4.17.13" 192 | } 193 | }, 194 | "@babel/helper-optimise-call-expression": { 195 | "version": "7.0.0", 196 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", 197 | "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", 198 | "dev": true, 199 | "requires": { 200 | "@babel/types": "^7.0.0" 201 | } 202 | }, 203 | "@babel/helper-plugin-utils": { 204 | "version": "7.0.0", 205 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", 206 | "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", 207 | "dev": true 208 | }, 209 | "@babel/helper-regex": { 210 | "version": "7.5.5", 211 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", 212 | "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", 213 | "dev": true, 214 | "requires": { 215 | "lodash": "^4.17.13" 216 | } 217 | }, 218 | "@babel/helper-remap-async-to-generator": { 219 | "version": "7.1.0", 220 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", 221 | "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", 222 | "dev": true, 223 | "requires": { 224 | "@babel/helper-annotate-as-pure": "^7.0.0", 225 | "@babel/helper-wrap-function": "^7.1.0", 226 | "@babel/template": "^7.1.0", 227 | "@babel/traverse": "^7.1.0", 228 | "@babel/types": "^7.0.0" 229 | } 230 | }, 231 | "@babel/helper-replace-supers": { 232 | "version": "7.5.5", 233 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", 234 | "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", 235 | "dev": true, 236 | "requires": { 237 | "@babel/helper-member-expression-to-functions": "^7.5.5", 238 | "@babel/helper-optimise-call-expression": "^7.0.0", 239 | "@babel/traverse": "^7.5.5", 240 | "@babel/types": "^7.5.5" 241 | } 242 | }, 243 | "@babel/helper-simple-access": { 244 | "version": "7.1.0", 245 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", 246 | "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", 247 | "dev": true, 248 | "requires": { 249 | "@babel/template": "^7.1.0", 250 | "@babel/types": "^7.0.0" 251 | } 252 | }, 253 | "@babel/helper-split-export-declaration": { 254 | "version": "7.4.4", 255 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", 256 | "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", 257 | "dev": true, 258 | "requires": { 259 | "@babel/types": "^7.4.4" 260 | } 261 | }, 262 | "@babel/helper-wrap-function": { 263 | "version": "7.2.0", 264 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", 265 | "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", 266 | "dev": true, 267 | "requires": { 268 | "@babel/helper-function-name": "^7.1.0", 269 | "@babel/template": "^7.1.0", 270 | "@babel/traverse": "^7.1.0", 271 | "@babel/types": "^7.2.0" 272 | } 273 | }, 274 | "@babel/helpers": { 275 | "version": "7.5.5", 276 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", 277 | "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", 278 | "dev": true, 279 | "requires": { 280 | "@babel/template": "^7.4.4", 281 | "@babel/traverse": "^7.5.5", 282 | "@babel/types": "^7.5.5" 283 | } 284 | }, 285 | "@babel/highlight": { 286 | "version": "7.5.0", 287 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 288 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 289 | "dev": true, 290 | "requires": { 291 | "chalk": "^2.0.0", 292 | "esutils": "^2.0.2", 293 | "js-tokens": "^4.0.0" 294 | } 295 | }, 296 | "@babel/node": { 297 | "version": "7.5.5", 298 | "dev": true, 299 | "requires": { 300 | "@babel/polyfill": "^7.0.0", 301 | "@babel/register": "^7.5.5", 302 | "commander": "^2.8.1", 303 | "lodash": "^4.17.13", 304 | "node-environment-flags": "^1.0.5", 305 | "v8flags": "^3.1.1" 306 | } 307 | }, 308 | "@babel/parser": { 309 | "version": "7.5.5", 310 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", 311 | "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", 312 | "dev": true 313 | }, 314 | "@babel/plugin-proposal-async-generator-functions": { 315 | "version": "7.2.0", 316 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", 317 | "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", 318 | "dev": true, 319 | "requires": { 320 | "@babel/helper-plugin-utils": "^7.0.0", 321 | "@babel/helper-remap-async-to-generator": "^7.1.0", 322 | "@babel/plugin-syntax-async-generators": "^7.2.0" 323 | } 324 | }, 325 | "@babel/plugin-proposal-dynamic-import": { 326 | "version": "7.5.0", 327 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", 328 | "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", 329 | "dev": true, 330 | "requires": { 331 | "@babel/helper-plugin-utils": "^7.0.0", 332 | "@babel/plugin-syntax-dynamic-import": "^7.2.0" 333 | } 334 | }, 335 | "@babel/plugin-proposal-json-strings": { 336 | "version": "7.2.0", 337 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", 338 | "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", 339 | "dev": true, 340 | "requires": { 341 | "@babel/helper-plugin-utils": "^7.0.0", 342 | "@babel/plugin-syntax-json-strings": "^7.2.0" 343 | } 344 | }, 345 | "@babel/plugin-proposal-object-rest-spread": { 346 | "version": "7.5.5", 347 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", 348 | "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", 349 | "dev": true, 350 | "requires": { 351 | "@babel/helper-plugin-utils": "^7.0.0", 352 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0" 353 | } 354 | }, 355 | "@babel/plugin-proposal-optional-catch-binding": { 356 | "version": "7.2.0", 357 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", 358 | "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", 359 | "dev": true, 360 | "requires": { 361 | "@babel/helper-plugin-utils": "^7.0.0", 362 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" 363 | } 364 | }, 365 | "@babel/plugin-proposal-unicode-property-regex": { 366 | "version": "7.4.4", 367 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", 368 | "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", 369 | "dev": true, 370 | "requires": { 371 | "@babel/helper-plugin-utils": "^7.0.0", 372 | "@babel/helper-regex": "^7.4.4", 373 | "regexpu-core": "^4.5.4" 374 | } 375 | }, 376 | "@babel/plugin-syntax-async-generators": { 377 | "version": "7.2.0", 378 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", 379 | "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", 380 | "dev": true, 381 | "requires": { 382 | "@babel/helper-plugin-utils": "^7.0.0" 383 | } 384 | }, 385 | "@babel/plugin-syntax-dynamic-import": { 386 | "version": "7.2.0", 387 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", 388 | "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", 389 | "dev": true, 390 | "requires": { 391 | "@babel/helper-plugin-utils": "^7.0.0" 392 | } 393 | }, 394 | "@babel/plugin-syntax-json-strings": { 395 | "version": "7.2.0", 396 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", 397 | "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", 398 | "dev": true, 399 | "requires": { 400 | "@babel/helper-plugin-utils": "^7.0.0" 401 | } 402 | }, 403 | "@babel/plugin-syntax-object-rest-spread": { 404 | "version": "7.2.0", 405 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", 406 | "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", 407 | "dev": true, 408 | "requires": { 409 | "@babel/helper-plugin-utils": "^7.0.0" 410 | } 411 | }, 412 | "@babel/plugin-syntax-optional-catch-binding": { 413 | "version": "7.2.0", 414 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", 415 | "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", 416 | "dev": true, 417 | "requires": { 418 | "@babel/helper-plugin-utils": "^7.0.0" 419 | } 420 | }, 421 | "@babel/plugin-transform-arrow-functions": { 422 | "version": "7.2.0", 423 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", 424 | "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", 425 | "dev": true, 426 | "requires": { 427 | "@babel/helper-plugin-utils": "^7.0.0" 428 | } 429 | }, 430 | "@babel/plugin-transform-async-to-generator": { 431 | "version": "7.5.0", 432 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", 433 | "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", 434 | "dev": true, 435 | "requires": { 436 | "@babel/helper-module-imports": "^7.0.0", 437 | "@babel/helper-plugin-utils": "^7.0.0", 438 | "@babel/helper-remap-async-to-generator": "^7.1.0" 439 | } 440 | }, 441 | "@babel/plugin-transform-block-scoped-functions": { 442 | "version": "7.2.0", 443 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", 444 | "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", 445 | "dev": true, 446 | "requires": { 447 | "@babel/helper-plugin-utils": "^7.0.0" 448 | } 449 | }, 450 | "@babel/plugin-transform-block-scoping": { 451 | "version": "7.5.5", 452 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", 453 | "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", 454 | "dev": true, 455 | "requires": { 456 | "@babel/helper-plugin-utils": "^7.0.0", 457 | "lodash": "^4.17.13" 458 | } 459 | }, 460 | "@babel/plugin-transform-classes": { 461 | "version": "7.5.5", 462 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", 463 | "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", 464 | "dev": true, 465 | "requires": { 466 | "@babel/helper-annotate-as-pure": "^7.0.0", 467 | "@babel/helper-define-map": "^7.5.5", 468 | "@babel/helper-function-name": "^7.1.0", 469 | "@babel/helper-optimise-call-expression": "^7.0.0", 470 | "@babel/helper-plugin-utils": "^7.0.0", 471 | "@babel/helper-replace-supers": "^7.5.5", 472 | "@babel/helper-split-export-declaration": "^7.4.4", 473 | "globals": "^11.1.0" 474 | } 475 | }, 476 | "@babel/plugin-transform-computed-properties": { 477 | "version": "7.2.0", 478 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", 479 | "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", 480 | "dev": true, 481 | "requires": { 482 | "@babel/helper-plugin-utils": "^7.0.0" 483 | } 484 | }, 485 | "@babel/plugin-transform-destructuring": { 486 | "version": "7.5.0", 487 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", 488 | "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", 489 | "dev": true, 490 | "requires": { 491 | "@babel/helper-plugin-utils": "^7.0.0" 492 | } 493 | }, 494 | "@babel/plugin-transform-dotall-regex": { 495 | "version": "7.4.4", 496 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", 497 | "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", 498 | "dev": true, 499 | "requires": { 500 | "@babel/helper-plugin-utils": "^7.0.0", 501 | "@babel/helper-regex": "^7.4.4", 502 | "regexpu-core": "^4.5.4" 503 | } 504 | }, 505 | "@babel/plugin-transform-duplicate-keys": { 506 | "version": "7.5.0", 507 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", 508 | "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", 509 | "dev": true, 510 | "requires": { 511 | "@babel/helper-plugin-utils": "^7.0.0" 512 | } 513 | }, 514 | "@babel/plugin-transform-exponentiation-operator": { 515 | "version": "7.2.0", 516 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", 517 | "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", 518 | "dev": true, 519 | "requires": { 520 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", 521 | "@babel/helper-plugin-utils": "^7.0.0" 522 | } 523 | }, 524 | "@babel/plugin-transform-for-of": { 525 | "version": "7.4.4", 526 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", 527 | "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", 528 | "dev": true, 529 | "requires": { 530 | "@babel/helper-plugin-utils": "^7.0.0" 531 | } 532 | }, 533 | "@babel/plugin-transform-function-name": { 534 | "version": "7.4.4", 535 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", 536 | "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", 537 | "dev": true, 538 | "requires": { 539 | "@babel/helper-function-name": "^7.1.0", 540 | "@babel/helper-plugin-utils": "^7.0.0" 541 | } 542 | }, 543 | "@babel/plugin-transform-literals": { 544 | "version": "7.2.0", 545 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", 546 | "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", 547 | "dev": true, 548 | "requires": { 549 | "@babel/helper-plugin-utils": "^7.0.0" 550 | } 551 | }, 552 | "@babel/plugin-transform-member-expression-literals": { 553 | "version": "7.2.0", 554 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", 555 | "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", 556 | "dev": true, 557 | "requires": { 558 | "@babel/helper-plugin-utils": "^7.0.0" 559 | } 560 | }, 561 | "@babel/plugin-transform-modules-amd": { 562 | "version": "7.5.0", 563 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", 564 | "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", 565 | "dev": true, 566 | "requires": { 567 | "@babel/helper-module-transforms": "^7.1.0", 568 | "@babel/helper-plugin-utils": "^7.0.0", 569 | "babel-plugin-dynamic-import-node": "^2.3.0" 570 | } 571 | }, 572 | "@babel/plugin-transform-modules-commonjs": { 573 | "version": "7.5.0", 574 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", 575 | "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", 576 | "dev": true, 577 | "requires": { 578 | "@babel/helper-module-transforms": "^7.4.4", 579 | "@babel/helper-plugin-utils": "^7.0.0", 580 | "@babel/helper-simple-access": "^7.1.0", 581 | "babel-plugin-dynamic-import-node": "^2.3.0" 582 | } 583 | }, 584 | "@babel/plugin-transform-modules-systemjs": { 585 | "version": "7.5.0", 586 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", 587 | "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", 588 | "dev": true, 589 | "requires": { 590 | "@babel/helper-hoist-variables": "^7.4.4", 591 | "@babel/helper-plugin-utils": "^7.0.0", 592 | "babel-plugin-dynamic-import-node": "^2.3.0" 593 | } 594 | }, 595 | "@babel/plugin-transform-modules-umd": { 596 | "version": "7.2.0", 597 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", 598 | "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", 599 | "dev": true, 600 | "requires": { 601 | "@babel/helper-module-transforms": "^7.1.0", 602 | "@babel/helper-plugin-utils": "^7.0.0" 603 | } 604 | }, 605 | "@babel/plugin-transform-named-capturing-groups-regex": { 606 | "version": "7.4.5", 607 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", 608 | "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", 609 | "dev": true, 610 | "requires": { 611 | "regexp-tree": "^0.1.6" 612 | } 613 | }, 614 | "@babel/plugin-transform-new-target": { 615 | "version": "7.4.4", 616 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", 617 | "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", 618 | "dev": true, 619 | "requires": { 620 | "@babel/helper-plugin-utils": "^7.0.0" 621 | } 622 | }, 623 | "@babel/plugin-transform-object-super": { 624 | "version": "7.5.5", 625 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", 626 | "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", 627 | "dev": true, 628 | "requires": { 629 | "@babel/helper-plugin-utils": "^7.0.0", 630 | "@babel/helper-replace-supers": "^7.5.5" 631 | } 632 | }, 633 | "@babel/plugin-transform-parameters": { 634 | "version": "7.4.4", 635 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", 636 | "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", 637 | "dev": true, 638 | "requires": { 639 | "@babel/helper-call-delegate": "^7.4.4", 640 | "@babel/helper-get-function-arity": "^7.0.0", 641 | "@babel/helper-plugin-utils": "^7.0.0" 642 | } 643 | }, 644 | "@babel/plugin-transform-property-literals": { 645 | "version": "7.2.0", 646 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", 647 | "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", 648 | "dev": true, 649 | "requires": { 650 | "@babel/helper-plugin-utils": "^7.0.0" 651 | } 652 | }, 653 | "@babel/plugin-transform-regenerator": { 654 | "version": "7.4.5", 655 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", 656 | "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", 657 | "dev": true, 658 | "requires": { 659 | "regenerator-transform": "^0.14.0" 660 | } 661 | }, 662 | "@babel/plugin-transform-reserved-words": { 663 | "version": "7.2.0", 664 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", 665 | "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", 666 | "dev": true, 667 | "requires": { 668 | "@babel/helper-plugin-utils": "^7.0.0" 669 | } 670 | }, 671 | "@babel/plugin-transform-shorthand-properties": { 672 | "version": "7.2.0", 673 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", 674 | "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", 675 | "dev": true, 676 | "requires": { 677 | "@babel/helper-plugin-utils": "^7.0.0" 678 | } 679 | }, 680 | "@babel/plugin-transform-spread": { 681 | "version": "7.2.2", 682 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", 683 | "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", 684 | "dev": true, 685 | "requires": { 686 | "@babel/helper-plugin-utils": "^7.0.0" 687 | } 688 | }, 689 | "@babel/plugin-transform-sticky-regex": { 690 | "version": "7.2.0", 691 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", 692 | "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", 693 | "dev": true, 694 | "requires": { 695 | "@babel/helper-plugin-utils": "^7.0.0", 696 | "@babel/helper-regex": "^7.0.0" 697 | } 698 | }, 699 | "@babel/plugin-transform-template-literals": { 700 | "version": "7.4.4", 701 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", 702 | "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", 703 | "dev": true, 704 | "requires": { 705 | "@babel/helper-annotate-as-pure": "^7.0.0", 706 | "@babel/helper-plugin-utils": "^7.0.0" 707 | } 708 | }, 709 | "@babel/plugin-transform-typeof-symbol": { 710 | "version": "7.2.0", 711 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", 712 | "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", 713 | "dev": true, 714 | "requires": { 715 | "@babel/helper-plugin-utils": "^7.0.0" 716 | } 717 | }, 718 | "@babel/plugin-transform-unicode-regex": { 719 | "version": "7.4.4", 720 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", 721 | "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", 722 | "dev": true, 723 | "requires": { 724 | "@babel/helper-plugin-utils": "^7.0.0", 725 | "@babel/helper-regex": "^7.4.4", 726 | "regexpu-core": "^4.5.4" 727 | } 728 | }, 729 | "@babel/polyfill": { 730 | "version": "7.4.4", 731 | "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", 732 | "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", 733 | "dev": true, 734 | "requires": { 735 | "core-js": "^2.6.5", 736 | "regenerator-runtime": "^0.13.2" 737 | } 738 | }, 739 | "@babel/preset-env": { 740 | "version": "7.5.5", 741 | "dev": true, 742 | "requires": { 743 | "@babel/helper-module-imports": "^7.0.0", 744 | "@babel/helper-plugin-utils": "^7.0.0", 745 | "@babel/plugin-proposal-async-generator-functions": "^7.2.0", 746 | "@babel/plugin-proposal-dynamic-import": "^7.5.0", 747 | "@babel/plugin-proposal-json-strings": "^7.2.0", 748 | "@babel/plugin-proposal-object-rest-spread": "^7.5.5", 749 | "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", 750 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 751 | "@babel/plugin-syntax-async-generators": "^7.2.0", 752 | "@babel/plugin-syntax-dynamic-import": "^7.2.0", 753 | "@babel/plugin-syntax-json-strings": "^7.2.0", 754 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0", 755 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", 756 | "@babel/plugin-transform-arrow-functions": "^7.2.0", 757 | "@babel/plugin-transform-async-to-generator": "^7.5.0", 758 | "@babel/plugin-transform-block-scoped-functions": "^7.2.0", 759 | "@babel/plugin-transform-block-scoping": "^7.5.5", 760 | "@babel/plugin-transform-classes": "^7.5.5", 761 | "@babel/plugin-transform-computed-properties": "^7.2.0", 762 | "@babel/plugin-transform-destructuring": "^7.5.0", 763 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 764 | "@babel/plugin-transform-duplicate-keys": "^7.5.0", 765 | "@babel/plugin-transform-exponentiation-operator": "^7.2.0", 766 | "@babel/plugin-transform-for-of": "^7.4.4", 767 | "@babel/plugin-transform-function-name": "^7.4.4", 768 | "@babel/plugin-transform-literals": "^7.2.0", 769 | "@babel/plugin-transform-member-expression-literals": "^7.2.0", 770 | "@babel/plugin-transform-modules-amd": "^7.5.0", 771 | "@babel/plugin-transform-modules-commonjs": "^7.5.0", 772 | "@babel/plugin-transform-modules-systemjs": "^7.5.0", 773 | "@babel/plugin-transform-modules-umd": "^7.2.0", 774 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", 775 | "@babel/plugin-transform-new-target": "^7.4.4", 776 | "@babel/plugin-transform-object-super": "^7.5.5", 777 | "@babel/plugin-transform-parameters": "^7.4.4", 778 | "@babel/plugin-transform-property-literals": "^7.2.0", 779 | "@babel/plugin-transform-regenerator": "^7.4.5", 780 | "@babel/plugin-transform-reserved-words": "^7.2.0", 781 | "@babel/plugin-transform-shorthand-properties": "^7.2.0", 782 | "@babel/plugin-transform-spread": "^7.2.0", 783 | "@babel/plugin-transform-sticky-regex": "^7.2.0", 784 | "@babel/plugin-transform-template-literals": "^7.4.4", 785 | "@babel/plugin-transform-typeof-symbol": "^7.2.0", 786 | "@babel/plugin-transform-unicode-regex": "^7.4.4", 787 | "@babel/types": "^7.5.5", 788 | "browserslist": "^4.6.0", 789 | "core-js-compat": "^3.1.1", 790 | "invariant": "^2.2.2", 791 | "js-levenshtein": "^1.1.3", 792 | "semver": "^5.5.0" 793 | } 794 | }, 795 | "@babel/register": { 796 | "version": "7.5.5", 797 | "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz", 798 | "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==", 799 | "dev": true, 800 | "requires": { 801 | "core-js": "^3.0.0", 802 | "find-cache-dir": "^2.0.0", 803 | "lodash": "^4.17.13", 804 | "mkdirp": "^0.5.1", 805 | "pirates": "^4.0.0", 806 | "source-map-support": "^0.5.9" 807 | }, 808 | "dependencies": { 809 | "core-js": { 810 | "version": "3.1.4", 811 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", 812 | "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", 813 | "dev": true 814 | } 815 | } 816 | }, 817 | "@babel/template": { 818 | "version": "7.4.4", 819 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", 820 | "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", 821 | "dev": true, 822 | "requires": { 823 | "@babel/code-frame": "^7.0.0", 824 | "@babel/parser": "^7.4.4", 825 | "@babel/types": "^7.4.4" 826 | } 827 | }, 828 | "@babel/traverse": { 829 | "version": "7.5.5", 830 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", 831 | "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", 832 | "dev": true, 833 | "requires": { 834 | "@babel/code-frame": "^7.5.5", 835 | "@babel/generator": "^7.5.5", 836 | "@babel/helper-function-name": "^7.1.0", 837 | "@babel/helper-split-export-declaration": "^7.4.4", 838 | "@babel/parser": "^7.5.5", 839 | "@babel/types": "^7.5.5", 840 | "debug": "^4.1.0", 841 | "globals": "^11.1.0", 842 | "lodash": "^4.17.13" 843 | }, 844 | "dependencies": { 845 | "debug": { 846 | "version": "4.1.1", 847 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 848 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 849 | "dev": true, 850 | "requires": { 851 | "ms": "^2.1.1" 852 | } 853 | }, 854 | "ms": { 855 | "version": "2.1.2", 856 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 857 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 858 | "dev": true 859 | } 860 | } 861 | }, 862 | "@babel/types": { 863 | "version": "7.5.5", 864 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", 865 | "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", 866 | "dev": true, 867 | "requires": { 868 | "esutils": "^2.0.2", 869 | "lodash": "^4.17.13", 870 | "to-fast-properties": "^2.0.0" 871 | } 872 | }, 873 | "ansi-styles": { 874 | "version": "3.2.1", 875 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 876 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 877 | "requires": { 878 | "color-convert": "^1.9.0" 879 | } 880 | }, 881 | "anymatch": { 882 | "version": "2.0.0", 883 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", 884 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", 885 | "dev": true, 886 | "optional": true, 887 | "requires": { 888 | "micromatch": "^3.1.4", 889 | "normalize-path": "^2.1.1" 890 | }, 891 | "dependencies": { 892 | "normalize-path": { 893 | "version": "2.1.1", 894 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 895 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 896 | "dev": true, 897 | "optional": true, 898 | "requires": { 899 | "remove-trailing-separator": "^1.0.1" 900 | } 901 | } 902 | } 903 | }, 904 | "arr-diff": { 905 | "version": "4.0.0", 906 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 907 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 908 | "dev": true, 909 | "optional": true 910 | }, 911 | "arr-flatten": { 912 | "version": "1.1.0", 913 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 914 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 915 | "dev": true, 916 | "optional": true 917 | }, 918 | "arr-union": { 919 | "version": "3.1.0", 920 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 921 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 922 | "dev": true, 923 | "optional": true 924 | }, 925 | "array-unique": { 926 | "version": "0.3.2", 927 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 928 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 929 | "dev": true, 930 | "optional": true 931 | }, 932 | "assign-symbols": { 933 | "version": "1.0.0", 934 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 935 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 936 | "dev": true, 937 | "optional": true 938 | }, 939 | "async": { 940 | "version": "2.6.2", 941 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", 942 | "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", 943 | "requires": { 944 | "lodash": "^4.17.11" 945 | } 946 | }, 947 | "async-each": { 948 | "version": "1.0.3", 949 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", 950 | "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", 951 | "dev": true, 952 | "optional": true 953 | }, 954 | "atob": { 955 | "version": "2.1.2", 956 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 957 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 958 | "dev": true, 959 | "optional": true 960 | }, 961 | "babel-plugin-dynamic-import-node": { 962 | "version": "2.3.0", 963 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", 964 | "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", 965 | "dev": true, 966 | "requires": { 967 | "object.assign": "^4.1.0" 968 | } 969 | }, 970 | "balanced-match": { 971 | "version": "1.0.0", 972 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 973 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 974 | }, 975 | "base": { 976 | "version": "0.11.2", 977 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 978 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 979 | "dev": true, 980 | "optional": true, 981 | "requires": { 982 | "cache-base": "^1.0.1", 983 | "class-utils": "^0.3.5", 984 | "component-emitter": "^1.2.1", 985 | "define-property": "^1.0.0", 986 | "isobject": "^3.0.1", 987 | "mixin-deep": "^1.2.0", 988 | "pascalcase": "^0.1.1" 989 | }, 990 | "dependencies": { 991 | "define-property": { 992 | "version": "1.0.0", 993 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 994 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 995 | "dev": true, 996 | "optional": true, 997 | "requires": { 998 | "is-descriptor": "^1.0.0" 999 | } 1000 | }, 1001 | "is-accessor-descriptor": { 1002 | "version": "1.0.0", 1003 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1004 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1005 | "dev": true, 1006 | "optional": true, 1007 | "requires": { 1008 | "kind-of": "^6.0.0" 1009 | } 1010 | }, 1011 | "is-data-descriptor": { 1012 | "version": "1.0.0", 1013 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1014 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1015 | "dev": true, 1016 | "optional": true, 1017 | "requires": { 1018 | "kind-of": "^6.0.0" 1019 | } 1020 | }, 1021 | "is-descriptor": { 1022 | "version": "1.0.2", 1023 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1024 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1025 | "dev": true, 1026 | "optional": true, 1027 | "requires": { 1028 | "is-accessor-descriptor": "^1.0.0", 1029 | "is-data-descriptor": "^1.0.0", 1030 | "kind-of": "^6.0.2" 1031 | } 1032 | } 1033 | } 1034 | }, 1035 | "binary-extensions": { 1036 | "version": "1.13.1", 1037 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", 1038 | "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", 1039 | "dev": true, 1040 | "optional": true 1041 | }, 1042 | "bluebird": { 1043 | "version": "3.5.1", 1044 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 1045 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 1046 | }, 1047 | "brace-expansion": { 1048 | "version": "1.1.11", 1049 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1050 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1051 | "requires": { 1052 | "balanced-match": "^1.0.0", 1053 | "concat-map": "0.0.1" 1054 | } 1055 | }, 1056 | "braces": { 1057 | "version": "2.3.2", 1058 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 1059 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 1060 | "dev": true, 1061 | "optional": true, 1062 | "requires": { 1063 | "arr-flatten": "^1.1.0", 1064 | "array-unique": "^0.3.2", 1065 | "extend-shallow": "^2.0.1", 1066 | "fill-range": "^4.0.0", 1067 | "isobject": "^3.0.1", 1068 | "repeat-element": "^1.1.2", 1069 | "snapdragon": "^0.8.1", 1070 | "snapdragon-node": "^2.0.1", 1071 | "split-string": "^3.0.2", 1072 | "to-regex": "^3.0.1" 1073 | }, 1074 | "dependencies": { 1075 | "extend-shallow": { 1076 | "version": "2.0.1", 1077 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1078 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1079 | "dev": true, 1080 | "optional": true, 1081 | "requires": { 1082 | "is-extendable": "^0.1.0" 1083 | } 1084 | } 1085 | } 1086 | }, 1087 | "browserslist": { 1088 | "version": "4.6.6", 1089 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", 1090 | "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", 1091 | "dev": true, 1092 | "requires": { 1093 | "caniuse-lite": "^1.0.30000984", 1094 | "electron-to-chromium": "^1.3.191", 1095 | "node-releases": "^1.1.25" 1096 | } 1097 | }, 1098 | "bson": { 1099 | "version": "1.1.1", 1100 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", 1101 | "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" 1102 | }, 1103 | "buffer-from": { 1104 | "version": "1.1.1", 1105 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1106 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1107 | "dev": true 1108 | }, 1109 | "bytes": { 1110 | "version": "3.1.0", 1111 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 1112 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 1113 | }, 1114 | "cache-base": { 1115 | "version": "1.0.1", 1116 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 1117 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 1118 | "dev": true, 1119 | "optional": true, 1120 | "requires": { 1121 | "collection-visit": "^1.0.0", 1122 | "component-emitter": "^1.2.1", 1123 | "get-value": "^2.0.6", 1124 | "has-value": "^1.0.0", 1125 | "isobject": "^3.0.1", 1126 | "set-value": "^2.0.0", 1127 | "to-object-path": "^0.3.0", 1128 | "union-value": "^1.0.0", 1129 | "unset-value": "^1.0.0" 1130 | } 1131 | }, 1132 | "caniuse-lite": { 1133 | "version": "1.0.30000986", 1134 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000986.tgz", 1135 | "integrity": "sha512-pM+LnkoAX0+QnIH3tpW5EnkmfpEoqOD8FAcoBvsl3Xh6DXkgctiCxeCbXphP/k3XJtJzm+zOAJbi6U6IVkpWZQ==", 1136 | "dev": true 1137 | }, 1138 | "chalk": { 1139 | "version": "2.4.2", 1140 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1141 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1142 | "requires": { 1143 | "ansi-styles": "^3.2.1", 1144 | "escape-string-regexp": "^1.0.5", 1145 | "supports-color": "^5.3.0" 1146 | } 1147 | }, 1148 | "chokidar": { 1149 | "version": "2.1.6", 1150 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", 1151 | "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", 1152 | "dev": true, 1153 | "optional": true, 1154 | "requires": { 1155 | "anymatch": "^2.0.0", 1156 | "async-each": "^1.0.1", 1157 | "braces": "^2.3.2", 1158 | "fsevents": "^1.2.7", 1159 | "glob-parent": "^3.1.0", 1160 | "inherits": "^2.0.3", 1161 | "is-binary-path": "^1.0.0", 1162 | "is-glob": "^4.0.0", 1163 | "normalize-path": "^3.0.0", 1164 | "path-is-absolute": "^1.0.0", 1165 | "readdirp": "^2.2.1", 1166 | "upath": "^1.1.1" 1167 | } 1168 | }, 1169 | "class-utils": { 1170 | "version": "0.3.6", 1171 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 1172 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 1173 | "dev": true, 1174 | "optional": true, 1175 | "requires": { 1176 | "arr-union": "^3.1.0", 1177 | "define-property": "^0.2.5", 1178 | "isobject": "^3.0.0", 1179 | "static-extend": "^0.1.1" 1180 | }, 1181 | "dependencies": { 1182 | "define-property": { 1183 | "version": "0.2.5", 1184 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1185 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1186 | "dev": true, 1187 | "optional": true, 1188 | "requires": { 1189 | "is-descriptor": "^0.1.0" 1190 | } 1191 | } 1192 | } 1193 | }, 1194 | "collection-visit": { 1195 | "version": "1.0.0", 1196 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 1197 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 1198 | "dev": true, 1199 | "optional": true, 1200 | "requires": { 1201 | "map-visit": "^1.0.0", 1202 | "object-visit": "^1.0.0" 1203 | } 1204 | }, 1205 | "color-convert": { 1206 | "version": "1.9.3", 1207 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1208 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1209 | "requires": { 1210 | "color-name": "1.1.3" 1211 | } 1212 | }, 1213 | "color-name": { 1214 | "version": "1.1.3", 1215 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1216 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1217 | }, 1218 | "commander": { 1219 | "version": "2.20.0", 1220 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 1221 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 1222 | "dev": true 1223 | }, 1224 | "commondir": { 1225 | "version": "1.0.1", 1226 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1227 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 1228 | "dev": true 1229 | }, 1230 | "component-emitter": { 1231 | "version": "1.3.0", 1232 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 1233 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", 1234 | "dev": true, 1235 | "optional": true 1236 | }, 1237 | "concat-map": { 1238 | "version": "0.0.1", 1239 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1240 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1241 | }, 1242 | "convert-source-map": { 1243 | "version": "1.6.0", 1244 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 1245 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 1246 | "dev": true, 1247 | "requires": { 1248 | "safe-buffer": "~5.1.1" 1249 | } 1250 | }, 1251 | "copy-descriptor": { 1252 | "version": "0.1.1", 1253 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 1254 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 1255 | "dev": true, 1256 | "optional": true 1257 | }, 1258 | "core-js": { 1259 | "version": "2.6.9", 1260 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", 1261 | "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", 1262 | "dev": true 1263 | }, 1264 | "core-js-compat": { 1265 | "version": "3.1.4", 1266 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", 1267 | "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", 1268 | "dev": true, 1269 | "requires": { 1270 | "browserslist": "^4.6.2", 1271 | "core-js-pure": "3.1.4", 1272 | "semver": "^6.1.1" 1273 | }, 1274 | "dependencies": { 1275 | "semver": { 1276 | "version": "6.3.0", 1277 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1278 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1279 | "dev": true 1280 | } 1281 | } 1282 | }, 1283 | "core-js-pure": { 1284 | "version": "3.1.4", 1285 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", 1286 | "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==", 1287 | "dev": true 1288 | }, 1289 | "core-util-is": { 1290 | "version": "1.0.2", 1291 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1292 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1293 | "dev": true, 1294 | "optional": true 1295 | }, 1296 | "debug": { 1297 | "version": "2.6.9", 1298 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1299 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1300 | "dev": true, 1301 | "optional": true, 1302 | "requires": { 1303 | "ms": "2.0.0" 1304 | } 1305 | }, 1306 | "decode-uri-component": { 1307 | "version": "0.2.0", 1308 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 1309 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 1310 | "dev": true, 1311 | "optional": true 1312 | }, 1313 | "define-properties": { 1314 | "version": "1.1.3", 1315 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1316 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1317 | "dev": true, 1318 | "requires": { 1319 | "object-keys": "^1.0.12" 1320 | } 1321 | }, 1322 | "define-property": { 1323 | "version": "2.0.2", 1324 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 1325 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 1326 | "dev": true, 1327 | "optional": true, 1328 | "requires": { 1329 | "is-descriptor": "^1.0.2", 1330 | "isobject": "^3.0.1" 1331 | }, 1332 | "dependencies": { 1333 | "is-accessor-descriptor": { 1334 | "version": "1.0.0", 1335 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1336 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1337 | "dev": true, 1338 | "optional": true, 1339 | "requires": { 1340 | "kind-of": "^6.0.0" 1341 | } 1342 | }, 1343 | "is-data-descriptor": { 1344 | "version": "1.0.0", 1345 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1346 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1347 | "dev": true, 1348 | "optional": true, 1349 | "requires": { 1350 | "kind-of": "^6.0.0" 1351 | } 1352 | }, 1353 | "is-descriptor": { 1354 | "version": "1.0.2", 1355 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1356 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1357 | "dev": true, 1358 | "optional": true, 1359 | "requires": { 1360 | "is-accessor-descriptor": "^1.0.0", 1361 | "is-data-descriptor": "^1.0.0", 1362 | "kind-of": "^6.0.2" 1363 | } 1364 | } 1365 | } 1366 | }, 1367 | "electron-to-chromium": { 1368 | "version": "1.3.201", 1369 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.201.tgz", 1370 | "integrity": "sha512-aCTPIfY1Jvuam5b6vuWRjt1F8i4kY7zX0Qtpu5SNd6l1zjuxU9fDNpbM4o6+oJsra+TMD2o7D20GnkSIgpTr9w==", 1371 | "dev": true 1372 | }, 1373 | "es-abstract": { 1374 | "version": "1.13.0", 1375 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 1376 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 1377 | "dev": true, 1378 | "requires": { 1379 | "es-to-primitive": "^1.2.0", 1380 | "function-bind": "^1.1.1", 1381 | "has": "^1.0.3", 1382 | "is-callable": "^1.1.4", 1383 | "is-regex": "^1.0.4", 1384 | "object-keys": "^1.0.12" 1385 | } 1386 | }, 1387 | "es-to-primitive": { 1388 | "version": "1.2.0", 1389 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 1390 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 1391 | "dev": true, 1392 | "requires": { 1393 | "is-callable": "^1.1.4", 1394 | "is-date-object": "^1.0.1", 1395 | "is-symbol": "^1.0.2" 1396 | } 1397 | }, 1398 | "escape-string-regexp": { 1399 | "version": "1.0.5", 1400 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1401 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1402 | }, 1403 | "esutils": { 1404 | "version": "2.0.2", 1405 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1406 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1407 | "dev": true 1408 | }, 1409 | "expand-brackets": { 1410 | "version": "2.1.4", 1411 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 1412 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 1413 | "dev": true, 1414 | "optional": true, 1415 | "requires": { 1416 | "debug": "^2.3.3", 1417 | "define-property": "^0.2.5", 1418 | "extend-shallow": "^2.0.1", 1419 | "posix-character-classes": "^0.1.0", 1420 | "regex-not": "^1.0.0", 1421 | "snapdragon": "^0.8.1", 1422 | "to-regex": "^3.0.1" 1423 | }, 1424 | "dependencies": { 1425 | "define-property": { 1426 | "version": "0.2.5", 1427 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1428 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1429 | "dev": true, 1430 | "optional": true, 1431 | "requires": { 1432 | "is-descriptor": "^0.1.0" 1433 | } 1434 | }, 1435 | "extend-shallow": { 1436 | "version": "2.0.1", 1437 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1438 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1439 | "dev": true, 1440 | "optional": true, 1441 | "requires": { 1442 | "is-extendable": "^0.1.0" 1443 | } 1444 | } 1445 | } 1446 | }, 1447 | "extend-shallow": { 1448 | "version": "3.0.2", 1449 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 1450 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 1451 | "dev": true, 1452 | "optional": true, 1453 | "requires": { 1454 | "assign-symbols": "^1.0.0", 1455 | "is-extendable": "^1.0.1" 1456 | }, 1457 | "dependencies": { 1458 | "is-extendable": { 1459 | "version": "1.0.1", 1460 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1461 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1462 | "dev": true, 1463 | "optional": true, 1464 | "requires": { 1465 | "is-plain-object": "^2.0.4" 1466 | } 1467 | } 1468 | } 1469 | }, 1470 | "extglob": { 1471 | "version": "2.0.4", 1472 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 1473 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 1474 | "dev": true, 1475 | "optional": true, 1476 | "requires": { 1477 | "array-unique": "^0.3.2", 1478 | "define-property": "^1.0.0", 1479 | "expand-brackets": "^2.1.4", 1480 | "extend-shallow": "^2.0.1", 1481 | "fragment-cache": "^0.2.1", 1482 | "regex-not": "^1.0.0", 1483 | "snapdragon": "^0.8.1", 1484 | "to-regex": "^3.0.1" 1485 | }, 1486 | "dependencies": { 1487 | "define-property": { 1488 | "version": "1.0.0", 1489 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1490 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1491 | "dev": true, 1492 | "optional": true, 1493 | "requires": { 1494 | "is-descriptor": "^1.0.0" 1495 | } 1496 | }, 1497 | "extend-shallow": { 1498 | "version": "2.0.1", 1499 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1500 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1501 | "dev": true, 1502 | "optional": true, 1503 | "requires": { 1504 | "is-extendable": "^0.1.0" 1505 | } 1506 | }, 1507 | "is-accessor-descriptor": { 1508 | "version": "1.0.0", 1509 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1510 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1511 | "dev": true, 1512 | "optional": true, 1513 | "requires": { 1514 | "kind-of": "^6.0.0" 1515 | } 1516 | }, 1517 | "is-data-descriptor": { 1518 | "version": "1.0.0", 1519 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1520 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1521 | "dev": true, 1522 | "optional": true, 1523 | "requires": { 1524 | "kind-of": "^6.0.0" 1525 | } 1526 | }, 1527 | "is-descriptor": { 1528 | "version": "1.0.2", 1529 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1530 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1531 | "dev": true, 1532 | "optional": true, 1533 | "requires": { 1534 | "is-accessor-descriptor": "^1.0.0", 1535 | "is-data-descriptor": "^1.0.0", 1536 | "kind-of": "^6.0.2" 1537 | } 1538 | } 1539 | } 1540 | }, 1541 | "fill-range": { 1542 | "version": "4.0.0", 1543 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 1544 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 1545 | "dev": true, 1546 | "optional": true, 1547 | "requires": { 1548 | "extend-shallow": "^2.0.1", 1549 | "is-number": "^3.0.0", 1550 | "repeat-string": "^1.6.1", 1551 | "to-regex-range": "^2.1.0" 1552 | }, 1553 | "dependencies": { 1554 | "extend-shallow": { 1555 | "version": "2.0.1", 1556 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1557 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1558 | "dev": true, 1559 | "optional": true, 1560 | "requires": { 1561 | "is-extendable": "^0.1.0" 1562 | } 1563 | } 1564 | } 1565 | }, 1566 | "find-cache-dir": { 1567 | "version": "2.1.0", 1568 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", 1569 | "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", 1570 | "dev": true, 1571 | "requires": { 1572 | "commondir": "^1.0.1", 1573 | "make-dir": "^2.0.0", 1574 | "pkg-dir": "^3.0.0" 1575 | } 1576 | }, 1577 | "find-up": { 1578 | "version": "3.0.0", 1579 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1580 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1581 | "dev": true, 1582 | "requires": { 1583 | "locate-path": "^3.0.0" 1584 | } 1585 | }, 1586 | "for-in": { 1587 | "version": "1.0.2", 1588 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1589 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1590 | "dev": true, 1591 | "optional": true 1592 | }, 1593 | "fragment-cache": { 1594 | "version": "0.2.1", 1595 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 1596 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 1597 | "dev": true, 1598 | "optional": true, 1599 | "requires": { 1600 | "map-cache": "^0.2.2" 1601 | } 1602 | }, 1603 | "fs-readdir-recursive": { 1604 | "version": "1.1.0", 1605 | "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", 1606 | "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", 1607 | "dev": true 1608 | }, 1609 | "fs.realpath": { 1610 | "version": "1.0.0", 1611 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1612 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1613 | "dev": true 1614 | }, 1615 | "fsevents": { 1616 | "version": "1.2.9", 1617 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", 1618 | "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", 1619 | "dev": true, 1620 | "optional": true, 1621 | "requires": { 1622 | "nan": "^2.12.1", 1623 | "node-pre-gyp": "^0.12.0" 1624 | }, 1625 | "dependencies": { 1626 | "abbrev": { 1627 | "version": "1.1.1", 1628 | "bundled": true, 1629 | "dev": true, 1630 | "optional": true 1631 | }, 1632 | "ansi-regex": { 1633 | "version": "2.1.1", 1634 | "bundled": true, 1635 | "dev": true, 1636 | "optional": true 1637 | }, 1638 | "aproba": { 1639 | "version": "1.2.0", 1640 | "bundled": true, 1641 | "dev": true, 1642 | "optional": true 1643 | }, 1644 | "are-we-there-yet": { 1645 | "version": "1.1.5", 1646 | "bundled": true, 1647 | "dev": true, 1648 | "optional": true, 1649 | "requires": { 1650 | "delegates": "^1.0.0", 1651 | "readable-stream": "^2.0.6" 1652 | } 1653 | }, 1654 | "balanced-match": { 1655 | "version": "1.0.0", 1656 | "bundled": true, 1657 | "dev": true, 1658 | "optional": true 1659 | }, 1660 | "brace-expansion": { 1661 | "version": "1.1.11", 1662 | "bundled": true, 1663 | "dev": true, 1664 | "optional": true, 1665 | "requires": { 1666 | "balanced-match": "^1.0.0", 1667 | "concat-map": "0.0.1" 1668 | } 1669 | }, 1670 | "chownr": { 1671 | "version": "1.1.1", 1672 | "bundled": true, 1673 | "dev": true, 1674 | "optional": true 1675 | }, 1676 | "code-point-at": { 1677 | "version": "1.1.0", 1678 | "bundled": true, 1679 | "dev": true, 1680 | "optional": true 1681 | }, 1682 | "concat-map": { 1683 | "version": "0.0.1", 1684 | "bundled": true, 1685 | "dev": true, 1686 | "optional": true 1687 | }, 1688 | "console-control-strings": { 1689 | "version": "1.1.0", 1690 | "bundled": true, 1691 | "dev": true, 1692 | "optional": true 1693 | }, 1694 | "core-util-is": { 1695 | "version": "1.0.2", 1696 | "bundled": true, 1697 | "dev": true, 1698 | "optional": true 1699 | }, 1700 | "debug": { 1701 | "version": "4.1.1", 1702 | "bundled": true, 1703 | "dev": true, 1704 | "optional": true, 1705 | "requires": { 1706 | "ms": "^2.1.1" 1707 | } 1708 | }, 1709 | "deep-extend": { 1710 | "version": "0.6.0", 1711 | "bundled": true, 1712 | "dev": true, 1713 | "optional": true 1714 | }, 1715 | "delegates": { 1716 | "version": "1.0.0", 1717 | "bundled": true, 1718 | "dev": true, 1719 | "optional": true 1720 | }, 1721 | "detect-libc": { 1722 | "version": "1.0.3", 1723 | "bundled": true, 1724 | "dev": true, 1725 | "optional": true 1726 | }, 1727 | "fs-minipass": { 1728 | "version": "1.2.5", 1729 | "bundled": true, 1730 | "dev": true, 1731 | "optional": true, 1732 | "requires": { 1733 | "minipass": "^2.2.1" 1734 | } 1735 | }, 1736 | "fs.realpath": { 1737 | "version": "1.0.0", 1738 | "bundled": true, 1739 | "dev": true, 1740 | "optional": true 1741 | }, 1742 | "gauge": { 1743 | "version": "2.7.4", 1744 | "bundled": true, 1745 | "dev": true, 1746 | "optional": true, 1747 | "requires": { 1748 | "aproba": "^1.0.3", 1749 | "console-control-strings": "^1.0.0", 1750 | "has-unicode": "^2.0.0", 1751 | "object-assign": "^4.1.0", 1752 | "signal-exit": "^3.0.0", 1753 | "string-width": "^1.0.1", 1754 | "strip-ansi": "^3.0.1", 1755 | "wide-align": "^1.1.0" 1756 | } 1757 | }, 1758 | "glob": { 1759 | "version": "7.1.3", 1760 | "bundled": true, 1761 | "dev": true, 1762 | "optional": true, 1763 | "requires": { 1764 | "fs.realpath": "^1.0.0", 1765 | "inflight": "^1.0.4", 1766 | "inherits": "2", 1767 | "minimatch": "^3.0.4", 1768 | "once": "^1.3.0", 1769 | "path-is-absolute": "^1.0.0" 1770 | } 1771 | }, 1772 | "has-unicode": { 1773 | "version": "2.0.1", 1774 | "bundled": true, 1775 | "dev": true, 1776 | "optional": true 1777 | }, 1778 | "iconv-lite": { 1779 | "version": "0.4.24", 1780 | "bundled": true, 1781 | "dev": true, 1782 | "optional": true, 1783 | "requires": { 1784 | "safer-buffer": ">= 2.1.2 < 3" 1785 | } 1786 | }, 1787 | "ignore-walk": { 1788 | "version": "3.0.1", 1789 | "bundled": true, 1790 | "dev": true, 1791 | "optional": true, 1792 | "requires": { 1793 | "minimatch": "^3.0.4" 1794 | } 1795 | }, 1796 | "inflight": { 1797 | "version": "1.0.6", 1798 | "bundled": true, 1799 | "dev": true, 1800 | "optional": true, 1801 | "requires": { 1802 | "once": "^1.3.0", 1803 | "wrappy": "1" 1804 | } 1805 | }, 1806 | "inherits": { 1807 | "version": "2.0.3", 1808 | "bundled": true, 1809 | "dev": true, 1810 | "optional": true 1811 | }, 1812 | "ini": { 1813 | "version": "1.3.5", 1814 | "bundled": true, 1815 | "dev": true, 1816 | "optional": true 1817 | }, 1818 | "is-fullwidth-code-point": { 1819 | "version": "1.0.0", 1820 | "bundled": true, 1821 | "dev": true, 1822 | "optional": true, 1823 | "requires": { 1824 | "number-is-nan": "^1.0.0" 1825 | } 1826 | }, 1827 | "isarray": { 1828 | "version": "1.0.0", 1829 | "bundled": true, 1830 | "dev": true, 1831 | "optional": true 1832 | }, 1833 | "minimatch": { 1834 | "version": "3.0.4", 1835 | "bundled": true, 1836 | "dev": true, 1837 | "optional": true, 1838 | "requires": { 1839 | "brace-expansion": "^1.1.7" 1840 | } 1841 | }, 1842 | "minimist": { 1843 | "version": "0.0.8", 1844 | "bundled": true, 1845 | "dev": true, 1846 | "optional": true 1847 | }, 1848 | "minipass": { 1849 | "version": "2.3.5", 1850 | "bundled": true, 1851 | "dev": true, 1852 | "optional": true, 1853 | "requires": { 1854 | "safe-buffer": "^5.1.2", 1855 | "yallist": "^3.0.0" 1856 | } 1857 | }, 1858 | "minizlib": { 1859 | "version": "1.2.1", 1860 | "bundled": true, 1861 | "dev": true, 1862 | "optional": true, 1863 | "requires": { 1864 | "minipass": "^2.2.1" 1865 | } 1866 | }, 1867 | "mkdirp": { 1868 | "version": "0.5.1", 1869 | "bundled": true, 1870 | "dev": true, 1871 | "optional": true, 1872 | "requires": { 1873 | "minimist": "0.0.8" 1874 | } 1875 | }, 1876 | "ms": { 1877 | "version": "2.1.1", 1878 | "bundled": true, 1879 | "dev": true, 1880 | "optional": true 1881 | }, 1882 | "needle": { 1883 | "version": "2.3.0", 1884 | "bundled": true, 1885 | "dev": true, 1886 | "optional": true, 1887 | "requires": { 1888 | "debug": "^4.1.0", 1889 | "iconv-lite": "^0.4.4", 1890 | "sax": "^1.2.4" 1891 | } 1892 | }, 1893 | "node-pre-gyp": { 1894 | "version": "0.12.0", 1895 | "bundled": true, 1896 | "dev": true, 1897 | "optional": true, 1898 | "requires": { 1899 | "detect-libc": "^1.0.2", 1900 | "mkdirp": "^0.5.1", 1901 | "needle": "^2.2.1", 1902 | "nopt": "^4.0.1", 1903 | "npm-packlist": "^1.1.6", 1904 | "npmlog": "^4.0.2", 1905 | "rc": "^1.2.7", 1906 | "rimraf": "^2.6.1", 1907 | "semver": "^5.3.0", 1908 | "tar": "^4" 1909 | } 1910 | }, 1911 | "nopt": { 1912 | "version": "4.0.1", 1913 | "bundled": true, 1914 | "dev": true, 1915 | "optional": true, 1916 | "requires": { 1917 | "abbrev": "1", 1918 | "osenv": "^0.1.4" 1919 | } 1920 | }, 1921 | "npm-bundled": { 1922 | "version": "1.0.6", 1923 | "bundled": true, 1924 | "dev": true, 1925 | "optional": true 1926 | }, 1927 | "npm-packlist": { 1928 | "version": "1.4.1", 1929 | "bundled": true, 1930 | "dev": true, 1931 | "optional": true, 1932 | "requires": { 1933 | "ignore-walk": "^3.0.1", 1934 | "npm-bundled": "^1.0.1" 1935 | } 1936 | }, 1937 | "npmlog": { 1938 | "version": "4.1.2", 1939 | "bundled": true, 1940 | "dev": true, 1941 | "optional": true, 1942 | "requires": { 1943 | "are-we-there-yet": "~1.1.2", 1944 | "console-control-strings": "~1.1.0", 1945 | "gauge": "~2.7.3", 1946 | "set-blocking": "~2.0.0" 1947 | } 1948 | }, 1949 | "number-is-nan": { 1950 | "version": "1.0.1", 1951 | "bundled": true, 1952 | "dev": true, 1953 | "optional": true 1954 | }, 1955 | "object-assign": { 1956 | "version": "4.1.1", 1957 | "bundled": true, 1958 | "dev": true, 1959 | "optional": true 1960 | }, 1961 | "once": { 1962 | "version": "1.4.0", 1963 | "bundled": true, 1964 | "dev": true, 1965 | "optional": true, 1966 | "requires": { 1967 | "wrappy": "1" 1968 | } 1969 | }, 1970 | "os-homedir": { 1971 | "version": "1.0.2", 1972 | "bundled": true, 1973 | "dev": true, 1974 | "optional": true 1975 | }, 1976 | "os-tmpdir": { 1977 | "version": "1.0.2", 1978 | "bundled": true, 1979 | "dev": true, 1980 | "optional": true 1981 | }, 1982 | "osenv": { 1983 | "version": "0.1.5", 1984 | "bundled": true, 1985 | "dev": true, 1986 | "optional": true, 1987 | "requires": { 1988 | "os-homedir": "^1.0.0", 1989 | "os-tmpdir": "^1.0.0" 1990 | } 1991 | }, 1992 | "path-is-absolute": { 1993 | "version": "1.0.1", 1994 | "bundled": true, 1995 | "dev": true, 1996 | "optional": true 1997 | }, 1998 | "process-nextick-args": { 1999 | "version": "2.0.0", 2000 | "bundled": true, 2001 | "dev": true, 2002 | "optional": true 2003 | }, 2004 | "rc": { 2005 | "version": "1.2.8", 2006 | "bundled": true, 2007 | "dev": true, 2008 | "optional": true, 2009 | "requires": { 2010 | "deep-extend": "^0.6.0", 2011 | "ini": "~1.3.0", 2012 | "minimist": "^1.2.0", 2013 | "strip-json-comments": "~2.0.1" 2014 | }, 2015 | "dependencies": { 2016 | "minimist": { 2017 | "version": "1.2.0", 2018 | "bundled": true, 2019 | "dev": true, 2020 | "optional": true 2021 | } 2022 | } 2023 | }, 2024 | "readable-stream": { 2025 | "version": "2.3.6", 2026 | "bundled": true, 2027 | "dev": true, 2028 | "optional": true, 2029 | "requires": { 2030 | "core-util-is": "~1.0.0", 2031 | "inherits": "~2.0.3", 2032 | "isarray": "~1.0.0", 2033 | "process-nextick-args": "~2.0.0", 2034 | "safe-buffer": "~5.1.1", 2035 | "string_decoder": "~1.1.1", 2036 | "util-deprecate": "~1.0.1" 2037 | } 2038 | }, 2039 | "rimraf": { 2040 | "version": "2.6.3", 2041 | "bundled": true, 2042 | "dev": true, 2043 | "optional": true, 2044 | "requires": { 2045 | "glob": "^7.1.3" 2046 | } 2047 | }, 2048 | "safe-buffer": { 2049 | "version": "5.1.2", 2050 | "bundled": true, 2051 | "dev": true, 2052 | "optional": true 2053 | }, 2054 | "safer-buffer": { 2055 | "version": "2.1.2", 2056 | "bundled": true, 2057 | "dev": true, 2058 | "optional": true 2059 | }, 2060 | "sax": { 2061 | "version": "1.2.4", 2062 | "bundled": true, 2063 | "dev": true, 2064 | "optional": true 2065 | }, 2066 | "semver": { 2067 | "version": "5.7.0", 2068 | "bundled": true, 2069 | "dev": true, 2070 | "optional": true 2071 | }, 2072 | "set-blocking": { 2073 | "version": "2.0.0", 2074 | "bundled": true, 2075 | "dev": true, 2076 | "optional": true 2077 | }, 2078 | "signal-exit": { 2079 | "version": "3.0.2", 2080 | "bundled": true, 2081 | "dev": true, 2082 | "optional": true 2083 | }, 2084 | "string-width": { 2085 | "version": "1.0.2", 2086 | "bundled": true, 2087 | "dev": true, 2088 | "optional": true, 2089 | "requires": { 2090 | "code-point-at": "^1.0.0", 2091 | "is-fullwidth-code-point": "^1.0.0", 2092 | "strip-ansi": "^3.0.0" 2093 | } 2094 | }, 2095 | "string_decoder": { 2096 | "version": "1.1.1", 2097 | "bundled": true, 2098 | "dev": true, 2099 | "optional": true, 2100 | "requires": { 2101 | "safe-buffer": "~5.1.0" 2102 | } 2103 | }, 2104 | "strip-ansi": { 2105 | "version": "3.0.1", 2106 | "bundled": true, 2107 | "dev": true, 2108 | "optional": true, 2109 | "requires": { 2110 | "ansi-regex": "^2.0.0" 2111 | } 2112 | }, 2113 | "strip-json-comments": { 2114 | "version": "2.0.1", 2115 | "bundled": true, 2116 | "dev": true, 2117 | "optional": true 2118 | }, 2119 | "tar": { 2120 | "version": "4.4.8", 2121 | "bundled": true, 2122 | "dev": true, 2123 | "optional": true, 2124 | "requires": { 2125 | "chownr": "^1.1.1", 2126 | "fs-minipass": "^1.2.5", 2127 | "minipass": "^2.3.4", 2128 | "minizlib": "^1.1.1", 2129 | "mkdirp": "^0.5.0", 2130 | "safe-buffer": "^5.1.2", 2131 | "yallist": "^3.0.2" 2132 | } 2133 | }, 2134 | "util-deprecate": { 2135 | "version": "1.0.2", 2136 | "bundled": true, 2137 | "dev": true, 2138 | "optional": true 2139 | }, 2140 | "wide-align": { 2141 | "version": "1.1.3", 2142 | "bundled": true, 2143 | "dev": true, 2144 | "optional": true, 2145 | "requires": { 2146 | "string-width": "^1.0.2 || 2" 2147 | } 2148 | }, 2149 | "wrappy": { 2150 | "version": "1.0.2", 2151 | "bundled": true, 2152 | "dev": true, 2153 | "optional": true 2154 | }, 2155 | "yallist": { 2156 | "version": "3.0.3", 2157 | "bundled": true, 2158 | "dev": true, 2159 | "optional": true 2160 | } 2161 | } 2162 | }, 2163 | "function-bind": { 2164 | "version": "1.1.1", 2165 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2166 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2167 | "dev": true 2168 | }, 2169 | "get-value": { 2170 | "version": "2.0.6", 2171 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 2172 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 2173 | "dev": true, 2174 | "optional": true 2175 | }, 2176 | "glob": { 2177 | "version": "7.1.4", 2178 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 2179 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 2180 | "dev": true, 2181 | "requires": { 2182 | "fs.realpath": "^1.0.0", 2183 | "inflight": "^1.0.4", 2184 | "inherits": "2", 2185 | "minimatch": "^3.0.4", 2186 | "once": "^1.3.0", 2187 | "path-is-absolute": "^1.0.0" 2188 | } 2189 | }, 2190 | "glob-parent": { 2191 | "version": "3.1.0", 2192 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 2193 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 2194 | "dev": true, 2195 | "optional": true, 2196 | "requires": { 2197 | "is-glob": "^3.1.0", 2198 | "path-dirname": "^1.0.0" 2199 | }, 2200 | "dependencies": { 2201 | "is-glob": { 2202 | "version": "3.1.0", 2203 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 2204 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 2205 | "dev": true, 2206 | "optional": true, 2207 | "requires": { 2208 | "is-extglob": "^2.1.0" 2209 | } 2210 | } 2211 | } 2212 | }, 2213 | "globals": { 2214 | "version": "11.12.0", 2215 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2216 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2217 | "dev": true 2218 | }, 2219 | "graceful-fs": { 2220 | "version": "4.2.0", 2221 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", 2222 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", 2223 | "dev": true 2224 | }, 2225 | "has": { 2226 | "version": "1.0.3", 2227 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2228 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2229 | "dev": true, 2230 | "requires": { 2231 | "function-bind": "^1.1.1" 2232 | } 2233 | }, 2234 | "has-flag": { 2235 | "version": "3.0.0", 2236 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2237 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 2238 | }, 2239 | "has-symbols": { 2240 | "version": "1.0.0", 2241 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 2242 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 2243 | "dev": true 2244 | }, 2245 | "has-value": { 2246 | "version": "1.0.0", 2247 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 2248 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 2249 | "dev": true, 2250 | "optional": true, 2251 | "requires": { 2252 | "get-value": "^2.0.6", 2253 | "has-values": "^1.0.0", 2254 | "isobject": "^3.0.0" 2255 | } 2256 | }, 2257 | "has-values": { 2258 | "version": "1.0.0", 2259 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 2260 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 2261 | "dev": true, 2262 | "optional": true, 2263 | "requires": { 2264 | "is-number": "^3.0.0", 2265 | "kind-of": "^4.0.0" 2266 | }, 2267 | "dependencies": { 2268 | "kind-of": { 2269 | "version": "4.0.0", 2270 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2271 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2272 | "dev": true, 2273 | "optional": true, 2274 | "requires": { 2275 | "is-buffer": "^1.1.5" 2276 | } 2277 | } 2278 | } 2279 | }, 2280 | "homedir-polyfill": { 2281 | "version": "1.0.3", 2282 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", 2283 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", 2284 | "dev": true, 2285 | "requires": { 2286 | "parse-passwd": "^1.0.0" 2287 | } 2288 | }, 2289 | "humanize-number": { 2290 | "version": "0.0.2", 2291 | "resolved": "https://registry.npmjs.org/humanize-number/-/humanize-number-0.0.2.tgz", 2292 | "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" 2293 | }, 2294 | "inflight": { 2295 | "version": "1.0.6", 2296 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2297 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2298 | "dev": true, 2299 | "requires": { 2300 | "once": "^1.3.0", 2301 | "wrappy": "1" 2302 | } 2303 | }, 2304 | "inherits": { 2305 | "version": "2.0.4", 2306 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2307 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2308 | "dev": true 2309 | }, 2310 | "invariant": { 2311 | "version": "2.2.4", 2312 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 2313 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 2314 | "dev": true, 2315 | "requires": { 2316 | "loose-envify": "^1.0.0" 2317 | } 2318 | }, 2319 | "is-accessor-descriptor": { 2320 | "version": "0.1.6", 2321 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 2322 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 2323 | "dev": true, 2324 | "optional": true, 2325 | "requires": { 2326 | "kind-of": "^3.0.2" 2327 | }, 2328 | "dependencies": { 2329 | "kind-of": { 2330 | "version": "3.2.2", 2331 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2332 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2333 | "dev": true, 2334 | "optional": true, 2335 | "requires": { 2336 | "is-buffer": "^1.1.5" 2337 | } 2338 | } 2339 | } 2340 | }, 2341 | "is-binary-path": { 2342 | "version": "1.0.1", 2343 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 2344 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 2345 | "dev": true, 2346 | "optional": true, 2347 | "requires": { 2348 | "binary-extensions": "^1.0.0" 2349 | } 2350 | }, 2351 | "is-buffer": { 2352 | "version": "1.1.6", 2353 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2354 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2355 | "dev": true, 2356 | "optional": true 2357 | }, 2358 | "is-callable": { 2359 | "version": "1.1.4", 2360 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 2361 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", 2362 | "dev": true 2363 | }, 2364 | "is-data-descriptor": { 2365 | "version": "0.1.4", 2366 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 2367 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 2368 | "dev": true, 2369 | "optional": true, 2370 | "requires": { 2371 | "kind-of": "^3.0.2" 2372 | }, 2373 | "dependencies": { 2374 | "kind-of": { 2375 | "version": "3.2.2", 2376 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2377 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2378 | "dev": true, 2379 | "optional": true, 2380 | "requires": { 2381 | "is-buffer": "^1.1.5" 2382 | } 2383 | } 2384 | } 2385 | }, 2386 | "is-date-object": { 2387 | "version": "1.0.1", 2388 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 2389 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 2390 | "dev": true 2391 | }, 2392 | "is-descriptor": { 2393 | "version": "0.1.6", 2394 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 2395 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 2396 | "dev": true, 2397 | "optional": true, 2398 | "requires": { 2399 | "is-accessor-descriptor": "^0.1.6", 2400 | "is-data-descriptor": "^0.1.4", 2401 | "kind-of": "^5.0.0" 2402 | }, 2403 | "dependencies": { 2404 | "kind-of": { 2405 | "version": "5.1.0", 2406 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 2407 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 2408 | "dev": true, 2409 | "optional": true 2410 | } 2411 | } 2412 | }, 2413 | "is-extendable": { 2414 | "version": "0.1.1", 2415 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 2416 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 2417 | "dev": true, 2418 | "optional": true 2419 | }, 2420 | "is-extglob": { 2421 | "version": "2.1.1", 2422 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2423 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2424 | "dev": true, 2425 | "optional": true 2426 | }, 2427 | "is-glob": { 2428 | "version": "4.0.1", 2429 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 2430 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 2431 | "dev": true, 2432 | "optional": true, 2433 | "requires": { 2434 | "is-extglob": "^2.1.1" 2435 | } 2436 | }, 2437 | "is-number": { 2438 | "version": "3.0.0", 2439 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2440 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2441 | "dev": true, 2442 | "optional": true, 2443 | "requires": { 2444 | "kind-of": "^3.0.2" 2445 | }, 2446 | "dependencies": { 2447 | "kind-of": { 2448 | "version": "3.2.2", 2449 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2450 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2451 | "dev": true, 2452 | "optional": true, 2453 | "requires": { 2454 | "is-buffer": "^1.1.5" 2455 | } 2456 | } 2457 | } 2458 | }, 2459 | "is-plain-obj": { 2460 | "version": "1.1.0", 2461 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 2462 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 2463 | "dev": true 2464 | }, 2465 | "is-plain-object": { 2466 | "version": "2.0.4", 2467 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2468 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2469 | "dev": true, 2470 | "optional": true, 2471 | "requires": { 2472 | "isobject": "^3.0.1" 2473 | } 2474 | }, 2475 | "is-regex": { 2476 | "version": "1.0.4", 2477 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 2478 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 2479 | "dev": true, 2480 | "requires": { 2481 | "has": "^1.0.1" 2482 | } 2483 | }, 2484 | "is-symbol": { 2485 | "version": "1.0.2", 2486 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 2487 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 2488 | "dev": true, 2489 | "requires": { 2490 | "has-symbols": "^1.0.0" 2491 | } 2492 | }, 2493 | "is-windows": { 2494 | "version": "1.0.2", 2495 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 2496 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 2497 | "dev": true, 2498 | "optional": true 2499 | }, 2500 | "isarray": { 2501 | "version": "1.0.0", 2502 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2503 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2504 | "dev": true, 2505 | "optional": true 2506 | }, 2507 | "isobject": { 2508 | "version": "3.0.1", 2509 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2510 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 2511 | "dev": true, 2512 | "optional": true 2513 | }, 2514 | "js-levenshtein": { 2515 | "version": "1.1.6", 2516 | "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", 2517 | "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", 2518 | "dev": true 2519 | }, 2520 | "js-tokens": { 2521 | "version": "4.0.0", 2522 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2523 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2524 | "dev": true 2525 | }, 2526 | "jsesc": { 2527 | "version": "2.5.2", 2528 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2529 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2530 | "dev": true 2531 | }, 2532 | "json5": { 2533 | "version": "2.1.0", 2534 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", 2535 | "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", 2536 | "dev": true, 2537 | "requires": { 2538 | "minimist": "^1.2.0" 2539 | }, 2540 | "dependencies": { 2541 | "minimist": { 2542 | "version": "1.2.0", 2543 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2544 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2545 | "dev": true 2546 | } 2547 | } 2548 | }, 2549 | "kareem": { 2550 | "version": "2.3.0", 2551 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", 2552 | "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" 2553 | }, 2554 | "kind-of": { 2555 | "version": "6.0.2", 2556 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 2557 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 2558 | "dev": true, 2559 | "optional": true 2560 | }, 2561 | "koa-logger": { 2562 | "version": "3.2.1", 2563 | "requires": { 2564 | "bytes": "^3.1.0", 2565 | "chalk": "^2.4.2", 2566 | "humanize-number": "0.0.2", 2567 | "passthrough-counter": "^1.0.0" 2568 | } 2569 | }, 2570 | "koa-rest-cache": { 2571 | "version": "1.1.0", 2572 | "resolved": "https://registry.npmjs.org/koa-rest-cache/-/koa-rest-cache-1.1.0.tgz", 2573 | "integrity": "sha1-iqSxjGkJ96jR/rdOcXbYH9V9Uus=", 2574 | "requires": { 2575 | "minimatch": "^3.0.0" 2576 | } 2577 | }, 2578 | "locate-path": { 2579 | "version": "3.0.0", 2580 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2581 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2582 | "dev": true, 2583 | "requires": { 2584 | "p-locate": "^3.0.0", 2585 | "path-exists": "^3.0.0" 2586 | } 2587 | }, 2588 | "lodash": { 2589 | "version": "4.17.15", 2590 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 2591 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 2592 | }, 2593 | "loose-envify": { 2594 | "version": "1.4.0", 2595 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2596 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2597 | "dev": true, 2598 | "requires": { 2599 | "js-tokens": "^3.0.0 || ^4.0.0" 2600 | } 2601 | }, 2602 | "make-dir": { 2603 | "version": "2.1.0", 2604 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 2605 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 2606 | "dev": true, 2607 | "requires": { 2608 | "pify": "^4.0.1", 2609 | "semver": "^5.6.0" 2610 | } 2611 | }, 2612 | "map-cache": { 2613 | "version": "0.2.2", 2614 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 2615 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 2616 | "dev": true, 2617 | "optional": true 2618 | }, 2619 | "map-visit": { 2620 | "version": "1.0.0", 2621 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 2622 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 2623 | "dev": true, 2624 | "optional": true, 2625 | "requires": { 2626 | "object-visit": "^1.0.0" 2627 | } 2628 | }, 2629 | "memory-pager": { 2630 | "version": "1.5.0", 2631 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 2632 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 2633 | "optional": true 2634 | }, 2635 | "micromatch": { 2636 | "version": "3.1.10", 2637 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 2638 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 2639 | "dev": true, 2640 | "optional": true, 2641 | "requires": { 2642 | "arr-diff": "^4.0.0", 2643 | "array-unique": "^0.3.2", 2644 | "braces": "^2.3.1", 2645 | "define-property": "^2.0.2", 2646 | "extend-shallow": "^3.0.2", 2647 | "extglob": "^2.0.4", 2648 | "fragment-cache": "^0.2.1", 2649 | "kind-of": "^6.0.2", 2650 | "nanomatch": "^1.2.9", 2651 | "object.pick": "^1.3.0", 2652 | "regex-not": "^1.0.0", 2653 | "snapdragon": "^0.8.1", 2654 | "to-regex": "^3.0.2" 2655 | } 2656 | }, 2657 | "minimatch": { 2658 | "version": "3.0.4", 2659 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2660 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2661 | "requires": { 2662 | "brace-expansion": "^1.1.7" 2663 | } 2664 | }, 2665 | "minimist": { 2666 | "version": "0.0.8", 2667 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2668 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2669 | "dev": true 2670 | }, 2671 | "mixin-deep": { 2672 | "version": "1.3.2", 2673 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", 2674 | "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", 2675 | "dev": true, 2676 | "optional": true, 2677 | "requires": { 2678 | "for-in": "^1.0.2", 2679 | "is-extendable": "^1.0.1" 2680 | }, 2681 | "dependencies": { 2682 | "is-extendable": { 2683 | "version": "1.0.1", 2684 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 2685 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 2686 | "dev": true, 2687 | "optional": true, 2688 | "requires": { 2689 | "is-plain-object": "^2.0.4" 2690 | } 2691 | } 2692 | } 2693 | }, 2694 | "mkdirp": { 2695 | "version": "0.5.1", 2696 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2697 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2698 | "dev": true, 2699 | "requires": { 2700 | "minimist": "0.0.8" 2701 | } 2702 | }, 2703 | "mongodb": { 2704 | "version": "3.2.7", 2705 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz", 2706 | "integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==", 2707 | "requires": { 2708 | "mongodb-core": "3.2.7", 2709 | "safe-buffer": "^5.1.2" 2710 | } 2711 | }, 2712 | "mongodb-core": { 2713 | "version": "3.2.7", 2714 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", 2715 | "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", 2716 | "requires": { 2717 | "bson": "^1.1.1", 2718 | "require_optional": "^1.0.1", 2719 | "safe-buffer": "^5.1.2", 2720 | "saslprep": "^1.0.0" 2721 | } 2722 | }, 2723 | "mongoose": { 2724 | "version": "5.6.7", 2725 | "requires": { 2726 | "async": "2.6.2", 2727 | "bson": "~1.1.1", 2728 | "kareem": "2.3.0", 2729 | "mongodb": "3.2.7", 2730 | "mongodb-core": "3.2.7", 2731 | "mongoose-legacy-pluralize": "1.0.2", 2732 | "mpath": "0.6.0", 2733 | "mquery": "3.2.1", 2734 | "ms": "2.1.2", 2735 | "regexp-clone": "1.0.0", 2736 | "safe-buffer": "5.1.2", 2737 | "sift": "7.0.1", 2738 | "sliced": "1.0.1" 2739 | }, 2740 | "dependencies": { 2741 | "ms": { 2742 | "version": "2.1.2", 2743 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2744 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2745 | } 2746 | } 2747 | }, 2748 | "mongoose-legacy-pluralize": { 2749 | "version": "1.0.2", 2750 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 2751 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 2752 | }, 2753 | "mpath": { 2754 | "version": "0.6.0", 2755 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", 2756 | "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" 2757 | }, 2758 | "mquery": { 2759 | "version": "3.2.1", 2760 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.1.tgz", 2761 | "integrity": "sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw==", 2762 | "requires": { 2763 | "bluebird": "3.5.1", 2764 | "debug": "3.1.0", 2765 | "regexp-clone": "^1.0.0", 2766 | "safe-buffer": "5.1.2", 2767 | "sliced": "1.0.1" 2768 | }, 2769 | "dependencies": { 2770 | "debug": { 2771 | "version": "3.1.0", 2772 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 2773 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 2774 | "requires": { 2775 | "ms": "2.0.0" 2776 | } 2777 | } 2778 | } 2779 | }, 2780 | "ms": { 2781 | "version": "2.0.0", 2782 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2783 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2784 | }, 2785 | "nan": { 2786 | "version": "2.14.0", 2787 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 2788 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", 2789 | "dev": true, 2790 | "optional": true 2791 | }, 2792 | "nanomatch": { 2793 | "version": "1.2.13", 2794 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 2795 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 2796 | "dev": true, 2797 | "optional": true, 2798 | "requires": { 2799 | "arr-diff": "^4.0.0", 2800 | "array-unique": "^0.3.2", 2801 | "define-property": "^2.0.2", 2802 | "extend-shallow": "^3.0.2", 2803 | "fragment-cache": "^0.2.1", 2804 | "is-windows": "^1.0.2", 2805 | "kind-of": "^6.0.2", 2806 | "object.pick": "^1.3.0", 2807 | "regex-not": "^1.0.0", 2808 | "snapdragon": "^0.8.1", 2809 | "to-regex": "^3.0.1" 2810 | } 2811 | }, 2812 | "node-environment-flags": { 2813 | "version": "1.0.6", 2814 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", 2815 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", 2816 | "dev": true, 2817 | "requires": { 2818 | "object.getownpropertydescriptors": "^2.0.3", 2819 | "semver": "^5.7.0" 2820 | } 2821 | }, 2822 | "node-modules-regexp": { 2823 | "version": "1.0.0", 2824 | "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", 2825 | "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", 2826 | "dev": true 2827 | }, 2828 | "node-releases": { 2829 | "version": "1.1.26", 2830 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", 2831 | "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", 2832 | "dev": true, 2833 | "requires": { 2834 | "semver": "^5.3.0" 2835 | } 2836 | }, 2837 | "normalize-path": { 2838 | "version": "3.0.0", 2839 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2840 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2841 | "dev": true, 2842 | "optional": true 2843 | }, 2844 | "object-copy": { 2845 | "version": "0.1.0", 2846 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 2847 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 2848 | "dev": true, 2849 | "optional": true, 2850 | "requires": { 2851 | "copy-descriptor": "^0.1.0", 2852 | "define-property": "^0.2.5", 2853 | "kind-of": "^3.0.3" 2854 | }, 2855 | "dependencies": { 2856 | "define-property": { 2857 | "version": "0.2.5", 2858 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2859 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2860 | "dev": true, 2861 | "optional": true, 2862 | "requires": { 2863 | "is-descriptor": "^0.1.0" 2864 | } 2865 | }, 2866 | "kind-of": { 2867 | "version": "3.2.2", 2868 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2869 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2870 | "dev": true, 2871 | "optional": true, 2872 | "requires": { 2873 | "is-buffer": "^1.1.5" 2874 | } 2875 | } 2876 | } 2877 | }, 2878 | "object-keys": { 2879 | "version": "1.1.1", 2880 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2881 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2882 | "dev": true 2883 | }, 2884 | "object-visit": { 2885 | "version": "1.0.1", 2886 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 2887 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 2888 | "dev": true, 2889 | "optional": true, 2890 | "requires": { 2891 | "isobject": "^3.0.0" 2892 | } 2893 | }, 2894 | "object.assign": { 2895 | "version": "4.1.0", 2896 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2897 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2898 | "dev": true, 2899 | "requires": { 2900 | "define-properties": "^1.1.2", 2901 | "function-bind": "^1.1.1", 2902 | "has-symbols": "^1.0.0", 2903 | "object-keys": "^1.0.11" 2904 | } 2905 | }, 2906 | "object.getownpropertydescriptors": { 2907 | "version": "2.0.3", 2908 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 2909 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 2910 | "dev": true, 2911 | "requires": { 2912 | "define-properties": "^1.1.2", 2913 | "es-abstract": "^1.5.1" 2914 | } 2915 | }, 2916 | "object.pick": { 2917 | "version": "1.3.0", 2918 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 2919 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 2920 | "dev": true, 2921 | "optional": true, 2922 | "requires": { 2923 | "isobject": "^3.0.1" 2924 | } 2925 | }, 2926 | "once": { 2927 | "version": "1.4.0", 2928 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2929 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2930 | "dev": true, 2931 | "requires": { 2932 | "wrappy": "1" 2933 | } 2934 | }, 2935 | "output-file-sync": { 2936 | "version": "2.0.1", 2937 | "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", 2938 | "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", 2939 | "dev": true, 2940 | "requires": { 2941 | "graceful-fs": "^4.1.11", 2942 | "is-plain-obj": "^1.1.0", 2943 | "mkdirp": "^0.5.1" 2944 | } 2945 | }, 2946 | "p-limit": { 2947 | "version": "2.2.0", 2948 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 2949 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 2950 | "dev": true, 2951 | "requires": { 2952 | "p-try": "^2.0.0" 2953 | } 2954 | }, 2955 | "p-locate": { 2956 | "version": "3.0.0", 2957 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2958 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2959 | "dev": true, 2960 | "requires": { 2961 | "p-limit": "^2.0.0" 2962 | } 2963 | }, 2964 | "p-try": { 2965 | "version": "2.2.0", 2966 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2967 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2968 | "dev": true 2969 | }, 2970 | "parse-passwd": { 2971 | "version": "1.0.0", 2972 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 2973 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 2974 | "dev": true 2975 | }, 2976 | "pascalcase": { 2977 | "version": "0.1.1", 2978 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 2979 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 2980 | "dev": true, 2981 | "optional": true 2982 | }, 2983 | "passthrough-counter": { 2984 | "version": "1.0.0", 2985 | "resolved": "https://registry.npmjs.org/passthrough-counter/-/passthrough-counter-1.0.0.tgz", 2986 | "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" 2987 | }, 2988 | "path-dirname": { 2989 | "version": "1.0.2", 2990 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 2991 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 2992 | "dev": true, 2993 | "optional": true 2994 | }, 2995 | "path-exists": { 2996 | "version": "3.0.0", 2997 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2998 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2999 | "dev": true 3000 | }, 3001 | "path-is-absolute": { 3002 | "version": "1.0.1", 3003 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3004 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3005 | "dev": true 3006 | }, 3007 | "path-parse": { 3008 | "version": "1.0.6", 3009 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 3010 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 3011 | "dev": true 3012 | }, 3013 | "pify": { 3014 | "version": "4.0.1", 3015 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 3016 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 3017 | "dev": true 3018 | }, 3019 | "pirates": { 3020 | "version": "4.0.1", 3021 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", 3022 | "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", 3023 | "dev": true, 3024 | "requires": { 3025 | "node-modules-regexp": "^1.0.0" 3026 | } 3027 | }, 3028 | "pkg-dir": { 3029 | "version": "3.0.0", 3030 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", 3031 | "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", 3032 | "dev": true, 3033 | "requires": { 3034 | "find-up": "^3.0.0" 3035 | } 3036 | }, 3037 | "posix-character-classes": { 3038 | "version": "0.1.1", 3039 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 3040 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 3041 | "dev": true, 3042 | "optional": true 3043 | }, 3044 | "private": { 3045 | "version": "0.1.8", 3046 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 3047 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 3048 | "dev": true 3049 | }, 3050 | "process-nextick-args": { 3051 | "version": "2.0.1", 3052 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 3053 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 3054 | "dev": true, 3055 | "optional": true 3056 | }, 3057 | "readable-stream": { 3058 | "version": "2.3.6", 3059 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 3060 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 3061 | "dev": true, 3062 | "optional": true, 3063 | "requires": { 3064 | "core-util-is": "~1.0.0", 3065 | "inherits": "~2.0.3", 3066 | "isarray": "~1.0.0", 3067 | "process-nextick-args": "~2.0.0", 3068 | "safe-buffer": "~5.1.1", 3069 | "string_decoder": "~1.1.1", 3070 | "util-deprecate": "~1.0.1" 3071 | } 3072 | }, 3073 | "readdirp": { 3074 | "version": "2.2.1", 3075 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", 3076 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", 3077 | "dev": true, 3078 | "optional": true, 3079 | "requires": { 3080 | "graceful-fs": "^4.1.11", 3081 | "micromatch": "^3.1.10", 3082 | "readable-stream": "^2.0.2" 3083 | } 3084 | }, 3085 | "regenerate": { 3086 | "version": "1.4.0", 3087 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 3088 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 3089 | "dev": true 3090 | }, 3091 | "regenerate-unicode-properties": { 3092 | "version": "8.1.0", 3093 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", 3094 | "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", 3095 | "dev": true, 3096 | "requires": { 3097 | "regenerate": "^1.4.0" 3098 | } 3099 | }, 3100 | "regenerator-runtime": { 3101 | "version": "0.13.3", 3102 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", 3103 | "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", 3104 | "dev": true 3105 | }, 3106 | "regenerator-transform": { 3107 | "version": "0.14.1", 3108 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", 3109 | "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", 3110 | "dev": true, 3111 | "requires": { 3112 | "private": "^0.1.6" 3113 | } 3114 | }, 3115 | "regex-not": { 3116 | "version": "1.0.2", 3117 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 3118 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 3119 | "dev": true, 3120 | "optional": true, 3121 | "requires": { 3122 | "extend-shallow": "^3.0.2", 3123 | "safe-regex": "^1.1.0" 3124 | } 3125 | }, 3126 | "regexp-clone": { 3127 | "version": "1.0.0", 3128 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 3129 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 3130 | }, 3131 | "regexp-tree": { 3132 | "version": "0.1.11", 3133 | "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", 3134 | "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", 3135 | "dev": true 3136 | }, 3137 | "regexpu-core": { 3138 | "version": "4.5.4", 3139 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", 3140 | "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", 3141 | "dev": true, 3142 | "requires": { 3143 | "regenerate": "^1.4.0", 3144 | "regenerate-unicode-properties": "^8.0.2", 3145 | "regjsgen": "^0.5.0", 3146 | "regjsparser": "^0.6.0", 3147 | "unicode-match-property-ecmascript": "^1.0.4", 3148 | "unicode-match-property-value-ecmascript": "^1.1.0" 3149 | } 3150 | }, 3151 | "regjsgen": { 3152 | "version": "0.5.0", 3153 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", 3154 | "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", 3155 | "dev": true 3156 | }, 3157 | "regjsparser": { 3158 | "version": "0.6.0", 3159 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", 3160 | "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", 3161 | "dev": true, 3162 | "requires": { 3163 | "jsesc": "~0.5.0" 3164 | }, 3165 | "dependencies": { 3166 | "jsesc": { 3167 | "version": "0.5.0", 3168 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 3169 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 3170 | "dev": true 3171 | } 3172 | } 3173 | }, 3174 | "remove-trailing-separator": { 3175 | "version": "1.1.0", 3176 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 3177 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 3178 | "dev": true, 3179 | "optional": true 3180 | }, 3181 | "repeat-element": { 3182 | "version": "1.1.3", 3183 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 3184 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 3185 | "dev": true, 3186 | "optional": true 3187 | }, 3188 | "repeat-string": { 3189 | "version": "1.6.1", 3190 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 3191 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 3192 | "dev": true, 3193 | "optional": true 3194 | }, 3195 | "require_optional": { 3196 | "version": "1.0.1", 3197 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 3198 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 3199 | "requires": { 3200 | "resolve-from": "^2.0.0", 3201 | "semver": "^5.1.0" 3202 | } 3203 | }, 3204 | "resolve": { 3205 | "version": "1.11.1", 3206 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", 3207 | "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", 3208 | "dev": true, 3209 | "requires": { 3210 | "path-parse": "^1.0.6" 3211 | } 3212 | }, 3213 | "resolve-from": { 3214 | "version": "2.0.0", 3215 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 3216 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 3217 | }, 3218 | "resolve-url": { 3219 | "version": "0.2.1", 3220 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 3221 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 3222 | "dev": true, 3223 | "optional": true 3224 | }, 3225 | "ret": { 3226 | "version": "0.1.15", 3227 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 3228 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 3229 | "dev": true, 3230 | "optional": true 3231 | }, 3232 | "safe-buffer": { 3233 | "version": "5.1.2", 3234 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3235 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 3236 | }, 3237 | "safe-regex": { 3238 | "version": "1.1.0", 3239 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 3240 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 3241 | "dev": true, 3242 | "optional": true, 3243 | "requires": { 3244 | "ret": "~0.1.10" 3245 | } 3246 | }, 3247 | "saslprep": { 3248 | "version": "1.0.3", 3249 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 3250 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 3251 | "optional": true, 3252 | "requires": { 3253 | "sparse-bitfield": "^3.0.3" 3254 | } 3255 | }, 3256 | "semver": { 3257 | "version": "5.7.0", 3258 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 3259 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" 3260 | }, 3261 | "set-value": { 3262 | "version": "2.0.1", 3263 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", 3264 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", 3265 | "dev": true, 3266 | "optional": true, 3267 | "requires": { 3268 | "extend-shallow": "^2.0.1", 3269 | "is-extendable": "^0.1.1", 3270 | "is-plain-object": "^2.0.3", 3271 | "split-string": "^3.0.1" 3272 | }, 3273 | "dependencies": { 3274 | "extend-shallow": { 3275 | "version": "2.0.1", 3276 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3277 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3278 | "dev": true, 3279 | "optional": true, 3280 | "requires": { 3281 | "is-extendable": "^0.1.0" 3282 | } 3283 | } 3284 | } 3285 | }, 3286 | "sift": { 3287 | "version": "7.0.1", 3288 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", 3289 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" 3290 | }, 3291 | "slash": { 3292 | "version": "2.0.0", 3293 | "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", 3294 | "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", 3295 | "dev": true 3296 | }, 3297 | "sliced": { 3298 | "version": "1.0.1", 3299 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 3300 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 3301 | }, 3302 | "snapdragon": { 3303 | "version": "0.8.2", 3304 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 3305 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 3306 | "dev": true, 3307 | "optional": true, 3308 | "requires": { 3309 | "base": "^0.11.1", 3310 | "debug": "^2.2.0", 3311 | "define-property": "^0.2.5", 3312 | "extend-shallow": "^2.0.1", 3313 | "map-cache": "^0.2.2", 3314 | "source-map": "^0.5.6", 3315 | "source-map-resolve": "^0.5.0", 3316 | "use": "^3.1.0" 3317 | }, 3318 | "dependencies": { 3319 | "define-property": { 3320 | "version": "0.2.5", 3321 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3322 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3323 | "dev": true, 3324 | "optional": true, 3325 | "requires": { 3326 | "is-descriptor": "^0.1.0" 3327 | } 3328 | }, 3329 | "extend-shallow": { 3330 | "version": "2.0.1", 3331 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3332 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3333 | "dev": true, 3334 | "optional": true, 3335 | "requires": { 3336 | "is-extendable": "^0.1.0" 3337 | } 3338 | } 3339 | } 3340 | }, 3341 | "snapdragon-node": { 3342 | "version": "2.1.1", 3343 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 3344 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 3345 | "dev": true, 3346 | "optional": true, 3347 | "requires": { 3348 | "define-property": "^1.0.0", 3349 | "isobject": "^3.0.0", 3350 | "snapdragon-util": "^3.0.1" 3351 | }, 3352 | "dependencies": { 3353 | "define-property": { 3354 | "version": "1.0.0", 3355 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 3356 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 3357 | "dev": true, 3358 | "optional": true, 3359 | "requires": { 3360 | "is-descriptor": "^1.0.0" 3361 | } 3362 | }, 3363 | "is-accessor-descriptor": { 3364 | "version": "1.0.0", 3365 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 3366 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 3367 | "dev": true, 3368 | "optional": true, 3369 | "requires": { 3370 | "kind-of": "^6.0.0" 3371 | } 3372 | }, 3373 | "is-data-descriptor": { 3374 | "version": "1.0.0", 3375 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 3376 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 3377 | "dev": true, 3378 | "optional": true, 3379 | "requires": { 3380 | "kind-of": "^6.0.0" 3381 | } 3382 | }, 3383 | "is-descriptor": { 3384 | "version": "1.0.2", 3385 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 3386 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 3387 | "dev": true, 3388 | "optional": true, 3389 | "requires": { 3390 | "is-accessor-descriptor": "^1.0.0", 3391 | "is-data-descriptor": "^1.0.0", 3392 | "kind-of": "^6.0.2" 3393 | } 3394 | } 3395 | } 3396 | }, 3397 | "snapdragon-util": { 3398 | "version": "3.0.1", 3399 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 3400 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 3401 | "dev": true, 3402 | "optional": true, 3403 | "requires": { 3404 | "kind-of": "^3.2.0" 3405 | }, 3406 | "dependencies": { 3407 | "kind-of": { 3408 | "version": "3.2.2", 3409 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3410 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3411 | "dev": true, 3412 | "optional": true, 3413 | "requires": { 3414 | "is-buffer": "^1.1.5" 3415 | } 3416 | } 3417 | } 3418 | }, 3419 | "source-map": { 3420 | "version": "0.5.7", 3421 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3422 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 3423 | "dev": true 3424 | }, 3425 | "source-map-resolve": { 3426 | "version": "0.5.2", 3427 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 3428 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 3429 | "dev": true, 3430 | "optional": true, 3431 | "requires": { 3432 | "atob": "^2.1.1", 3433 | "decode-uri-component": "^0.2.0", 3434 | "resolve-url": "^0.2.1", 3435 | "source-map-url": "^0.4.0", 3436 | "urix": "^0.1.0" 3437 | } 3438 | }, 3439 | "source-map-support": { 3440 | "version": "0.5.12", 3441 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", 3442 | "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", 3443 | "dev": true, 3444 | "requires": { 3445 | "buffer-from": "^1.0.0", 3446 | "source-map": "^0.6.0" 3447 | }, 3448 | "dependencies": { 3449 | "source-map": { 3450 | "version": "0.6.1", 3451 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3452 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3453 | "dev": true 3454 | } 3455 | } 3456 | }, 3457 | "source-map-url": { 3458 | "version": "0.4.0", 3459 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 3460 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 3461 | "dev": true, 3462 | "optional": true 3463 | }, 3464 | "sparse-bitfield": { 3465 | "version": "3.0.3", 3466 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 3467 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 3468 | "optional": true, 3469 | "requires": { 3470 | "memory-pager": "^1.0.2" 3471 | } 3472 | }, 3473 | "split-string": { 3474 | "version": "3.1.0", 3475 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 3476 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 3477 | "dev": true, 3478 | "optional": true, 3479 | "requires": { 3480 | "extend-shallow": "^3.0.0" 3481 | } 3482 | }, 3483 | "static-extend": { 3484 | "version": "0.1.2", 3485 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 3486 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 3487 | "dev": true, 3488 | "optional": true, 3489 | "requires": { 3490 | "define-property": "^0.2.5", 3491 | "object-copy": "^0.1.0" 3492 | }, 3493 | "dependencies": { 3494 | "define-property": { 3495 | "version": "0.2.5", 3496 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3497 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3498 | "dev": true, 3499 | "optional": true, 3500 | "requires": { 3501 | "is-descriptor": "^0.1.0" 3502 | } 3503 | } 3504 | } 3505 | }, 3506 | "string_decoder": { 3507 | "version": "1.1.1", 3508 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3509 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 3510 | "dev": true, 3511 | "optional": true, 3512 | "requires": { 3513 | "safe-buffer": "~5.1.0" 3514 | } 3515 | }, 3516 | "supports-color": { 3517 | "version": "5.5.0", 3518 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3519 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3520 | "requires": { 3521 | "has-flag": "^3.0.0" 3522 | } 3523 | }, 3524 | "to-fast-properties": { 3525 | "version": "2.0.0", 3526 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3527 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 3528 | "dev": true 3529 | }, 3530 | "to-object-path": { 3531 | "version": "0.3.0", 3532 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 3533 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 3534 | "dev": true, 3535 | "optional": true, 3536 | "requires": { 3537 | "kind-of": "^3.0.2" 3538 | }, 3539 | "dependencies": { 3540 | "kind-of": { 3541 | "version": "3.2.2", 3542 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3543 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3544 | "dev": true, 3545 | "optional": true, 3546 | "requires": { 3547 | "is-buffer": "^1.1.5" 3548 | } 3549 | } 3550 | } 3551 | }, 3552 | "to-regex": { 3553 | "version": "3.0.2", 3554 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 3555 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 3556 | "dev": true, 3557 | "optional": true, 3558 | "requires": { 3559 | "define-property": "^2.0.2", 3560 | "extend-shallow": "^3.0.2", 3561 | "regex-not": "^1.0.2", 3562 | "safe-regex": "^1.1.0" 3563 | } 3564 | }, 3565 | "to-regex-range": { 3566 | "version": "2.1.1", 3567 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 3568 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 3569 | "dev": true, 3570 | "optional": true, 3571 | "requires": { 3572 | "is-number": "^3.0.0", 3573 | "repeat-string": "^1.6.1" 3574 | } 3575 | }, 3576 | "trim-right": { 3577 | "version": "1.0.1", 3578 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 3579 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 3580 | "dev": true 3581 | }, 3582 | "unicode-canonical-property-names-ecmascript": { 3583 | "version": "1.0.4", 3584 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 3585 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 3586 | "dev": true 3587 | }, 3588 | "unicode-match-property-ecmascript": { 3589 | "version": "1.0.4", 3590 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 3591 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 3592 | "dev": true, 3593 | "requires": { 3594 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 3595 | "unicode-property-aliases-ecmascript": "^1.0.4" 3596 | } 3597 | }, 3598 | "unicode-match-property-value-ecmascript": { 3599 | "version": "1.1.0", 3600 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", 3601 | "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", 3602 | "dev": true 3603 | }, 3604 | "unicode-property-aliases-ecmascript": { 3605 | "version": "1.0.5", 3606 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", 3607 | "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", 3608 | "dev": true 3609 | }, 3610 | "union-value": { 3611 | "version": "1.0.1", 3612 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", 3613 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", 3614 | "dev": true, 3615 | "optional": true, 3616 | "requires": { 3617 | "arr-union": "^3.1.0", 3618 | "get-value": "^2.0.6", 3619 | "is-extendable": "^0.1.1", 3620 | "set-value": "^2.0.1" 3621 | } 3622 | }, 3623 | "unset-value": { 3624 | "version": "1.0.0", 3625 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 3626 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 3627 | "dev": true, 3628 | "optional": true, 3629 | "requires": { 3630 | "has-value": "^0.3.1", 3631 | "isobject": "^3.0.0" 3632 | }, 3633 | "dependencies": { 3634 | "has-value": { 3635 | "version": "0.3.1", 3636 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 3637 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 3638 | "dev": true, 3639 | "optional": true, 3640 | "requires": { 3641 | "get-value": "^2.0.3", 3642 | "has-values": "^0.1.4", 3643 | "isobject": "^2.0.0" 3644 | }, 3645 | "dependencies": { 3646 | "isobject": { 3647 | "version": "2.1.0", 3648 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 3649 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 3650 | "dev": true, 3651 | "optional": true, 3652 | "requires": { 3653 | "isarray": "1.0.0" 3654 | } 3655 | } 3656 | } 3657 | }, 3658 | "has-values": { 3659 | "version": "0.1.4", 3660 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 3661 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 3662 | "dev": true, 3663 | "optional": true 3664 | } 3665 | } 3666 | }, 3667 | "upath": { 3668 | "version": "1.1.2", 3669 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", 3670 | "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", 3671 | "dev": true, 3672 | "optional": true 3673 | }, 3674 | "urix": { 3675 | "version": "0.1.0", 3676 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 3677 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 3678 | "dev": true, 3679 | "optional": true 3680 | }, 3681 | "use": { 3682 | "version": "3.1.1", 3683 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 3684 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 3685 | "dev": true, 3686 | "optional": true 3687 | }, 3688 | "util-deprecate": { 3689 | "version": "1.0.2", 3690 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3691 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3692 | "dev": true, 3693 | "optional": true 3694 | }, 3695 | "v8flags": { 3696 | "version": "3.1.3", 3697 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", 3698 | "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", 3699 | "dev": true, 3700 | "requires": { 3701 | "homedir-polyfill": "^1.0.1" 3702 | } 3703 | }, 3704 | "wrappy": { 3705 | "version": "1.0.2", 3706 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3707 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3708 | "dev": true 3709 | } 3710 | } 3711 | } 3712 | -------------------------------------------------------------------------------- /packages/rest/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@rest/server", 3 | "version": "1.0.0", 4 | "main": "app.js", 5 | "repository": "https://github.com/Wellers0n/Backend-diff.git", 6 | "author": "Wellerson ", 7 | "license": "MIT", 8 | "scripts": { 9 | "start": "nodemon --exec babel-node ./src/index.js" 10 | }, 11 | "dependencies": { 12 | "jsonwebtoken": "^8.5.1", 13 | "kcors": "^2.2.2", 14 | "koa": "^2.7.0", 15 | "koa-bodyparser": "^4.2.1", 16 | "koa-logger": "^3.2.1", 17 | "koa-rest-cache": "^1.1.0", 18 | "koa-router": "^7.4.0", 19 | "mongoose": "^5.6.6" 20 | }, 21 | "devDependencies": { 22 | "@babel/cli": "^7.5.5", 23 | "@babel/core": "^7.5.5", 24 | "@babel/node": "^7.5.5", 25 | "@babel/preset-env": "^7.5.5", 26 | "nodemon": "^1.19.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/rest/src/app.js: -------------------------------------------------------------------------------- 1 | import Koa from "koa"; 2 | import Router from "koa-router"; 3 | import Logger from "koa-logger"; 4 | import Cors from "kcors"; 5 | import BodyParser from "koa-bodyparser"; 6 | import routes from "./routes/blog"; 7 | import cache from "koa-rest-cache"; 8 | 9 | const app = new Koa(); 10 | const router = Router(); 11 | 12 | app.use(BodyParser()); 13 | app.use(Logger()); 14 | app.use(Cors()); 15 | app.use(cache({ 16 | pattern: "/api/**/*", 17 | maxAge: 600000 // ms 18 | })); 19 | 20 | // API Route 21 | app.use(routes).use(router.allowedMethods()); 22 | 23 | export default app; 24 | -------------------------------------------------------------------------------- /packages/rest/src/auth.js: -------------------------------------------------------------------------------- 1 | import jwt from "jsonwebtoken"; 2 | import User from "./models/users"; 3 | import mongoose from "mongoose"; 4 | 5 | export async function getUser(token) { 6 | if (!token) return { user: null }; 7 | 8 | try { 9 | const decodedToken = jwt.verify(token, "batman"); 10 | 11 | const user = await User.findOne({ _id: decodedToken.id }); 12 | 13 | return { 14 | user 15 | }; 16 | } catch (err) { 17 | return { user: null }; 18 | } 19 | } 20 | 21 | export const authMiddleware = async (ctx, next) => { 22 | const { authorization } = ctx.request.headers; 23 | if (authorization) { 24 | jwt.verify(authorization, 'batman', (err, decoded) => { 25 | if (err) return ctx.body = 401 26 | ctx.state.user = decoded.id; 27 | }) 28 | }else{ 29 | return ctx.status = 403 30 | } 31 | 32 | await next(); 33 | 34 | } 35 | 36 | export function generateToken(user) { 37 | return jwt.sign({ id: user._id }, "batman"); 38 | } 39 | -------------------------------------------------------------------------------- /packages/rest/src/controllers/articles/index.js: -------------------------------------------------------------------------------- 1 | import Article from "./../../models/article"; 2 | import GetSlug from "./../../helper/GetSlug"; 3 | /* ARTICLES */ 4 | 5 | // find articles 6 | export const FindArticles = async ctx => { 7 | const { limit, skip } = ctx.query; 8 | const skipInt = Math.max(0, parseInt(skip)); 9 | const limitInt = parseInt(limit); 10 | const article = await Article.find({}) 11 | .limit(limitInt) 12 | .skip(skipInt); 13 | ctx.body = article; 14 | }; 15 | 16 | // find an article 17 | export const FindOneArticles = async ctx => { 18 | const { id } = ctx.params; 19 | const article = await Article.findOne({ _id: id }); 20 | ctx.body = article; 21 | }; 22 | 23 | // create an article 24 | export const CreateOneArticles = async ctx => { 25 | const { title, subtitle, description, author } = ctx.request.body; 26 | 27 | const idUser = ctx.state.user; 28 | const slug = GetSlug("articles", title); 29 | const date = Date.now(); 30 | 31 | await Article.create({ 32 | idUser, 33 | title, 34 | subtitle, 35 | description, 36 | author, 37 | date, 38 | date_update: null, 39 | slug 40 | }); 41 | ctx.status = 200; 42 | }; 43 | 44 | // delete an article 45 | export const DeleteOneArticle = async ctx => { 46 | const { id } = ctx.params; 47 | await Article.deleteOne({ _id: id }); 48 | ctx.status = 200; 49 | }; 50 | 51 | // update an article 52 | export const UpdateOneArticle = async ctx => { 53 | const { id } = ctx.params; 54 | const { title, subtitle, description } = ctx.request.body; 55 | const date = Date.now(); 56 | await Article.updateOne( 57 | { _id: id }, 58 | { title, subtitle, description, date_update: date } 59 | ); 60 | ctx.status = 200; 61 | }; 62 | 63 | /* PRMALINK */ 64 | export const Permalink = async ctx => { 65 | const { slug } = ctx.query; 66 | const article = await Article.findOne({ slug }); 67 | return ctx.body = article 68 | }; 69 | -------------------------------------------------------------------------------- /packages/rest/src/controllers/comments/index.js: -------------------------------------------------------------------------------- 1 | import Comment from "./../../models/comment"; 2 | /* COMMENTS */ 3 | 4 | // get a comment 5 | export const GetComments = async ctx => { 6 | const { idArticle } = ctx.params; 7 | const { limit, skip } = ctx.query; 8 | const skipInt = Math.max(0, parseInt(skip)); 9 | const limitInt = parseInt(limit); 10 | 11 | const comment = await Comment.find({ idArticle }) 12 | .limit(limitInt) 13 | .skip(skipInt); 14 | 15 | return (ctx.body = comment); 16 | }; 17 | 18 | // create a comment 19 | export const CreateOneComment = async ctx => { 20 | const { username, description, idArticle } = ctx.request.body; 21 | const idUser = ctx.state.user; 22 | await Comment.create({ 23 | idArticle, 24 | username, 25 | description, 26 | idUser 27 | }); 28 | return (ctx.status = 200); 29 | }; 30 | 31 | // create a update 32 | export const UpdateOneComment = async ctx => { 33 | const { id, description } = ctx.request.body; 34 | await Comment.updateOne({ _id: id }, { description }); 35 | return (ctx.status = 200); 36 | }; 37 | 38 | // create a delete 39 | export const DeleteOneComment = async ctx => { 40 | const { id } = ctx.params; 41 | await Comment.deleteOne({ _id: id }); 42 | return (ctx.status = 200); 43 | }; -------------------------------------------------------------------------------- /packages/rest/src/controllers/users/index.js: -------------------------------------------------------------------------------- 1 | import Users from "../../models/users"; 2 | import { generateToken } from "./../../auth"; 3 | 4 | /* USERS */ 5 | 6 | // login an user 7 | export const loginUser = async ctx => { 8 | const { email, password } = ctx.request.body; 9 | let user = await Users.findOne({ email, password }); 10 | if (user) { 11 | const id = user._id; 12 | let token = generateToken(id); 13 | ctx.body = { token }; 14 | } else { 15 | ctx.status = 401; 16 | } 17 | }; 18 | 19 | // create an user 20 | export const createUser = async ctx => { 21 | const { name, email, password } = ctx.request.body; 22 | const user = await Users.findOne({ email }); 23 | if (!user) { 24 | await Users.create({ name, email, password }); 25 | return (ctx.status = 200); 26 | } else { 27 | ctx.status = 501; 28 | } 29 | }; -------------------------------------------------------------------------------- /packages/rest/src/database.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | export default function connectDatabase() { 4 | return new Promise((resolve, reject) => { 5 | mongoose.Promise = global.Promise; 6 | mongoose.connection 7 | .on("error", error => reject(error)) 8 | .on("close", () => console.log("Database connection closed.")) 9 | .once("open", () => resolve(mongoose.connections[0])); 10 | 11 | mongoose.connect( 12 | "mongodb+srv://Wellerson:0000@cluster0-0bwqz.mongodb.net/blog?retryWrites=true&w=majority", 13 | { 14 | useNewUrlParser: true, 15 | useCreateIndex: true 16 | } 17 | ); 18 | }); 19 | } -------------------------------------------------------------------------------- /packages/rest/src/helper/GetRandom.js: -------------------------------------------------------------------------------- 1 | function getRandom(min, max) { 2 | min = Math.ceil(min); 3 | max = Math.floor(max); 4 | return Math.floor(Math.random() * (max - min)) + min; 5 | } 6 | 7 | export default getRandom -------------------------------------------------------------------------------- /packages/rest/src/helper/GetSlug.js: -------------------------------------------------------------------------------- 1 | import GetRandom from "./GetRandom"; 2 | import Slugify from "./Slugify"; 3 | 4 | function getSlug(url, title) { 5 | const slug = Slugify(title); 6 | const random = GetRandom(1, 100000000); 7 | const permalink = `${url}/${slug}-${random}`; 8 | return permalink; 9 | } 10 | 11 | export default getSlug -------------------------------------------------------------------------------- /packages/rest/src/helper/Slugify.js: -------------------------------------------------------------------------------- 1 | function slugify(title) { 2 | const a = 'àáäâãåăæąçćčđďèéěėëêęğǵḧìíïîįłḿǹńňñòóöôœøṕŕřßşśšșťțùúüûǘůűūųẃẍÿýźžż·/_,:;' 3 | const b = 'aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz------' 4 | const p = new RegExp(a.split('').join('|'), 'g') 5 | 6 | return title.toString().toLowerCase() 7 | .replace(/\s+/g, '-') // Replace spaces with - 8 | .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters 9 | .replace(/&/g, '-and-') // Replace & with 'and' 10 | .replace(/[^\w\-]+/g, '') // Remove all non-word characters 11 | .replace(/\-\-+/g, '-') // Replace multiple - with single - 12 | .replace(/^-+/, '') // Trim - from start of text 13 | .replace(/-+$/, '') // Trim - from end of text 14 | } 15 | 16 | export default slugify -------------------------------------------------------------------------------- /packages/rest/src/index.js: -------------------------------------------------------------------------------- 1 | import "@babel/polyfill"; 2 | import { createServer } from "http"; 3 | import app from "./app"; 4 | import connectDatabase from "./database"; 5 | 6 | (async () => { 7 | try { 8 | await connectDatabase(); 9 | } catch (error) { 10 | console.log("Could not connect to database", { error }); 11 | throw error; 12 | } 13 | 14 | const server = createServer(app.callback()); 15 | 16 | server.listen(5001, () => { 17 | return console.log( 18 | `SERVER ON: http://localhost:${process.env.PORT || 5001}` 19 | ); 20 | }); 21 | })(); -------------------------------------------------------------------------------- /packages/rest/src/middleware/errorHandling.js: -------------------------------------------------------------------------------- 1 | const errorHandling = async (ctx, next) => { 2 | try { 3 | await next(); 4 | } catch (err) { 5 | ctx.status = err.status || 500; 6 | ctx.body = { message: err.message }; 7 | } 8 | }; 9 | 10 | export default errorHandling; -------------------------------------------------------------------------------- /packages/rest/src/models/article.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | const Schema = mongoose.Schema; 3 | 4 | const article = new Schema({ 5 | idUser: { 6 | type: String, 7 | required: "idUser is requerid" 8 | }, 9 | title: { 10 | type: String, 11 | required: "title is requerid" 12 | }, 13 | subtitle: { 14 | type: String, 15 | required: "subtitle is requerid" 16 | }, 17 | description: { 18 | type: String, 19 | required: "author is requerid" 20 | }, 21 | author: { 22 | type: [String], 23 | required: "author is requerid" 24 | }, 25 | date: { 26 | type: Date, 27 | default: Date.now, 28 | }, 29 | date_update: { 30 | type: Date 31 | }, 32 | slug: { 33 | type: String, 34 | required: "slug is requerid" 35 | } 36 | }); 37 | 38 | export default mongoose.model("articles", article); 39 | -------------------------------------------------------------------------------- /packages/rest/src/models/comment.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | const Schema = mongoose.Schema; 3 | 4 | const comment = new Schema({ 5 | username: { 6 | type: String, 7 | required: "name is required" 8 | }, 9 | description: { 10 | type: String, 11 | required: "description is required" 12 | }, 13 | idArticle: { 14 | type: String, 15 | required: "idArticle required" 16 | }, 17 | idUser: { 18 | type: String, 19 | required: "idUser required" 20 | } 21 | }); 22 | 23 | export default mongoose.model("comments", comment); 24 | -------------------------------------------------------------------------------- /packages/rest/src/models/users.js: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | const Schema = mongoose.Schema; 3 | 4 | const users = new Schema({ 5 | name: { 6 | type: String, 7 | required: 'name is requerid', 8 | }, 9 | email:{ 10 | type: String, 11 | required: 'email is requerid', 12 | }, 13 | password:{ 14 | type: String, 15 | required: 'password is requerid', 16 | } 17 | 18 | }); 19 | 20 | export default mongoose.model('users', users) 21 | -------------------------------------------------------------------------------- /packages/rest/src/routes/blog.js: -------------------------------------------------------------------------------- 1 | import Router from "koa-router"; 2 | import { 3 | loginUser, 4 | createUser, 5 | } from "../controllers/users"; 6 | import { 7 | CreateOneComment, 8 | GetComments, 9 | DeleteOneComment, 10 | UpdateOneComment 11 | } from "../controllers/comments"; 12 | import { 13 | CreateOneArticles, 14 | DeleteOneArticle, 15 | FindArticles, 16 | FindOneArticles, 17 | UpdateOneArticle, 18 | Permalink 19 | } from "../controllers/articles"; 20 | 21 | import { authMiddleware } from "./../auth"; 22 | 23 | const router = new Router(); 24 | 25 | // create user and login 26 | router.post("/api/login", loginUser); 27 | router.post("/api/createUser", createUser); 28 | // articles 29 | router.get("/api/articles", authMiddleware, FindArticles); 30 | router.get("/api/article/:id", authMiddleware, FindOneArticles); 31 | router.post("/api/article", authMiddleware, CreateOneArticles); 32 | router.delete("/api/article/:id", authMiddleware, DeleteOneArticle); 33 | router.put("/api/article/:id", authMiddleware, UpdateOneArticle); 34 | // comments 35 | router.get("/api/comment/:idArticle", authMiddleware, GetComments); 36 | router.post("/api/comment", authMiddleware, CreateOneComment); 37 | router.put("/api/comment", authMiddleware, UpdateOneComment); 38 | router.delete("/api/comment/:id", authMiddleware, DeleteOneComment); 39 | 40 | //permalink 41 | router.get("/api/permalink", authMiddleware, Permalink); 42 | 43 | export default router.routes(); 44 | -------------------------------------------------------------------------------- /packages/rest/test.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wellers0n/Backend-diff/ba68a295ddf50664ca6eb68c7f4de3fbe067ef7c/packages/rest/test.js --------------------------------------------------------------------------------