From c609113d8ae64b82feae792ff1b85ffe7f0de2d0 Mon Sep 17 00:00:00 2001 From: manhtien465 Date: Mon, 17 Apr 2023 16:57:31 +0700 Subject: [PATCH] add --- .babelrc | 19 + .dockerignore | 52 + .editorconfig | 13 + .env.example | 22 + .eslintignore | 1 + .eslintrc | 43 + .gitignore | 58 + .gitlab-ci.yml | 97 + Dockerfile | 8 + README.md | 82 + docker-compose.dev-event-dispatcher.yml | 6 + docker-compose.dev-worker.yml | 6 + docker-compose.dev.yml | 6 + docker-compose.yml | 26 + package.json | 109 + process copy.yml | 19 + process.yml | 19 + public/2/about.jpg | Bin 0 -> 251887 bytes src/api/controllers/v1/auth.controller.js | 32 + src/api/controllers/v1/image.controller.js | 95 + src/api/controllers/v1/path.controller.js | 111 + src/api/controllers/v1/staff.controller.js | 177 + .../v1/stock-take-excel.controller.js | 56 + .../controllers/v1/user-excel.controller.js | 32 + src/api/controllers/v1/user.controller.js | 134 + src/api/middlewares/ApiError.js | 48 + src/api/middlewares/auth.middleware.js | 331 + src/api/middlewares/authen.middleware.js | 109 + src/api/middlewares/error.js | 72 + src/api/middlewares/errors.js | 67 + src/api/middlewares/image.middleware.js | 17 + src/api/middlewares/staff.middleware.js | 113 + src/api/middlewares/user.middleware.js | 88 + src/api/routes/v1/auth.route.js | 38 + src/api/routes/v1/image.route.js | 38 + src/api/routes/v1/index.js | 26 + src/api/routes/v1/path.route.js | 32 + src/api/routes/v1/staff.route.js | 63 + src/api/routes/v1/user.route.js | 46 + src/api/validations/v1/auth.validation.js | 33 + src/api/validations/v1/excel.validation.js | 14 + src/api/validations/v1/image.validation.js | 39 + src/api/validations/v1/staff.validation.js | 69 + src/api/validations/v1/user.validation.js | 96 + src/common/models/config.model.js | 408 + src/common/models/file.model.js | 276 + src/common/models/image.model.js | 292 + src/common/models/user.model.js | 1005 +++ src/common/services/adapters/sharp-adapter.js | 101 + .../services/adapters/upload-adapter.js | 109 + src/common/services/event-bus.js | 9 + src/common/services/managers/image-manager.js | 0 .../services/managers/upload-manager.js | 53 + src/common/services/service-client.js | 28 + src/common/utils/APIException.js | 51 + src/common/utils/Permissions.js | 120 + src/common/utils/utilities.js | 7 + src/config/express.js | 54 + src/config/i18n.js | 8 + src/config/locales/en.json | 21 + src/config/locales/vi.json | 4 + src/config/messages.js | 21 + src/config/mongoose.js | 38 + src/config/persistent.js | 117 + src/config/postgres.js | 40 + src/config/rabbitmq.js | 29 + src/config/redis.js | 71 + src/config/vars.js | 35 + src/event-adapter/index.js | 5 + src/index-event-dispatcher.js | 27 + src/index-worker.js | 27 + src/index.js | 46 + src/providers/index.js | 8 + src/providers/upload-event.js | 8 + src/worker/index.js | 5 + yarn.lock | 7225 +++++++++++++++++ 76 files changed, 12810 insertions(+) create mode 100644 .babelrc create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 docker-compose.dev-event-dispatcher.yml create mode 100644 docker-compose.dev-worker.yml create mode 100644 docker-compose.dev.yml create mode 100644 docker-compose.yml create mode 100644 package.json create mode 100644 process copy.yml create mode 100644 process.yml create mode 100644 public/2/about.jpg create mode 100644 src/api/controllers/v1/auth.controller.js create mode 100644 src/api/controllers/v1/image.controller.js create mode 100644 src/api/controllers/v1/path.controller.js create mode 100644 src/api/controllers/v1/staff.controller.js create mode 100644 src/api/controllers/v1/stock-take-excel.controller.js create mode 100644 src/api/controllers/v1/user-excel.controller.js create mode 100644 src/api/controllers/v1/user.controller.js create mode 100644 src/api/middlewares/ApiError.js create mode 100644 src/api/middlewares/auth.middleware.js create mode 100644 src/api/middlewares/authen.middleware.js create mode 100644 src/api/middlewares/error.js create mode 100644 src/api/middlewares/errors.js create mode 100644 src/api/middlewares/image.middleware.js create mode 100644 src/api/middlewares/staff.middleware.js create mode 100644 src/api/middlewares/user.middleware.js create mode 100644 src/api/routes/v1/auth.route.js create mode 100644 src/api/routes/v1/image.route.js create mode 100644 src/api/routes/v1/index.js create mode 100644 src/api/routes/v1/path.route.js create mode 100644 src/api/routes/v1/staff.route.js create mode 100644 src/api/routes/v1/user.route.js create mode 100644 src/api/validations/v1/auth.validation.js create mode 100644 src/api/validations/v1/excel.validation.js create mode 100644 src/api/validations/v1/image.validation.js create mode 100644 src/api/validations/v1/staff.validation.js create mode 100644 src/api/validations/v1/user.validation.js create mode 100644 src/common/models/config.model.js create mode 100644 src/common/models/file.model.js create mode 100644 src/common/models/image.model.js create mode 100644 src/common/models/user.model.js create mode 100644 src/common/services/adapters/sharp-adapter.js create mode 100644 src/common/services/adapters/upload-adapter.js create mode 100644 src/common/services/event-bus.js create mode 100644 src/common/services/managers/image-manager.js create mode 100644 src/common/services/managers/upload-manager.js create mode 100644 src/common/services/service-client.js create mode 100644 src/common/utils/APIException.js create mode 100644 src/common/utils/Permissions.js create mode 100644 src/common/utils/utilities.js create mode 100644 src/config/express.js create mode 100644 src/config/i18n.js create mode 100644 src/config/locales/en.json create mode 100644 src/config/locales/vi.json create mode 100644 src/config/messages.js create mode 100644 src/config/mongoose.js create mode 100644 src/config/persistent.js create mode 100644 src/config/postgres.js create mode 100644 src/config/rabbitmq.js create mode 100644 src/config/redis.js create mode 100644 src/config/vars.js create mode 100644 src/event-adapter/index.js create mode 100644 src/index-event-dispatcher.js create mode 100644 src/index-worker.js create mode 100644 src/index.js create mode 100644 src/providers/index.js create mode 100644 src/providers/upload-event.js create mode 100644 src/worker/index.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..62059b9 --- /dev/null +++ b/.babelrc @@ -0,0 +1,19 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "node": "current" + } + } + ] + ], + "env": { + "test": { + "plugins": [ + "istanbul" + ] + } + } +} \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..acbac31 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,52 @@ +# Environment variables + +# Logs +logs +*.log +npm-debug.log* + +# Documentation +docs + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Dist folder +dist + +# Project file +*.sublime-project +*.sublime-workspace + +# Git file +.git + +# Docker file +*Dockerfile* +*docker-compose* + +# Deploy folder and file +deploy +.gitlab-ci.yml + +# Documentation file +*.md \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e9a9bff --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ca53224 --- /dev/null +++ b/.env.example @@ -0,0 +1,22 @@ +# App config +NODE_ENV=development +PORT=3004 + +# Db config +POSTGRES_URI=postgres://admin:admin@127.0.0.1:5432/game +POSTGRES_URI_TEST=postgres://admin:admin@127.0.0.1:5432/game-test + +MONGO_URI=mongodb://127.0.0.1:27017/game-event?authSource=admin +MONGO_URI_TEST=mongodb://127.0.0.1:27017/game-event?authSource=admin + +RABBITMQ_URI=amqp://127.0.0.1:5672 +REDIS_URI=redis://127.0.0.1:6379 + +# Cdn config +CDN_URI=http://103.162.31.170 +DEV_CDN_URI=http://103.162.31.170 +STORAGE_URI=/home/storages +DEV_STORAGE_URI=/home/storages + +# Other service +MANAGER_SERVICE_URL=http://sv-backend-manager \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..4be6e16 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +dist/* \ No newline at end of file diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..6126caa --- /dev/null +++ b/.eslintrc @@ -0,0 +1,43 @@ +{ + "rules": { + "no-console": 0, + "no-underscore-dangle": 0, + "no-unused-vars": [ + "error", + { + "argsIgnorePattern": "next" + } + ], + "no-use-before-define": [ + "error", + { + "variables": false + } + ], + "no-multi-str": 0, + "indent": [ + "warn", + 4, + { + "SwitchCase": 1 + } + ], + "object-shorthand": "off", + "prefer-destructuring": "off", + "comma-dangle": "off", + "object-curly-newline": "off", + "arrow-parens": "off", + "max-len": "off", + "function-paren-newline": "off" + }, + "env": { + "node": true, + "browser": true + }, + "parserOptions": { + "ecmaVersion": 8 + }, + "extends": [ + "airbnb-base" + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d90a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,58 @@ +# Use yarn.lock instead +package-lock.json +yarn.json + +# Environment variables +.env +.env-live.example + +# Logs +logs +*.log +npm-debug.log* + +# Documentation +docs + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Dist folder +dist +-p + +# Project file +*.sublime-project +*.sublime-workspace + +.vs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..b70f05e --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,97 @@ +image: docker:latest +services: + - docker:dind + +stages: + - build + - deploy + +variables: + IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME + KUBECONFIG: /etc/deploy/config + NAMESPACE: sv-production + APP_NAME: sv-backend-file + +build: + stage: build + script: + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com + - docker pull $IMAGE_TAG-builder || echo "Building builder from scratch" + - docker pull $IMAGE_TAG || echo "Building runtime from scratch" + - > + docker build + --target=builder + --cache-from $IMAGE_TAG-builder + -t $IMAGE_TAG-builder . + - > + docker build + --cache-from $IMAGE_TAG + --cache-from $IMAGE_TAG-builder + --build-arg GIT_COMMIT_TAG="$CI_COMMIT_SHA $(TZ=':Asia/Ho_Chi_Minh' date)" + -t $IMAGE_TAG . + - docker push $IMAGE_TAG-builder + - docker push $IMAGE_TAG + only: + - dev + # - master + +deploy_dev: + stage: deploy + image: thanhnguyenit/docker-helm + environment: + name: development + before_script: + - mkdir -p /etc/deploy + - eval ${DEV_GET_KUBECONFIG} > ${KUBECONFIG} + - helm init --client-only + # Escape URI + - export DEV_MONGO_URI=$(echo ${DEV_MONGO_URI} | sed -e "s/\,/\\\,/g" - ) + - export DEV_MONGO_URI_TESTS=$(echo ${DEV_MONGO_URI_TESTS} | sed -e "s/\,/\\\,/g" - ) + - export DEV_RABBITMQ_URI=$(echo ${DEV_RABBITMQ_URI} | sed -e "s/\,/\\\,/g" - ) + - export DEV_REDIS_URI=$(echo ${DEV_REDIS_URI} | sed -e "s/\,/\\\,/g" - ) + script: + - > + helm upgrade --install + --namespace=${NAMESPACE} + --set "mongo.uri=${DEV_MONGO_URI}" + --set "mongo.uriTest=${DEV_MONGO_URI_TESTS}" + --set "rabbitmq.uri=${DEV_RABBITMQ_URI}" + --set "redis.uri=${DEV_REDIS_URI}" + --set "commitSha=${CI_COMMIT_SHA}" + --set "image.repository=${CI_REGISTRY_IMAGE}" + --set "image.tag=${CI_COMMIT_REF_NAME}" + --set "replicaCount=1" + --set "worker.replicaCount=1" + --set "eventDispatcher.replicaCount=1" + ${APP_NAME} ./deploy/helm + only: + - dev + +# deploy_prod: +# stage: deploy +# image: thanhnguyenit/docker-helm +# environment: +# name: production +# before_script: +# - mkdir -p /etc/deploy +# - echo ${KUBE_CONFIG} | base64 -d > ${KUBECONFIG} +# - helm init --client-only +# # Escape URI +# - export MONGO_URI=$(echo ${MONGO_URI} | sed -e "s/\,/\\\,/g" - ) +# - export MONGO_URI_TESTS=$(echo ${MONGO_URI_TESTS} | sed -e "s/\,/\\\,/g" - ) +# - export RABBITMQ_URI=$(echo ${RABBITMQ_URI} | sed -e "s/\,/\\\,/g" - ) +# - export REDIS_URI=$(echo ${REDIS_URI} | sed -e "s/\,/\\\,/g" - ) +# script: +# - > +# helm upgrade --install +# --namespace=${NAMESPACE} +# --set "mongo.uri=${MONGO_URI}" +# --set "mongo.uriTest=${MONGO_URI_TESTS}" +# --set "rabbitmq.uri=${RABBITMQ_URI}" +# --set "redis.uri=${REDIS_URI}" +# --set "commitSha=${CI_COMMIT_SHA}" +# --set "image.repository=${CI_REGISTRY_IMAGE}" +# --set "image.tag=${CI_COMMIT_REF_NAME}" +# ${APP_NAME} ./deploy/helm +# only: +# - master \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8c5f815 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:alpine + +WORKDIR / +RUN apk add --no-cache git openssh +COPY . . +RUN yarn +RUN yarn build +CMD ["yarn", "docker:start"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d504af --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# B2C Backend File + +[![pipeline status](https://gitlab.com/csell-team/b2c/sv-backend-file/badges/master/pipeline.svg)](https://gitlab.com/csell-team/b2c/sv-backend-file/commits/master) + +Microservice handles all file logics + +## Requirements + + - [Node v8+](https://nodejs.org/en/download/current/) or [Docker](https://www.docker.com/) + - [Yarn](https://yarnpkg.com/en/docs/install) + +## Getting Started + +Install dependencies: + +```bash +yarn +``` + +Set environment variables: + +```bash +cp .env.example .env +``` + +## Running Locally + +```bash +yarn dev +``` + +## Running in Production + +```bash +yarn start +``` + +## Lint + +```bash +# lint code with ESLint +yarn lint + +# try to fix ESLint errors +yarn lint:fix + +# lint and watch for changes +yarn lint:watch +``` + +## Test + +```bash +# run all tests with Mocha +yarn test + +# run unit tests +yarn test:unit + +# run integration tests +yarn test:integration + +# run all tests and watch for changes +yarn test:watch + +# open nyc test coverage reports +yarn coverage +``` + +## Validate + +```bash +# run lint and tests +yarn validate +``` + +## Logs + +```bash +# show logs in production +pm2 logs +``` diff --git a/docker-compose.dev-event-dispatcher.yml b/docker-compose.dev-event-dispatcher.yml new file mode 100644 index 0000000..7d49b68 --- /dev/null +++ b/docker-compose.dev-event-dispatcher.yml @@ -0,0 +1,6 @@ +version: "2" +services: + sv-backend-product: + environment: + - NODE_ENV=development + command: yarn dev-event-dispatcher -- -L \ No newline at end of file diff --git a/docker-compose.dev-worker.yml b/docker-compose.dev-worker.yml new file mode 100644 index 0000000..0390133 --- /dev/null +++ b/docker-compose.dev-worker.yml @@ -0,0 +1,6 @@ +version: "2" +services: + sv-backend-product: + environment: + - NODE_ENV=development + command: yarn dev-worker -- -L \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..785e5ee --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,6 @@ +version: "2" +services: + sv-backend-product: + environment: + - NODE_ENV=development + command: yarn dev -- -L \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d15f0ad --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: "2" +services: + sv-backend-product: + container_name: sv_backend_product + build: . + environment: + - PORT=6000 + - POSTGRES_URI=postgres://admin:admin@postgresql:5432/b2c + - POSTGRES_URI_TEST=postgres://admin:admin@postgresql:5432/b2c-test + - MONGO_URI=mongodb://mongo:27017/b2c-event?authSource=admin + - MONGO_URI_TEST=mongodb://mongo:27017/b2c-event-test?authSource=admin + - RABBITMQ_URI=amqp://rabbitmq:5672 + - REDIS_URI=redis://redis:6379 + - MANAGER_SERVICE_URL=https://sv_backend_manager + user: "1000:1000" + volumes: + - .:/app + ports: + - "6001:6000" + external_links: + - mongodb + networks: + - docker_sv_backend_common +networks: + docker_sv_backend_common: + external: true diff --git a/package.json b/package.json new file mode 100644 index 0000000..7058b6d --- /dev/null +++ b/package.json @@ -0,0 +1,109 @@ +{ + "name": "backend-image", + "version": "1.0.0", + "description": "Service backend image", + "author": "Mạnh Tiến", + "main": "/src/index.js", + "private": true, + "license": "MIT", + "engines": { + "node": ">=8", + "yarn": "*" + }, + "nyc": { + "require": [ + "babel-register" + ], + "sourceMap": false, + "instrument": false + }, + "scripts": { + "precommit": "yarn lint", + "clean": "./node_modules/.bin/rimraf dist -p", + "build": "yarn run clean && mkdir -p dist && ./node_modules/.bin/babel src -s -D -d dist", + "start": "cross-env NODE_ENV=production pm2 start ./dist/index.js", + "start-worker": "cross-env NODE_ENV=production pm2 start docker-process.yml --only worker", + "start-event-dispatcher": "cross-env NODE_ENV=production pm2 start docker-process.yml --only event-dispatcher", + "dev": "nodemon src/index.js --exec ./node_modules/.bin/babel-node", + "dev-worker": "nodemon src/index-worker.js --exec ./node_modules/.bin/babel-node", + "dev-event-dispatcher": "nodemon src/index-event-dispatcher.js --exec ./node_modules/.bin/babel-node", + "lint": "eslint **/*.js --ignore-path .gitignore --ignore-pattern internals/scripts", + "lint:fix": "yarn lint -- --fix", + "lint:watch": "yarn lint -- --watch", + "test": "cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha --timeout 20000 --recursive src/api/tests", + "test:unit": "cross-env NODE_ENV=test mocha dist/api/tests/unit", + "test:integration": "cross-env NODE_ENV=test mocha --timeout 20000 dist/api/tests/integration", + "test:watch": "cross-env NODE_ENV=test mocha --watch dist/api/tests/unit", + "coverage": "nyc report --reporter=text-lcov | coveralls", + "validate": "yarn lint && yarn test", + "postpublish": "git push --tags", + "docker:start": "node ./dist/index.js --exec ./node_modules/.bin/babel-node", + "docker:dev": "docker-compose -f docker-compose.yml -f docker-compose.dev.yml up", + "docker:test": "docker-compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exit" + }, + "repository": { + "type": "git", + "url": "git@gitlab.com:csell-team/b2c/sv-backend-file.git" + }, + "dependencies": { + "amqplib": "^0.5.2", + "auth-adapter": "1.1.0", + "axios": "^0.18.0", + "bcryptjs": "^2.4.3", + "bluebird": "^3.5.2", + "body-parser": "^1.17.0", + "bull": "^3.4.1", + "busboy": "^1.6.0", + "compression": "^1.6.2", + "cors": "^2.8.3", + "cross-env": "^5.0.1", + "dotenv-safe": "^5.0.1", + "exceljs": "^4.3.0", + "express": "^4.15.2", + "express-validation": "^1.0.2", + "fs-extra": "^10.1.0", + "helmet": "^3.5.0", + "http-status": "^1.0.1", + "i18n": "^0.8.3", + "image-downloader": "^4.3.0", + "ioredis": "^4.14.0", + "joi": "^10.4.1", + "jsonwebtoken": "^8.5.1", + "lodash": "^4.17.4", + "method-override": "^2.3.8", + "moment-timezone": "^0.5.13", + "mongoose": "^5.7.0", + "morgan": "^1.8.1", + "multer": "^1.4.2", + "nanoid": "^2.0.3", + "pg": "^8.5.1", + "pg-hstore": "^2.3.3", + "pm2": "^2.4.6", + "query-string": "^7.0.0", + "rabbit-event-source": "1.0.0", + "request": "^2.88.2", + "sequelize": "^6.3.5", + "sharp": "^0.30.6", + "uuid": "^9.0.0", + "xlsx": "^0.16.9" + }, + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-env": "^1.6.1", + "chai": "^4.1.0", + "chai-as-promised": "^7.1.1", + "coveralls": "^3.0.0", + "eslint": "^4.2.0", + "eslint-config-airbnb-base": "^12.0.1", + "eslint-plugin-import": "^2.2.0", + "husky": "^0.14.3", + "mocha": "^3.3.0", + "nodemon": "^1.11.0", + "nyc": "^11.0.3", + "rimraf": "^2.6.2", + "sinon": "^6.1.0", + "sinon-chai": "^3.0.0", + "supertest": "^3.0.0" + } +} diff --git a/process copy.yml b/process copy.yml new file mode 100644 index 0000000..fe415c6 --- /dev/null +++ b/process copy.yml @@ -0,0 +1,19 @@ +apps: + - script : './dist/index.js' + name : 'file-api' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 + - script : './dist/index-event-dispatcher.js' + name : 'file-event-dispatcher' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 + - script : './dist/index-worker.js' + name : 'file-worker' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 diff --git a/process.yml b/process.yml new file mode 100644 index 0000000..fe415c6 --- /dev/null +++ b/process.yml @@ -0,0 +1,19 @@ +apps: + - script : './dist/index.js' + name : 'file-api' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 + - script : './dist/index-event-dispatcher.js' + name : 'file-event-dispatcher' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 + - script : './dist/index-worker.js' + name : 'file-worker' + min_uptime: 10000 + max_restarts: 15 + restart_delay: 2000 + kill_timeout: 3000 diff --git a/public/2/about.jpg b/public/2/about.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9ab0803ffed89c5d20a8b45d0139e425fe4f5ab GIT binary patch literal 251887 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

