├── config.json ├── utils ├── pyFunc.py ├── apiError.js ├── redisClient.js ├── logger.js ├── dataLoader.js └── stuff.json ├── routes ├── index.js ├── set.js └── get.js ├── package.json ├── docker-compose.yml ├── server.js ├── LICENSE ├── README.md ├── .gitignore └── pnpm-lock.yaml /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "logLevel": "debug", 3 | "application": { 4 | "port": 8081 5 | }, 6 | "redis": { 7 | "host": "localhost", 8 | "port": 6379, 9 | "password": null, 10 | "autoPipelining": false, 11 | "keyPrefix": "covid" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /utils/pyFunc.py: -------------------------------------------------------------------------------- 1 | from collections import Counter; 2 | GB() 3 | .map(lambda x:Counter({y:int(z) for y,z in x['value'].items()})) 4 | .accumulate(lambda a,x:x+(a if a else Counter())+Counter({'states':1})) 5 | .flatmap(lambda x:list(x.items())) 6 | .foreach(lambda x:execute('HSET','nd',x[0],x[1])) 7 | .register('sd:*:delta') -------------------------------------------------------------------------------- /utils/apiError.js: -------------------------------------------------------------------------------- 1 | const { validationResult } = require('express-validator') 2 | 3 | const apiError = (req, res, next) => { 4 | const result = validationResult(req); 5 | if (!result.isEmpty()) { 6 | return res.status(400).json({ errors: result.array() }) 7 | } 8 | return next() 9 | } 10 | 11 | module.exports = apiError; -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | let routes = []; 4 | 5 | fs.readdirSync(__dirname).filter((file) => file !== 'index.js').forEach((file) => { 6 | /* eslint-disable global-require, import/no-dynamic-require */ 7 | routes = routes.concat(require(`./${file}`)); 8 | /* eslint-enable */ 9 | }); 10 | 11 | module.exports = routes; 12 | -------------------------------------------------------------------------------- /utils/redisClient.js: -------------------------------------------------------------------------------- 1 | const Redis = require('ioredis'); 2 | const config = require('better-config'); 3 | 4 | config.set('../config.json'); 5 | const redis = new Redis({ 6 | host: config.redis.host, 7 | port: config.redis.port, 8 | password: config.redis.password, 9 | enableAutoPipelining: config.redis.autoPipelining, 10 | }); 11 | 12 | module.exports = { redis }; 13 | // getKeyName: (...args) => `${config.redis.keyPrefix}:${args.join(':')}` 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "covid-dash", 3 | "version": "0.0.1", 4 | "description": "Server for covid dashbord in India", 5 | "main": "server.js", 6 | "scripts": { 7 | "dev": "node ./node_modules/nodemon/bin/nodemon.js", 8 | "start": "node ./server.js", 9 | "test": "" 10 | }, 11 | "author": "Noel Jacob", 12 | "license": "MIT", 13 | "dependencies": { 14 | "better-config": "^1.2.3", 15 | "cors": "^2.8.5", 16 | "express": "^4.17.1", 17 | "express-validator": "^6.11.1", 18 | "ioredis": "^4.27.2", 19 | "morgan": "^1.10.0", 20 | "node-fetch": "^2.6.1", 21 | "winston": "^3.3.3" 22 | }, 23 | "devDependencies": { 24 | "nodemon": "^2.0.7" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '0.1' 2 | services: 3 | redis: 4 | container_name: redisdb 5 | image: 'redislabs/redismod' 6 | ports: 7 | - 6379:6379 8 | volumes: 9 | - ./redisdata:/data 10 | entrypoint: redis-server 11 | --loadmodule /usr/lib/redis/modules/redisai.so 12 | --loadmodule /usr/lib/redis/modules/redisearch.so 13 | --loadmodule /usr/lib/redis/modules/redistimeseries.so 14 | --loadmodule /usr/lib/redis/modules/rejson.so 15 | --loadmodule /var/opt/redislabs/lib/modules/redisgears.so 16 | --appendonly yes 17 | environment: 18 | - PythonHomeDir=/opt/redislabs/lib/modules/python3 19 | deploy: 20 | replicas: 1 21 | restart_policy: 22 | condition: on-failure 23 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const config = require('better-config'); 2 | const express = require('express'); 3 | const morgan = require('morgan'); 4 | const cors = require('cors'); 5 | const routes = require('./routes'); 6 | const logger = require('./utils/logger'); 7 | config.set('./config.json'); 8 | 9 | const app = express(); 10 | // @ts-ignore 11 | app.use(morgan('combined', { stream: logger.stream })); 12 | app.use(cors()); 13 | app.use((req, res, next) => { 14 | /* 15 | To allow case insensitive urls, just in case 16 | */ 17 | for (var key in req.query) req.query[key.toLowerCase()] = req.query[key]; 18 | next(); 19 | }); 20 | app.use('/api', routes); 21 | 22 | const port = config.get('application.port'); 23 | app.listen(port, async () => { 24 | logger.info(`Application listening on port ${port}`); 25 | }); 26 | -------------------------------------------------------------------------------- /utils/logger.js: -------------------------------------------------------------------------------- 1 | const winston = require('winston'); 2 | const config = require('better-config'); 3 | 4 | config.set('../config.json'); 5 | 6 | const logger = winston.createLogger({ 7 | level: config.get('logLevel'), 8 | transports: [ 9 | new winston.transports.Console({ 10 | format: winston.format.combine( 11 | winston.format.colorize(), 12 | winston.format.simple(), 13 | ), 14 | }), 15 | ], 16 | }); 17 | 18 | logger.stream = { 19 | write: (message) => { 20 | // Remove double newline issue with piping morgan server request 21 | // log through Winston logger. 22 | logger.info(message.length > 0 ? message.substring(0, message.length - 1) : message); 23 | }, 24 | }; 25 | 26 | module.exports = logger; 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Redis Developer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /routes/set.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const fetch = require('node-fetch'); 3 | const { param } = require('express-validator'); 4 | const apiError = require('../utils/apierror'); 5 | const dataLoader = require('../utils/dataLoader'); 6 | const { apiLinks } = require('../utils/stuff.json'); 7 | 8 | const acceptedParams = (paramName, validSections) => { 9 | return param(paramName) 10 | .isString() 11 | .custom((value, { req }) => { 12 | if (!validSections.includes(req.params[paramName])) { 13 | throw new Error( 14 | `Invalid value ${req.params[paramName]} for /set/:${paramName}.` 15 | ); 16 | } 17 | return true; 18 | }); 19 | }; 20 | 21 | router.get( 22 | '/set/:data', 23 | [acceptedParams('data', Object.keys(apiLinks)), apiError], 24 | async (req, res) => { 25 | let error; 26 | // @ts-ignore 27 | const apiResponse = await fetch(apiLinks[req.params.data]).catch((err) => { 28 | error = res.status(503).json(err); 29 | }); 30 | if (!error && apiResponse.status === 200) { 31 | const dataJSON = await apiResponse.json(); 32 | await dataLoader[req.params.data](dataJSON).catch((err) => { 33 | error = res.status(500).send(err); 34 | }); 35 | return error || res.status(200).send('OK'); 36 | } else { 37 | return error || res.status(apiResponse.status).send(apiResponse); 38 | } 39 | } 40 | ); 41 | 42 | module.exports = router; 43 | -------------------------------------------------------------------------------- /routes/get.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const apiError = require('../utils/apierror'); 3 | const { query } = require('express-validator'); 4 | const { redis } = require('../utils/redisClient'); 5 | 6 | const acceptedQueries = (queryName, ...validSections) => { 7 | return query(queryName) 8 | .isString() 9 | .optional() 10 | .custom((value, { req }) => { 11 | const sections = req.query[queryName]; 12 | const arrayOfSections = sections.split(','); 13 | for (const str of arrayOfSections) { 14 | if (!validSections.includes(str)) { 15 | throw new Error(`Invalid value ${str} for ${queryName}.`); 16 | } 17 | } 18 | return true; 19 | }); 20 | }; 21 | 22 | router.get( 23 | '/india', 24 | [ 25 | acceptedQueries('section', 'cases', 'deceased', 'vaccinated', 'tested'), 26 | apiError, 27 | ], 28 | async (req, res, next) => { 29 | // TODO Check redis for currently active,recovered,died and total cases 30 | if (req.query.has('section')) { 31 | const section = req.query.section.split(','); 32 | const response = await redis.hmget('total', ...section); 33 | let jsonRes = {}; 34 | for (let x = 0; x < section.length; x++) { 35 | jsonRes[section[x]] = response[x]; 36 | } 37 | res.status(200).json(jsonRes); 38 | } else { 39 | const [cases, deceased, recovered, vaccinated, tested] = 40 | await redis.hmget( 41 | 'total', 42 | 'cases', 43 | 'deceased', 44 | 'recovered', 45 | 'vaccinated', 46 | 'tested' 47 | ); 48 | res.status(200).json({ 49 | cases, 50 | deceased, 51 | recovered, 52 | vaccinated, 53 | tested, 54 | }); 55 | } 56 | } 57 | ); 58 | 59 | module.exports = router; 60 | -------------------------------------------------------------------------------- /utils/dataLoader.js: -------------------------------------------------------------------------------- 1 | const { redis } = require('../utils/redisClient'); 2 | const { stateCode } = require('../utils/stuff.json'); 3 | // const fs = require('fs'); 4 | 5 | const pipeline = redis.pipeline(); 6 | 7 | const daily = (data) => { 8 | Object.entries(data).forEach(([stateName, stateData]) => { 9 | if (stateData.hasOwnProperty('meta')) delete stateData.meta; 10 | if (stateData.hasOwnProperty('districts')) delete stateData.districts; 11 | Object.entries(stateData).forEach(([category, hash]) => { 12 | let hashList = []; 13 | Object.entries(hash).forEach(([x, y]) => { 14 | hashList.push(x, y); 15 | }); 16 | pipeline.hmset(`sd:${category}:${stateName}`, hashList); 17 | }); 18 | }); 19 | 20 | // // REDISGEARS PYTHON FUNCTION IN ./pyFunc.py 21 | // const func = fs.readFileSync('./pyFunc.py').toString().replace(/[\n\r]/g, ''); 22 | const func = `from collections import Counter;GB('KeysReader',defaultArg='sd:delta:*').map(lambda x:Counter({y:int(z) for y,z in x['value'].items()})).accumulate(lambda a,x:x+(a if a else Counter())+Counter({'states':1})).flatmap(lambda x:list(x.items())).foreach(lambda x:execute('HSET','nd',x[0],x[1])).run()`; 23 | // @ts-ignore 24 | pipeline.call('RG.PYEXECUTE', func); 25 | return pipeline.exec(); 26 | }; 27 | 28 | const total = (data) => { 29 | let hashList; 30 | Object.values(data.states).forEach((hash) => { 31 | const stateName = stateCode[hash.state]; 32 | delete hash.state; 33 | hashList = []; 34 | Object.entries(hash).forEach(([x, y]) => { 35 | hashList.push(x, y); 36 | }); 37 | pipeline.hmset(`st:${stateName}`, hashList); 38 | }); 39 | hashList = []; 40 | Object.entries(data.totals).forEach(([x, y]) => { 41 | hashList.push(x, y); 42 | }); 43 | pipeline.hmset('nt', hashList); 44 | return pipeline.exec(); 45 | }; 46 | 47 | const timeseries = (data) => { 48 | Object.entries(data).forEach(([stateName, stateJSON]) => { 49 | // @ts-ignore 50 | pipeline.call('JSON.SET', `t:${stateName}`, stateJSON); 51 | }); 52 | return pipeline.exec(); 53 | }; 54 | module.exports = { daily, total, timeseries }; 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # covid-dash 2 | 3 | Covid-19 Dashboard for India made using Redis Server, Redis JSON, and Redis Gears. 4 | 5 | ## The Why 6 | 7 | - Unified portal for daily and all-time data 8 | - Compare the data between various states and union territorries 9 | - Display the data over time 10 | - Uses the official ( Ministry of Health and Welfare ) and the unofficially crowdsourced ( covid19india.org ) data 11 | - Give information regarding vaccinations 12 | 13 | India's COVID-19 rate is rapidly climbing. This dashboard aims to provide a holistic outlook of the data. 14 | 15 | I could not complete this project in time for the hackathon,currently the server sets, updates, and cleans the data it recieves from various APIs into Redis with various modules. 16 | 17 | ## Run It 18 | 19 | ### Express Server 20 | 21 | Use `npm run start` to start the server\ 22 | Use `npm run dev` to start dev environment and use `docker-compose up -d` (see below). 23 | 24 | - `/api/set/daily` updates the daily national and statewise data 25 | - `/api/set/total` updates the all-time data 26 | - `/api/set/timeseries` updates the all-time timeseries data for each state 27 | - `.\config.json` contains the configurations for the redis database to connect to 28 | 29 | ### Redis 30 | 31 | For a local redis database docker desktop is required.\ 32 | Run `docker-compose up -d` in this folder to spin it up. 33 | 34 | The Redis keys are split into parts: 35 | 36 | - `st:`, `sd:`, `nt:`, `nd:` contains the state total, state daily, national total, national daily values, respectively. 37 | - `:delta:` and `:delta7:` parts are present for daily keys, they contain the daily and 7 day average data respectively. 38 | - `:LK`, `:KL`, etc are the last part of key, they are the state/union territorry ISO 3166-2:IN codes a.k.a just short-forms.\ 39 | The list of codes to full names are present in `.\utils\stuff.json` 40 | - The database also contains all-time timeseries and more 41 | 42 | ### Upcoming Features 43 | 44 | - Use Redis AI to create and update data predictions according to incoming data. 45 | - Rich command line application to display data with something like 46 | `curl -s covid-dash.com/run.sh | bash` 47 | -------------------------------------------------------------------------------- /utils/stuff.json: -------------------------------------------------------------------------------- 1 | { 2 | "LINKS": ["daily", "total"], 3 | "apiLinks": { 4 | "daily": "https://api.covid19india.org/v4/min/data.min.json", 5 | "total": "https://covid19-mohfw.herokuapp.com/", 6 | "timeseries": "https://api.covid19india.org/v4/min/timeseries.min.json" 7 | }, 8 | "codeState": { 9 | "AN": "Andaman and Nicobar Islands", 10 | "AP": "Andhra Pradesh", 11 | "AR": "Arunachal Pradesh", 12 | "AS": "Assam", 13 | "BR": "Bihar", 14 | "CH": "Chandigarh", 15 | "CT": "Chhattisgarh", 16 | "DH": "Dadra and Nagar Haveli and Daman and Diu", 17 | "DL": "Delhi", 18 | "GA": "Goa", 19 | "GJ": "Gujarat", 20 | "HR": "Haryana", 21 | "HP": "Himachal Pradesh", 22 | "JK": "Jammu and Kashmir", 23 | "JH": "Jharkhand", 24 | "KA": "Karnataka", 25 | "KL": "Kerala", 26 | "LA": "Ladakh", 27 | "LD": "Lakshadweep", 28 | "MP": "Madhya Pradesh", 29 | "MH": "Maharashtra", 30 | "MN": "Manipur", 31 | "ML": "Meghalaya", 32 | "MZ": "Mizoram", 33 | "NL": "Nagaland", 34 | "OR": "Odisha", 35 | "PY": "Puducherry", 36 | "PB": "Punjab", 37 | "RJ": "Rajasthan", 38 | "SK": "Sikkim", 39 | "TN": "Tamil Nadu", 40 | "TG": "Telangana", 41 | "TR": "Tripura", 42 | "UP": "Uttar Pradesh", 43 | "UT": "Uttarakhand", 44 | "WB": "West Bengal" 45 | }, 46 | "stateCode": { 47 | "Andaman and Nicobar Islands": "AN", 48 | "Andhra Pradesh": "AP", 49 | "Arunachal Pradesh": "AR", 50 | "Assam": "AS", 51 | "Bihar": "BR", 52 | "Chandigarh": "CH", 53 | "Chhattisgarh": "CT", 54 | "Dadra and Nagar Haveli and Daman and Diu": "DH", 55 | "Delhi": "DL", 56 | "Goa": "GA", 57 | "Gujarat": "GJ", 58 | "Haryana": "HR", 59 | "Himachal Pradesh": "HP", 60 | "Jammu and Kashmir": "JK", 61 | "Jharkhand": "JH", 62 | "Karnataka": "KA", 63 | "Kerala": "KL", 64 | "Ladakh": "LA", 65 | "Lakshadweep": "LD", 66 | "Madhya Pradesh": "MP", 67 | "Maharashtra": "MH", 68 | "Manipur": "MN", 69 | "Meghalaya": "ML", 70 | "Mizoram": "MZ", 71 | "Nagaland": "NL", 72 | "Odisha": "OR", 73 | "Puducherry": "PY", 74 | "Punjab": "PB", 75 | "Rajasthan": "RJ", 76 | "Sikkim": "SK", 77 | "Tamil Nadu": "TN", 78 | "Telangana": "TG", 79 | "Tripura": "TR", 80 | "Uttar Pradesh": "UP", 81 | "Uttarakhand": "UT", 82 | "West Bengal": "WB" 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # Snowpack dependency directory (https://snowpack.dev/) 45 | web_modules/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | .parcel-cache 78 | 79 | # Next.js build output 80 | .next 81 | out 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and not Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | 108 | # Stores VSCode versions used for testing VSCode extensions 109 | .vscode-test 110 | 111 | # yarn v2 112 | .yarn/cache 113 | .yarn/unplugged 114 | .yarn/build-state.yml 115 | .yarn/install-state.gz 116 | .pnp.* 117 | 118 | redisdata/ 119 | schema.json 120 | ideas 121 | .vscode/ -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | better-config: ^1.2.3 5 | cors: ^2.8.5 6 | express: ^4.17.1 7 | express-validator: ^6.11.1 8 | ioredis: ^4.27.2 9 | morgan: ^1.10.0 10 | node-fetch: ^2.6.1 11 | nodemon: ^2.0.7 12 | winston: ^3.3.3 13 | 14 | dependencies: 15 | better-config: 1.2.3 16 | cors: 2.8.5 17 | express: 4.17.1 18 | express-validator: 6.11.1 19 | ioredis: 4.27.2 20 | morgan: 1.10.0 21 | node-fetch: 2.6.1 22 | winston: 3.3.3 23 | 24 | devDependencies: 25 | nodemon: 2.0.7 26 | 27 | packages: 28 | 29 | /@dabh/diagnostics/2.0.2: 30 | resolution: {integrity: sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==} 31 | dependencies: 32 | colorspace: 1.1.2 33 | enabled: 2.0.0 34 | kuler: 2.0.0 35 | dev: false 36 | 37 | /@sindresorhus/is/0.14.0: 38 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} 39 | engines: {node: '>=6'} 40 | dev: true 41 | 42 | /@szmarczak/http-timer/1.1.2: 43 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} 44 | engines: {node: '>=6'} 45 | dependencies: 46 | defer-to-connect: 1.1.3 47 | dev: true 48 | 49 | /abbrev/1.1.1: 50 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 51 | dev: true 52 | 53 | /accepts/1.3.7: 54 | resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} 55 | engines: {node: '>= 0.6'} 56 | dependencies: 57 | mime-types: 2.1.30 58 | negotiator: 0.6.2 59 | dev: false 60 | 61 | /ansi-align/3.0.0: 62 | resolution: {integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==} 63 | dependencies: 64 | string-width: 3.1.0 65 | dev: true 66 | 67 | /ansi-regex/4.1.0: 68 | resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} 69 | engines: {node: '>=6'} 70 | dev: true 71 | 72 | /ansi-regex/5.0.0: 73 | resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} 74 | engines: {node: '>=8'} 75 | dev: true 76 | 77 | /ansi-styles/4.3.0: 78 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 79 | engines: {node: '>=8'} 80 | dependencies: 81 | color-convert: 2.0.1 82 | dev: true 83 | 84 | /anymatch/3.1.2: 85 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 86 | engines: {node: '>= 8'} 87 | dependencies: 88 | normalize-path: 3.0.0 89 | picomatch: 2.2.3 90 | dev: true 91 | 92 | /array-flatten/1.1.1: 93 | resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} 94 | dev: false 95 | 96 | /async/3.2.0: 97 | resolution: {integrity: sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==} 98 | dev: false 99 | 100 | /balanced-match/1.0.2: 101 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 102 | dev: true 103 | 104 | /basic-auth/2.0.1: 105 | resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} 106 | engines: {node: '>= 0.8'} 107 | dependencies: 108 | safe-buffer: 5.1.2 109 | dev: false 110 | 111 | /better-config/1.2.3: 112 | resolution: {integrity: sha512-rddHWkzEYCslczxGQcdgg8ZUj5UOQnFzo5o7tWgWzBvoTBuX3PrJnJ7qtcV5TEGuIHt+8C2mZDVFgtNo6Gl6eA==} 113 | dependencies: 114 | deep-extend: 0.6.0 115 | json5: 0.5.1 116 | lodash: 4.17.21 117 | dev: false 118 | 119 | /binary-extensions/2.2.0: 120 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 121 | engines: {node: '>=8'} 122 | dev: true 123 | 124 | /body-parser/1.19.0: 125 | resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} 126 | engines: {node: '>= 0.8'} 127 | dependencies: 128 | bytes: 3.1.0 129 | content-type: 1.0.4 130 | debug: 2.6.9 131 | depd: 1.1.2 132 | http-errors: 1.7.2 133 | iconv-lite: 0.4.24 134 | on-finished: 2.3.0 135 | qs: 6.7.0 136 | raw-body: 2.4.0 137 | type-is: 1.6.18 138 | dev: false 139 | 140 | /boxen/4.2.0: 141 | resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} 142 | engines: {node: '>=8'} 143 | dependencies: 144 | ansi-align: 3.0.0 145 | camelcase: 5.3.1 146 | chalk: 3.0.0 147 | cli-boxes: 2.2.1 148 | string-width: 4.2.2 149 | term-size: 2.2.1 150 | type-fest: 0.8.1 151 | widest-line: 3.1.0 152 | dev: true 153 | 154 | /brace-expansion/1.1.11: 155 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 156 | dependencies: 157 | balanced-match: 1.0.2 158 | concat-map: 0.0.1 159 | dev: true 160 | 161 | /braces/3.0.2: 162 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 163 | engines: {node: '>=8'} 164 | dependencies: 165 | fill-range: 7.0.1 166 | dev: true 167 | 168 | /bytes/3.1.0: 169 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} 170 | engines: {node: '>= 0.8'} 171 | dev: false 172 | 173 | /cacheable-request/6.1.0: 174 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} 175 | engines: {node: '>=8'} 176 | dependencies: 177 | clone-response: 1.0.2 178 | get-stream: 5.2.0 179 | http-cache-semantics: 4.1.0 180 | keyv: 3.1.0 181 | lowercase-keys: 2.0.0 182 | normalize-url: 4.5.0 183 | responselike: 1.0.2 184 | dev: true 185 | 186 | /camelcase/5.3.1: 187 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 188 | engines: {node: '>=6'} 189 | dev: true 190 | 191 | /chalk/3.0.0: 192 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} 193 | engines: {node: '>=8'} 194 | dependencies: 195 | ansi-styles: 4.3.0 196 | supports-color: 7.2.0 197 | dev: true 198 | 199 | /chokidar/3.5.1: 200 | resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} 201 | engines: {node: '>= 8.10.0'} 202 | dependencies: 203 | anymatch: 3.1.2 204 | braces: 3.0.2 205 | glob-parent: 5.1.2 206 | is-binary-path: 2.1.0 207 | is-glob: 4.0.1 208 | normalize-path: 3.0.0 209 | readdirp: 3.5.0 210 | optionalDependencies: 211 | fsevents: 2.3.2 212 | dev: true 213 | 214 | /ci-info/2.0.0: 215 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 216 | dev: true 217 | 218 | /cli-boxes/2.2.1: 219 | resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} 220 | engines: {node: '>=6'} 221 | dev: true 222 | 223 | /clone-response/1.0.2: 224 | resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} 225 | dependencies: 226 | mimic-response: 1.0.1 227 | dev: true 228 | 229 | /cluster-key-slot/1.1.0: 230 | resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==} 231 | engines: {node: '>=0.10.0'} 232 | dev: false 233 | 234 | /color-convert/1.9.3: 235 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 236 | dependencies: 237 | color-name: 1.1.3 238 | dev: false 239 | 240 | /color-convert/2.0.1: 241 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 242 | engines: {node: '>=7.0.0'} 243 | dependencies: 244 | color-name: 1.1.4 245 | dev: true 246 | 247 | /color-name/1.1.3: 248 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 249 | dev: false 250 | 251 | /color-name/1.1.4: 252 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 253 | 254 | /color-string/1.5.5: 255 | resolution: {integrity: sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==} 256 | dependencies: 257 | color-name: 1.1.4 258 | simple-swizzle: 0.2.2 259 | dev: false 260 | 261 | /color/3.0.0: 262 | resolution: {integrity: sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==} 263 | dependencies: 264 | color-convert: 1.9.3 265 | color-string: 1.5.5 266 | dev: false 267 | 268 | /colors/1.4.0: 269 | resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} 270 | engines: {node: '>=0.1.90'} 271 | dev: false 272 | 273 | /colorspace/1.1.2: 274 | resolution: {integrity: sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==} 275 | dependencies: 276 | color: 3.0.0 277 | text-hex: 1.0.0 278 | dev: false 279 | 280 | /concat-map/0.0.1: 281 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 282 | dev: true 283 | 284 | /configstore/5.0.1: 285 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} 286 | engines: {node: '>=8'} 287 | dependencies: 288 | dot-prop: 5.3.0 289 | graceful-fs: 4.2.6 290 | make-dir: 3.1.0 291 | unique-string: 2.0.0 292 | write-file-atomic: 3.0.3 293 | xdg-basedir: 4.0.0 294 | dev: true 295 | 296 | /content-disposition/0.5.3: 297 | resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} 298 | engines: {node: '>= 0.6'} 299 | dependencies: 300 | safe-buffer: 5.1.2 301 | dev: false 302 | 303 | /content-type/1.0.4: 304 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} 305 | engines: {node: '>= 0.6'} 306 | dev: false 307 | 308 | /cookie-signature/1.0.6: 309 | resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} 310 | dev: false 311 | 312 | /cookie/0.4.0: 313 | resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} 314 | engines: {node: '>= 0.6'} 315 | dev: false 316 | 317 | /core-util-is/1.0.2: 318 | resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} 319 | dev: false 320 | 321 | /cors/2.8.5: 322 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 323 | engines: {node: '>= 0.10'} 324 | dependencies: 325 | object-assign: 4.1.1 326 | vary: 1.1.2 327 | dev: false 328 | 329 | /crypto-random-string/2.0.0: 330 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} 331 | engines: {node: '>=8'} 332 | dev: true 333 | 334 | /debug/2.6.9: 335 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 336 | dependencies: 337 | ms: 2.0.0 338 | 339 | /debug/3.2.7: 340 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 341 | dependencies: 342 | ms: 2.1.3 343 | dev: true 344 | 345 | /debug/4.3.1: 346 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} 347 | engines: {node: '>=6.0'} 348 | peerDependencies: 349 | supports-color: '*' 350 | peerDependenciesMeta: 351 | supports-color: 352 | optional: true 353 | dependencies: 354 | ms: 2.1.2 355 | dev: false 356 | 357 | /decompress-response/3.3.0: 358 | resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} 359 | engines: {node: '>=4'} 360 | dependencies: 361 | mimic-response: 1.0.1 362 | dev: true 363 | 364 | /deep-extend/0.6.0: 365 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 366 | engines: {node: '>=4.0.0'} 367 | 368 | /defer-to-connect/1.1.3: 369 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} 370 | dev: true 371 | 372 | /denque/1.5.0: 373 | resolution: {integrity: sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==} 374 | engines: {node: '>=0.10'} 375 | dev: false 376 | 377 | /depd/1.1.2: 378 | resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} 379 | engines: {node: '>= 0.6'} 380 | dev: false 381 | 382 | /depd/2.0.0: 383 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 384 | engines: {node: '>= 0.8'} 385 | dev: false 386 | 387 | /destroy/1.0.4: 388 | resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} 389 | dev: false 390 | 391 | /dot-prop/5.3.0: 392 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 393 | engines: {node: '>=8'} 394 | dependencies: 395 | is-obj: 2.0.0 396 | dev: true 397 | 398 | /duplexer3/0.1.4: 399 | resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} 400 | dev: true 401 | 402 | /ee-first/1.1.1: 403 | resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} 404 | dev: false 405 | 406 | /emoji-regex/7.0.3: 407 | resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} 408 | dev: true 409 | 410 | /emoji-regex/8.0.0: 411 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 412 | dev: true 413 | 414 | /enabled/2.0.0: 415 | resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} 416 | dev: false 417 | 418 | /encodeurl/1.0.2: 419 | resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} 420 | engines: {node: '>= 0.8'} 421 | dev: false 422 | 423 | /end-of-stream/1.4.4: 424 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 425 | dependencies: 426 | once: 1.4.0 427 | dev: true 428 | 429 | /escape-goat/2.1.1: 430 | resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} 431 | engines: {node: '>=8'} 432 | dev: true 433 | 434 | /escape-html/1.0.3: 435 | resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} 436 | dev: false 437 | 438 | /etag/1.8.1: 439 | resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} 440 | engines: {node: '>= 0.6'} 441 | dev: false 442 | 443 | /express-validator/6.11.1: 444 | resolution: {integrity: sha512-XAMdu1P6RESd8bvKtNdgNPsW+abkY6UQ2EVUqPpK6QVqieZKaLrN7W/zeFzDWZmgAy/RPEW8M4KYXMqQk6GmTA==} 445 | engines: {node: '>= 8.0.0'} 446 | dependencies: 447 | lodash: 4.17.21 448 | validator: 13.6.0 449 | dev: false 450 | 451 | /express/4.17.1: 452 | resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} 453 | engines: {node: '>= 0.10.0'} 454 | dependencies: 455 | accepts: 1.3.7 456 | array-flatten: 1.1.1 457 | body-parser: 1.19.0 458 | content-disposition: 0.5.3 459 | content-type: 1.0.4 460 | cookie: 0.4.0 461 | cookie-signature: 1.0.6 462 | debug: 2.6.9 463 | depd: 1.1.2 464 | encodeurl: 1.0.2 465 | escape-html: 1.0.3 466 | etag: 1.8.1 467 | finalhandler: 1.1.2 468 | fresh: 0.5.2 469 | merge-descriptors: 1.0.1 470 | methods: 1.1.2 471 | on-finished: 2.3.0 472 | parseurl: 1.3.3 473 | path-to-regexp: 0.1.7 474 | proxy-addr: 2.0.6 475 | qs: 6.7.0 476 | range-parser: 1.2.1 477 | safe-buffer: 5.1.2 478 | send: 0.17.1 479 | serve-static: 1.14.1 480 | setprototypeof: 1.1.1 481 | statuses: 1.5.0 482 | type-is: 1.6.18 483 | utils-merge: 1.0.1 484 | vary: 1.1.2 485 | dev: false 486 | 487 | /fast-safe-stringify/2.0.7: 488 | resolution: {integrity: sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==} 489 | dev: false 490 | 491 | /fecha/4.2.1: 492 | resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==} 493 | dev: false 494 | 495 | /fill-range/7.0.1: 496 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 497 | engines: {node: '>=8'} 498 | dependencies: 499 | to-regex-range: 5.0.1 500 | dev: true 501 | 502 | /finalhandler/1.1.2: 503 | resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} 504 | engines: {node: '>= 0.8'} 505 | dependencies: 506 | debug: 2.6.9 507 | encodeurl: 1.0.2 508 | escape-html: 1.0.3 509 | on-finished: 2.3.0 510 | parseurl: 1.3.3 511 | statuses: 1.5.0 512 | unpipe: 1.0.0 513 | dev: false 514 | 515 | /fn.name/1.1.0: 516 | resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} 517 | dev: false 518 | 519 | /forwarded/0.1.2: 520 | resolution: {integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=} 521 | engines: {node: '>= 0.6'} 522 | dev: false 523 | 524 | /fresh/0.5.2: 525 | resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} 526 | engines: {node: '>= 0.6'} 527 | dev: false 528 | 529 | /fsevents/2.3.2: 530 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 531 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 532 | os: [darwin] 533 | dev: true 534 | optional: true 535 | 536 | /get-stream/4.1.0: 537 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} 538 | engines: {node: '>=6'} 539 | dependencies: 540 | pump: 3.0.0 541 | dev: true 542 | 543 | /get-stream/5.2.0: 544 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 545 | engines: {node: '>=8'} 546 | dependencies: 547 | pump: 3.0.0 548 | dev: true 549 | 550 | /glob-parent/5.1.2: 551 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 552 | engines: {node: '>= 6'} 553 | dependencies: 554 | is-glob: 4.0.1 555 | dev: true 556 | 557 | /global-dirs/2.1.0: 558 | resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==} 559 | engines: {node: '>=8'} 560 | dependencies: 561 | ini: 1.3.7 562 | dev: true 563 | 564 | /got/9.6.0: 565 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} 566 | engines: {node: '>=8.6'} 567 | dependencies: 568 | '@sindresorhus/is': 0.14.0 569 | '@szmarczak/http-timer': 1.1.2 570 | cacheable-request: 6.1.0 571 | decompress-response: 3.3.0 572 | duplexer3: 0.1.4 573 | get-stream: 4.1.0 574 | lowercase-keys: 1.0.1 575 | mimic-response: 1.0.1 576 | p-cancelable: 1.1.0 577 | to-readable-stream: 1.0.0 578 | url-parse-lax: 3.0.0 579 | dev: true 580 | 581 | /graceful-fs/4.2.6: 582 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} 583 | dev: true 584 | 585 | /has-flag/3.0.0: 586 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 587 | engines: {node: '>=4'} 588 | dev: true 589 | 590 | /has-flag/4.0.0: 591 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 592 | engines: {node: '>=8'} 593 | dev: true 594 | 595 | /has-yarn/2.1.0: 596 | resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} 597 | engines: {node: '>=8'} 598 | dev: true 599 | 600 | /http-cache-semantics/4.1.0: 601 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} 602 | dev: true 603 | 604 | /http-errors/1.7.2: 605 | resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} 606 | engines: {node: '>= 0.6'} 607 | dependencies: 608 | depd: 1.1.2 609 | inherits: 2.0.3 610 | setprototypeof: 1.1.1 611 | statuses: 1.5.0 612 | toidentifier: 1.0.0 613 | dev: false 614 | 615 | /http-errors/1.7.3: 616 | resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} 617 | engines: {node: '>= 0.6'} 618 | dependencies: 619 | depd: 1.1.2 620 | inherits: 2.0.4 621 | setprototypeof: 1.1.1 622 | statuses: 1.5.0 623 | toidentifier: 1.0.0 624 | dev: false 625 | 626 | /iconv-lite/0.4.24: 627 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 628 | engines: {node: '>=0.10.0'} 629 | dependencies: 630 | safer-buffer: 2.1.2 631 | dev: false 632 | 633 | /ignore-by-default/1.0.1: 634 | resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} 635 | dev: true 636 | 637 | /import-lazy/2.1.0: 638 | resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} 639 | engines: {node: '>=4'} 640 | dev: true 641 | 642 | /imurmurhash/0.1.4: 643 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 644 | engines: {node: '>=0.8.19'} 645 | dev: true 646 | 647 | /inherits/2.0.3: 648 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} 649 | dev: false 650 | 651 | /inherits/2.0.4: 652 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 653 | dev: false 654 | 655 | /ini/1.3.7: 656 | resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==} 657 | dev: true 658 | 659 | /ini/1.3.8: 660 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 661 | dev: true 662 | 663 | /ioredis/4.27.2: 664 | resolution: {integrity: sha512-7OpYymIthonkC2Jne5uGWXswdhlua1S1rWGAERaotn0hGJWTSURvxdHA9G6wNbT/qKCloCja/FHsfKXW8lpTmg==} 665 | engines: {node: '>=6'} 666 | dependencies: 667 | cluster-key-slot: 1.1.0 668 | debug: 4.3.1 669 | denque: 1.5.0 670 | lodash.defaults: 4.2.0 671 | lodash.flatten: 4.4.0 672 | p-map: 2.1.0 673 | redis-commands: 1.7.0 674 | redis-errors: 1.2.0 675 | redis-parser: 3.0.0 676 | standard-as-callback: 2.1.0 677 | transitivePeerDependencies: 678 | - supports-color 679 | dev: false 680 | 681 | /ipaddr.js/1.9.1: 682 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 683 | engines: {node: '>= 0.10'} 684 | dev: false 685 | 686 | /is-arrayish/0.3.2: 687 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 688 | dev: false 689 | 690 | /is-binary-path/2.1.0: 691 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 692 | engines: {node: '>=8'} 693 | dependencies: 694 | binary-extensions: 2.2.0 695 | dev: true 696 | 697 | /is-ci/2.0.0: 698 | resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} 699 | hasBin: true 700 | dependencies: 701 | ci-info: 2.0.0 702 | dev: true 703 | 704 | /is-extglob/2.1.1: 705 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 706 | engines: {node: '>=0.10.0'} 707 | dev: true 708 | 709 | /is-fullwidth-code-point/2.0.0: 710 | resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} 711 | engines: {node: '>=4'} 712 | dev: true 713 | 714 | /is-fullwidth-code-point/3.0.0: 715 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 716 | engines: {node: '>=8'} 717 | dev: true 718 | 719 | /is-glob/4.0.1: 720 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} 721 | engines: {node: '>=0.10.0'} 722 | dependencies: 723 | is-extglob: 2.1.1 724 | dev: true 725 | 726 | /is-installed-globally/0.3.2: 727 | resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==} 728 | engines: {node: '>=8'} 729 | dependencies: 730 | global-dirs: 2.1.0 731 | is-path-inside: 3.0.3 732 | dev: true 733 | 734 | /is-npm/4.0.0: 735 | resolution: {integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==} 736 | engines: {node: '>=8'} 737 | dev: true 738 | 739 | /is-number/7.0.0: 740 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 741 | engines: {node: '>=0.12.0'} 742 | dev: true 743 | 744 | /is-obj/2.0.0: 745 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 746 | engines: {node: '>=8'} 747 | dev: true 748 | 749 | /is-path-inside/3.0.3: 750 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 751 | engines: {node: '>=8'} 752 | dev: true 753 | 754 | /is-stream/2.0.0: 755 | resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} 756 | engines: {node: '>=8'} 757 | dev: false 758 | 759 | /is-typedarray/1.0.0: 760 | resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} 761 | dev: true 762 | 763 | /is-yarn-global/0.3.0: 764 | resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} 765 | dev: true 766 | 767 | /isarray/1.0.0: 768 | resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} 769 | dev: false 770 | 771 | /json-buffer/3.0.0: 772 | resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} 773 | dev: true 774 | 775 | /json5/0.5.1: 776 | resolution: {integrity: sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=} 777 | hasBin: true 778 | dev: false 779 | 780 | /keyv/3.1.0: 781 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} 782 | dependencies: 783 | json-buffer: 3.0.0 784 | dev: true 785 | 786 | /kuler/2.0.0: 787 | resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} 788 | dev: false 789 | 790 | /latest-version/5.1.0: 791 | resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} 792 | engines: {node: '>=8'} 793 | dependencies: 794 | package-json: 6.5.0 795 | dev: true 796 | 797 | /lodash.defaults/4.2.0: 798 | resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=} 799 | dev: false 800 | 801 | /lodash.flatten/4.4.0: 802 | resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} 803 | dev: false 804 | 805 | /lodash/4.17.21: 806 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 807 | dev: false 808 | 809 | /logform/2.2.0: 810 | resolution: {integrity: sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==} 811 | dependencies: 812 | colors: 1.4.0 813 | fast-safe-stringify: 2.0.7 814 | fecha: 4.2.1 815 | ms: 2.1.3 816 | triple-beam: 1.3.0 817 | dev: false 818 | 819 | /lowercase-keys/1.0.1: 820 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} 821 | engines: {node: '>=0.10.0'} 822 | dev: true 823 | 824 | /lowercase-keys/2.0.0: 825 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} 826 | engines: {node: '>=8'} 827 | dev: true 828 | 829 | /make-dir/3.1.0: 830 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 831 | engines: {node: '>=8'} 832 | dependencies: 833 | semver: 6.3.0 834 | dev: true 835 | 836 | /media-typer/0.3.0: 837 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} 838 | engines: {node: '>= 0.6'} 839 | dev: false 840 | 841 | /merge-descriptors/1.0.1: 842 | resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} 843 | dev: false 844 | 845 | /methods/1.1.2: 846 | resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} 847 | engines: {node: '>= 0.6'} 848 | dev: false 849 | 850 | /mime-db/1.47.0: 851 | resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==} 852 | engines: {node: '>= 0.6'} 853 | dev: false 854 | 855 | /mime-types/2.1.30: 856 | resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==} 857 | engines: {node: '>= 0.6'} 858 | dependencies: 859 | mime-db: 1.47.0 860 | dev: false 861 | 862 | /mime/1.6.0: 863 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 864 | engines: {node: '>=4'} 865 | hasBin: true 866 | dev: false 867 | 868 | /mimic-response/1.0.1: 869 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} 870 | engines: {node: '>=4'} 871 | dev: true 872 | 873 | /minimatch/3.0.4: 874 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 875 | dependencies: 876 | brace-expansion: 1.1.11 877 | dev: true 878 | 879 | /minimist/1.2.5: 880 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 881 | dev: true 882 | 883 | /morgan/1.10.0: 884 | resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} 885 | engines: {node: '>= 0.8.0'} 886 | dependencies: 887 | basic-auth: 2.0.1 888 | debug: 2.6.9 889 | depd: 2.0.0 890 | on-finished: 2.3.0 891 | on-headers: 1.0.2 892 | dev: false 893 | 894 | /ms/2.0.0: 895 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 896 | 897 | /ms/2.1.1: 898 | resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} 899 | dev: false 900 | 901 | /ms/2.1.2: 902 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 903 | dev: false 904 | 905 | /ms/2.1.3: 906 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 907 | 908 | /negotiator/0.6.2: 909 | resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} 910 | engines: {node: '>= 0.6'} 911 | dev: false 912 | 913 | /node-fetch/2.6.1: 914 | resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} 915 | engines: {node: 4.x || >=6.0.0} 916 | dev: false 917 | 918 | /nodemon/2.0.7: 919 | resolution: {integrity: sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==} 920 | engines: {node: '>=8.10.0'} 921 | hasBin: true 922 | requiresBuild: true 923 | dependencies: 924 | chokidar: 3.5.1 925 | debug: 3.2.7 926 | ignore-by-default: 1.0.1 927 | minimatch: 3.0.4 928 | pstree.remy: 1.1.8 929 | semver: 5.7.1 930 | supports-color: 5.5.0 931 | touch: 3.1.0 932 | undefsafe: 2.0.3 933 | update-notifier: 4.1.3 934 | dev: true 935 | 936 | /nopt/1.0.10: 937 | resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=} 938 | hasBin: true 939 | dependencies: 940 | abbrev: 1.1.1 941 | dev: true 942 | 943 | /normalize-path/3.0.0: 944 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 945 | engines: {node: '>=0.10.0'} 946 | dev: true 947 | 948 | /normalize-url/4.5.0: 949 | resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==} 950 | engines: {node: '>=8'} 951 | dev: true 952 | 953 | /object-assign/4.1.1: 954 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} 955 | engines: {node: '>=0.10.0'} 956 | dev: false 957 | 958 | /on-finished/2.3.0: 959 | resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} 960 | engines: {node: '>= 0.8'} 961 | dependencies: 962 | ee-first: 1.1.1 963 | dev: false 964 | 965 | /on-headers/1.0.2: 966 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} 967 | engines: {node: '>= 0.8'} 968 | dev: false 969 | 970 | /once/1.4.0: 971 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 972 | dependencies: 973 | wrappy: 1.0.2 974 | dev: true 975 | 976 | /one-time/1.0.0: 977 | resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} 978 | dependencies: 979 | fn.name: 1.1.0 980 | dev: false 981 | 982 | /p-cancelable/1.1.0: 983 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} 984 | engines: {node: '>=6'} 985 | dev: true 986 | 987 | /p-map/2.1.0: 988 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 989 | engines: {node: '>=6'} 990 | dev: false 991 | 992 | /package-json/6.5.0: 993 | resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} 994 | engines: {node: '>=8'} 995 | dependencies: 996 | got: 9.6.0 997 | registry-auth-token: 4.2.1 998 | registry-url: 5.1.0 999 | semver: 6.3.0 1000 | dev: true 1001 | 1002 | /parseurl/1.3.3: 1003 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1004 | engines: {node: '>= 0.8'} 1005 | dev: false 1006 | 1007 | /path-to-regexp/0.1.7: 1008 | resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} 1009 | dev: false 1010 | 1011 | /picomatch/2.2.3: 1012 | resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==} 1013 | engines: {node: '>=8.6'} 1014 | dev: true 1015 | 1016 | /prepend-http/2.0.0: 1017 | resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} 1018 | engines: {node: '>=4'} 1019 | dev: true 1020 | 1021 | /process-nextick-args/2.0.1: 1022 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1023 | dev: false 1024 | 1025 | /proxy-addr/2.0.6: 1026 | resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==} 1027 | engines: {node: '>= 0.10'} 1028 | dependencies: 1029 | forwarded: 0.1.2 1030 | ipaddr.js: 1.9.1 1031 | dev: false 1032 | 1033 | /pstree.remy/1.1.8: 1034 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 1035 | dev: true 1036 | 1037 | /pump/3.0.0: 1038 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 1039 | dependencies: 1040 | end-of-stream: 1.4.4 1041 | once: 1.4.0 1042 | dev: true 1043 | 1044 | /pupa/2.1.1: 1045 | resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} 1046 | engines: {node: '>=8'} 1047 | dependencies: 1048 | escape-goat: 2.1.1 1049 | dev: true 1050 | 1051 | /qs/6.7.0: 1052 | resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} 1053 | engines: {node: '>=0.6'} 1054 | dev: false 1055 | 1056 | /range-parser/1.2.1: 1057 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1058 | engines: {node: '>= 0.6'} 1059 | dev: false 1060 | 1061 | /raw-body/2.4.0: 1062 | resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} 1063 | engines: {node: '>= 0.8'} 1064 | dependencies: 1065 | bytes: 3.1.0 1066 | http-errors: 1.7.2 1067 | iconv-lite: 0.4.24 1068 | unpipe: 1.0.0 1069 | dev: false 1070 | 1071 | /rc/1.2.8: 1072 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1073 | hasBin: true 1074 | dependencies: 1075 | deep-extend: 0.6.0 1076 | ini: 1.3.8 1077 | minimist: 1.2.5 1078 | strip-json-comments: 2.0.1 1079 | dev: true 1080 | 1081 | /readable-stream/2.3.7: 1082 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} 1083 | dependencies: 1084 | core-util-is: 1.0.2 1085 | inherits: 2.0.4 1086 | isarray: 1.0.0 1087 | process-nextick-args: 2.0.1 1088 | safe-buffer: 5.1.2 1089 | string_decoder: 1.1.1 1090 | util-deprecate: 1.0.2 1091 | dev: false 1092 | 1093 | /readable-stream/3.6.0: 1094 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} 1095 | engines: {node: '>= 6'} 1096 | dependencies: 1097 | inherits: 2.0.4 1098 | string_decoder: 1.3.0 1099 | util-deprecate: 1.0.2 1100 | dev: false 1101 | 1102 | /readdirp/3.5.0: 1103 | resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} 1104 | engines: {node: '>=8.10.0'} 1105 | dependencies: 1106 | picomatch: 2.2.3 1107 | dev: true 1108 | 1109 | /redis-commands/1.7.0: 1110 | resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} 1111 | dev: false 1112 | 1113 | /redis-errors/1.2.0: 1114 | resolution: {integrity: sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=} 1115 | engines: {node: '>=4'} 1116 | dev: false 1117 | 1118 | /redis-parser/3.0.0: 1119 | resolution: {integrity: sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=} 1120 | engines: {node: '>=4'} 1121 | dependencies: 1122 | redis-errors: 1.2.0 1123 | dev: false 1124 | 1125 | /registry-auth-token/4.2.1: 1126 | resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} 1127 | engines: {node: '>=6.0.0'} 1128 | dependencies: 1129 | rc: 1.2.8 1130 | dev: true 1131 | 1132 | /registry-url/5.1.0: 1133 | resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} 1134 | engines: {node: '>=8'} 1135 | dependencies: 1136 | rc: 1.2.8 1137 | dev: true 1138 | 1139 | /responselike/1.0.2: 1140 | resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} 1141 | dependencies: 1142 | lowercase-keys: 1.0.1 1143 | dev: true 1144 | 1145 | /safe-buffer/5.1.2: 1146 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1147 | dev: false 1148 | 1149 | /safe-buffer/5.2.1: 1150 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1151 | dev: false 1152 | 1153 | /safer-buffer/2.1.2: 1154 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1155 | dev: false 1156 | 1157 | /semver-diff/3.1.1: 1158 | resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} 1159 | engines: {node: '>=8'} 1160 | dependencies: 1161 | semver: 6.3.0 1162 | dev: true 1163 | 1164 | /semver/5.7.1: 1165 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1166 | hasBin: true 1167 | dev: true 1168 | 1169 | /semver/6.3.0: 1170 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1171 | hasBin: true 1172 | dev: true 1173 | 1174 | /send/0.17.1: 1175 | resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} 1176 | engines: {node: '>= 0.8.0'} 1177 | dependencies: 1178 | debug: 2.6.9 1179 | depd: 1.1.2 1180 | destroy: 1.0.4 1181 | encodeurl: 1.0.2 1182 | escape-html: 1.0.3 1183 | etag: 1.8.1 1184 | fresh: 0.5.2 1185 | http-errors: 1.7.3 1186 | mime: 1.6.0 1187 | ms: 2.1.1 1188 | on-finished: 2.3.0 1189 | range-parser: 1.2.1 1190 | statuses: 1.5.0 1191 | dev: false 1192 | 1193 | /serve-static/1.14.1: 1194 | resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} 1195 | engines: {node: '>= 0.8.0'} 1196 | dependencies: 1197 | encodeurl: 1.0.2 1198 | escape-html: 1.0.3 1199 | parseurl: 1.3.3 1200 | send: 0.17.1 1201 | dev: false 1202 | 1203 | /setprototypeof/1.1.1: 1204 | resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} 1205 | dev: false 1206 | 1207 | /signal-exit/3.0.3: 1208 | resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} 1209 | dev: true 1210 | 1211 | /simple-swizzle/0.2.2: 1212 | resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} 1213 | dependencies: 1214 | is-arrayish: 0.3.2 1215 | dev: false 1216 | 1217 | /stack-trace/0.0.10: 1218 | resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=} 1219 | dev: false 1220 | 1221 | /standard-as-callback/2.1.0: 1222 | resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} 1223 | dev: false 1224 | 1225 | /statuses/1.5.0: 1226 | resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} 1227 | engines: {node: '>= 0.6'} 1228 | dev: false 1229 | 1230 | /string-width/3.1.0: 1231 | resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} 1232 | engines: {node: '>=6'} 1233 | dependencies: 1234 | emoji-regex: 7.0.3 1235 | is-fullwidth-code-point: 2.0.0 1236 | strip-ansi: 5.2.0 1237 | dev: true 1238 | 1239 | /string-width/4.2.2: 1240 | resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} 1241 | engines: {node: '>=8'} 1242 | dependencies: 1243 | emoji-regex: 8.0.0 1244 | is-fullwidth-code-point: 3.0.0 1245 | strip-ansi: 6.0.0 1246 | dev: true 1247 | 1248 | /string_decoder/1.1.1: 1249 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1250 | dependencies: 1251 | safe-buffer: 5.1.2 1252 | dev: false 1253 | 1254 | /string_decoder/1.3.0: 1255 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1256 | dependencies: 1257 | safe-buffer: 5.2.1 1258 | dev: false 1259 | 1260 | /strip-ansi/5.2.0: 1261 | resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} 1262 | engines: {node: '>=6'} 1263 | dependencies: 1264 | ansi-regex: 4.1.0 1265 | dev: true 1266 | 1267 | /strip-ansi/6.0.0: 1268 | resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} 1269 | engines: {node: '>=8'} 1270 | dependencies: 1271 | ansi-regex: 5.0.0 1272 | dev: true 1273 | 1274 | /strip-json-comments/2.0.1: 1275 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} 1276 | engines: {node: '>=0.10.0'} 1277 | dev: true 1278 | 1279 | /supports-color/5.5.0: 1280 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1281 | engines: {node: '>=4'} 1282 | dependencies: 1283 | has-flag: 3.0.0 1284 | dev: true 1285 | 1286 | /supports-color/7.2.0: 1287 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1288 | engines: {node: '>=8'} 1289 | dependencies: 1290 | has-flag: 4.0.0 1291 | dev: true 1292 | 1293 | /term-size/2.2.1: 1294 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1295 | engines: {node: '>=8'} 1296 | dev: true 1297 | 1298 | /text-hex/1.0.0: 1299 | resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} 1300 | dev: false 1301 | 1302 | /to-readable-stream/1.0.0: 1303 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} 1304 | engines: {node: '>=6'} 1305 | dev: true 1306 | 1307 | /to-regex-range/5.0.1: 1308 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1309 | engines: {node: '>=8.0'} 1310 | dependencies: 1311 | is-number: 7.0.0 1312 | dev: true 1313 | 1314 | /toidentifier/1.0.0: 1315 | resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} 1316 | engines: {node: '>=0.6'} 1317 | dev: false 1318 | 1319 | /touch/3.1.0: 1320 | resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} 1321 | hasBin: true 1322 | dependencies: 1323 | nopt: 1.0.10 1324 | dev: true 1325 | 1326 | /triple-beam/1.3.0: 1327 | resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} 1328 | dev: false 1329 | 1330 | /type-fest/0.8.1: 1331 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1332 | engines: {node: '>=8'} 1333 | dev: true 1334 | 1335 | /type-is/1.6.18: 1336 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1337 | engines: {node: '>= 0.6'} 1338 | dependencies: 1339 | media-typer: 0.3.0 1340 | mime-types: 2.1.30 1341 | dev: false 1342 | 1343 | /typedarray-to-buffer/3.1.5: 1344 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 1345 | dependencies: 1346 | is-typedarray: 1.0.0 1347 | dev: true 1348 | 1349 | /undefsafe/2.0.3: 1350 | resolution: {integrity: sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==} 1351 | dependencies: 1352 | debug: 2.6.9 1353 | dev: true 1354 | 1355 | /unique-string/2.0.0: 1356 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} 1357 | engines: {node: '>=8'} 1358 | dependencies: 1359 | crypto-random-string: 2.0.0 1360 | dev: true 1361 | 1362 | /unpipe/1.0.0: 1363 | resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} 1364 | engines: {node: '>= 0.8'} 1365 | dev: false 1366 | 1367 | /update-notifier/4.1.3: 1368 | resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==} 1369 | engines: {node: '>=8'} 1370 | dependencies: 1371 | boxen: 4.2.0 1372 | chalk: 3.0.0 1373 | configstore: 5.0.1 1374 | has-yarn: 2.1.0 1375 | import-lazy: 2.1.0 1376 | is-ci: 2.0.0 1377 | is-installed-globally: 0.3.2 1378 | is-npm: 4.0.0 1379 | is-yarn-global: 0.3.0 1380 | latest-version: 5.1.0 1381 | pupa: 2.1.1 1382 | semver-diff: 3.1.1 1383 | xdg-basedir: 4.0.0 1384 | dev: true 1385 | 1386 | /url-parse-lax/3.0.0: 1387 | resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} 1388 | engines: {node: '>=4'} 1389 | dependencies: 1390 | prepend-http: 2.0.0 1391 | dev: true 1392 | 1393 | /util-deprecate/1.0.2: 1394 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1395 | dev: false 1396 | 1397 | /utils-merge/1.0.1: 1398 | resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} 1399 | engines: {node: '>= 0.4.0'} 1400 | dev: false 1401 | 1402 | /validator/13.6.0: 1403 | resolution: {integrity: sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==} 1404 | engines: {node: '>= 0.10'} 1405 | dev: false 1406 | 1407 | /vary/1.1.2: 1408 | resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} 1409 | engines: {node: '>= 0.8'} 1410 | dev: false 1411 | 1412 | /widest-line/3.1.0: 1413 | resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} 1414 | engines: {node: '>=8'} 1415 | dependencies: 1416 | string-width: 4.2.2 1417 | dev: true 1418 | 1419 | /winston-transport/4.4.0: 1420 | resolution: {integrity: sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==} 1421 | engines: {node: '>= 6.4.0'} 1422 | dependencies: 1423 | readable-stream: 2.3.7 1424 | triple-beam: 1.3.0 1425 | dev: false 1426 | 1427 | /winston/3.3.3: 1428 | resolution: {integrity: sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==} 1429 | engines: {node: '>= 6.4.0'} 1430 | dependencies: 1431 | '@dabh/diagnostics': 2.0.2 1432 | async: 3.2.0 1433 | is-stream: 2.0.0 1434 | logform: 2.2.0 1435 | one-time: 1.0.0 1436 | readable-stream: 3.6.0 1437 | stack-trace: 0.0.10 1438 | triple-beam: 1.3.0 1439 | winston-transport: 4.4.0 1440 | dev: false 1441 | 1442 | /wrappy/1.0.2: 1443 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1444 | dev: true 1445 | 1446 | /write-file-atomic/3.0.3: 1447 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 1448 | dependencies: 1449 | imurmurhash: 0.1.4 1450 | is-typedarray: 1.0.0 1451 | signal-exit: 3.0.3 1452 | typedarray-to-buffer: 3.1.5 1453 | dev: true 1454 | 1455 | /xdg-basedir/4.0.0: 1456 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} 1457 | engines: {node: '>=8'} 1458 | dev: true 1459 | --------------------------------------------------------------------------------