U6FK|p~?Qoc?T$}W`;UoS*tU*>74jJ(e0 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�!W+tkYz{524ed%<0w>Y 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 { + const user = new User( + req.body + ); + user.save() + .then(data => { + res.json({ + code: 0, + message: messages.CREATE_SUCCESS, + data: User.transform(data) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; +exports.login = async (req, res, next) => { + res.json({ + code: 0, + message: null, + data: { token: req.locals.token, user: req.locals.user } + }); +}; +exports.loginToken = async (req, res, next) => res.json({ + code: 0, + message: messages.CREATE_SUCCESS, + data: { token: req.locals.token, data: req.locals.user } +}); diff --git a/src/api/controllers/v1/image.controller.js b/src/api/controllers/v1/image.controller.js new file mode 100644 index 0000000..1045636 --- /dev/null +++ b/src/api/controllers/v1/image.controller.js @@ -0,0 +1,95 @@ +/* eslint-disable camelcase */ + +import path from 'path'; +import Busboy from 'busboy'; +import fs from 'fs-extra'; +import multer from 'multer'; +import httpStatus from 'http-status'; +import moment from 'moment-timezone'; +import { handler as ErrorHandel } from '../../middlewares/errors'; +import ApiException from '../../../common/utils/APIException'; +import eventBus from '../../../common/services/event-bus'; +import Image from '../../../common/models/image.model'; +import { + cdn as cdnConfig, + storage as storageConfig +} from '../../../config/vars'; +/** storage will create folder when new date */ +const date = new Date(); +const year = moment(date).format('YYYY'); +const month = moment(date).format('MM'); +const filePath = `${storageConfig.uri}/${year}/${month}/upload`; + + +const replaceBaseUrl = (location) => + location.replace(storageConfig.uri, cdnConfig.uri); + + +exports.uploadSingle = (req, res, next) => { + try { + if (!req.file) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + /** resize image uploaded */ + // eventBus.emit(Image.Events.IMAGE_CREATED, req.file); + return res.json({ url: replaceBaseUrl(req.file.path) }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +/** + * Upload multiple + * + * @param {Formdata} file + */ +exports.uploadMultiple = (req, res, next) => { + try { + if (!req.files) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + const urls = []; + for (let index = 0; index < req.files.length; index += 1) { + urls.push(replaceBaseUrl(req.files[index].path)); + /** resize image uploaded */ + eventBus.emit(Image.Events.IMAGE_CREATED, req.files[index]); + } + return res.json({ urls: urls }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +exports.uploadFile = (req, res, next) => { + try { + let filename = null; + const cfg = { highWaterMark: 2097152 }; + cfg.headers = req.headers; + req.busboy = Busboy(cfg); + multer({ dest: `${filePath}` }); + req.pipe(req.busboy); // Pipe it trough busboy + return req.busboy.on('file', (name, file, info) => { + filename = info.filename; + console.log('start', filename); + // Create a write stream of the new file + const fstream = fs.createWriteStream(path.join(filePath, filename)); + // Pipe it trough + file.pipe(fstream); + + // On finish of the upload + fstream.on('close', () => { + console.log(`Upload of '${filename}' finished`); + return res.json({ url: replaceBaseUrl(`${filePath}/${filename}`) }); + }); + }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + diff --git a/src/api/controllers/v1/path.controller.js b/src/api/controllers/v1/path.controller.js new file mode 100644 index 0000000..577cd39 --- /dev/null +++ b/src/api/controllers/v1/path.controller.js @@ -0,0 +1,111 @@ +// import httpStatus from 'http-status'; +import fs from 'fs'; + +import { handler as ErrorHandel } from '../../middlewares/errors'; +// import ApiException from '../../../common/utils/APIException'; +import { + + cdn as cdnConfig, + storage as storageConfig +} from '../../../config/vars'; +import uploadAdapter from '../../../common/services/adapters/upload-adapter'; + +/** + * get file and folder + * + * @param {Formdata} file + */ +exports.get = (req, res, next) => { + try { + const user = req.user; + + let path = `${storageConfig.uri}/${user.id}`; + // let path = storageConfig.uri; + if (req.body.path) { + path += req.body.path; + } + const listFile = []; + + fs.readdir(path, (err, files) => { + if (files && files.length > 0) { + files.forEach((item) => { + listFile.push({ + name: item, + path: `${cdnConfig.uri}/${user.id}${req.body.path}/${item}`, + isFolder: fs.lstatSync(`${storageConfig.uri}/${user.id}/${req.body.path}/${item}`).isDirectory() + }); + }); + } + return res.json({ + code: 0, + data: listFile + }); + }); + return null; + /** resize image uploaded */ + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +/** + * get file and folder + * + * @param {Formdata} file + */ +exports.create = (req, res, next) => { + const user = req.user; + + let dir = `${user.id}`; + console.log(dir); + if (req.body.path) { + dir += req.body.path; + } + if (req.body.name) { + dir += `/${req.body.name}`; + } + if (!fs.existsSync(dir)) { + uploadAdapter.createFolder({ path: dir }); + } + return res.json({ code: 0, message: 'success' }); +}; + +/** + * get file and folder + * + * @param {Formdata} file + */ +exports.update = (req, res, next) => { + try { + console.log(cdnConfig.uri, storageConfig.uri); + const oldPath = req.body.oldPath.replace(cdnConfig.uri, storageConfig.uri); + const newPath = req.body.newPath.replace(cdnConfig.uri, storageConfig.uri); + console.log('aaa', oldPath, newPath); + fs.rename(oldPath, newPath, (err) => { + if (err) { + console.log(err); + return res.status(400).json({ code: 400, message: 'lỗi' }); + } + return res.json({ code: 0, message: 'success' }); + }); + return null; + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + + +exports.delete = (req, res, next) => { + try { + const path = req.body.path.replace(cdnConfig.uri, storageConfig.uri); + fs.rm(path, { recursive: true }, err => { + if (err) { + return res.status(400).json({ code: 400, message: 'lỗi', detail: err }); + } + return res.json({ code: 0, message: 'success' }); + }); + return null; + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; diff --git a/src/api/controllers/v1/staff.controller.js b/src/api/controllers/v1/staff.controller.js new file mode 100644 index 0000000..45b0f31 --- /dev/null +++ b/src/api/controllers/v1/staff.controller.js @@ -0,0 +1,177 @@ +import { pick } from 'lodash'; +// import httpStatus from 'http-status'; +import messages from '../../../config/messages'; +import { handler as ErrorHandler } from '../../middlewares/error'; +import User from '../../../common/models/user.model'; + +/** + * Create + * + * @public + * @param {StorySchema} body + * @returns {Promise, APIException>} + */ +exports.create = async (req, res, next) => { + // transform data + req.body.created_by = pick(req.user, ['id', 'name']); + + // save data + await User.create(req.body) + .then(data => { + res.json({ + code: 0, + message: messages.CREATE_SUCCESS, + data: User.transform(data) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * List + * + * @public + * @param {StorySchema} query + * @returns {Promise, APIException>} + */ +exports.list = async (req, res, next) => { + // req.query.types = User.Types.STAFF; + User.list( + req.query + ).then(result => { + res.json({ + code: 0, + count: req.totalRecords, + data: result.map( + x => User.transform(x) + ) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * Detail + * + * @public + * @param {params} userId, + * @returns {Promise, APIException>} + */ +exports.get = async (req, res, next) => res.json({ data: User.transform(req.locals.user, true) }); + +/** + * Update + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.update = async (req, res, next) => { + const { user } = req.locals; + + return User.update( + req.body, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * delete + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.delete = async (req, res, next) => { + const { user } = req.locals; + + return User.update( + { + is_active: false, + updated_at: new Date(), + updated_by: pick(req.user, ['id', 'name']) + }, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.REMOVE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +exports.getStaffPermission = async (req, res, next) => { + const { story } = req.locals; + return res.json({ + code: 0, + data: story + }); +}; + +exports.block = async (req, res, next) => { + const { user } = req.locals; + + return User.update( + { + status: User.Statuses.INACTIVE, + status_name: User.NameStatuses.INACTIVE, + updated_at: new Date(), + updated_by: pick(req.user, ['id', 'name']) + }, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; +exports.active = async (req, res, next) => { + const { user } = req.locals; + + return User.update( + { + status: User.Statuses.ACTIVE, + status_name: User.NameStatuses.INACTIVE, + updated_at: new Date(), + updated_by: pick(req.user, ['id', 'name']) + }, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; diff --git a/src/api/controllers/v1/stock-take-excel.controller.js b/src/api/controllers/v1/stock-take-excel.controller.js new file mode 100644 index 0000000..af0e08b --- /dev/null +++ b/src/api/controllers/v1/stock-take-excel.controller.js @@ -0,0 +1,56 @@ +import httpStatus from 'http-status'; +import { handler as ErrorHandel } from '../../middlewares/errors'; +import ApiException from '../../../common/utils/APIException'; +import { cdn as cdnConfig, storage as storageConfig } from '../../../config/vars'; + +const replaceBaseUrl = (location) => + location.replace(storageConfig.uri, `${cdnConfig.uri}`); + +/** + * Generate file + * + * @param {Formdata} file + */ +exports.generate = (req, res, next) => { + try { + if (!req.file) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + + return res.json({ + code: 0, + message: 'Tải dữ liệu thành công !', + data: req.locals ? req.locals.data : null, + url: replaceBaseUrl(req.file.path) + }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; + +/** + * Get item + * + * @param {Formdata} file + */ +exports.getItem = (req, res, next) => { + try { + if (!req.file) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + + return res.json({ + code: 0, + data: req.locals.data, + url: replaceBaseUrl(req.file.path) + }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; diff --git a/src/api/controllers/v1/user-excel.controller.js b/src/api/controllers/v1/user-excel.controller.js new file mode 100644 index 0000000..676d441 --- /dev/null +++ b/src/api/controllers/v1/user-excel.controller.js @@ -0,0 +1,32 @@ +import httpStatus from 'http-status'; +import { handler as ErrorHandel } from '../../middlewares/errors'; +import ApiException from '../../../common/utils/APIException'; +import { cdn as cdnConfig, storage as storageConfig } from '../../../config/vars'; + +const replaceBaseUrl = (location) => + location.replace(storageConfig.uri, `${cdnConfig.uri}`); + +/** + * Generate file + * + * @param {Formdata} file + */ +exports.generate = (req, res, next) => { + try { + if (!req.file) { + throw new ApiException({ + status: httpStatus.BAD_REQUEST, + message: 'Invalid file!' + }); + } + + return res.json({ + code: 0, + message: 'Tải dữ liệu thành công !', + data: req.locals ? req.locals.data : null, + url: replaceBaseUrl(req.file.path) + }); + } catch (ex) { + return ErrorHandel(ex, req, res, next); + } +}; diff --git a/src/api/controllers/v1/user.controller.js b/src/api/controllers/v1/user.controller.js new file mode 100644 index 0000000..0fdfa53 --- /dev/null +++ b/src/api/controllers/v1/user.controller.js @@ -0,0 +1,134 @@ +import { pick } from 'lodash'; +// import httpStatus from 'http-status'; +import messages from '../../../config/messages'; +import { handler as ErrorHandler } from '../../middlewares/error'; +import User from '../../../common/models/user.model'; +import uploadAdapter from '../../../common/services/adapters/upload-adapter'; + +/** + * Create + * + * @public + * @param {StorySchema} body + * @returns {Promise, APIException>} + */ +exports.create = async (req, res, next) => { + // transform data + req.body.created_by = pick(req.user, ['id', 'name']); + const params = req.body; + params.type = User.Types.INDIVIDUAL; + params.service = User.Services.INDIVIDUAL; + // save data + await User.create(req.body) + .then(data => { + uploadAdapter.createDefaultFolder({ id: data.id }); + res.json({ + code: 0, + message: messages.CREATE_SUCCESS, + data: User.transform(data) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * List + * + * @public + * @param {StorySchema} query + * @returns {Promise, APIException>} + */ +exports.list = async (req, res, next) => { + User.list( + req.query + ).then(result => { + res.json({ + code: 0, + count: req.totalRecords, + data: result.map( + x => User.transform(x) + ) + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * Detail + * + * @public + * @param {params} userId, + * @returns {Promise, APIException>} + */ +exports.get = async (req, res, next) => res.json({ data: User.transform(req.locals.user) }); + +/** + * Update + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.update = async (req, res, next) => { + const { user } = req.locals; + const dataChanged = user.getChangedProperties(req.body); + const updateUser = Object.assign( + user, + pick(req.body, dataChanged) + ); + return User.update( + updateUser, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.UPDATE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +/** + * delete + * + * @public + * @param {params} userId + * @returns {Promise, APIException>} + */ +exports.delete = async (req, res, next) => { + const { user } = req.locals; + const updateUser = Object.assign( + user, + { is_active: true } + ); + return User.update( + updateUser, + { + where: { + id: user.id + } + } + ).then(() => { + res.json({ + code: 0, + message: messages.REMOVE_SUCCESS + }); + }).catch(ex => { + ErrorHandler(ex, req, res, next); + }); +}; + +exports.getStaffPermission = async (req, res, next) => { + const { story } = req.locals; + return res.json({ + code: 0, + data: story + }); +}; diff --git a/src/api/middlewares/ApiError.js b/src/api/middlewares/ApiError.js new file mode 100644 index 0000000..3db87da --- /dev/null +++ b/src/api/middlewares/ApiError.js @@ -0,0 +1,48 @@ +const httpStatus = require('http-status'); + +/** + * @extends Error + */ +class ExtendableError extends Error { + constructor({ message, errors, status, isPublic, stack }) { + super(message); + this.name = this.constructor.name; + this.message = message; + this.errors = errors; + this.status = status; + this.isPublic = isPublic; + this.isOperational = true; // This is required since bluebird 4 doesn't append it anymore. + this.stack = stack; + // Error.captureStackTrace(this, this.constructor.name); + } +} + +/** + * Class representing an API error. + * @extends ExtendableError + */ +class APIError extends ExtendableError { + /** + * Creates an API error. + * @param {string} message - Error message. + * @param {number} status - HTTP status code of error. + * @param {boolean} isPublic - Whether the message should be visible to user or not. + */ + constructor({ + message, + errors, + stack, + status = httpStatus.INTERNAL_SERVER_ERROR, + isPublic = false + }) { + super({ + message, + errors, + status, + isPublic, + stack + }); + } +} + +module.exports = APIError; diff --git a/src/api/middlewares/auth.middleware.js b/src/api/middlewares/auth.middleware.js new file mode 100644 index 0000000..4fcc3da --- /dev/null +++ b/src/api/middlewares/auth.middleware.js @@ -0,0 +1,331 @@ +const httpStatus = require('http-status'); +const jsonwentoken = require('jsonwebtoken'); +const APIError = require('./ApiError'); + +const ConsumerGroups = { + /** Service group with all permissions */ + SERVICE: 'service', + /** Staff group with RBAC permissions */ + STAFF: 'staff', + /** User group with all permissions if granted */ + USER: 'user', + /** Guest group */ + GUEST: 'guest' +}; + +/** + * Configuration for authentication module + * @type {Object} + */ +const Configs = { + /** Default permission for user */ + PERMISSION_USER: 'user', + + /** Default permission for staff */ + PERMISSION_LOGGED_IN: 'staff', + + /** Default permission for all provider */ + PERMISSION_ADMINISTRATOR: 'administrator', + + /** Custom header name */ + HEADER_NAME: 'Authorization', + + /** Include scheme in header */ + HEADER_INCLUDE_SCHEME: true, + + getStaffPermissions: (staffId) => { + console.log(staffId); + return []; + } +}; + +const HEADER_REGEX = /(\S+)\s+(\S+)/; + +/** + * Get authentication infomation from auth header + * + * @param {*} headerValue + * @returns {Object} + */ +function parseAuthHeader(headerValue) { + if (typeof headerValue !== 'string') { + return null; + } + if (Configs.HEADER_INCLUDE_SCHEME) { + const matches = headerValue.match(HEADER_REGEX); + return ( + matches && { scheme: matches[1].trim(), value: matches[2].trim() } + ); + } + return { + scheme: 'Bearer', + value: headerValue.trim() + }; +} + +/** + * Get User info from jwt payload + * + * @param {Object} jwtPayload + * @returns {Object} + */ +function getUserFromJwtPayload(jwtPayload) { + const user = { + id: jwtPayload.id, + name: jwtPayload.name, + phone: jwtPayload.phone, + email: jwtPayload.email, + avatar: jwtPayload.avatar, + service: jwtPayload.service + }; + return user; +} + +/** + * Check if staff have all requested permission in jwt payload + * + * @param {Request} req + * @param {Array} requestedPermissions + * + * @returns {Boolean} + */ +function checkStaffPermission(req, requestedPermissions) { + // not allow when permissions null + if (requestedPermissions.length === 0) { + return false; + } + + // check special requested permissions (LoggedIn) + if (requestedPermissions.includes(Configs.PERMISSION_LOGGED_IN)) { + return true; + } + + // check service permissions + const { permissions } = req.user; + if (!Array.isArray(permissions) || permissions.length === 0) { + return false; + } + + // check special permission (administrator)) + if (permissions.includes(Configs.PERMISSION_ADMINISTRATOR)) { + return true; + } + + const deniedPermissions = requestedPermissions.filter( + (permission) => !permissions.includes(permission) + ); + return deniedPermissions.length === 0; +} + +/** + * Get JWT payload from authorization header + * + * @param {Request} req + */ +const getTokenInfo = (req) => { + let jwt = req.get(Configs.HEADER_NAME); + if (!jwt) { + return null; + } + jwt = parseAuthHeader(jwt); + if (jwt === null) { + return null; + } + jwt.payload = jsonwentoken.decode(jwt.value, { json: true }); + return jwt; +}; + +/** + * Get authentication info from service + * + * @param {Request} req + */ +const getAuthInfo = (req) => { + const { user } = req; + const isAnonymous = (req.get('X-Anonymous-Consumer') || 'false') === 'true'; + let consumerGroups = []; + // console.log(user); + if (user) { + consumerGroups = [user.service]; + } else { + consumerGroups = [req.get('X-Consumer-Groups')]; + } + // let consumerGroups = user ? user.service : req.get('X-Consumer-Groups') || ''; + // consumerGroups = consumerGroups.split(',').filter((item) => item.length > 0); + // console.log(consumerGroups); + // Check accessLevel + let accessLevel = ConsumerGroups.GUEST; + const allAccessLevels = Object.values(ConsumerGroups); + for (let index = 0; index < allAccessLevels.length; index += 1) { + if (consumerGroups.includes(allAccessLevels[index])) { + accessLevel = allAccessLevels[index]; + break; + } + } + + return { + client: req.get('X-Consumer-Username') || null, + clientId: req.get('X-Consumer-Custom-Id') || null, + consumerId: req.get('X-Consumer-ID') || null, + isAnonymous, + accessLevel + }; +}; + +/** + * Load auth info to request + * + * @param {Request} req + */ +const loadInfo = async (req) => { + let user = null; + let tokenInfo = getTokenInfo(req); + // console.log('before', tokenInfo); + if (tokenInfo === null || !tokenInfo.payload) { + tokenInfo = null; + } else { + user = getUserFromJwtPayload(tokenInfo.payload); + } + req.user = user; + req.tokenInfo = tokenInfo; + req.authInfo = getAuthInfo(req); + + // load permission for staff + if (req.authInfo.accessLevel === ConsumerGroups.STAFF && user !== null) { + req.user.permissions = await Configs.getStaffPermissions( + user.id + ); + } +}; + +/** + * Check user has required permission + * + * @param {Request} req + * @param {Array} permissions + * @param {Function} additionalCheck + */ +const checkPermission = async (req, permissions, additionalCheck) => { + const apiError = new APIError({ + message: 'Unauthorized', + status: httpStatus.UNAUTHORIZED, + stack: undefined + }); + + /** service permission required */ + const permissionsToCheck = Array.isArray(permissions) + ? permissions.slice(0) + : []; + + // allow if require no permission + if (permissionsToCheck.length === 0) { + return null; + } + + // get user permission userPermissionIndex in permission array + const userPermissionIndex = permissionsToCheck.indexOf( + Configs.PERMISSION_USER + ); + + switch (req.authInfo.accessLevel) { + case ConsumerGroups.SERVICE: + // allow all access with service level + return null; + case ConsumerGroups.STAFF: + // remove user permission + if (userPermissionIndex !== -1) { + permissionsToCheck.splice(userPermissionIndex, 1); + } + if (!checkStaffPermission(req, permissionsToCheck)) { + apiError.status = httpStatus.FORBIDDEN; + apiError.message = 'Forbidden'; + return apiError; + } + break; + case ConsumerGroups.USER: + if (permissionsToCheck.indexOf(Configs.PERMISSION_USER) === -1) { + apiError.status = httpStatus.FORBIDDEN; + apiError.message = 'Forbidden'; + return apiError; + } + break; + default: + // reject guest access + return apiError; + } + + // check permission by additionalCheck (only user and staff) + if (additionalCheck && !(await additionalCheck(req))) { + apiError.status = httpStatus.FORBIDDEN; + apiError.message = 'Forbidden'; + return apiError; + } + return null; +}; + +/** + * Handle JWT token + * + * @param {Request} req + * @param {Response} res + * @param {Function} next + * @param {Array} permissions user-config permission + * @param {Function} additionalCheck additional checking function + */ +const handleJWT = async ( + req, + res, + next, + permissions, + additionalCheck = null, + includeCheckPermission = true +) => { + // Load auth info to request + await loadInfo(req); + + if (!includeCheckPermission) { + return next(); + } + + // check user permission + const permissionCheckResult = await checkPermission( + req, + permissions, + additionalCheck + ); + if (permissionCheckResult) { + // Throw permission error + return next(permissionCheckResult); + } + return next(); +}; + +/** + * Authenticate middleware with express + * + * @param {Array} permissions + * @param {Function} additionalCheck + * @param {Boolean} includeCheckPermission + */ +const authorize = (permissions, additionalCheck, includeCheckPermission) => ( + req, + res, + next +) => + handleJWT( + req, + res, + next, + permissions, + additionalCheck, + includeCheckPermission + ); + +module.exports = { + ConsumerGroups, + Configs, + getAuthInfo, + getTokenInfo, + authorize, + checkStaffPermission +}; diff --git a/src/api/middlewares/authen.middleware.js b/src/api/middlewares/authen.middleware.js new file mode 100644 index 0000000..464e220 --- /dev/null +++ b/src/api/middlewares/authen.middleware.js @@ -0,0 +1,109 @@ +import { pick } from 'lodash'; +import Moment from 'moment-timezone'; +import JWT from 'jsonwebtoken'; +import { handler as ErrorHandler } from './error'; +import User from '../..//common/models/user.model'; + +/** + * Load item by id add to req locals. + */ +exports.checkEmail = async (req, res, next) => { + try { + const user = await User.getUserByPhoneOrEmailRegister({ email: req.body.email }); + if (!user) { + return res.status(400).json({ message: 'Email have aldready exist' }); + } + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.loadUser = async (req, res, next) => { + try { + const user = await User.getUserByPhoneOrEmail({ email: req.body.email || req.body.username }); + if (!user) { + return res.status(400).json({ message: 'email or password incorrect' }); + } + req.locals = { + user + }; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.checkPassword = async (req, res, next) => { + const { user } = req.locals; + const isCheck = await User.passwordMatches(user, req.body.password); + if (!isCheck) { + return res.status(400).json({ message: 'Email or password incorrect' }); + } + return next(); +}; +exports.genarateToken = async (req, res, next) => { + let user = null; + user = pick(req.locals.user, ['name', 'avatar', 'email', 'phone', 'service']); + user.id = req.locals.user.id; + + // req.locals = { + // user + // }; + const inforToken = {}; + + inforToken.access_token = JWT.sign(user, process.env.NODE_ENV || 'development', { expiresIn: 60 * 60 }); + inforToken.refresh_token = JWT.sign(user, process.env.PORT || '3002', { expiresIn: 60 * 60 * 100 }); + inforToken.access_expired_at = Moment.tz(new Date(), 'Asia/Ho_Chi_Minh').unix() + (60 * 60 * 24); + inforToken.expRefreshTime = Moment.tz(new Date(), 'Asia/Ho_Chi_Minh').unix(); + req.locals.token = inforToken; + return next(); +}; +exports.loginGoogle = async (req, res, next) => { + if (req.body.type === 'google') { + const user = {}; + const decode = await JWT.decode(req.body.token, { json: true }); + user.id = decode.sub; + user.name = `${decode.family_name} ${decode.given_name}`; + user.email = decode.email; + user.avatar = decode.picture; + req.locals = { user }; + } + return next(); +}; +exports.loadUserViaThirdParty = async (req, res, next) => { + try { + let find = {}; + let user = {}; + if (req.body.type === 'google') { + user = req.locals.user; + } + if (req.body.type === 'facebook') { + user = req.body.user; + } + const newuser = user; + switch (req.body.type) { + case 'google': + find = { 'google.id': user.id, isThirdParty: true }; + newuser.google = user; + break; + case 'facebook': + find = { 'facebook.id': user.id, isThirdParty: true }; + newuser.facebook = user; + break; + default: + find = { 'google.id': user.id, isThirdParty: true }; + break; + } + let userExist = await User.findOne(find); + if (!userExist) { + newuser.isThirdParty = true; + const newUser1 = new User(newuser); + userExist = await newUser1.save(); + } + req.locals = req.locals ? req.locals : {}; + req.locals.user = userExist; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; + diff --git a/src/api/middlewares/error.js b/src/api/middlewares/error.js new file mode 100644 index 0000000..5579900 --- /dev/null +++ b/src/api/middlewares/error.js @@ -0,0 +1,72 @@ +const httpStatus = require('http-status'); +const expressValidation = require('express-validation'); +const APIError = require('../../common/utils/APIException'); +const { env } = require('../../config/vars'); + +/** + * Error handler. Send stacktrace only during development + * @public + */ +const handler = (err, req, res, next) => { + const { status = 500 } = err; + + const response = { + code: status, + message: err.message || httpStatus[status], + errors: err.errors, + stack: err.stack + }; + + response.message = !err.isTranslated + ? res.__(response.message) + : response.message; + + if (env !== 'development') { + delete response.stack; + } + + // res.status(status); + res.json(response); + res.end(); +}; +exports.handler = handler; + +/** + * If error is not an instanceOf APIError, convert it. + * @public + */ +exports.converter = (err, req, res, next) => { + let convertedError = err; + + if (err instanceof expressValidation.ValidationError) { + convertedError = new APIError({ + message: res.__('Validation Error!'), + errors: err.errors, + status: err.status, + stack: err.stack, + isTranslated: true + }); + } else if (!(err instanceof APIError)) { + convertedError = new APIError({ + message: res.__(err.message), + status: err.status, + stack: err.stack, + isTranslated: true + }); + } + + return handler(convertedError, req, res); +}; + +/** + * Catch 404 and forward to error handler + * @public + */ +exports.notFound = (req, res, next) => { + const err = new APIError({ + message: res.__('Not found!'), + status: httpStatus.NOT_FOUND, + isTranslated: true + }); + return handler(err, req, res); +}; diff --git a/src/api/middlewares/errors.js b/src/api/middlewares/errors.js new file mode 100644 index 0000000..1c46122 --- /dev/null +++ b/src/api/middlewares/errors.js @@ -0,0 +1,67 @@ +const httpStatus = require('http-status'); +const expressValidation = require('express-validation'); +const APIException = require('../../common/utils/APIException'); + +/** + * Error handler. Send stacktrace only during development + * @public + */ +const handler = (ex, req, res, next) => { + const { status = 500 } = ex; + + const response = { + code: status, + message: ex.message || httpStatus[status], + errors: ex.errors + }; + if (ex.stack && process.env.NODE_ENV !== 'development') response.stack = ex.stack; + + /* Step:: translate message */ + response.message = !ex.isTranslated + ? res.__(response.message) + : response.message; + + // res.status(status); + res.json(response); + res.end(); +}; +exports.handler = handler; + +/** + * If error is not an instanceOf ApiResult, convert it. + * @public + */ +exports.converter = (err, req, res, next) => { + let convertedError = err; + if (err instanceof expressValidation.ValidationError) { + convertedError = new APIException({ + message: res.__('VALIDATION_ERROR'), + errors: err.errors, + status: err.status, + stack: err.stack, + isTranslated: true + }); + } else if (!(err instanceof APIException)) { + convertedError = new APIException({ + message: res.__(err.message), + status: err.status, + stack: err.stack, + isTranslated: true + }); + } + + return handler(convertedError, req, res); +}; + +/** + * Catch 404 and forward to error handler + * @public + */ +exports.notFound = (req, res, next) => { + const err = new APIException({ + message: res.__('NOT_FOUND!'), + status: httpStatus.NOT_FOUND, + isTranslated: true + }); + return handler(err, req, res); +}; diff --git a/src/api/middlewares/image.middleware.js b/src/api/middlewares/image.middleware.js new file mode 100644 index 0000000..68e98c5 --- /dev/null +++ b/src/api/middlewares/image.middleware.js @@ -0,0 +1,17 @@ + +import { handler as ErrorHandler } from './errors'; +import Image from '../../common/models/image.model'; +/** + * Load image and append to req. + * @public + */ +exports.load = async (req, res, next) => { + try { + const image = await Image.getImageById(req.params.id); + req.locals = req.locals ? req.locals : {}; + req.locals.image = image; + return next(); + } catch (error) { + return ErrorHandler(error, req, res); + } +}; diff --git a/src/api/middlewares/staff.middleware.js b/src/api/middlewares/staff.middleware.js new file mode 100644 index 0000000..99da6c4 --- /dev/null +++ b/src/api/middlewares/staff.middleware.js @@ -0,0 +1,113 @@ +/* eslint-disable no-param-reassign */ +import { cloneDeep, pick } from 'lodash'; +import { hash } from 'bcryptjs'; +import { handler as ErrorHandler } from './error'; +import User from '../../common/models/user.model'; +/** + * Converter + * @param {*} str + */ +function convertToEn(str) { + str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a'); + str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e'); + str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i'); + str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o'); + str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u'); + str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y'); + str = str.replace(/đ/g, 'd'); + str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A'); + str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E'); + str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I'); + str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O'); + str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U'); + str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y'); + str = str.replace(/Đ/g, 'D'); + str = str.toLowerCase(); + return str; +} +/** + * Load item by id add to req locals. + */ +exports.load = async (req, res, next) => { + try { + const user = await User.get(req.params.id); + req.locals = req.locals ? req.locals : {}; + req.locals.user = user; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; + +/** + * Load count for filter. + */ +exports.count = async (req, res, next) => { + try { + req.query.types = User.Types.STAFF; + req.totalRecords = await User.totalRecords( + req.query + ); + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; + +/** + * Load item by id add to req locals. + */ +exports.checkEmail = async (req, res, next) => { + try { + const user = await User.findOne({ email: req.body.email }); + if (user) { + return res.status(400).json({ message: 'email have aldready exist' }); + } + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.loadUser = async (req, res, next) => { + try { + const user = await User.findOne({ email: req.body.email }); + if (!user) { + return res.status(400).json({ message: 'email or password incorrect' }); + } + req.locals = { + user + }; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.prepareParams = async (req, res, next) => { + const params = cloneDeep(req.body); + params.type = User.Types.STAFF; + params.service = User.Services.STAFF; + if (params.name) { + params.normalize_name = convertToEn(`${params.name}`); + } + req.body = params; + next(); +}; +exports.prepareParamsUpdated = async (req, res, next) => { + // const params = cloneDeep(req.body); + const { user: oldModel } = req.locals; + const params = User.filterParams(req.body); + const dataChanged = User.getChangedProperties({ oldModel, newModel: params }); + const paramChanged = pick(params, dataChanged); + if (paramChanged.password) { + const rounds = 10; + paramChanged.password = await hash(paramChanged.password, rounds); + } + if (paramChanged.name) { + paramChanged.normalize_name = convertToEn(`${params.name}`); + } + paramChanged.updated_by = pick(req.user, ['id', 'name']); + paramChanged.updated_at = new Date(); + req.body = paramChanged; + next(); +}; + diff --git a/src/api/middlewares/user.middleware.js b/src/api/middlewares/user.middleware.js new file mode 100644 index 0000000..176384e --- /dev/null +++ b/src/api/middlewares/user.middleware.js @@ -0,0 +1,88 @@ +import { pick } from 'lodash'; +import Moment from 'moment-timezone'; +import JWT from 'jsonwebtoken'; +import { handler as ErrorHandler } from './error'; +import User from '../../common/models/user.model'; +/** + * Load item by id add to req locals. + */ +exports.load = async (req, res, next) => { + try { + const user = await User.get(req.params.id); + req.locals = req.locals ? req.locals : {}; + req.locals.user = user; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; + +/** + * Load count for filter. + */ +exports.count = async (req, res, next) => { + try { + req.totalRecords = await User.totalRecords( + req.query + ); + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; + +/** + * Load item by id add to req locals. + */ +exports.checkEmail = async (req, res, next) => { + try { + const user = await User.findOne({ where: { email: req.body.email } }); + if (user) { + return res.status(400).json({ message: 'email have aldready exist' }); + } + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.loadUser = async (req, res, next) => { + try { + const user = await User.findOne({ where: { email: req.body.email } }); + if (!user) { + return res.status(400).json({ message: 'email or password incorrect' }); + } + req.locals = { + user + }; + return next(); + } catch (ex) { + return ErrorHandler(ex, req, res, next); + } +}; +exports.checkPassword = async (req, res, next) => { + const { user } = req.locals; + const isCheck = await user.passwordMatch(req.body.password); + if (!isCheck) { + return res.status(400).json({ message: 'email or password incorrect' }); + } + return next(); +}; +exports.genarateToken = async (req, res, next) => { + let user = null; + user = pick(req.locals.user, ['name', 'avatar', 'email', 'phone', 'service']); + user.id = req.locals.user._id; + req.locals = { + user + }; + const inforToken = {}; + + inforToken.token = JWT.sign(user, process.env.NODE_ENV || 'development', { expiresIn: 60 * 60 }); + inforToken.refresToken = JWT.sign(user, process.env.PORT || '3002', { expiresIn: 60 * 60 * 1000 }); + inforToken.access_expired_at = Moment.tz(new Date(), 'Asia/Ho_Chi_Minh').unix() + (60 * 60 * 1000); + inforToken.expRefreshTime = Moment.tz(new Date(), 'Asia/Ho_Chi_Minh').unix(); + req.locals.token = inforToken; + return next(); +}; +// exports.loginFacebook= async (req,res,next)=>{ + +// } diff --git a/src/api/routes/v1/auth.route.js b/src/api/routes/v1/auth.route.js new file mode 100644 index 0000000..0140ac8 --- /dev/null +++ b/src/api/routes/v1/auth.route.js @@ -0,0 +1,38 @@ +import express from 'express'; +// import { authorize } from 'auth-adapter'; +import validate from 'express-validation'; +import middleware from '../../middlewares/authen.middleware'; +import controller from '../../controllers/v1/auth.controller'; +// import permissions from '../../../common/utils/Permissions'; +import { + loginToken, + registerValidation, + loginValidation, +} from '../../validations/v1/auth.validation'; + +const router = express.Router(); + +router.route('/register') + .post( + validate(registerValidation), + middleware.checkEmail, + // middleware.genarateToken, + controller.register + ); +router.route('/login-password') + .post( + validate(loginValidation), + middleware.loadUser, + middleware.checkPassword, + middleware.genarateToken, + controller.login + ); +router.route('/login-token') + .post( + validate(loginToken), + middleware.loginGoogle, + middleware.loadUserViaThirdParty, + middleware.genarateToken, + controller.loginToken + ); +export default router; diff --git a/src/api/routes/v1/image.route.js b/src/api/routes/v1/image.route.js new file mode 100644 index 0000000..231d5bd --- /dev/null +++ b/src/api/routes/v1/image.route.js @@ -0,0 +1,38 @@ +import express from 'express'; +import validate from 'express-validation'; +// import { authorize } from '../../middlewares/auth.middleware'; +// import Permissions from '../../../common/utils/Permissions'; + +import { uploader } from '../../../common/services/adapters/upload-adapter'; +import controller from '../../controllers/v1/image.controller'; +import { + uploadValidation +} from '../../validations/v1/image.validation'; + +const router = express.Router(); + +router + .route('/upload-single') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + // validate(uploadValidation), + uploader.single('file'), + controller.uploadSingle + ); + +router + .route('/upload-multiple') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + validate(uploadValidation), + uploader.array('file', 10), + controller.uploadMultiple + ); +router + .route('/upload-file') + .post( + // authorize([Permissions.IMAGE_UPLOAD]), + controller.uploadFile + ); + +export default router; diff --git a/src/api/routes/v1/index.js b/src/api/routes/v1/index.js new file mode 100644 index 0000000..98f2c43 --- /dev/null +++ b/src/api/routes/v1/index.js @@ -0,0 +1,26 @@ +import { Router } from 'express'; +import iamgeRoutes from './image.route'; +import pathRoutes from './path.route'; +import authRoutes from './auth.route'; +import staffRoutes from './staff.route'; +import userRoutes from './user.route'; + +const router = Router(); + +/** + * GET v1/status + */ +router.get('/status', (req, res) => res.send('OK')); + +router.get('/version/:service', (req, res) => res.send(process.env.GIT_COMMIT_TAG || 'Not available')); + +/** + * v1/images + */ +router.use('/images', iamgeRoutes); +router.use('/paths', pathRoutes); +router.use('/auth', authRoutes); +router.use('/staffs', staffRoutes); +router.use('/users', userRoutes); + +export default router; diff --git a/src/api/routes/v1/path.route.js b/src/api/routes/v1/path.route.js new file mode 100644 index 0000000..c154e26 --- /dev/null +++ b/src/api/routes/v1/path.route.js @@ -0,0 +1,32 @@ +import express from 'express'; +import { authorize } from '../../middlewares/auth.middleware'; +import controller from '../../controllers/v1/path.controller'; +import Permissions from '../../../common/utils/Permissions'; + +const router = express.Router(); + +router + .route('/') + .post( + authorize([Permissions.USER]), + controller.get + ); +router + .route('/create') + .post( + authorize([Permissions.USER]), + controller.create + ); +router + .route('/update') + .put( + authorize([Permissions.USER]), + controller.update + ); +router + .route('/delete') + .patch( + authorize([Permissions.USER]), + controller.delete + ); +export default router; diff --git a/src/api/routes/v1/staff.route.js b/src/api/routes/v1/staff.route.js new file mode 100644 index 0000000..0a414b9 --- /dev/null +++ b/src/api/routes/v1/staff.route.js @@ -0,0 +1,63 @@ +import express from 'express'; +import validate from 'express-validation'; +import middleware from '../../middlewares/staff.middleware'; +import controller from '../../controllers/v1/staff.controller'; +import permissions from '../../../common/utils/Permissions'; +import { authorize } from '../../middlewares/auth.middleware'; +import { + // listValidation, + updateValidation, + createValidation +} from '../../validations/v1/staff.validation'; + +const router = express.Router(); + + +router + .route('/') + .get( + authorize([permissions.LOGGED_IN]), + middleware.count, + controller.list + ) + .post( + validate(createValidation), + // authorize([permissions.LOGGED_IN]), + middleware.prepareParams, + controller.create + ); + +router + .route('/:id') + .get( + middleware.load, + controller.get + ) + .put( + validate(updateValidation), + authorize([permissions.LOGGED_IN]), + middleware.load, + middleware.prepareParamsUpdated, + controller.update + ) + .delete( + authorize([permissions.LOGGED_IN]), + middleware.load, + controller.delete + ); +router + .route('/:id/block') + .post( + authorize([permissions.LOGGED_IN]), + middleware.load, + controller.block + ); +router + .route('/:id/active') + .post( + authorize([permissions.LOGGED_IN]), + middleware.load, + controller.active + ); +export default router; + diff --git a/src/api/routes/v1/user.route.js b/src/api/routes/v1/user.route.js new file mode 100644 index 0000000..05f9091 --- /dev/null +++ b/src/api/routes/v1/user.route.js @@ -0,0 +1,46 @@ +import express from 'express'; +import validate from 'express-validation'; +import { authorize } from '../../middlewares/auth.middleware'; +import middleware from '../../middlewares/user.middleware'; +import controller from '../../controllers/v1/user.controller'; +import permissions from '../../../common/utils/Permissions'; +import { + listValidation, + updateValidation, + createValidation, +} from '../../validations/v1/user.validation'; + +const router = express.Router(); + +router + .route('/') + .get( + validate(listValidation), + middleware.count, + controller.list + ) + .post( + validate(createValidation), + // authorize([permissions.USER_CREATE]), + middleware.checkEmail, + controller.create + ); + +router + .route('/:id') + .get( + middleware.load, + controller.get + ) + .put( + validate(updateValidation), + authorize([permissions.USER_UPDATE]), + middleware.load, + controller.update + ) + .delete( + authorize([permissions.USER_DELETE]), + middleware.load, + controller.delete + ); +export default router; diff --git a/src/api/validations/v1/auth.validation.js b/src/api/validations/v1/auth.validation.js new file mode 100644 index 0000000..e7ff181 --- /dev/null +++ b/src/api/validations/v1/auth.validation.js @@ -0,0 +1,33 @@ +import Joi from 'joi'; + +module.exports = { + registerValidation: { + body: { + name: Joi.string() + .max(255) + .required(), + email: Joi.string() + .required(), + phone: Joi.string() + .required(), + password: Joi.string() + .required() + } + }, + loginValidation: { + body: { + email: Joi.string(), + username: Joi.string(), + password: Joi.string() + .required() + } + }, + loginToken: { + body: { + type: Joi.string().only(['google', 'facebook']), + token: Joi.string(), + user: Joi.object() + } + } + +}; diff --git a/src/api/validations/v1/excel.validation.js b/src/api/validations/v1/excel.validation.js new file mode 100644 index 0000000..03770b3 --- /dev/null +++ b/src/api/validations/v1/excel.validation.js @@ -0,0 +1,14 @@ +import Joi from 'joi'; +import { values } from 'lodash'; +import Image from '../../../common/models/image.model'; + +module.exports = { + // POST v1/excels/read-file + readFile: { + query: { + group: Joi.string() + .only(values(Image.Groups)) + .required() + } + } +}; diff --git a/src/api/validations/v1/image.validation.js b/src/api/validations/v1/image.validation.js new file mode 100644 index 0000000..f34ffff --- /dev/null +++ b/src/api/validations/v1/image.validation.js @@ -0,0 +1,39 @@ +import Joi from 'joi'; +import { values } from 'lodash'; +import Image from '../../../common/models/image.model'; + +module.exports = { + + // POST v1/images + uploadValidation: { + query: { + group: Joi.string() + .only(values(Image.Groups)) + .required() + } + }, + + // POST v1/images + createValidation: { + body: { + image: Joi.string() + .required(), + alt: Joi.string() + .allow(''), + title: Joi.string() + .allow('') + } + }, + + // PUT v1/images + updateValidation: { + body: { + image: Joi.string() + .required(), + alt: Joi.string() + .allow(''), + title: Joi.string() + .allow('') + } + } +}; diff --git a/src/api/validations/v1/staff.validation.js b/src/api/validations/v1/staff.validation.js new file mode 100644 index 0000000..833f095 --- /dev/null +++ b/src/api/validations/v1/staff.validation.js @@ -0,0 +1,69 @@ +import Joi from 'joi'; + +module.exports = { + listValidation: { + query: { + skip: Joi.number() + .default(0) + .allow(null, ''), + limit: Joi.number() + .default(20) + .allow(null, ''), + sortBy: Joi.string() + .only([ + 'createdAt', + 'updatedAt', + ]) + .allow(null, ''), + orderBy: Joi.string() + .only(['desc', 'asc']), + keyword: Joi.string() + .trim() + .allow(null, ''), + vips: Joi.string() + .allow(null, ''), + levels: Joi.string() + .allow(null, ''), + genders: Joi.string() + .allow(null, ''), + isActive: Joi.bool() + .allow(null, '') + } + }, + + createValidation: { + body: { + name: Joi.string() + .max(255) + .required(), + phone: Joi.string() + .max(155), + // .required(), + email: Joi.string() + .allow(null, '') + .required(), + gender: Joi.string() + .allow(null, ''), + type: Joi.string() + .max(255), + password: Joi.string().min(6) + } + }, + updateValidation: { + body: { + name: Joi.string() + .max(255) + .required(), + phone: Joi.string() + .max(155) + .required(), + email: Joi.string() + .allow(null, ''), + gender: Joi.string() + .allow(null, ''), + type: Joi.string() + .max(255), + password: Joi.string().min(6) + } + } +}; diff --git a/src/api/validations/v1/user.validation.js b/src/api/validations/v1/user.validation.js new file mode 100644 index 0000000..b12fa25 --- /dev/null +++ b/src/api/validations/v1/user.validation.js @@ -0,0 +1,96 @@ +import Joi from 'joi'; + +module.exports = { + listValidation: { + query: { + skip: Joi.number() + .default(0) + .allow(null, ''), + limit: Joi.number() + .default(20) + .allow(null, ''), + sortBy: Joi.string() + .only([ + // count + 'vip', + 'level', + // date + 'createdAt', + 'updatedAt', + ]) + .allow(null, ''), + orderBy: Joi.string() + .only(['desc', 'asc']), + keyword: Joi.string() + .trim() + .allow(null, ''), + vips: Joi.string() + .allow(null, ''), + levels: Joi.string() + .allow(null, ''), + genders: Joi.string() + .allow(null, ''), + isActive: Joi.bool() + .allow(null, '') + } + }, + + createValidation: { + body: { + name: Joi.string() + .max(255) + .required(), + email: Joi.string() + .required() + .allow(null, ''), + gender: Joi.string() + .allow(null, ''), + type: Joi.string() + .max(255) + } + }, + updateValidation: { + body: { + // attribute + slug: Joi.string() + .max(255) + .allow(null, ''), + title: Joi.string() + .max(155) + .allow(null, ''), + content: Joi.string() + .allow(null, ''), + cover: Joi.string() + .max(255) + .allow(null, ''), + thumbnail: Joi.string() + .max(255) + .allow(null, ''), + chapLabel: Joi.string() + .allow(null, ''), + categories: Joi.array() + .items({ + id: Joi.string().required(), + name: Joi.string().required(), + slug: Joi.string().allow(null, ''), + logo: Joi.string().allow(null, '') + }) + .allow(null, ''), + genders: Joi.array() + .items(Joi.string()) + .allow(null, ''), + + // config + isTopHot: Joi.bool() + .allow(null, ''), + isHotTrend: Joi.bool() + .allow(null, ''), + isRecommend: Joi.bool() + .allow(null, ''), + isWidespread: Joi.bool() + .allow(null, ''), + isActive: Joi.bool() + .allow(null, '') + } + } +}; diff --git a/src/common/models/config.model.js b/src/common/models/config.model.js new file mode 100644 index 0000000..700737d --- /dev/null +++ b/src/common/models/config.model.js @@ -0,0 +1,408 @@ +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; + +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class FileConfig extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'type', + 'group', + 'config' +]; + +FileConfig.Groups = { + PRODUCT: 'product', + PRODUCT_OPTION: 'product-option', + PRODUCT_PRICE: 'product-price', + ORDER: 'order', + ORDER_NESTED: 'order-nested', + INVOICE: 'invoice', + INVOICE_NESTED: 'invoice-nested', + RETURN: 'return', + RETURN_NESTED: 'return-nested', + DELIVERY: 'delivery', + IMPORT: 'import', + IMPORT_NESTED: 'import-nested', + STOCK_TAKE: 'stock-take', + STOCK_TAKE_NESTED: 'stock-take-nested', + TRANSFER: 'transfer', + TRANSFER_NESTED: 'transfer-nested', + EXPORT: 'export', + EXPORT_NESTED: 'export-nested', + PAYMENT: 'payment', + CUSTOMER: 'customer', + SUPPLIER: 'supplier', + DELIVERY_PAYMENT: 'delivery-payment', + DELIVERY_PAYMENT_NESTED: 'delivery-payment-nested', + /** Sale Report */ + SALE_REPORT_TIME: 'sale-report-time', + SALE_REPORT_TIME_NESTED: 'sale-report-time-nested', + SALE_REPORT_TIME_INVOICE: 'sale-report-time-invoice', + SALE_REPORT_PROFIT: 'sale-report-profit', + SALE_REPORT_PROFIT_NESTED: 'sale-report-profit-nested', + SALE_REPORT_PROFIT_INVOICE: 'sale-report-profit-invoice', + SALE_REPORT_PROFIT_PRODUCT: 'sale-report-profit-product', + SALE_REPORT_DISCOUNT: 'sale-report-discount', + SALE_REPORT_DISCOUNT_NESTED: 'sale-report-discount-nested', + SALE_REPORT_DISCOUNT_INVOICE: 'sale-report-discount-invoice', + SALE_REPORT_RETURN: 'sale-report-return', + SALE_REPORT_RETURN_NESTED: 'sale-report-return-nested', + SALE_REPORT_RETURN_INVOICE: 'sale-report-return-invoice', + SALE_REPORT_STAFF: 'sale-report-staff', + SALE_REPORT_STAFF_NESTED: 'sale-report-staff-nested', + SALE_REPORT_STAFF_TIME: 'sale-report-staff-time', + SALE_REPORT_STAFF_TIME_NESTED: 'sale-report-staff-time-nested', + SALE_REPORT_STAFF_INVOICE: 'sale-report-staff-invoice', + SALE_REPORT_STORE: 'sale-report-store', + SALE_REPORT_STORE_NESTED: 'sale-report-store-nested', + SALE_REPORT_STORE_TIME: 'sale-report-store-time', + SALE_REPORT_STORE_TIME_NESTED: 'sale-report-store-time-nested', + SALE_REPORT_STORE_INVOICE: 'sale-report-store-invoice', + + /** product report */ + PRODUCT_REPORT_SALE: 'product-report-sale', + PRODUCT_REPORT_SALE_SPECIFIC: 'product-report-sale-specific', + PRODUCT_REPORT_SALE_GROUP_CATEGORIES: 'product-report-sale-group-categories', + PRODUCT_REPORT_SALE_DETAIL: 'product-report-sale-detail', + + PRODUCT_REPORT_PROFIT: 'product-report-profit', + PRODUCT_REPORT_PROFIT_GROUP_CATEGORIES: 'product-report-profit-group-categories', + + PRODUCT_REPORT_STOCK_VALUE: 'product-report-stock-value', + PRODUCT_REPORT_STOCK_VALUE_GROUP_CATEGORIES: 'product-report-stock-value-group-categories', + PRODUCT_REPORT_STOCK_VALUE_DETAIL: 'product-report-stock-value-detail', + PRODUCT_REPORT_STOCK_VALUE_STORE: 'product-report-stock-value-store', + PRODUCT_REPORT_STOCK_VALUE_GENERAL: 'product-report-stock-value-general', + + PRODUCT_REPORT_STOCK: 'product-report-stock', + PRODUCT_REPORT_STOCK_STORE: 'product-report-stock-store', + PRODUCT_REPORT_STOCK_ONE_STORE: 'product-report-stock-one-store', + PRODUCT_REPORT_STOCK_GROUP_CATEGORIES: 'product-report-stock-group-categories', + PRODUCT_REPORT_STOCK_MORE_STORE: 'product-report-stock-more-store', + + PRODUCT_REPORT_STOCK_DETAIL: 'product-report-stock-detail', + PRODUCT_REPORT_STOCK_DETAIL_STORE: 'product-report-stock-detail-store', + PRODUCT_REPORT_STOCK_DETAIL_DETAIL: 'product-report-stock-detail-detail', + PRODUCT_REPORT_STOCK_DETAIL_GROUP_CATEGORIES: 'product-report-stock-detail-group-categories', + PRODUCT_REPORT_STOCK_DETAIL_GENERAL: 'product-report-stock-detail-general', + + PRODUCT_REPORT_STAFF: 'product-report-staff', + PRODUCT_REPORT_STAFF_SPECIFIC: 'product-report-staff-specific', + PRODUCT_REPORT_STAFF_DETAIL: 'product-report-staff-detail', + PRODUCT_REPORT_STAFF_GROUP_CATEGORIES: 'product-report-staff-group-categories', + + PRODUCT_REPORT_EXPORT: 'product-report-export', + PRODUCT_REPORT_EXPORT_SPECIFIC: 'product-report-export-specific', + PRODUCT_REPORT_EXPORT_DETAIL: 'product-report-export-detail', + PRODUCT_REPORT_EXPORT_GROUP_CATEGORIES: 'product-report-export-group-categories', + + PRODUCT_REPORT_CUSTOMER: 'product-report-customer', + PRODUCT_REPORT_CUSTOMER_SPECIFIC: 'product-report-customer-specific', + PRODUCT_REPORT_CUSTOMER_DETAIL: 'product-report-customer-detail', + PRODUCT_REPORT_CUSTOMER_GROUP_CATEGORIES: 'product-report-customer-group-categories', + + PRODUCT_REPORT_SUPPLIER: 'product-report-supplier', + PRODUCT_REPORT_SUPPLIER_DETAIL: 'product-report-supplier-detail', + PRODUCT_REPORT_SUPPLIER_SPECIFIC: 'product-report-supplier-specific', + PRODUCT_REPORT_SUPPLIER_GROUP_CATEGORIES: 'product-report-supplier-group-categories', + + PRODUCT_REPORT_STOCK_SPECIFIC: 'product-report-stock-specific', + PRODUCT_REPORT_STOCK_DETAIL_SPECIFIC: 'product-report-stock-detail-specific', + PRODUCT_REPORT_CUSTOMER_INVOICE: 'product-report-customer-invoice', + PRODUCT_REPORT_STAFF_INVOICE: 'product-report-staff-invoice', + + /** start end of day report */ + END_OF_DAY_REPORT_SALE: 'end-of-day-report-sale', + END_OF_DAY_REPORT_SALE_DETAIL: 'end-of-day-report-sale-detail', + END_OF_DAY_REPORT_SALE_DETAIL_TIME: 'end-of-day-report-sale-detail-time', + END_OF_DAY_REPORT_PAYMENT: 'end-of-day-report-payment', + END_OF_DAY_REPORT_PRODUCT: 'end-of-day-report-product', + END_OF_DAY_REPORT_PRODUCT_DETAIL: 'end-of-day-report-product-detail', +}; + +FileConfig.Types = { + IMPORT: 'import', + EXPORT: 'export' +}; + +FileConfig.Configs = [ + 'name', // file name, + 'path', // file path, + 'content', // file data +]; + +/** + * FileConfig Schema + * @public + */ +FileConfig.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + type: { + type: DataTypes.STRING(50), + allowNull: false + }, + group: { + type: DataTypes.STRING(100), + defaultValue: null + }, + path: { + type: DataTypes.STRING(155), + defaultValue: null + }, + config: { + type: DataTypes.JSONB, + defaultValue: null + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + } + }, + { + timestamps: false, + schema: serviceName, + sequelize: sequelize, + modelName: 'file_config', + tableName: 'tbl_file_configs' + } +); + +/** + * Register event emiter + */ +FileConfig.Events = { + FILE_CONFIG_CREATED: `${serviceName}.file-config.created`, + FILE_CONFIG_UPDATED: `${serviceName}.file-config.updated`, + FILE_CONFIG_DELETED: `${serviceName}.file-config.deleted`, +}; +FileConfig.EVENT_SOURCE = `${serviceName}.file-config`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +FileConfig.addHook('afterCreate', () => { }); + +FileConfig.addHook('afterUpdate', () => { }); + +FileConfig.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +FileConfig.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'type', + 'group', + 'config', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +FileConfig.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'name', + 'type', + 'group', + 'config', + 'status', + 'status_name' + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} group + */ +FileConfig.get = async (operation) => { + try { + const data = await FileConfig.findOne({ + where: { + type: operation.type, + group: operation.group, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy file!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +FileConfig.list = async ({ + name, + + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return FileConfig.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +FileConfig.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return FileConfig.count({ where: options }); +}; + +/** + * Filter only allowed fields from Province + * + * @param {Object} params + */ +FileConfig.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef Province + */ +export default FileConfig; diff --git a/src/common/models/file.model.js b/src/common/models/file.model.js new file mode 100644 index 0000000..770c512 --- /dev/null +++ b/src/common/models/file.model.js @@ -0,0 +1,276 @@ +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; + +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class File extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'title', + 'payload' +]; + +/** + * File Schema + * @public + */ +File.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + url: { + type: DataTypes.STRING(255), + allowNull: false + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + title: { + type: DataTypes.STRING(255), + defaultValue: null + }, + payload: { + type: DataTypes.JSONB, + defaultValue: null // id | code | name + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + modelName: 'file', + tableName: 'tbl_files' + } +); + +/** + * Register event emiter + */ +File.Events = { + File_CREATED: `${serviceName}.file.created`, + File_UPDATED: `${serviceName}.file.updated`, + File_DELETED: `${serviceName}.file.deleted`, +}; +File.EVENT_SOURCE = `${serviceName}.file`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +File.addHook('afterCreate', () => { }); + +File.addHook('afterUpdate', () => { }); + +File.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +File.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'payload', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +File.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'id', + 'name', + 'payload', + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} id + */ +File.get = async (id) => { + try { + const data = await File.findOne({ + where: { + id, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy địa chỉ tỉnh/thành!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +File.list = async ({ + name, + + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return File.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +File.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return File.count({ where: options }); +}; + +/** + * Filter only allowed fields from File + * + * @param {Object} params + */ +File.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef File + */ +export default File; diff --git a/src/common/models/image.model.js b/src/common/models/image.model.js new file mode 100644 index 0000000..1d97280 --- /dev/null +++ b/src/common/models/image.model.js @@ -0,0 +1,292 @@ +/* eslint-disable camelcase */ +import httpStatus from 'http-status'; +import { Model, DataTypes, Op } from 'sequelize'; +import { isEqual, isNil, isUndefined, omitBy, pick } from 'lodash'; +import moment from 'moment-timezone'; + +import { serviceName } from '../../config/vars'; +import postgres from '../../config/postgres'; +import APIError from '../utils/APIException'; + +/** + * Create connection + */ +const { sequelize } = postgres; +class Image extends Model { } + +const PUBLIC_FIELDS = [ + 'name', + 'title', + 'payload' +]; + +Image.Groups = { + USER: 'users', + STORE: 'stores', + VOUCHER: 'vouchers', + STORIES: 'stories', + CHAPTERS: 'chapters', + GAMES: 'games', + CUSTOMER: 'customers', + PROMOTION: 'promotions', + PRODUCT: 'products', + // configration + BANNER: 'banners', + CATEGORY: 'categories', + DEFAULT: 'defaults' +}; + +/** + * Image Schema + * @public + */ +Image.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + url: { + type: DataTypes.STRING(255), + allowNull: false + }, + name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + title: { + type: DataTypes.STRING(255), + defaultValue: null + }, + payload: { + type: DataTypes.JSONB, + defaultValue: null // id | code | name + }, + + // manager + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + created_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: DataTypes.NOW + }, + created_by: { + type: DataTypes.JSONB, + defaultValue: null // id | name + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + modelName: 'image', + tableName: 'tbl_images' + } +); + +/** + * Register event emiter + */ +Image.Events = { + IMAGE_CREATED: `${serviceName}.image.created`, + IMAGE_UPDATED: `${serviceName}.image.updated`, + IMAGE_DELETED: `${serviceName}.image.deleted`, +}; +Image.EVENT_SOURCE = `${serviceName}.image`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +Image.addHook('afterCreate', () => { }); + +Image.addHook('afterUpdate', () => { }); + +Image.addHook('afterDestroy', () => { }); + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + // TODO: load condition + if (options.name) { + options.name = { + [Op.iLike]: `%${options.name}%` + }; + } + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +Image.transform = (params) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'payload', + 'created_by' + ]; + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe date + const dateFields = [ + 'created_at', + 'updated_at' + ]; + dateFields.forEach((field) => { + if (params[field]) { + transformed[field] = moment(params[field]).unix(); + } else { + transformed[field] = null; + } + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +Image.getChangedProperties = ({ newModel, oldModel }) => { + const changedProperties = []; + const allChangableProperties = [ + 'id', + 'name', + 'payload', + ]; + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if ( + !isUndefined(newModel[field]) && + !isEqual(newModel[field], oldModel[field]) + ) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Detail + * + * @public + * @param {string} id + */ +Image.get = async (id) => { + try { + const data = await Image.findOne({ + where: { + id, + is_active: true + } + }); + if (!data) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy địa chỉ tỉnh/thành!' + }); + } + return data; + } catch (ex) { + throw ex; + } +}; + +/** + * List users in descending order of 'createdAt' timestamp. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +Image.list = async ({ + name, + + // sort + sort_by, + order_by, + skip = 0, + limit = 20, +}) => { + const options = filterConditions({ + name + }); + const sort = sortConditions({ sort_by, order_by }); + return Image.findAll({ + where: options, + order: [sort], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of users to be skipped. + * @param {number} limit - Limit number of users to be returned. + * @returns {Promise} + */ +Image.totalRecords = ({ + name +}) => { + const options = filterConditions({ + name + }); + + return Image.count({ where: options }); +}; + +/** + * Filter only allowed fields from Province + * + * @param {Object} params + */ +Image.filterParams = (params) => pick(params, PUBLIC_FIELDS); + +/** + * @typedef Province + */ +export default Image; diff --git a/src/common/models/user.model.js b/src/common/models/user.model.js new file mode 100644 index 0000000..d3771fb --- /dev/null +++ b/src/common/models/user.model.js @@ -0,0 +1,1005 @@ +/* eslint-disable camelcase */ +/* eslint-disable no-param-reassign */ +import { Model, DataTypes, Op } from 'sequelize'; +import { values, pick, isEqual, isNil, omitBy } from 'lodash'; +import { hash, compare } from 'bcryptjs'; +import moment from 'moment-timezone'; +import httpStatus from 'http-status'; +import { v4 as uuidv4 } from 'uuid'; +import APIError from '../utils/APIException'; +import postgres from '../../config/postgres'; +import { serviceName } from '../../config/vars'; +import Permissions from '../../common/utils/Permissions'; + +/** + * Create connection + */ +class User extends Model { } +const { sequelize } = postgres; + +User.Providers = { + APPLE: 'apple', + GOOGLE: 'google', + FACEBOOK: 'facebook', +}; + +User.Statuses = { + INACTIVE: 'inactive', + ACTIVE: 'active', + BANNED: 'banned' +}; + +User.NameStatuses = { + INACTIVE: 'inactive', + ACTIVE: 'active', + BANNED: 'banned' +}; + +User.Genders = { + MALE: 'male', + FEMALE: 'female' +}; + +User.Services = { + USER: 'user', + STAFF: 'staff', + SERVICE: 'service' +}; + +User.Types = { + STAFF: 'staff', + COMPANY: 'company', + SUPPLIER: 'supplier', + INDIVIDUAL: 'individual' +}; + +const PUBLIC_FIELDS = [ + 'type', + 'role', + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'group', + 'stores', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + 'password', + 'permissions' +]; + +const PUBLIC_PROFILE_FIELDS = [ + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'password', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward' +]; + +/** + * User Schema + * @public + */ +User.init( + { + id: { + type: DataTypes.INTEGER, + autoIncrement: true, + primaryKey: true + }, + type: { + type: DataTypes.STRING(10), + defaultValue: User.Types.INDIVIDUAL + }, + name: { + type: DataTypes.STRING(155), + allowNull: false + }, + note: { + type: DataTypes.STRING(255), + defaultValue: null + }, + phone: { + type: DataTypes.STRING(20), + defaultValue: null + }, + email: { + type: DataTypes.STRING(255), + validate: { isEmail: true }, + defaultValue: null + }, + avatar: { + type: DataTypes.STRING(255), + defaultValue: null + }, + cover: { + type: DataTypes.STRING(255), + defaultValue: null + }, + birthday: { + type: DataTypes.DATE, + defaultValue: null + }, + barcode: { + type: DataTypes.STRING(255), + defaultValue: null + }, + gender: { + type: DataTypes.STRING(50), + values: values(User.Genders), + defaultValue: User.Genders.FEMALE + }, + tax_code: { + type: DataTypes.STRING(25), + defaultValue: null + }, + company: { + type: DataTypes.STRING(100), + defaultValue: null + }, + country: { + type: DataTypes.STRING(3), + defaultValue: 'vn' + }, + language: { + type: DataTypes.STRING(3), + default: 'vi' + }, + timezone: { + type: DataTypes.INTEGER, + default: 7 + }, + address: { + type: DataTypes.STRING(255), + defaultValue: null + }, + province: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + district: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + ward: { + type: DataTypes.JSONB, + defaultValue: null // id || name + }, + role: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + group: { + type: DataTypes.JSONB, + defaultValue: null // id | name + }, + status: { + type: DataTypes.STRING(50), + values: values(User.Statuses), + defaultValue: User.Statuses.ACTIVE + }, + status_name: { + type: DataTypes.STRING(50), + values: values(User.NameStatuses), + defaultValue: User.NameStatuses.ACTIVE + }, + // stores: { + // type: DataTypes.JSONB, + // defaultValue: [] // id, name, phone, address + // }, + service: { + type: DataTypes.STRING(50), + values: values(User.Services), + defaultValue: User.Services.USER + }, + password: { + type: DataTypes.STRING(255), + defaultValue: uuidv4() + }, + permissions: { + type: DataTypes.ARRAY(DataTypes.STRING(155)), + defaultValue: [Permissions.USER] + }, + + // third party account + apple: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + facebook: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + google: { + type: DataTypes.JSONB, + defaultValue: { + id: null, + email: null, + name: null, + avatar: null, + } + }, + + normalize_name: { + type: DataTypes.STRING(255), + defaultValue: null + }, + normalize_dob: { + type: DataTypes.INTEGER, + defaultValue: null + }, + normalize_mob: { + type: DataTypes.INTEGER, + defaultValue: null + }, + + // metric + + // config + is_active: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + device_id: { + type: DataTypes.STRING(255), + defaultValue: 'unkown' + }, + ip_address: { + type: DataTypes.STRING(12), + defaultValue: 'unkown' + }, + is_verified_phone: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + is_verified_email: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + is_verified_password: { + type: DataTypes.BOOLEAN, + defaultValue: false + }, + created_at: { + type: DataTypes.DATE, + defaultValue: () => new Date() + }, + updated_at: { + type: DataTypes.DATE, + defaultValue: () => new Date() + }, + created_by: { + type: DataTypes.JSONB, + allowNull: false, + defaultValue: { + id: null, + name: null + } + } + }, + { + timestamps: false, + sequelize: sequelize, + schema: serviceName, + tableName: 'tbl_users', + modelName: 'user' + } +); + +/** + * Register event emiter + */ +User.Events = { + USER_CREATED: `${serviceName}.user.created`, + USER_UPDATED: `${serviceName}.user.updated`, + USER_DELETED: `${serviceName}.user.deleted`, +}; +User.EVENT_SOURCE = `${serviceName}.user`; + +/** + * Add your + * - pre-save hooks + * - validations + * - virtuals + */ +User.addHook('beforeCreate', async (model) => { + const user = model; + + if (user.password) { + const rounds = 10; + user.password = await hash(user.password, rounds); + } + + return user; +}); + +User.addHook('beforeUpdate', async (model, options) => { + const user = model; + const { password } = options; + // has pass + if (password) { + const rounds = 10; + user.password = await hash(password, rounds); + } + + return user; +}); + +User.addHook('afterCreate', () => { }); + +User.addHook('afterUpdate', () => { }); + +User.addHook('afterDestroy', () => { }); + + +/** + * Check min or max in condition + * @param {*} options + * @param {*} field + * @param {*} type + */ +function checkMinMaxOfConditionFields(options, field, type = 'Number') { + let _min = null; + let _max = null; + + // Transform min max + if (type === 'Date') { + _min = new Date(options[`min_${field}`]); + _min.setHours(0, 0, 0, 0); + + _max = new Date(options[`max_${field}`]); + _max.setHours(23, 59, 59, 999); + } + if (type === 'Number') { + _min = parseFloat(options[`min_${field}`]); + _max = parseFloat(options[`max_${field}`]); + } + + // Transform condition + if ( + !isNil(options[`min_${field}`]) || + !isNil(options[`max_${field}`]) + ) { + if ( + options[`min_${field}`] && + !options[`max_${field}`] + ) { + options[field] = { + [Op.gte]: _min + }; + } else if ( + !options[`min_${field}`] && + options[`max_${field}`] + ) { + options[field] = { + [Op.lte]: _max + }; + } else { + options[field] = { + [Op.gte]: _min || 0, + [Op.lte]: _max || 0 + }; + } + } + + // Remove first condition + delete options[`max_${field}`]; + delete options[`min_${field}`]; +} + +/** + * Load query + * @param {*} params + */ +function filterConditions(params) { + const options = omitBy(params, isNil); + options.is_active = true; + + if (options.types) { + options.type = { [Op.in]: options.types.split(',') }; + } + delete options.types; + + if (options.roles) { + options['role.id'] = { [Op.in]: options.roles.split(',') }; + } + delete options.roles; + + if (options.groups) { + options['group.id'] = { [Op.in]: options.groups.split(',') }; + } + delete options.groups; + + if (options.statuses) { + options.status = { [Op.in]: options.statuses.split(',') }; + } + delete options.statuses; + + if (options.services) { + options.service = { [Op.in]: options.services.split(',') }; + } + delete options.services; + + if (options.genders) { + options.gender = { [Op.in]: options.genders.split(',') }; + } + delete options.genders; + + if (options.staffs) { + options['created_by.id'] = { [Op.in]: options.staffs.split(',') }; + } + delete options.staffs; + + if (options.stores) { + options.store_path = { [Op.overlap]: options.stores.split(',') }; + } + delete options.stores; + + if (options.provinces) { + options['province.id'] = { [Op.in]: options.provinces.split(',') }; + } + delete options.provinces; + + if (options.keyword) { + options.normalize_name = { [Op.iLike]: `%${options.keyword}%` }; + } + delete options.keyword; + + // Date Filter + checkMinMaxOfConditionFields(options, 'created_at', 'Date'); + + return options; +} + +/** + * Load sort query + * @param {*} sort_by + * @param {*} order_by + */ +function sortConditions({ sort_by, order_by }) { + let sort = null; + switch (sort_by) { + case 'created_at': + sort = ['created_at', order_by]; + break; + case 'updated_at': + sort = ['updated_at', order_by]; + break; + case 'total_debt': + sort = ['total_debt', order_by]; + break; + case 'total_point': + sort = ['total_point', order_by]; + break; + case 'total_purchase': + sort = ['total_purchase', order_by]; + break; + case 'total_invoice_price': + sort = ['total_invoice_price', order_by]; + break; + case 'total_return_price': + sort = ['total_return_price', order_by]; + break; + default: sort = ['created_at', 'DESC']; + break; + } + return sort; +} + +/** + * Transform postgres model to expose object + */ +User.transform = (params, includeRestrictedFields = true) => { + const transformed = {}; + const fields = [ + 'id', + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'role', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + + // manager + 'is_active', + 'is_verified_phone', + 'is_verified_email', + 'is_verified_password' + ]; + if (includeRestrictedFields) { + const privateFiles = [ + 'type', + 'role', + 'group', + 'stores', + 'status', + 'status_name', + 'permissions', + 'created_by' + ]; + fields.push(...privateFiles); + } + fields.forEach((field) => { + transformed[field] = params[field]; + }); + + // pipe decimal + const decimalFields = [ + 'total_debt', + 'total_order_price', + 'total_invoice_price', + 'total_return_price', + 'total_purchase', + 'total_point', + ]; + decimalFields.forEach((field) => { + transformed[field] = parseInt(params[field], 0); + }); + + // pipe date + const dateFields = [ + 'birthday', + 'created_at', + 'updated_at', + 'last_purchase' + ]; + dateFields.forEach((field) => { + transformed[field] = moment(params[field]).unix(); + }); + + return transformed; +}; + +/** + * Get all changed properties + */ +User.getChangedProperties = ({ newModel, oldModel }, includeRestrictedFields = true) => { + const changedProperties = []; + const allChangableProperties = [ + 'name', + 'note', + 'phone', + 'email', + 'avatar', + 'cover', + 'gender', + 'birthday', + 'barcode', + 'tax_code', + 'company', + 'country', + 'address', + 'province', + 'district', + 'ward', + ]; + if (includeRestrictedFields) { + const privateFiles = [ + 'type', + 'role', + 'group', + 'password', + 'stores', + 'status', + 'permissions' + ]; + allChangableProperties.push(...privateFiles); + } + if (!oldModel) { + return allChangableProperties; + } + + allChangableProperties.forEach((field) => { + if (!isEqual(newModel[field], oldModel[field])) { + changedProperties.push(field); + } + }); + + return changedProperties; +}; + +/** + * Check user by phone - email + * + * @public + * @param {object} data email || phone + */ +User.getUserByPhoneOrEmail = async ({ phone, email, validate = false }) => { + try { + let user = null; + if (phone) { + user = await User.findOne({ + where: { + is_active: true, + phone: phone + } + }); + } + if (email) { + user = await User.findOne({ + where: { + is_active: true, + email: email, + } + }); + } + if (!user) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy tài khoản này!' + }); + } + if (validate) { + if (user.status === User.Statuses.INACTIVE) { + throw new APIError({ + message: 'Tài khoản chưa được kích hoạt!', + status: httpStatus.UNAUTHORIZED + }); + } + if (user.status === User.Statuses.BANNED) { + throw new APIError({ + message: 'Tài khoản đã bị khoá!', + status: httpStatus.UNAUTHORIZED + }); + } + } + return user; + } catch (ex) { + throw (ex); + } +}; +User.getUserByPhoneOrEmailRegister = async ({ phone, email }) => { + try { + let user = null; + if (phone) { + user = await User.findOne({ + where: { + is_active: true, + phone: phone + } + }); + } + if (email) { + user = await User.findOne({ + where: { + is_active: true, + email: email, + } + }); + } + if (user) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Tài khoản này đã được đăng kí' + }); + } + // if (validate) { + // if (user.status === User.Statuses.INACTIVE) { + // throw new APIError({ + // message: 'Tài khoản chưa được kích hoạt!', + // status: httpStatus.UNAUTHORIZED + // }); + // } + // if (user.status === User.Statuses.BANNED) { + // throw new APIError({ + // message: 'Tài khoản đã bị khoá!', + // status: httpStatus.UNAUTHORIZED + // }); + // } + // } + return true; + } catch (ex) { + throw (ex); + } +}; + +User.getStaffPermissions = async (staffId) => { + const user = await User.findOne({ + attributes: ['permissions'], + where: { + status: User.Statuses.ACTIVE, + is_active: true, + id: staffId + } + }); + return user.permissions; +}; +/** + * Get Store By Id + * + * @public + * @param {String} userId + */ +User.get = async (userId) => { + try { + const user = await User.findOne({ + where: { + id: userId, + is_active: true + } + }); + if (isNil(user)) { + throw new APIError({ + status: httpStatus.NOT_FOUND, + message: 'Không tìm thấy người dùng này!' + }); + } + return user; + } catch (ex) { + throw (ex); + } +}; + +/** + * List + * + * @param {number} skip - Number of records to be skipped. + * @param {number} limit - Limit number of records to be returned. + * @returns {Promise} + */ +User.list = async ({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + + // sort condition + skip = 0, + limit = 20, + sort_by = 'desc', + order_by = 'created_at', +}) => { + const options = filterConditions({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + }); + const sorts = sortConditions({ + sort_by, + order_by + }); + return User.findAll({ + where: options, + order: [sorts], + offset: skip, + limit: limit + }); +}; + +/** + * Total records. + * + * @param {number} skip - Number of records to be skipped. + * @param {number} limit - Limit number of records to be returned. + * @returns {Promise} + */ +User.totalRecords = ({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, +}) => { + const options = filterConditions({ + roles, + types, + groups, + stores, + provinces, + staffs, + genders, + statuses, + services, + keyword, + min_created_at, + max_created_at, + min_last_purchase, + max_last_purchase, + min_total_order_price, + max_total_order_price, + min_total_invoice_price, + max_total_invoice_price, + min_total_point, + max_total_point, + min_total_debt, + max_total_debt, + }); + + return User.count({ where: options }); +}; + +/** + * Check Duplicate Account Info + * + * @public + * @param {object} data email || phone + */ +User.checkDuplicate = async ({ userId, service, email, phone }) => { + let user = null; + let message = null; + + if (phone) { + user = await User.findOne({ + where: { + phone, + service, + is_active: true, + id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } + } + }); + message = '"Phone already in use'; + } + + if (email) { + user = await User.findOne({ + where: { + email, + service, + is_active: true, + id: userId ? { [Op.ne]: userId } : { [Op.ne]: null } + } + }); + message = '"Email" already exist'; + } + + if (user) { + throw new APIError({ + message: message, + errors: [ + { + field: 'username', + location: 'body', + messages: [message] + } + ], + status: httpStatus.CONFLICT + }); + } + + return null; +}; + +/** + * Compare password + * + * @param {String} password + * @param {User} model + */ +User.passwordMatches = async (model, password) => compare(password, model.password); + +/** + * Check if current user is expired + * + * @param {Date} currentTime + * @param {User} model + * @returns {Boolean} + */ +User.isExpired = (model, currentTime = null) => { + const currentTimeToCheck = currentTime !== null ? currentTime : new Date(); + return currentTimeToCheck >= model.expired_at; +}; + +/** + * Filter only allowed fields from user + * + * @param {Object} params + */ +User.filterParams = (params, includeRestrictedFields = true) => { + if (includeRestrictedFields) { + return pick(params, PUBLIC_FIELDS); + } + return pick(params, PUBLIC_PROFILE_FIELDS); +}; + +/** + * Return fully qualified phone number + * + * @param {String} phone + */ +User.normalizePhoneNumber = (phone) => + `+84${phone + .replace(/\D/g, '') + .replace(/^84/, '') + .replace(/^0*/, '')}`; + +/** + * @typedef User + */ +export default User; diff --git a/src/common/services/adapters/sharp-adapter.js b/src/common/services/adapters/sharp-adapter.js new file mode 100644 index 0000000..ea13044 --- /dev/null +++ b/src/common/services/adapters/sharp-adapter.js @@ -0,0 +1,101 @@ +/* eslint-disable no-param-reassign */ +import sharp from 'sharp'; + +/** image size supported */ +const Sizes = [50, 100, 200, 300, 400, 500, 600, 700, 800]; + +function transformer(options, transformOptions) { + let imageStream = sharp(); + + if (transformOptions.resize) { + const keys = Object.keys(options); + for (let index = 0; index < keys.length; index += 1) { + const value = options[keys[index]]; + if (value) { + imageStream = resolveImageStream( + keys[index], + value, + transformOptions.resize, + imageStream + ); + } + } + } + + return imageStream; +} + +const objectHasOwnProperty = (source, prop) => + Object.prototype.hasOwnProperty.call(source, prop); + +const hasProp = (value) => + typeof value === 'object' && objectHasOwnProperty(value, 'type'); + +const validateFormat = (value) => { + if (hasProp(value)) { + return value.type; + } + return value; +}; + +const validateValue = (value) => { + if (typeof value === 'boolean') { + return null; + } + return value; +}; + +const resolveImageStream = (key, value, size, imageStream) => { + if (key === 'resize') { + imageStream = imageStream.resize( + size.width, + size.height, + Object.assign(value, size.options) + ); + } else if (key === 'crop') { + imageStream = imageStream[key](value); + } else if (key === 'toFormat') { + imageStream = imageStream.toFormat( + validateFormat(value), + value.options + ); + } else { + const valid = validateValue(value); + imageStream = imageStream[key](valid); + } + return imageStream; +}; + +const getSharpOptions = (options) => ({ + resize: options.resize, + background: options.background, + crop: options.crop, + embed: options.embed, + max: options.max, + min: options.min, + toFormat: options.toFormat, + extract: options.extract, + trim: options.trim, + flatten: options.flatten, + extend: options.extend, + negate: options.negate, + rotate: options.rotate, + flip: options.flip, + flop: options.flop, + blur: options.blur, + sharpen: options.sharpen, + gamma: options.gamma, + grayscale: options.grayscale, + greyscale: options.greyscale, + normalize: options.normalize, + normalise: options.normalise, + convolve: options.convolve, + threshold: options.threshold, + toColourspace: options.toColourspace, + toColorspace: options.toColorspace, + ignoreAspectRatio: options.ignoreAspectRatio, + withMetadata: options.withMetadata, + withoutEnlargement: options.withoutEnlargement +}); + +module.exports = { Sizes, transformer, getSharpOptions }; diff --git a/src/common/services/adapters/upload-adapter.js b/src/common/services/adapters/upload-adapter.js new file mode 100644 index 0000000..c6130ce --- /dev/null +++ b/src/common/services/adapters/upload-adapter.js @@ -0,0 +1,109 @@ +import multer from 'multer'; +// import moment from 'moment-timezone'; +import { storage as storageConfig } from '../../../config/vars'; + +/** storage will create folder when new date */ +// const date = new Date(); +// const year = moment(date).format('YYYY'); +// const month = moment(date).format('MM'); +const filePath = `${storageConfig.uri}`; + +const createDefaultFolder = ({ id }) => { + try { + if (id) { + multer({ dest: `${filePath}/${id}` }); + } else { + multer({ dest: `${filePath}` }); + } + // multer({ dest: `${filePath}/images/games` }); + // multer({ dest: `${filePath}/images/stories` }); + // multer({ dest: `${filePath}/images/chapters` }); + // multer({ dest: `${filePath}/images/vouchers` }); + // multer({ dest: `${filePath}/images/products` }); + // multer({ dest: `${filePath}/images/customers` }); + // multer({ dest: `${filePath}/images/promotions` }); + + // // configuration + // multer({ dest: `${filePath}/images/banners` }); + // multer({ dest: `${filePath}/images/categories` }); + // multer({ dest: `${filePath}/images/upload/default` }); + return true; + } catch (ex) { + return false; + } +}; +const createFolder = ({ path }) => { + try { + console.log(`${filePath}/${path}`); + multer({ dest: `${filePath}/${path}` }); + // multer({ dest: `${filePath}/images/games` }); + // multer({ dest: `${filePath}/images/stories` }); + // multer({ dest: `${filePath}/images/chapters` }); + // multer({ dest: `${filePath}/images/vouchers` }); + // multer({ dest: `${filePath}/images/products` }); + // multer({ dest: `${filePath}/images/customers` }); + // multer({ dest: `${filePath}/images/promotions` }); + + // // configuration + // multer({ dest: `${filePath}/images/banners` }); + // multer({ dest: `${filePath}/images/categories` }); + // multer({ dest: `${filePath}/images/upload/default` }); + return true; + } catch (ex) { + return false; + } +}; +/** add image to storage follow group */ +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, filePath); + }, + filename: (req, file, cb) => { + /** + * setup folder follow date + */ + createDefaultFolder({}); + + /** + * save image follow type + */ + const path = req.query.path; + console.log('path', path); + // const fileName = file.originalname.includes('.') + // ? file.originalname.slice(0, file.originalname.lastIndexOf('.')) + // : file.originalname; + cb( + null, + `/${path}/${file.originalname}` + ); + } +}); + +const fileFilter = (req, file, cb) => { + // if ( + // file.mimetype === 'image/jpeg' || + // file.mimetype === 'image/webp' || + // file.mimetype === 'image/png' || + // file.mimetype === 'image/gif' || + // ) { + // cb(null, true); + // } else { + // cb(null, false); + // } + cb(null, true); +}; + +const uploader = multer({ + storage, + limits: { + fileSize: 1024 * 1024 * 2 // 5MB + }, + fileFilter +}); + +module.exports = { + createDefaultFolder, + createFolder, + uploader, + fileFilter +}; diff --git a/src/common/services/event-bus.js b/src/common/services/event-bus.js new file mode 100644 index 0000000..355e6cc --- /dev/null +++ b/src/common/services/event-bus.js @@ -0,0 +1,9 @@ +import { EventEmitter } from 'events'; + +const emitter = new EventEmitter(); + +emitter.on('uncaughtException', (err) => { + console.error(err); +}); + +export default emitter; diff --git a/src/common/services/managers/image-manager.js b/src/common/services/managers/image-manager.js new file mode 100644 index 0000000..e69de29 diff --git a/src/common/services/managers/upload-manager.js b/src/common/services/managers/upload-manager.js new file mode 100644 index 0000000..e9bc649 --- /dev/null +++ b/src/common/services/managers/upload-manager.js @@ -0,0 +1,53 @@ +import fs from 'fs'; +import sharp from 'sharp'; +import eventBus from '../event-bus'; +import Image from '../../models/image.model'; +import { getSharpOptions, transformer, Sizes } from '../adapters/sharp-adapter'; + + +function registerUploadEvent() { + /** + * When token created service will send code verify to user by phone + * + * @param {TokenVerify} token + */ + eventBus.on(Image.Events.IMAGE_CREATED, async (file) => { + console.log(file); + Sizes.forEach(size => { + // setup sharp transform option + const transformOptions = getSharpOptions({ + resize: { + width: size, + height: size + } + }); + + // setup sharp option + const sharpOptions = { + resize: { + fit: sharp.fit.inside, + withoutEnlargement: true, + watermark: false + } + }; + + // create image stream + const fileStream = fs.createReadStream(file.path); + const imageStream = transformer(sharpOptions, transformOptions); + + // replace name resize + const imageSplit = file.path.split('.'); + const imageType = imageSplit[imageSplit.length - 1]; + const imageFullName = `${imageSplit[imageSplit.length - 2]}-${size}x${size}.${imageType}`.split(' ').join('-'); + // save new image + fileStream.pipe(imageStream) + .webp({ quality: 80, lossless: true }) + .toFormat(imageType).toFile(`${imageFullName}`) + .catch(() => console.log('resize image failed!')); + }); + }); +} + +module.exports = { + registerUploadEvent +}; diff --git a/src/common/services/service-client.js b/src/common/services/service-client.js new file mode 100644 index 0000000..b7e87bb --- /dev/null +++ b/src/common/services/service-client.js @@ -0,0 +1,28 @@ +import axios from 'axios'; +import { cloneDeep } from 'lodash'; + +const DEFAULT_OPTIONS = { + headers: { + 'X-Consumer-Groups': 'service', + 'X-Anonymous-User': 'true' + } +}; + +module.exports = { + get: (url, options = {}) => { + const defaultOptions = cloneDeep(DEFAULT_OPTIONS); + return axios.get(url, Object.assign(defaultOptions, options)); + }, + post: (url, data, options = {}) => { + const defaultOptions = cloneDeep(DEFAULT_OPTIONS); + return axios.post(url, data, Object.assign(defaultOptions, options)); + }, + put: (url, data, options = {}) => { + const defaultOptions = cloneDeep(DEFAULT_OPTIONS); + return axios.put(url, data, Object.assign(defaultOptions, options)); + }, + delete: (url, options = {}) => { + const defaultOptions = cloneDeep(DEFAULT_OPTIONS); + return axios.delete(url, Object.assign(defaultOptions, options)); + } +}; diff --git a/src/common/utils/APIException.js b/src/common/utils/APIException.js new file mode 100644 index 0000000..f7a6bce --- /dev/null +++ b/src/common/utils/APIException.js @@ -0,0 +1,51 @@ +const httpStatus = require('http-status'); + +/** + * @extends Error + */ +class ExtendableError extends Error { + constructor({ message, errors, status, isPublic, stack, isTranslated }) { + super(message); + this.name = this.constructor.name; + this.message = message; + this.errors = errors; + this.status = status; + this.isPublic = isPublic; + this.isOperational = true; // This is required since bluebird 4 doesn't append it anymore. + this.stack = stack; + this.isTranslated = isTranslated; + // Error.captureStackTrace(this, this.constructor.name); + } +} + +/** + * Class representing an API error. + * @extends ExtendableError + */ +class APIException extends ExtendableError { + /** + * Create an API error. + * @param {string} message - Error message. + * @param {number} status - HTTP status code of error. + * @param {boolean} isPublic - Whether the message should be visible to user or not. + */ + constructor({ + message, + errors, + stack, + status = httpStatus.INTERNAL_SERVER_ERROR, + isPublic = false, + isTranslated = false + }) { + super({ + message, + errors, + status, + isPublic, + stack, + isTranslated + }); + } +} + +module.exports = APIException; diff --git a/src/common/utils/Permissions.js b/src/common/utils/Permissions.js new file mode 100644 index 0000000..f21b578 --- /dev/null +++ b/src/common/utils/Permissions.js @@ -0,0 +1,120 @@ +import { serviceName } from '../../config/vars'; + +export default { + // Service Permission + USER: 'user', + LOGGED_IN: 'staff', + + // For Product Route + PRODUCT_VIEW: `${serviceName}_product_view`, + PRODUCT_CREATE: `${serviceName}_product_create`, + PRODUCT_UPDATE: `${serviceName}_product_update`, + PRODUCT_DELETE: `${serviceName}_product_delete`, + + // For Category Route + CATEGORY_VIEW: `${serviceName}_category_view`, + CATEGORY_CREATE: `${serviceName}_category_create`, + CATEGORY_UPDATE: `${serviceName}_category_update`, + CATEGORY_DELETE: `${serviceName}_category_delete`, + + // For Order Route + ORDER_VIEW: `${serviceName}_order_view`, + ORDER_CREATE: `${serviceName}_order_create`, + ORDER_UPDATE: `${serviceName}_order_update`, + + // For Import Route + IMPORT_VIEW: `${serviceName}_import_view`, + IMPORT_CREATE: `${serviceName}_import_create`, + IMPORT_UPDATE: `${serviceName}_import_update`, + IMPORT_DELETE: `${serviceName}_import_delete`, + + // For Export Route + EXPORT_VIEW: `${serviceName}_export_view`, + EXPORT_CREATE: `${serviceName}_export_create`, + EXPORT_UPDATE: `${serviceName}_export_update`, + EXPORT_DELETE: `${serviceName}_export_delete`, + + // For Stock Take Route + STOCK_TAKE_VIEW: `${serviceName}_stock_take_view`, + STOCK_TAKE_CREATE: `${serviceName}_stock_take_create`, + STOCK_TAKE_UPDATE: `${serviceName}_stock_take_update`, + STOCK_TAKE_DELETE: `${serviceName}_stock_take_delete`, + + // For Province Route + PROVINCE_VIEW: `${serviceName}_province_view`, + PROVINCE_CREATE: `${serviceName}_province_create`, + PROVINCE_UPDATE: `${serviceName}_province_update`, + PROVINCE_DELETE: `${serviceName}_province_delete`, + + // For District Route + DISTRICT_VIEW: `${serviceName}_district_view`, + DISTRICT_CREATE: `${serviceName}_district_create`, + DISTRICT_UPDATE: `${serviceName}_district_update`, + DISTRICT_DELETE: `${serviceName}_district_delete`, + + // For Ward Route + WARD_VIEW: `${serviceName}_ward_view`, + WARD_CREATE: `${serviceName}_ward_create`, + WARD_UPDATE: `${serviceName}_ward_update`, + WARD_DELETE: `${serviceName}_ward_delete`, + + // For Banner Route + BANNER_VIEW: `${serviceName}_banner_view`, + BANNER_CREATE: `${serviceName}_banner_create`, + BANNER_UPDATE: `${serviceName}_banner_update`, + BANNER_DELETE: `${serviceName}_banner_delete`, + + // For Banner Route + VOUCHER_VIEW: `${serviceName}_voucher_view`, + VOUCHER_CREATE: `${serviceName}_voucher_create`, + VOUCHER_UPDATE: `${serviceName}_voucher_update`, + VOUCHER_DELETE: `${serviceName}_voucher_delete`, + + // For Payment Route + PAYMENT_VIEW: `${serviceName}_payment_view`, + PAYMENT_CREATE: `${serviceName}_payment_create`, + PAYMENT_UPDATE: `${serviceName}_payment_update`, + PAYMENT_DELETE: `${serviceName}_payment_delete`, + + // For price book Route + PRICE_VIEW: `${serviceName}_price_view`, + PRICE_CREATE: `${serviceName}_price_create`, + PRICE_UPDATE: `${serviceName}_price_update`, + PRICE_DELETE: `${serviceName}_price_delete`, + + // For Delivery Route + DELIVERY_VIEW: `${serviceName}_delivery_view`, + DELIVERY_CREATE: `${serviceName}_delivery_create`, + DELIVERY_UPDATE: `${serviceName}_delivery_update`, + DELIVERY_DELETE: `${serviceName}_delivery_delete`, + + // For Delivery Route + DELIVERY_PAYMENT_VIEW: `${serviceName}_delivery_payment_view`, + DELIVERY_PAYMENT_CREATE: `${serviceName}_delivery_payment_create`, + DELIVERY_PAYMENT_UPDATE: `${serviceName}_delivery_payment_update`, + DELIVERY_PAYMENT_DELETE: `${serviceName}_delivery_payment_delete`, + + // For Research Route + RESEARCH_VIEW: `${serviceName}_research_view`, + RESEARCH_CREATE: `${serviceName}_research_create`, + RESEARCH_UPDATE: `${serviceName}_research_update`, + RESEARCH_DELETE: `${serviceName}_research_delete`, + + // For Production Route + PRODUCTION_VIEW: `${serviceName}_production_view`, + PRODUCTION_CREATE: `${serviceName}_production_create`, + PRODUCTION_UPDATE: `${serviceName}_production_update`, + PRODUCTION_DELETE: `${serviceName}_production_delete`, + + // For Promotion Route + PROMOTION_VIEW: `${serviceName}_promotion_view`, + PROMOTION_CREATE: `${serviceName}_promotion_create`, + PROMOTION_UPDATE: `${serviceName}_promotion_update`, + + PATH_VIEW: `${serviceName}_path_view`, + PATH_CREATE: `${serviceName}_path_create`, + PATH_UPDATE: `${serviceName}_path_update`, + PATH_DELETE: `${serviceName}_path_delete`, + + IMAGE_UPLOAD: `${serviceName}_image_upload` +}; diff --git a/src/common/utils/utilities.js b/src/common/utils/utilities.js new file mode 100644 index 0000000..cdb3675 --- /dev/null +++ b/src/common/utils/utilities.js @@ -0,0 +1,7 @@ +/* eslint-disable no-useless-escape */ + +/** + * Replace string to - character + * @public + */ +exports.replaceText = (text) => text.replace(/\s/g, '-').replace(/[`~!@#$%^&*()_|+\-=÷¿?;:'",.<>\{\}\[\]\\\/]/gi, '-'); diff --git a/src/config/express.js b/src/config/express.js new file mode 100644 index 0000000..a617a63 --- /dev/null +++ b/src/config/express.js @@ -0,0 +1,54 @@ +import express from 'express'; +import morgan from 'morgan'; +import { json, urlencoded } from 'body-parser'; +import compress from 'compression'; +import methodOverride from 'method-override'; +import cors from 'cors'; +import helmet from 'helmet'; +import i18n from './i18n'; +import routes from '../api/routes/v1'; +import { logs } from './vars'; +import { converter, handler } from '../api/middlewares/errors'; +// import { converter, notFound, handler } from '../api/middlewares/errors'; + +/** + * Express instance + * @public + */ +const app = express(); +app.use(express.static('public')); +// request logging. dev: console | production: file +app.use(morgan(`${logs}`)); +// parse body params and attache them to req.body +app.use(json()); +app.use(urlencoded({ extended: true })); + +// gzip compression +app.use(compress()); + +// lets you use HTTP verbs such as PUT or DELETE +// in places where the client doesn't support it +app.use(methodOverride()); + +// secure apps by setting various HTTP headers +app.use(helmet()); + +// enable CORS - Cross Origin Resource Sharing +app.use(cors()); + +// init i18n +app.use(i18n.init); + +// mount api v1 routes +app.use('/v1', routes); + +// if error is not an instanceOf APIError, convert it. +app.use(converter); + +// catch 404 and forward to error handler +// app.use(notFound); + +// error handler, send stacktrace only during development +app.use(handler); + +export default app; diff --git a/src/config/i18n.js b/src/config/i18n.js new file mode 100644 index 0000000..b67d3f0 --- /dev/null +++ b/src/config/i18n.js @@ -0,0 +1,8 @@ +import i18n, { configure } from 'i18n'; +import { join } from 'path'; + +configure({ + directory: join(__dirname, '/locales') +}); + +export default i18n; diff --git a/src/config/locales/en.json b/src/config/locales/en.json new file mode 100644 index 0000000..0794db4 --- /dev/null +++ b/src/config/locales/en.json @@ -0,0 +1,21 @@ +{ + "Invalid file!": "Invalid file!", + "Unauthorized": "Unauthorized", + "NOT_FOUND!": "NOT_FOUND!", + "VALIDATION_ERROR": "VALIDATION_ERROR", + "Cannot set headers after they are sent to the client": "Cannot set headers after they are sent to the client", + "The \"path\" argument must be of type string. Received an instance of Object": "The \"path\" argument must be of type string. Received an instance of Object", + "Cannot read properties of undefined (reading 'replace')": "Cannot read properties of undefined (reading 'replace')", + "Callback must be a function. Received undefined": "Callback must be a function. Received undefined", + "Cannot read properties of undefined (reading 'on')": "Cannot read properties of undefined (reading 'on')", + "_busboy2.default is not a constructor": "_busboy2.default is not a constructor", + "ENOENT: no such file or directory, open 'public1/undefined/50ba9c5e20a3fcfda5b2.jpeg'": "ENOENT: no such file or directory, open 'public1/undefined/50ba9c5e20a3fcfda5b2.jpeg'", + "ENOENT: no such file or directory, open 'public1/1235/12/50ba9c5e20a3fcfda5b2.jpeg'": "ENOENT: no such file or directory, open 'public1/1235/12/50ba9c5e20a3fcfda5b2.jpeg'", + "ENOENT: no such file or directory, open 'public1/public11235/12/50ba9c5e20a3fcfda5b2.jpeg'": "ENOENT: no such file or directory, open 'public1/public11235/12/50ba9c5e20a3fcfda5b2.jpeg'", + "ENOENT: no such file or directory, open 'public1/images/12/50ba9c5e20a3fcfda5b2.jpeg'": "ENOENT: no such file or directory, open 'public1/images/12/50ba9c5e20a3fcfda5b2.jpeg'", + "Không tìm thấy tài khoản này!": "Không tìm thấy tài khoản này!", + "ENOENT: no such file or directory, open 'public/12/about.jpg'": "ENOENT: no such file or directory, open 'public/12/about.jpg'", + "Cannot read properties of undefined (reading 'id')": "Cannot read properties of undefined (reading 'id')", + "Forbidden": "Forbidden", + "ENOENT: no such file or directory, open 'public/5/50ba9c5e20a3fcfda5b2.jpeg'": "ENOENT: no such file or directory, open 'public/5/50ba9c5e20a3fcfda5b2.jpeg'" +} \ No newline at end of file diff --git a/src/config/locales/vi.json b/src/config/locales/vi.json new file mode 100644 index 0000000..1290eb6 --- /dev/null +++ b/src/config/locales/vi.json @@ -0,0 +1,4 @@ +{ + "NOT_FOUND!": "NOT_FOUND!", + "Không tìm thấy tài khoản này!": "Không tìm thấy tài khoản này!" +} \ No newline at end of file diff --git a/src/config/messages.js b/src/config/messages.js new file mode 100644 index 0000000..d350b38 --- /dev/null +++ b/src/config/messages.js @@ -0,0 +1,21 @@ +module.exports = { + /** for http status */ + BAD_REQUEST: 'Tham số không hợp lệ.!', + NOT_FOUND: 'Không tìm thấy dữ liệu.!', + NOT_PERMISSION: 'Bạn không có quyền truy cập hoặc thực hiện thao tác này.!', + SERVER_ERROR: 'Hệ thống đã xảy ra sự cố. Xin vui lòng thử lại sau ít phút.!', + + /** for events */ + CREATE_FAILED: 'Thêm mới không thành công.!', + CREATE_SUCCESS: 'Thêm mới thành công.!', + + UPDATE_FAILED: 'Cập nhật dữ liệu không thành công.!', + UPDATE_SUCCESS: 'Cập nhật dữ liệu thành công.!', + + REMOVE_FAILED: 'Xóa dữ liệu không thành công.!', + REMOVE_SUCCESS: 'Xóa dữ liệu thành công.!', + + /** for upload image */ + UPLOAD_FAILED: 'Tải lên thất bại', + UPLOAD_SUCCESS: 'Tải lên thành công' +}; diff --git a/src/config/mongoose.js b/src/config/mongoose.js new file mode 100644 index 0000000..1e39744 --- /dev/null +++ b/src/config/mongoose.js @@ -0,0 +1,38 @@ +const mongoose = require('mongoose'); +const { mongo, env } = require('./vars'); +const bluebird = require('bluebird'); + +// set mongoose Promise to Bluebird +mongoose.Promise = bluebird; + +// print mongoose logs in dev env +if (env === 'development') { + mongoose.set('debug', true); +} + +const defaultErrorHandler = (err) => { + console.log(`Connection to Mongo error: ${err}`); +}; + +/** + * Connect to mongo db + * + * @returns {object} Mongoose connection + * @public + */ +const connect = (errorHandler = defaultErrorHandler) => { + mongoose.connection.on('error', errorHandler); + + /** connect database */ + mongoose.connect(mongo.uri, { + useNewUrlParser: true, + keepAlive: 1 + }); + mongoose.set('useCreateIndex', true); + mongoose.set('useFindAndModify', false); + return mongoose.connection; +}; + +const disconnect = mongoose.disconnect.bind(mongoose); + +module.exports = { connect, disconnect }; diff --git a/src/config/persistent.js b/src/config/persistent.js new file mode 100644 index 0000000..2bbb21c --- /dev/null +++ b/src/config/persistent.js @@ -0,0 +1,117 @@ +import { basename } from 'path'; +import postgres from './postgres'; +import mongoose from './mongoose'; +import rabbitMQ from './rabbitmq'; +import redis from './redis'; + +const isCriticalProcess = basename(process.mainModule.filename) === 'index.js'; +const DELAY_TIME = 60000; // time to wait before kill process +let timeout; + +/** + * Error handle + */ +const errorHandler = (err, isCriticalConnection = false) => { + if (err) { + if (isCriticalProcess && !isCriticalConnection) { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(() => { + console.log(process.pid); + process.kill(process.pid, 'SIGUSR1'); + }, DELAY_TIME); + return null; + } + process.kill(process.pid, 'SIGUSR1'); + } + return err; +}; + +/** + * Disconnect to database + */ +const disconnect = async () => { + // try { + // await postgres.disconnect(); + // } catch (error) { + // console.log(`postgres disconnect: ${error}`); + // } + try { + await mongoose.disconnect(); + } catch (error) { + console.log(`mongoose disconnect: ${error}`); + } + try { + await rabbitMQ.disconnect(); + } catch (error) { + console.log(`rabbitMQ disconnect: ${error}`); + } + try { + await redis.disconnect(); + } catch (error) { + console.log(`redis disconnect: ${error}`); + } + await new Promise((s) => setTimeout(s, 100)); +}; + +/** + * Create connection to database + */ +const connect = async () => { + try { + await postgres.connect((err) => { + console.log(`Connection to Postgres error: ${err}`); + errorHandler(err); + }); + } catch (error) { + if (errorHandler(error)) { + throw error; + } + } + // try { + // // Exit application on error + // await mongoose.connect((err) => { + // console.error(`MongoDB connection error: ${err}`); + // errorHandler(err, true); + // }); + // } catch (error) { + // if (errorHandler(error, true)) { + // throw error; + // } + // } + // try { + // await rabbitMQ.connect( + // (err) => { + // console.log(`Connection to RabbitMQ error: ${err}`); + // errorHandler(err); + // }, + // (err) => { + // console.log(`Connection to RabbitMQ closed: ${err}`); + // if (err) { + // errorHandler(err); + // } + // } + // ); + // } catch (error) { + // if (errorHandler(error)) { + // throw error; + // } + // } + + // try { + // await redis.connect((err) => { + // console.log(`Connection to Redis error: ${err}`); + // errorHandler(err); + // }); + // } catch (error) { + // if (errorHandler(error)) { + // throw error; + // } + // } +}; + +module.exports = { + connect, + disconnect +}; diff --git a/src/config/postgres.js b/src/config/postgres.js new file mode 100644 index 0000000..4ba92c2 --- /dev/null +++ b/src/config/postgres.js @@ -0,0 +1,40 @@ +import Sequelize from 'sequelize'; +import bluebird from 'bluebird'; +import { postgres, env } from './vars'; + +Sequelize.Promise = bluebird; + +const defaultErrorHandler = (err) => { + console.log(`Connection to Postgres error: ${err}`); +}; + +const app = { + sequelize: new Sequelize( + postgres.uri, + { + dialect: 'postgres' + } + ), + connect(errorHandler = defaultErrorHandler) { + this.sequelize.authenticate() + .then(() => { + console.log('Postgres connection established!'); + if (env === '1') { + this.sequelize.sync({ + alter: true, + logging: true + }); + } + }).catch((error) => { + errorHandler(error); + }); + return this.sequelize; + }, + disconnect() { + // close connection + console.log('Closing postgres connection!'); + this.sequelize.close(); + } +}; + +export default app; diff --git a/src/config/rabbitmq.js b/src/config/rabbitmq.js new file mode 100644 index 0000000..727c78f --- /dev/null +++ b/src/config/rabbitmq.js @@ -0,0 +1,29 @@ +import rabbitEventSource from 'rabbit-event-source'; +import { rabbit, env } from './vars'; + +const defaultErrorHandler = (err) => { + console.log(`Connection to Rabbit error: ${err}`); +}; + +const defaultCloseHandler = (err) => { + console.log(`Connection to Rabbit closed: ${err}`); +}; + +const connect = async ( + errorHandler = defaultErrorHandler, + closeHandler = defaultCloseHandler +) => { + await rabbitEventSource.init(rabbit.uri, env); + + rabbitEventSource.rabbit.connection.on('error', errorHandler); + rabbitEventSource.rabbit.connection.on('close', closeHandler); +}; + +const disconnect = rabbitEventSource.rabbit.close.bind( + rabbitEventSource.rabbit +); + +module.exports = { + connect, + disconnect +}; diff --git a/src/config/redis.js b/src/config/redis.js new file mode 100644 index 0000000..a4e1628 --- /dev/null +++ b/src/config/redis.js @@ -0,0 +1,71 @@ +import Redis from 'ioredis'; +import bluebird from 'bluebird'; +import { redis as redisConfig, serviceName } from './vars'; + +Redis.Promise = bluebird; + +bluebird.promisifyAll(Redis); +bluebird.promisifyAll(Redis.prototype); + +const defaultErrorHandler = (err) => { + console.log(`Connection to Redis error: ${err}`); +}; + +const app = { + client: null, + subscriber: null, + allClients: [], + connect(errorHandler = defaultErrorHandler, overrideClient = true) { + const client = new Redis(redisConfig.uri, { + maxRetriesPerRequest: 3 + }); + + client.on('ready', () => { + console.log('Redis connection established!'); + }); + + client.on('end', () => { + console.log('Redis connection closed!'); + }); + + client.on('error', errorHandler); + if (overrideClient) { + this.client = client; + } + this.allClients.push(client); + return client; + }, + disconnect() { + this.allClients.forEach((client) => { + if (client) { + console.log('Closing redis connection!'); + client.quitAsync().catch(console.log); + } + }); + return null; + }, + getJobOptions() { + if (!this.subscriber) { + this.subscriber = this.connect(undefined, false); + } + return { + prefix: `jobs:${serviceName}`, + defaultJobOptions: { + removeOnComplete: 100, + removeOnFail: 100 + }, + createClient: (type) => { + switch (type) { + case 'client': + return this.client; + case 'subscriber': + return this.subscriber; + default: + return this.connect(undefined, false); + } + } + }; + } +}; + +module.exports = app; diff --git a/src/config/vars.js b/src/config/vars.js new file mode 100644 index 0000000..41e65ce --- /dev/null +++ b/src/config/vars.js @@ -0,0 +1,35 @@ +const path = require('path'); + +// import .env variables +require('dotenv-safe').load({ + path: path.join(__dirname, '../../.env'), + sample: path.join(__dirname, '../../.env.example') +}); + +module.exports = { + serviceName: 'file_service', + env: process.env.NODE_ENV, + port: process.env.PORT, + logs: process.env.NODE_ENV === 'production' ? 'combined' : 'development', + cdn: { + uri: process.env.NODE_ENV === 'production' ? process.env.CDN_URI : process.env.DEV_CDN_URI + }, + postgres: { + uri: process.env.NODE_ENV === 'production' ? process.env.POSTGRES_URI : process.env.POSTGRES_URI_TEST + }, + storage: { + uri: process.env.NODE_ENV === 'production' ? process.env.STORAGE_URI : process.env.DEV_STORAGE_URI + }, + mongo: { + uri: process.env.NODE_ENV === 'production' ? process.env.MONGO_URI : process.env.MONGO_URI_TEST + }, + rabbit: { + uri: process.env.RABBITMQ_URI + }, + redis: { + uri: process.env.REDIS_URI + }, + otherServices: { + manager: process.env.MANAGER_SERVICE_URL + } +}; diff --git a/src/event-adapter/index.js b/src/event-adapter/index.js new file mode 100644 index 0000000..84fa342 --- /dev/null +++ b/src/event-adapter/index.js @@ -0,0 +1,5 @@ +async function register() { + /** register here */ +} + +export default { register }; diff --git a/src/index-event-dispatcher.js b/src/index-event-dispatcher.js new file mode 100644 index 0000000..ad90a99 --- /dev/null +++ b/src/index-event-dispatcher.js @@ -0,0 +1,27 @@ +import eventDispatcher from './event-adapter'; +import provider from './providers'; +import persistent from './config/persistent'; + +persistent + .connect() + .then(() => { + provider.register(); + eventDispatcher.register(); + }) + .catch((err) => { + console.log(err); + process.exit(-1); + }); + +function terminate(exitCode) { + return () => { + persistent.disconnect().then(() => { + process.exit(exitCode); + }); + }; +} + +// handle close +process.on('SIGINT', terminate(0)); +process.on('SIGTERM', terminate(0)); +process.on('SIGUSR1', terminate(-1)); diff --git a/src/index-worker.js b/src/index-worker.js new file mode 100644 index 0000000..cf8c635 --- /dev/null +++ b/src/index-worker.js @@ -0,0 +1,27 @@ +import worker from './worker'; +import provider from './providers'; +import persistent from './config/persistent'; + +persistent + .connect() + .then(() => { + provider.register(); + worker.register(); + }) + .catch((err) => { + console.log(err); + process.exit(-1); + }); + +function terminate(exitCode) { + return () => { + persistent.disconnect().then(() => { + process.exit(exitCode); + }); + }; +} + +// handle close +process.on('SIGINT', terminate(0)); +process.on('SIGTERM', terminate(0)); +process.on('SIGUSR1', terminate(-1)); diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..2311c42 --- /dev/null +++ b/src/index.js @@ -0,0 +1,46 @@ +import app from './config/express'; +import { port, env } from './config/vars'; +import provider from './providers/index'; +import persistent from './config/persistent'; + +/** + * open persistent connection + * service will shutdown when any database disconnect or error. + */ +persistent + .connect() + .then(() => { + // register provider + provider.register(); + + // listen to requests + const server = app.listen(port, () => + console.info(`Server started on port ${port} (${env})`) + ); + + function terminate(exitCode) { + return () => { + console.log('Terminating'); + server.close(() => { + persistent.disconnect().then(() => { + process.exit(exitCode); + }); + }); + }; + } + + // handle close + process.on('SIGINT', terminate(0)); + process.on('SIGTERM', terminate(0)); + process.on('SIGUSR1', terminate(-1)); + }) + .catch((err) => { + console.log(err); + process.exit(-1); + }); + +/** + * Exports express + * @public + */ +export default app; diff --git a/src/providers/index.js b/src/providers/index.js new file mode 100644 index 0000000..4c8231a --- /dev/null +++ b/src/providers/index.js @@ -0,0 +1,8 @@ +import uploadEvent from './upload-event'; + +export default { + register: () => { + // register any event emitter || event rabbitmq here + uploadEvent.register(); + } +}; diff --git a/src/providers/upload-event.js b/src/providers/upload-event.js new file mode 100644 index 0000000..bffb4fa --- /dev/null +++ b/src/providers/upload-event.js @@ -0,0 +1,8 @@ +import uploadEvent from '../common/services/managers/upload-manager'; + +export default { + register: () => { + // register user event + uploadEvent.registerUploadEvent(); + } +}; diff --git a/src/worker/index.js b/src/worker/index.js new file mode 100644 index 0000000..ee61a92 --- /dev/null +++ b/src/worker/index.js @@ -0,0 +1,5 @@ +function register() { + /** register worker here */ +} + +export default { register }; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..d77b090 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7225 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@fast-csv/format@4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" + integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.isboolean "^3.0.3" + lodash.isequal "^4.5.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + +"@fast-csv/parse@4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" + integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.groupby "^4.6.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + lodash.isundefined "^3.0.1" + lodash.uniq "^4.5.0" + +"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/formatio@^3.0.0", "@sinonjs/formatio@^3.2.1": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" + integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== + dependencies: + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" + +"@sinonjs/samsam@^2.1.2": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.3.tgz#62cf2a9b624edc795134135fe37fc2ae8ea36be3" + integrity sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw== + +"@sinonjs/samsam@^3.1.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== + dependencies: + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + +"@types/bson@*": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.2.0.tgz#a2f71e933ff54b2c3bf267b67fa221e295a33337" + integrity sha512-ELCPqAdroMdcuxqwMgUpifQyRoTpyYCNr1V9xKyF40VsBobsj+BbWNRvwGchMgBPGqkw655ypkjj2MEF5ywVwg== + dependencies: + bson "*" + +"@types/bson@1.x || 4.0.x": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.5.tgz#9e0e1d1a6f8866483f96868a9b33bc804926b1fc" + integrity sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg== + dependencies: + "@types/node" "*" + +"@types/joi@^14.3.3": + version "14.3.4" + resolved "https://registry.yarnpkg.com/@types/joi/-/joi-14.3.4.tgz#eed1e14cbb07716079c814138831a520a725a1e0" + integrity sha512-1TQNDJvIKlgYXGNIABfgFp9y0FziDpuGrd799Q5RcnsDu+krD+eeW/0Fs5PHARvWWFelOhIG2OPCo6KbadBM4A== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/mongodb@^3.5.27": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.20.tgz#b7c5c580644f6364002b649af1c06c3c0454e1d2" + integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ== + dependencies: + "@types/bson" "*" + "@types/node" "*" + +"@types/node@*": + version "16.11.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.10.tgz#2e3ad0a680d96367103d3e670d41c2fed3da61ae" + integrity sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA== + +"@types/node@^14.0.1": + version "14.18.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.4.tgz#b722d6c91f156d9359aeb20f2d7d06337b15c603" + integrity sha512-swe3lD4izOJWHuxvsZdDFRq6S9i6koJsXOnQKYekhSO5JTizMVirUFgY/bUsaOJQj8oSD4oxmRYPBM/0b6jpdw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.5.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +adler-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" + integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +adler-32@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72" + integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g== + dependencies: + printj "~1.2.2" + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amp-message@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" + integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU= + dependencies: + amp "0.3.1" + +amp@0.3.1, amp@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" + integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= + +amqplib@^0.5.2, amqplib@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.6.tgz#86a7850f4f39c568eaa0dd0300ef374e17941cf4" + integrity sha512-J4TR0WAMPBHN+tgTuhNsSObfM9eTVTZm/FNw0LyaGfbiLsBxqSameDNYpChUFXW4bnTKHDXy0ab+nuLhumnRrQ== + dependencies: + bitsyntax "~0.1.0" + bluebird "^3.5.2" + buffer-more-ints "~1.0.0" + readable-stream "1.x >=1.1.9" + safe-buffer "~5.1.2" + url-parse "~1.4.3" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" + integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.0" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= + +array-includes@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.0, async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + +async@1.5: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.5, async@^2.6: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" + integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +auth-adapter@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/auth-adapter/-/auth-adapter-1.1.0.tgz#3ef4d40035bbe92c56e365bc5ca207165720a2ce" + integrity sha512-qVomBD3Z14jaXeezMFrVwciziYVTfTHJzgXgdELusR9+NFYavsr4EkKbfv/arYjUOtPxZgDGYRKxdCGMVkhDIg== + dependencies: + http-status "^1.2.0" + jsonwebtoken "^8.3.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +babel-cli@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= + dependencies: + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" + fs-readdir-recursive "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" + slash "^1.0.0" + source-map "^0.5.6" + v8flags "^2.1.1" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-env@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +basic-auth@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bcryptjs@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== + +big-integer@^1.6.17: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bitsyntax@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.1.0.tgz#b0c59acef03505de5a2ed62a2f763c56ae1d6205" + integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + dependencies: + buffer-more-ints "~1.0.0" + debug "~2.6.9" + safe-buffer "~5.1.2" + +bl@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" + integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blessed@^0.1.81: + version "0.1.81" + resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" + integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= + +bluebird@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== + +bluebird@^3.5.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + +body-parser@1.19.0, body-parser@^1.17.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bowser@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.9.0.tgz#3bed854233b419b9a7422d9ee3e85504373821c9" + integrity sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA== + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +bson@*: + version "4.6.0" + resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.0.tgz#15c3b39ba3940c3d915a0c44d51459f4b4fbf1b2" + integrity sha512-8jw1NU1hglS+Da1jDOUYuNcBJ4cNHCFIqzlwoFNnsTOg2R/ox0aTYcTiBN4dzRa9q7Cvy6XErh3L8ReTEb9AQQ== + dependencies: + buffer "^5.6.0" + +bson@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a" + integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + +buffer-more-ints@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz#ef4f8e2dddbad429ed3828a9c55d44f05c611422" + integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + +bull@^3.4.1: + version "3.29.3" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== + dependencies: + cron-parser "^2.13.0" + debuglog "^1.0.0" + get-port "^5.1.1" + ioredis "^4.27.0" + lodash "^4.17.21" + p-timeout "^3.2.0" + promise.prototype.finally "^3.1.2" + semver "^7.3.2" + util.promisify "^1.0.1" + uuid "^8.3.0" + +busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caching-transform@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" + integrity sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE= + dependencies: + md5-hex "^1.2.0" + mkdirp "^0.5.1" + write-file-atomic "^1.1.4" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelize@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + +caniuse-lite@^1.0.30000844: + version "1.0.30001282" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd" + integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg== + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +cfb@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402" + integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ== + dependencies: + adler-32 "~1.3.0" + crc-32 "~1.2.0" + printj "~1.3.0" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +charm@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" + integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +chokidar@^2, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-table-redemption@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli-table-redemption/-/cli-table-redemption-1.0.1.tgz#0359d8c34df74980029d76dff071a05a127c4fdd" + integrity sha512-SjVCciRyx01I4azo2K2rcc0NP/wOceXGzG1ZpYkEulbbIxDA/5YWv0oxG2HtQ4v8zPC6bgbRI7SbNaTZCxMNkg== + dependencies: + chalk "^1.1.3" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cluster-key-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" + integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codepage@~1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" + integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k= + dependencies: + commander "~2.14.1" + exit-on-epipe "~1.0.1" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^2.11.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== + +commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.0, component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.6.2: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.2, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-security-policy-builder@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz#0a2364d769a3d7014eec79ff7699804deb8cfcbb" + integrity sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ== + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +continuation-local-storage@^3.1.4: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + +convert-source-map@^1.5.0, convert-source-map@^1.5.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.3: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +coveralls@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081" + integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + +crc-32@^1.2.0, crc-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cron-parser@^2.13.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cron@^1.3: + version "1.8.2" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" + integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== + dependencies: + moment-timezone "^0.5.x" + +cross-env@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== + dependencies: + cross-spawn "^6.0.5" + +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +dasherize@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308" + integrity sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg= + +dayjs@^1.8.34: + version "1.10.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + +debug-log@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= + +debug@*, debug@^4.1.1, debug@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= + dependencies: + ms "2.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3, debug@^3.0, debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deep-metrics@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deep-metrics/-/deep-metrics-0.0.1.tgz#8ac3333195cc5eca059b224eb1ca61fc4cda50fd" + integrity sha512-732WmZgCWxOkf4QBvrCjPPuT6wTEzaGye/4JqYsU/sO0J53UNX4PBwK0JV262BZ5cxgLmKhU+NlrtKdPDgybkg== + dependencies: + semver "^5.3.0" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^1.1.0, denque@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +dicer@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= + +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dont-sniff-mimetype@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz#c7d0427f8bcb095762751252af59d148b0a623b2" + integrity sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug== + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +dotenv-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv-safe/-/dotenv-safe-5.0.1.tgz#8c4a79b8978fd4271b3d8ef17be2b2f04588af71" + integrity sha512-NiS92uLQHKThcQIB4pNEQHLaosz+O1VaJ1yuBaZNj0BASGpQliSzfPKgaoFs/WvE+p8pS9STXOMW30b5uxBZog== + dependencies: + dotenv "^5.0.0" + +dotenv@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + +dottie@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.2.tgz#cc91c0726ce3a054ebf11c55fbc92a7f266dd154" + integrity sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg== + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.47: + version "1.3.907" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.907.tgz#c8e155a17cb642a1023481c601aa3ad9ee61f402" + integrity sha512-xoUPSkjimw51d9ryeH38XUwmR3HmCA+eky4hk0YEgsWeBWGyhb35OCvT3lWAdmvIkcGYCRNOB8LvtO00dJQpOA== + +emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-regexp@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/escape-regexp/-/escape-regexp-0.0.1.tgz#f44bda12d45bbdf9cb7f862ee7e4827b3dd32254" + integrity sha1-9EvaEtRbvfnLf4Yu5+SCez3TIlQ= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-airbnb-base@^12.0.1: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" + integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" + integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.2.0: + version "2.25.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" + integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.1" + has "^1.0.3" + is-core-module "^2.8.0" + is-glob "^4.0.3" + minimatch "^3.0.4" + object.values "^1.1.5" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^4.2.0: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter2@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-1.0.5.tgz#f983610517b1737c0b9dc643beca93893c04df18" + integrity sha1-+YNhBRexc3wLncZDvsqTiTwE3xg= + +eventemitter2@~0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + +exceljs@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.3.0.tgz#939bc0d4c59c200acadb7051be34d25c109853c4" + integrity sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w== + dependencies: + archiver "^5.0.0" + dayjs "^1.8.34" + fast-csv "^4.3.1" + jszip "^3.5.0" + readable-stream "^3.6.0" + saxes "^5.0.1" + tmp "^0.2.0" + unzipper "^0.10.11" + uuid "^8.3.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +express-validation@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/express-validation/-/express-validation-1.0.3.tgz#677261e65f27f4e869c98dedc7934da6bbefaa8f" + integrity sha512-mtegbSCoplU5DpBLF3XpeudQD22Jv6Dmo4Tmxn2wxnWaMw4hmV1BjpkxCW2jXAV1q/2R70qKLauDEQzTN1uTGA== + dependencies: + "@types/joi" "^14.3.3" + lodash "^4.17.15" + +express@^4.15.2: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-csv@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" + integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== + dependencies: + "@fast-csv/format" "4.3.5" + "@fast-csv/parse" "4.3.6" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fclone@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" + integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= + +feature-policy@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069" + integrity sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ== + +fflate@^0.3.8: + version "0.3.11" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.3.11.tgz#2c440d7180fdeb819e64898d8858af327b042a5d" + integrity sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.15.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + +foreground-child@^1.5.3, foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +frac@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.0.0, fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +"gkt@https://tgz.pm2.io/gkt-1.0.0.tgz": + version "1.0.0" + resolved "https://tgz.pm2.io/gkt-1.0.0.tgz#405502b007f319c3f47175c4474527300f2ab5ad" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.5, glob@^7.0.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +globals@^11.0.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +graceful-fs@^4.1.6: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= + +handlebars@^4.0.3: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + +helmet-crossdomain@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" + integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== + +helmet-csp@2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.10.0.tgz#685dde1747bc16c5e28ad9d91e229a69f0a85e84" + integrity sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w== + dependencies: + bowser "2.9.0" + camelize "1.0.0" + content-security-policy-builder "2.1.0" + dasherize "2.0.0" + +helmet@^3.5.0: + version "3.23.3" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.23.3.tgz#5ba30209c5f73ded4ab65746a3a11bedd4579ab7" + integrity sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA== + dependencies: + depd "2.0.0" + dont-sniff-mimetype "1.1.0" + feature-policy "0.3.0" + helmet-crossdomain "0.4.0" + helmet-csp "2.10.0" + hide-powered-by "1.1.0" + hpkp "2.0.0" + hsts "2.2.0" + nocache "2.1.0" + referrer-policy "1.2.0" + x-xss-protection "1.3.0" + +hide-powered-by@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a" + integrity sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg== + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hpkp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672" + integrity sha1-EOFCJk52IVpdMMROxD3mTe5tFnI= + +hsts@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.2.0.tgz#09119d42f7a8587035d027dda4522366fe75d964" + integrity sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ== + dependencies: + depd "2.0.0" + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-status@^1.0.1, http-status@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.5.0.tgz#2edfb02068d236ba60fd1481ad89219aa96e1677" + integrity sha512-wcGvY31MpFNHIkUcXHHnvrE4IKYlpvitJw5P/1u892gMBAM46muQ+RH7UN1d+Ntnfx5apnOnVY6vcLmrWHOLwg== + +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA== + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +i18n@^0.8.3: + version "0.8.6" + resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.8.6.tgz#9608c58bfb8e29db34aa9a09e37dccb9b5666e01" + integrity sha512-aMsJq8i1XXrb+BBsgmJBwak9mr69zPEIAUPb6c5yw2G/O4k1Q52lBxL+agZdQDN/RGf1ylQzrCswsOOgIiC1FA== + dependencies: + debug "*" + make-plural "^6.0.1" + math-interval-parser "^2.0.1" + messageformat "^2.3.0" + mustache "*" + sprintf-js "^1.1.2" + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +ignore@^3.3.3: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +image-downloader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/image-downloader/-/image-downloader-4.3.0.tgz#1bc6012d4c1eeeae82b7cabada13c5d0359045f4" + integrity sha512-UBioN0E+8zu8N0lLC6wkZmPA/MA1A3yx9B1whjy5O/YiOV9XrSxLLKi7JqLLj6knQ3n9N1OBoHFS7shp8sehBQ== + dependencies: + follow-redirects "^1.15.0" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflection@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.1.tgz#c5cadd80888a90cf84c2e96e340d7edc85d5f0cb" + integrity sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +ioredis@^4.14.0, ioredis@^4.27.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.1.tgz#c2a7038d6a187e020d7045e11d6a677e8b51f785" + integrity sha512-7gcrUJEcPHWy+eEyq6wIZpXtfHt8crhbc5+z0sqrnHUkwBblXinygfamj+/jx83Qo+2LW3q87Nj2VsuH6BF2BA== + dependencies: + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-commands "1.7.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-core-module@^2.2.0, is-core-module@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-nan@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-weakref@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + dependencies: + call-bind "^1.0.0" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isemail@2.x.x: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" + integrity sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-hook@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.0, istanbul-lib-instrument@^1.10.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.3: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + +items@2.x.x: + version "2.1.2" + resolved "https://registry.yarnpkg.com/items/-/items-2.1.2.tgz#0849354595805d586dac98e7e6e85556ea838558" + integrity sha512-kezcEqgB97BGeZZYtX/MA8AG410ptURstvnz5RAgyFZ8wQFPMxHY8GpTq+/ZHKT3frSlIthUq7EvLt9xn3TvXg== + +joi@^10.4.1: + version "10.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-10.6.0.tgz#52587f02d52b8b75cdb0c74f0b164a191a0e1fc2" + integrity sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ== + dependencies: + hoek "4.x.x" + isemail "2.x.x" + items "2.x.x" + topo "2.x.x" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.1, js-yaml@^3.9.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonwebtoken@^8.3.0, jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.5.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +kareem@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93" + integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lazy@~1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" + integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + +lodash.findindex@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.findindex/-/lodash.findindex-4.6.0.tgz#a3245dee61fb9b6e0624b535125624bb69c11106" + integrity sha1-oyRd7mH7m24GJLU1ElYku2nBEQY= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isarguments@^3.0.0, lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isequal@^4.0.0, lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.isundefined@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" + integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.merge@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.3.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +lolex@^2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" + integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== + +lolex@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-plural@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735" + integrity sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA== + optionalDependencies: + minimist "^1.2.0" + +make-plural@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-6.2.2.tgz#beb5fd751355e72660eeb2218bb98eec92853c6c" + integrity sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +math-interval-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/math-interval-parser/-/math-interval-parser-2.0.1.tgz#e22cd6d15a0a7f4c03aec560db76513da615bed4" + integrity sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA== + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + +md5-hex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" + integrity sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ= + dependencies: + md5-o-matic "^0.1.1" + +md5-o-matic@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" + integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +messageformat-formatters@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz#0492c1402a48775f751c9b17c0354e92be012b08" + integrity sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg== + +messageformat-parser@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-4.1.3.tgz#b824787f57fcda7d50769f5b63e8d4fda68f5b9e" + integrity sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg== + +messageformat@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-2.3.0.tgz#de263c49029d5eae65d7ee25e0754f57f425ad91" + integrity sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w== + dependencies: + make-plural "^4.3.0" + messageformat-formatters "^2.0.1" + messageformat-parser "^4.1.2" + +method-override@^2.3.8: + version "2.3.10" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" + integrity sha1-49r41d7hDdLc59SuiNYrvud0drQ= + dependencies: + debug "2.6.9" + methods "~1.1.2" + parseurl "~1.3.2" + vary "~1.1.2" + +methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@^1.2.3: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha@^3.3.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +moment-timezone@^0.5.13, moment-timezone@^0.5.31, moment-timezone@^0.5.x: + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.19, moment@^2.26.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +mongodb@3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.3.tgz#b7949cfd0adc4cc7d32d3f2034214d4475f175a5" + integrity sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw== + dependencies: + bl "^2.2.1" + bson "^1.1.4" + denque "^1.4.1" + optional-require "^1.1.8" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== + +mongoose@^5.2.13, mongoose@^5.7.0: + version "5.13.13" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.13.13.tgz#4205937b164f20186ea704a1ef2d04c1ce9ee09e" + integrity sha512-M55tpCr/p5i6vdJ54nm4MG6/7SKV4JqlWnqbx6yCRuAuW05CZ7u+gNuHVPQVF9dZ59ALXjOtPEUl+OXklAa7ng== + dependencies: + "@types/bson" "1.x || 4.0.x" + "@types/mongodb" "^3.5.27" + bson "^1.1.4" + kareem "2.3.2" + mongodb "3.7.3" + mongoose-legacy-pluralize "1.0.2" + mpath "0.8.4" + mquery "3.2.5" + ms "2.1.2" + optional-require "1.0.x" + regexp-clone "1.0.0" + safe-buffer "5.2.1" + sift "13.5.2" + sliced "1.0.1" + +morgan@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== + dependencies: + basic-auth "~2.0.1" + debug "2.6.9" + depd "~2.0.0" + on-finished "~2.3.0" + on-headers "~1.0.2" + +mpath@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313" + integrity sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g== + +mquery@3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.5.tgz#8f2305632e4bb197f68f60c0cffa21aaf4060c51" + integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== + dependencies: + bluebird "3.5.1" + debug "3.1.0" + regexp-clone "^1.0.0" + safe-buffer "5.1.2" + sliced "1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.3.tgz#4db352d6992e028ac0eacf7be45c6efd0264297b" + integrity sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg== + dependencies: + append-field "^1.0.0" + busboy "^0.2.11" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + +mustache@*: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nanoid@^2.0.3: + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.1.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nise@^1.4.5: + version "1.5.3" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" + integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^5.0.1" + path-to-regexp "^1.7.0" + +nocache@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" + integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== + +node-abi@^3.3.0: + version "3.22.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.22.0.tgz#00b8250e86a0816576258227edbce7bbe0039362" + integrity sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" + integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== + +nodemon@^1.11.0: + version "1.19.4" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" + integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== + dependencies: + chokidar "^2.1.8" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nssocket@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" + integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo= + dependencies: + eventemitter2 "~0.4.14" + lazy "~1.0.11" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nyc@^11.0.3: + version "11.9.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.9.0.tgz#4106e89e8fbe73623a1fc8b6ecb7abaa271ae1e4" + integrity sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g== + dependencies: + archy "^1.0.0" + arrify "^1.0.1" + caching-transform "^1.0.0" + convert-source-map "^1.5.1" + debug-log "^1.0.1" + default-require-extensions "^1.0.0" + find-cache-dir "^0.1.1" + find-up "^2.1.0" + foreground-child "^1.5.3" + glob "^7.0.6" + istanbul-lib-coverage "^1.1.2" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.10.0" + istanbul-lib-report "^1.1.3" + istanbul-lib-source-maps "^1.2.3" + istanbul-reports "^1.4.0" + md5-hex "^1.2.0" + merge-source-map "^1.1.0" + micromatch "^3.1.10" + mkdirp "^0.5.0" + resolve-from "^2.0.0" + rimraf "^2.6.2" + signal-exit "^3.0.1" + spawn-wrap "^1.4.2" + test-exclude "^4.2.0" + yargs "11.1.0" + yargs-parser "^8.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +on-finished@^2.3.0, on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optional-require@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.0.3.tgz#275b8e9df1dc6a17ad155369c2422a440f89cb07" + integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== + +optional-require@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7" + integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA== + dependencies: + require-at "^1.0.6" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +output-file-sync@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5, path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + +pg-hstore@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/pg-hstore/-/pg-hstore-2.3.4.tgz#4425e3e2a3e15d2a334c35581186c27cf2e9b8dd" + integrity sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA== + dependencies: + underscore "^1.13.1" + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.4.1.tgz#0e71ce2c67b442a5e862a9c182172c37eda71e9c" + integrity sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ== + +pg-protocol@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" + integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.5.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471" + integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.5.0" + pg-pool "^3.4.1" + pg-protocol "^1.5.0" + pg-types "^2.1.0" + pgpass "1.x" + +pgpass@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" + integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== + dependencies: + split2 "^3.1.1" + +pidusage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-1.2.0.tgz#65ee96ace4e08a4cd3f9240996c85b367171ee92" + integrity sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +pm2-axon-rpc@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.5.2.tgz#36004e7ded26fa2c21a5f415d04e55ba97f8dc6c" + integrity sha512-o4u1jO1EYBgBUVlraE1aeGWB5DvClJFB2+v7ytqLypNfgYeT6eJ/B+WMh5NcvRnexAYL5kblcRgNgSbgGEobvA== + dependencies: + debug "^3.0" + +pm2-axon@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pm2-axon/-/pm2-axon-3.1.0.tgz#1b4527f3385e203adc1a5b0488bb52f0322731da" + integrity sha512-5sBM+vHw0Cp2K9CJ9ZOYhKtNCCcgQ0eKOyFrSo5Jusbq9FfvuelsMG4WDaxkqosaQbf8N5YfyHhD7eOUcnm5rQ== + dependencies: + amp "~0.3.1" + amp-message "~0.1.1" + debug "^3.0" + escape-regexp "0.0.1" + +pm2-deploy@^0.3.9: + version "0.3.10" + resolved "https://registry.yarnpkg.com/pm2-deploy/-/pm2-deploy-0.3.10.tgz#5b6689df8db2390589244b7c15c563bd467093f6" + integrity sha512-WagPKsX+LDCe8wLCL5nzu8RQvVUQ5GlFdJRVYCL0ogFnHfYRym91qNU4PkNSWSq11pdvG8la7DTjdW6FWXc8lw== + dependencies: + async "^2.6" + tv4 "^1.3" + +pm2-multimeter@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" + integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4= + dependencies: + charm "~0.1.1" + +pm2@^2.4.6: + version "2.10.4" + resolved "https://registry.yarnpkg.com/pm2/-/pm2-2.10.4.tgz#dd292fd26aed882f6e9f7b9652191387d2debe6a" + integrity sha512-AuAA6DoF/R3L9zSuYtKzaEd6UFvhCKqfW49dgLe0Q4SQtYmQMmXmyEAp5tr1iduJrqGRwpb5ytVm2rWZ56/4Vg== + dependencies: + async "^2.5" + blessed "^0.1.81" + chalk "^1.1" + chokidar "^2" + cli-table-redemption "^1.0.0" + commander "2.13.0" + cron "^1.3" + debug "^3.0" + eventemitter2 "1.0.5" + fclone "1.0.11" + mkdirp "0.5.1" + moment "^2.19" + needle "^2.1.0" + nssocket "0.6.0" + pidusage "^1.2.0" + pm2-axon "3.1.0" + pm2-axon-rpc "^0.5.1" + pm2-deploy "^0.3.9" + pm2-multimeter "^0.1.2" + pmx "^1.6" + promptly "2.2.0" + semver "^5.3" + shelljs "0.7.8" + source-map-support "^0.5" + sprintf-js "1.1.1" + v8-compile-cache "^1.1.0" + vizion "^0.2" + yamljs "^0.3.0" + optionalDependencies: + gkt "https://tgz.pm2.io/gkt-1.0.0.tgz" + +pmx@^1.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/pmx/-/pmx-1.6.7.tgz#b0fc8061bc8343a4069d18e4ee4f031de0af890a" + integrity sha512-CoyZD1EWj/fvpuEPnndB11s5onzN5p/0bxGsBuwbyb8uFtg3lMxXys1pXs88gReiRnMSYCSt25J3GCc6AnxoFQ== + dependencies: + debug "^3" + deep-metrics "^0.0.1" + json-stringify-safe "^5.0" + semver "5.*" + vxx "^1.2.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prebuild-install@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.0.tgz#991b6ac16c81591ba40a6d5de93fb33673ac1370" + integrity sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +printj@~1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a" + integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA== + +printj@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6" + integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg== + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise.prototype.finally@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz#d3186e58fcf4df1682a150f934ccc27b7893389c" + integrity sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +promptly@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" + integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ= + dependencies: + read "^1.0.4" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.5.1: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.1.tgz#45bd149cf586aaa582dffc7ec7a8ad97dd02f75d" + integrity sha512-uIw3iRvHnk9to1blJCG3BTc+Ro56CBowJXKmNNAm3RulvPBzWLRqKSiiDk+IplJhsydwtuNMHi8UGQFcCLVfkA== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +rabbit-adapter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rabbit-adapter/-/rabbit-adapter-1.0.0.tgz#515dd3c62102d3912dfde824c56cf2b3bf861faa" + integrity sha512-VeaxKATn6WOdgvZA0OtbBrzqbhrB51P98b/8MYnOlD0/I9ec4c1VBNxGzfRd7tTyGJ7RJY2Qg7X4QV6ob7cl3Q== + dependencies: + amqplib "^0.5.5" + +rabbit-event-source@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rabbit-event-source/-/rabbit-event-source-1.0.0.tgz#84020ec7d66db380fcd83fe5bc2b54641feb03fe" + integrity sha512-x1oo9ATSfJC9u9Qwt7aSFzbBEgWGQXVAQSe9yFuWRnf0SzehNHMjw7XfxTrmaICcYsz4rY0PnYZU8iTmB9vN+A== + dependencies: + mongoose "^5.2.13" + rabbit-adapter "^1.0.0" + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" + +readdirp@^2.0.0, readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redis-commands@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" + integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= + dependencies: + redis-errors "^1.0.0" + +referrer-policy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e" + integrity sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA== + +regenerate@^1.2.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp-clone@1.0.0, regexp-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" + integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-at@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a" + integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry-as-promised@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-3.2.0.tgz#769f63d536bec4783549db0777cb56dadd9d8543" + integrity sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg== + dependencies: + any-promise "^1.3.0" + +rimraf@2, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== + dependencies: + sparse-bitfield "^3.0.3" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@5.*, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +sequelize-pool@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-6.1.0.tgz#caaa0c1e324d3c2c3a399fed2c7998970925d668" + integrity sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg== + +sequelize@^6.3.5: + version "6.11.0" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.11.0.tgz#11620b02ab2ca02af59ec652dd22bef7ccd348af" + integrity sha512-+j3N5lr+FR1eicMRGR3bRsGOl9HMY0UGb2PyB2i1yZ64XBgsz3xejMH0UD45LcUitj40soDGIa9CyvZG0dfzKg== + dependencies: + debug "^4.1.1" + dottie "^2.0.0" + inflection "1.13.1" + lodash "^4.17.20" + moment "^2.26.0" + moment-timezone "^0.5.31" + pg-connection-string "^2.5.0" + retry-as-promised "^3.2.0" + semver "^7.3.2" + sequelize-pool "^6.0.0" + toposort-class "^1.0.1" + uuid "^8.1.0" + validator "^13.7.0" + wkx "^0.5.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sharp@^0.30.6: + version "0.30.6" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.6.tgz#02264e9826b5f1577509f70bb627716099778873" + integrity sha512-lSdVxFxcndzcXggDrak6ozdGJgmIgES9YVZWtAFrwi+a/H5vModaf51TghBtMPw+71sLxUsTy2j+aB7qLIODQg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.0" + semver "^7.3.7" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shelljs@0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shimmer@^1.0.0, shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +sift@13.5.2: + version "13.5.2" + resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6" + integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== + +signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sinon-chai@^3.0.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" + integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== + +sinon@^6.1.0: + version "6.3.5" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.3.5.tgz#0f6d6a5b4ebaad1f6e8e019395542d1d02c144a0" + integrity sha512-xgoZ2gKjyVRcF08RrIQc+srnSyY1JDJtxu3Nsz07j1ffjgXoY6uPLf/qja6nDBZgzYYEovVkFryw2+KiZz11xQ== + dependencies: + "@sinonjs/commons" "^1.0.2" + "@sinonjs/formatio" "^3.0.0" + "@sinonjs/samsam" "^2.1.2" + diff "^3.5.0" + lodash.get "^4.4.2" + lolex "^2.7.5" + nise "^1.4.5" + supports-color "^5.5.0" + type-detect "^4.0.8" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + dependencies: + memory-pager "^1.0.2" + +spawn-wrap@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" + integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + which "^1.3.0" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" + integrity sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw= + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssf@~0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + dependencies: + frac "~1.1.2" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +streamsearch@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supertest@^3.0.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-3.4.2.tgz#bad7de2e43d60d27c8caeb8ab34a67c8a5f71aad" + integrity sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA== + dependencies: + methods "^1.1.2" + superagent "^3.8.3" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU= + dependencies: + has-flag "^1.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +test-exclude@^4.2.0, test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +topo@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + integrity sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI= + dependencies: + hoek "4.x.x" + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg= + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tsconfig-paths@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" + integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tv4@^1.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" + integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4: + version "3.14.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" + integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +undefsafe@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +underscore@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" + integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +unzipper@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" + integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse@~1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.1.0, uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" + integrity sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA== + +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vizion@^0.2: + version "0.2.13" + resolved "https://registry.yarnpkg.com/vizion/-/vizion-0.2.13.tgz#1314cdee2b34116f9f5b1248536f95dbfcd6ef5f" + integrity sha1-ExTN7is0EW+fWxJIU2+V2/zW718= + dependencies: + async "1.5" + +vxx@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vxx/-/vxx-1.2.2.tgz#741fb51c6f11d3383da6f9b92018a5d7ba807611" + integrity sha1-dB+1HG8R0zg9pvm5IBil17qAdhE= + dependencies: + continuation-local-storage "^3.1.4" + debug "^2.6.3" + extend "^3.0.0" + is "^3.2.0" + lodash.findindex "^4.4.0" + lodash.isequal "^4.0.0" + lodash.merge "^4.6.0" + methods "^1.1.1" + semver "^5.0.1" + shimmer "^1.0.0" + uuid "^3.0.1" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + +wmf@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +word@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" + integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^1.1.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +x-xss-protection@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.3.0.tgz#3e3a8dd638da80421b0e9fff11a2dbe168f6d52c" + integrity sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg== + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xlsx@^0.16.9: + version "0.16.9" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.16.9.tgz#dacd5bb46bda6dd3743940c9c3dc1e2171826256" + integrity sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw== + dependencies: + adler-32 "~1.2.0" + cfb "^1.1.4" + codepage "~1.14.0" + commander "~2.17.1" + crc-32 "~1.2.0" + exit-on-epipe "~1.0.1" + fflate "^0.3.8" + ssf "~0.11.2" + wmf "~1.0.1" + word "~0.3.0" + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yamljs@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + +yargs-parser@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0"