├── .dockerignore ├── .gitignore ├── client ├── .browserslistrc ├── vue.config.js ├── babel.config.js ├── public │ ├── favicon.ico │ └── index.html ├── src │ ├── assets │ │ └── logo.png │ ├── plugins │ │ └── vuetify.js │ ├── main.js │ ├── App.vue │ └── components │ │ ├── RankSelectionModal.vue │ │ └── Example.vue ├── .gitignore ├── README.md ├── .eslintrc.js └── package.json ├── .env.example ├── docs ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── YTThumbnail.png └── screenshot001.png ├── now.json ├── public ├── favicon.ico ├── css │ └── app.c9128dab.css ├── index.html └── js │ ├── app.2cb72c4f.js │ └── app.2cb72c4f.js.map ├── images └── app_preview_image.png ├── api ├── db │ ├── companies.js │ ├── index.js │ ├── ranks.js │ └── seed.js ├── index.js └── routes │ ├── ranks.js │ ├── index.js │ └── companies.js ├── Dockerfile ├── app.json ├── package.json ├── LICENSE ├── marketplace.json ├── azuredeploy.json ├── README.md └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | 4 | .vercel 5 | -------------------------------------------------------------------------------- /client/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | REDIS_ENDPOINT_URI=redis://localhost:6379 2 | REDIS_PASSWORD= -------------------------------------------------------------------------------- /client/vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "transpileDependencies": [ 3 | "vuetify" 4 | ] 5 | } -------------------------------------------------------------------------------- /docs/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/1.png -------------------------------------------------------------------------------- /docs/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/2.png -------------------------------------------------------------------------------- /docs/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/3.png -------------------------------------------------------------------------------- /docs/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/4.png -------------------------------------------------------------------------------- /now.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "rewrites": [{ "source": "/api/(.*)", "destination": "/api" }] 4 | } 5 | -------------------------------------------------------------------------------- /client/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/public/favicon.ico -------------------------------------------------------------------------------- /docs/YTThumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/YTThumbnail.png -------------------------------------------------------------------------------- /docs/screenshot001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/docs/screenshot001.png -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/client/public/favicon.ico -------------------------------------------------------------------------------- /client/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/client/src/assets/logo.png -------------------------------------------------------------------------------- /images/app_preview_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/images/app_preview_image.png -------------------------------------------------------------------------------- /client/src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuetify from 'vuetify/lib/framework'; 3 | 4 | Vue.use(Vuetify); 5 | 6 | export default new Vuetify({ 7 | }); 8 | -------------------------------------------------------------------------------- /api/db/companies.js: -------------------------------------------------------------------------------- 1 | const { db, REDIS_LEADERBOARD } = require('.'); 2 | 3 | module.exports.getBySymbol = async (symbol) => { 4 | return db('hgetall')(`leaderboard:${symbol}`); 5 | } 6 | -------------------------------------------------------------------------------- /client/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import vuetify from './plugins/vuetify'; 4 | 5 | Vue.config.productionTip = false 6 | 7 | new Vue({ 8 | vuetify, 9 | render: h => h(App) 10 | }).$mount('#app') 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:12 2 | 3 | WORKDIR /usr/src/app 4 | 5 | COPY yarn.lock . 6 | 7 | RUN yarn 8 | 9 | COPY . . 10 | 11 | ENV REDIS_ENDPOINT_URI $REDIS_ENDPOINT_URI 12 | ENV REDIS_PASSWORD $REDIS_PASSWORD 13 | 14 | ENV PORT 5000 15 | 16 | CMD [ "node", "api/index.js" ] 17 | 18 | 19 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /public/css/app.c9128dab.css: -------------------------------------------------------------------------------- 1 | [data-v-6d7466c0] .v-data-table>.v-data-table__wrapper>table>thead>tr>th{color:#444}[data-v-6d7466c0] .v-data-table{color:#212529;font-weight:500}#app{font-family:Noto Sans JP,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;margin-top:60px;background:#f4f4f4}pre{background:#f6f8fa;padding:3px 5px;display:inline} -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # client 2 | 3 | ## Project setup 4 | ``` 5 | yarn install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | yarn serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | yarn build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | yarn lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | -------------------------------------------------------------------------------- /client/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended' 9 | ], 10 | parserOptions: { 11 | parser: 'babel-eslint' 12 | }, 13 | rules: { 14 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 15 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Basic Redis Leaderboard Demo NodeJS", 3 | "description": "List of top 100 companies", 4 | "repository": "https://github.com/", 5 | "logo": "https://redis.io/images/redis-white.png", 6 | "keywords": ["node", "express", "redis", "leadboard"], 7 | "env": { 8 | "REDIS_ENDPOINT_URI": { 9 | "description": "Redis server URI", 10 | "required": true 11 | }, 12 | "REDIS_PASSWORD": { 13 | "description": "Password to your Redis server", 14 | "required": true 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /api/index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const express = require('express'); 3 | const cors = require('cors'); 4 | const path = require('path'); 5 | 6 | const PORT = process.env.PORT || 5000; 7 | 8 | const app = express(); 9 | 10 | const { seedDb } = require('./db'); 11 | 12 | // Setup routes 13 | app.use('/', express.static(path.join(__dirname, '../public'))); 14 | app.use(cors()); 15 | require('./routes')(app); 16 | 17 | // Seed redis db 18 | seedDb(); 19 | 20 | app.listen(PORT, () => { 21 | console.log(`App listening on port ${PORT}`); 22 | }); 23 | 24 | module.exports = app 25 | -------------------------------------------------------------------------------- /api/routes/ranks.js: -------------------------------------------------------------------------------- 1 | const rankDb = require('../db/ranks'); 2 | const companyDb = require('../db/companies'); 3 | const { seedDb } = require('../db'); 4 | 5 | module.exports.update = async (req, res, next) => { 6 | const { 7 | symbol, 8 | amount, 9 | } = req.query; 10 | 11 | try { 12 | await rankDb.zincrby(amount, symbol) 13 | 14 | res.json({ success: true }); 15 | } catch (err) { 16 | console.log(err); 17 | 18 | next(err); 19 | } 20 | } 21 | 22 | module.exports.reset = async (req, res, next) => { 23 | try { 24 | await seedDb(true); 25 | 26 | res.json({ success: true }); 27 | } catch (err) { 28 | console.log(err); 29 | 30 | next(err); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /api/routes/index.js: -------------------------------------------------------------------------------- 1 | const companies = require('./companies'); 2 | const ranks = require('./ranks'); 3 | 4 | module.exports = app => { 5 | app.get('/api/list/:method', companies.getList); 6 | app.get('/api/rank/update', ranks.update); 7 | app.get('/api/rank/reset', ranks.reset); 8 | 9 | app.use((err, req, res, next) => { 10 | err.statusCode = err.statusCode ? err.statusCode : 413; 11 | var errData = { reason: err.message, info: err.info }; 12 | 13 | if (!res.headersSent) { 14 | res.status(err.statusCode).send(errData); 15 | } 16 | 17 | console.log('Unexpected server error', err, err.stack); 18 | 19 | err = new Error('Unexpected server error'); 20 | err.statusCode = err.statusCode || 500; 21 | }); 22 | }; 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-redis-company-marketcap", 3 | "version": "0.0.1", 4 | "description": "Top 100 companies using marketcap", 5 | "main": "api/index.js", 6 | "scripts": { 7 | "start": "node api/index.js", 8 | "dev": "nodemon api/index.js", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "keywords": [ 12 | "redis", 13 | "nodejs", 14 | "example", 15 | "github", 16 | "leaderboard", 17 | "marketcap", 18 | "company", 19 | "top" 20 | ], 21 | "author": "adrphlhome", 22 | "license": "MIT", 23 | "dependencies": { 24 | "@vercel/node": "^1.9.0", 25 | "cors": "^2.8.5", 26 | "dotenv": "^8.2.0", 27 | "express": "^4.17.1", 28 | "nodemon": "^2.0.7", 29 | "redis": "^3.0.2" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/routes/companies.js: -------------------------------------------------------------------------------- 1 | const rankDb = require('../db/ranks'); 2 | const companyDb = require('../db/companies'); 3 | 4 | module.exports.getList = async (req, res, next) => { 5 | const { method } = req.params; 6 | 7 | if (typeof rankDb[method] !== 'function') { 8 | return res.status(404).json({ msg: 'Method not allowed' }); 9 | } 10 | 11 | try { 12 | const ranks = await rankDb[method](req.query); 13 | const symbols = ranks.map(r => r.symbol); 14 | const companies = await Promise.all(symbols.map(companyDb.getBySymbol)); 15 | 16 | const results = companies.map((company, index) => ({ 17 | ...company, 18 | marketCap: ranks[index].marketCap, 19 | rank: ranks[index].rank, 20 | symbol: symbols[index], 21 | })) 22 | res.json(results); 23 | } catch (err) { 24 | console.log(err); 25 | 26 | next(err); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Redis Leaderboard Demo", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "rm ../public -rf && vue-cli-service build && mv ./dist ../public", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.21.0", 12 | "core-js": "^3.6.5", 13 | "country-flags-svg": "^1.1.0", 14 | "vue": "^2.6.11", 15 | "vuetify": "^2.2.11" 16 | }, 17 | "devDependencies": { 18 | "@vue/cli-plugin-babel": "~4.5.0", 19 | "@vue/cli-plugin-eslint": "~4.5.0", 20 | "@vue/cli-service": "~4.5.0", 21 | "babel-eslint": "^10.1.0", 22 | "eslint": "^6.7.2", 23 | "eslint-plugin-vue": "^6.2.2", 24 | "sass": "^1.19.0", 25 | "sass-loader": "^8.0.0", 26 | "vue-cli-plugin-vuetify": "~2.0.9", 27 | "vue-template-compiler": "^2.6.11", 28 | "vuetify-loader": "^1.3.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /client/src/App.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 27 | 28 | 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 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. -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /api/db/index.js: -------------------------------------------------------------------------------- 1 | const redis = require('redis'); 2 | const seedData = require('./seed'); 3 | 4 | const DATA_READY_REDIS_KEY = 'LEADERBOARD_DATA_READY'; 5 | const REDIS_LEADERBOARD = 'REDIS_LEADERBOARD'; 6 | const { promisify } = require("util"); 7 | 8 | const client = redis.createClient(process.env.REDIS_ENDPOINT_URI, { 9 | password: process.env.REDIS_PASSWORD, 10 | }); 11 | 12 | const db = (func) => { 13 | return promisify(client[func]).bind(client); 14 | }; 15 | 16 | const seedDb = async (force) => { 17 | const isDataReady = await db('get')(DATA_READY_REDIS_KEY); 18 | const shouldRunSeed = force || !isDataReady; 19 | 20 | if (!shouldRunSeed) return; 21 | 22 | console.log('Loading Seed Data'); 23 | 24 | try { 25 | const loadCompany = (company, index) => { 26 | client.zadd([ 27 | REDIS_LEADERBOARD, 28 | company.marketCap, 29 | company.symbol.toLowerCase(), 30 | ]); 31 | 32 | client.hset([ 33 | `leaderboard:${company.symbol.toLowerCase()}`, 34 | 'symbol', 35 | company.symbol.toLowerCase(), 36 | 'company', 37 | company.company, 38 | 'country', 39 | company.country, 40 | ]); 41 | } 42 | 43 | seedData.forEach(loadCompany); 44 | 45 | await db('set')(DATA_READY_REDIS_KEY, true) 46 | } catch (err) { 47 | // pass 48 | } 49 | } 50 | 51 | module.exports = { 52 | client, 53 | seedDb, 54 | REDIS_LEADERBOARD, 55 | db, 56 | } 57 | 58 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | client
-------------------------------------------------------------------------------- /marketplace.json: -------------------------------------------------------------------------------- 1 | { 2 | "app_name": "Basic Redis leaderboard example in Nodejs", 3 | "description": "Showcases how to implement leaderboard application in NodeJs", 4 | "type": "Building Block", 5 | "contributed_by": "Redis", 6 | "repo_url": "https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs", 7 | "preview_image_url": "https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/images/app_preview_image.png", 8 | "download_url": "https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/archive/main.zip", 9 | "hosted_url": "", 10 | "quick_deploy": "true", 11 | "deploy_buttons": [ 12 | { 13 | "heroku": "https://heroku.com/deploy?template=https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs" 14 | }, 15 | { 16 | "vercel": "https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fredis-developer%2Fbasic-redis-leaderboard-demo-nodejs&env=REDIS_ENDPOINT_URI,REDIS_PASSWORD&envDescription=REDIS_ENDPOINT_URI%20is%20required%20at%20least%20to%20connect%20to%20Redis%20clouding%20server" 17 | }, 18 | { 19 | "Google": "https://deploy.cloud.run/?git_repo=https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs.git" 20 | } 21 | ], 22 | "language": [ 23 | "JavaScript" 24 | ], 25 | "redis_commands": [ 26 | "HSET", 27 | "ZADD", 28 | "ZREVRANGE", 29 | "ZRANGE", 30 | "ZREVRANGE", 31 | "ZSCORE", 32 | "ZINCRBY", 33 | "ZCOUNT" 34 | ], 35 | "redis_use_cases": [ 36 | "leaderboard" 37 | ], 38 | "redis_features": [], 39 | "app_image_urls": [ 40 | "https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/screenshot001.png" 41 | ], 42 | "youtube_url": "https://www.youtube.com/watch?v=zzinHxdZ34I", 43 | "special_tags": [], 44 | "verticals": [ 45 | "Others" 46 | ], 47 | "markdown": "https://raw.githubusercontent.com/redis-developer/basic-redis-leaderboard-demo-nodejs/master/README.md" 48 | } -------------------------------------------------------------------------------- /api/db/ranks.js: -------------------------------------------------------------------------------- 1 | const { db, REDIS_LEADERBOARD } = require('.'); 2 | 3 | const zrange = async (start, end, isDesc) => { 4 | const results = await db(isDesc ? 'zrevrange' : 'zrange')([REDIS_LEADERBOARD, start, end, 'WITHSCORES']); 5 | 6 | const data = []; 7 | let startRank = isDesc ? start + 1 : (results.length / 2 - start); 8 | const increaseFactor = isDesc ? 1 : -1; 9 | 10 | for (let i = 0; i < results.length; i += 2) { 11 | data.push({ 12 | rank: startRank, 13 | symbol: results[i], 14 | marketCap: results[i + 1], 15 | }); 16 | startRank += increaseFactor; 17 | } 18 | 19 | return data; 20 | } 21 | 22 | // 1.Top 10 companies: zrevrange companyLeaderboard 0 9 WITHSCORES 23 | module.exports.top10 = () => { 24 | return zrange(0, 9, true); 25 | } 26 | 27 | // 2.All companies: zrevrange companyLeaderboard 0 -1 WITHSCORES 28 | module.exports.all = () => { 29 | return zrange(0, -1, true); 30 | } 31 | 32 | // 3.Bottom 10 companies: zrange companyLeaderboard 0 9 WITHSCORES
 33 | module.exports.bottom10 = () => { 34 | return zrange(0, 9); 35 | } 36 | 37 | // 4.Between rank 10 and 15: zrevange companyLeaderboard 9 14 WITHSCORES 38 | module.exports.inRank = ({ start, end }) => { 39 | return zrange(+start, +end, true); 40 | } 41 | 42 | // 5.Show ranks of AAPL, FB and TSLA: ZMSCORE companyLeaderBoard company:AAPL company:FB company:TSLA 43 | module.exports.getBySymbol = async ({ symbols }) => { 44 | const results = await Promise.all( 45 | symbols.map(symbol => db('zscore')([REDIS_LEADERBOARD, symbol])) 46 | ) 47 | const data = []; 48 | results.forEach((marketCap, index) => { 49 | data.push({ 50 | marketCap, 51 | symbol: symbols[index], 52 | }); 53 | }); 54 | 55 | return data; 56 | } 57 | 58 | const a = async ({ nextToken }) => { 59 | let results = []; 60 | if (!!nextToken) { 61 | results = await db('zscan')([nextToken, REDIS_LEADERBOARD, 'COUNT', 10]); 62 | } else { 63 | results = await db('zscan')([0, REDIS_LEADERBOARD, 'COUNT', 10]); 64 | } 65 | } 66 | 67 | // 6.Pagination: Show 1st 10 companies: ZSCAN 0 companyLeaderBoard COUNT 10 68 | module.exports.paginate = (nextToken) => { 69 | return zscan(nextToken); 70 | } 71 | 72 | // 7.Pagination: Show next 10 companies: ZSCAN companyLeaderBoard COUNT 10 73 | 74 | // 8. Adding market cap to companies: ZINCRBY companyLeaderBoard 1000000000 "company:FB"
 75 | // 9. Reducing market cap to companies: ZINCRBY companyLeaderBoard -1000000000 "company:FB"
 76 | module.exports.zincrby = async (amount, symbol) => { 77 | return db('zincrby')([REDIS_LEADERBOARD, amount, symbol]); 78 | } 79 | 80 | // 10. Companies over a Trillion: ZCOUNT companyLeaderBoard 1000000000000 +inf 81 | // 11. # companies between 500 billion and 1 trillion: ZCOUNT companyLeaderBoard 500000000000 1000000000000 82 | 83 | -------------------------------------------------------------------------------- /client/src/components/RankSelectionModal.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 131 | 132 | -------------------------------------------------------------------------------- /azuredeploy.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "siteName": { 6 | "defaultValue": "basic-redis-leaderboard-demo-nodejs", 7 | "type": "string" 8 | }, 9 | "hostingPlanName": { 10 | "type": "string" 11 | }, 12 | "siteLocation": { 13 | "type": "string" 14 | }, 15 | "sku": { 16 | "type": "string", 17 | "allowedValues": [ 18 | "Free", 19 | "Shared", 20 | "Basic", 21 | "Standard" 22 | ], 23 | "defaultValue": "Free" 24 | }, 25 | "workerSize": { 26 | "type": "string", 27 | "allowedValues": [ 28 | "0", 29 | "1", 30 | "2" 31 | ], 32 | "defaultValue": "0" 33 | }, 34 | "repoUrl": { 35 | "type": "string" 36 | }, 37 | "branch": { 38 | "type": "string" 39 | }, 40 | "Project": { 41 | "type": "string", 42 | "defaultValue": "NodeRedis" 43 | }, 44 | "WebsiteNodeDefaultVersion": { 45 | "type": "string", 46 | "defaultValue": "6.9.1" 47 | }, 48 | "MicrosoftAppId": { 49 | "type": "string" 50 | }, 51 | "MicrosoftAppPassword": { 52 | "type": "string" 53 | } 54 | }, 55 | "resources": [ 56 | { 57 | "apiVersion": "2014-06-01", 58 | "name": "[parameters('hostingPlanName')]", 59 | "type": "Microsoft.Web/serverFarms", 60 | "location": "[parameters('siteLocation')]", 61 | "properties": { 62 | "name": "[parameters('hostingPlanName')]", 63 | "sku": "[parameters('sku')]", 64 | "workerSize": "[parameters('workerSize')]", 65 | "numberOfWorkers": 1 66 | } 67 | }, 68 | { 69 | "apiVersion": "2014-06-01", 70 | "name": "[parameters('siteName')]", 71 | "type": "Microsoft.Web/Sites", 72 | "location": "[parameters('siteLocation')]", 73 | "dependsOn": [ 74 | "[concat('Microsoft.Web/serverFarms/', parameters('hostingPlanName'))]" 75 | ], 76 | "tags": { 77 | "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "empty" 78 | }, 79 | "properties": { 80 | "name": "[parameters('siteName')]", 81 | "serverFarm": "[parameters('hostingPlanName')]" 82 | }, 83 | "resources": [ 84 | { 85 | "apiVersion": "2014-04-01", 86 | "type": "config", 87 | "name": "web", 88 | "dependsOn": [ 89 | "[concat('Microsoft.Web/Sites/', parameters('siteName'))]" 90 | ], 91 | "properties": { 92 | "appSettings": [ 93 | { 94 | "name": "WEBSITE_NODE_DEFAULT_VERSION", 95 | "value": "[parameters('WebsiteNodeDefaultVersion')]" 96 | }, 97 | { 98 | "name": "Project", 99 | "value": "[parameters('Project')]" 100 | }, 101 | { 102 | "name": "MICROSOFT_APP_ID", 103 | "value": "[parameters('MicrosoftAppId')]" 104 | }, 105 | { 106 | "name": "MICROSOFT_APP_PASSWORD", 107 | "value": "[parameters('MicrosoftAppPassword')]" 108 | } 109 | ] 110 | } 111 | }, 112 | { 113 | "apiVersion": "2014-04-01", 114 | "name": "web", 115 | "type": "sourcecontrols", 116 | "dependsOn": [ 117 | "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]", 118 | "[concat('Microsoft.Web/Sites/', parameters('siteName'), '/config/web')]" 119 | ], 120 | "properties": { 121 | "RepoUrl": "[parameters('repoUrl')]", 122 | "branch": "[parameters('branch')]", 123 | "IsManualIntegration": true 124 | } 125 | } 126 | ] 127 | } 128 | ] 129 | } 130 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Basic Redis Leaderboard Demo NodeJS 3 | 4 | Show how the redis works with NodeJS, Express. 5 | 6 | ## Screenshots 7 | 8 | ![How it works](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/screenshot001.png) 9 | 10 | # Overview video 11 | 12 | Here's a short video that explains the project and how it uses Redis: 13 | 14 | [![Watch the video on YouTube](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/YTThumbnail.png)](https://www.youtube.com/watch?v=zzinHxdZ34I) 15 | 16 | ## Try it out 17 | 18 | 19 |

20 | 21 | Deploy to Heorku 22 | 23 |

24 | 25 |

26 | 27 | Deploy with Vercel 28 | 29 |

30 | 31 |

32 | 33 | Run on Google Cloud 34 | 35 | (See notes: How to run on Google Cloud) 36 |

37 | 38 | 39 | ## How to run on Google Cloud 40 | 41 |

42 | If you don't have redis yet, plug it in (https://spring-gcp.saturnism.me/app-dev/cloud-services/cache/memorystore-redis). 43 | After successful deployment, you need to manually enable the vpc connector as shown in the pictures: 44 |

45 | 46 | 1. Open link google cloud console. 47 | 48 | ![1 step](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/1.png) 49 | 50 | 2. Click "Edit and deploy new revision" button. 51 | 52 | ![2 step](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/2.png) 53 | 54 | 3. Add environment. 55 | 56 | ![3 step](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/3.png) 57 | 58 | 4. Select vpc-connector and deploy application. 59 | 60 | ![4 step](https://github.com/redis-developer/basic-redis-leaderboard-demo-nodejs/raw/master/docs/4.png) 61 | 62 | 63 | Problem with unsupported flags when deploying google cloud run button 64 | 65 | 66 | 67 | # How it works? 68 | ## 1. How the data is stored: 69 |
    70 |
  1. The company data is stored in a hash like below: 71 |
    HSET "company:AAPL" symbol "AAPL" market_cap "2600000000000" country USA
    72 |
  2. 73 |
  3. The Ranks are stored in a ZSET. 74 |
    ZADD companyLeaderboard 2600000000000 company:AAPL
    75 |
  4. 76 |
77 | 78 |
79 | 80 | ## 2. How the data is accessed: 81 |
    82 |
  1. Top 10 companies:
    ZREVRANGE companyLeaderboard 0 9 WITHSCORES
  2. 83 |
  3. All companies:
    ZREVRANGE companyLeaderboard 0 -1 WITHSCORES
  4. 84 |
  5. Bottom 10 companies:
    ZRANGE companyLeaderboard 0 9 WITHSCORES
  6. 85 |
  7. Between rank 10 and 15:
    ZREVRANGE companyLeaderboard 9 14 WITHSCORES
  8. 86 |
  9. Show ranks of AAPL, FB and TSLA:
    ZSCORE companyLeaderBoard company:AAPL company:FB company:TSLA
  10. 87 | 88 |
  11. Adding market cap to companies:
    ZINCRBY companyLeaderBoard 1000000000 "company:FB"
  12. 89 |
  13. Reducing market cap to companies:
    ZINCRBY companyLeaderBoard -1000000000 "company:FB"
  14. 90 |
  15. Companies over a Trillion:
    ZCOUNT companyLeaderBoard 1000000000000 +inf
  16. 91 |
  17. Companies between 500 billion and 1 trillion:
    ZCOUNT companyLeaderBoard 500000000000 1000000000000
  18. 92 |
93 | 94 | ## How to run it locally? 95 | 96 | #### Copy `.env.example` to create `.env`. And provide the values for environment variables 97 | 98 | - REDIS_ENDPOINT_URI: Redis server URI 99 | - REDIS_PASSWORD: Password to the server 100 | 101 | #### Run frontend 102 | 103 | ```sh 104 | cd client 105 | yarn 106 | yarn serve 107 | ``` 108 | 109 | #### Run backend 110 | 111 | ```sh 112 | yarn 113 | yarn dev 114 | ``` 115 | -------------------------------------------------------------------------------- /client/src/components/Example.vue: -------------------------------------------------------------------------------- 1 | 136 | 137 | 266 | 267 | 268 | 277 | -------------------------------------------------------------------------------- /public/js/app.2cb72c4f.js: -------------------------------------------------------------------------------- 1 | (function(e){function t(t){for(var n,i,l=t[0],c=t[1],s=t[2],u=0,d=[];uO?"$".concat((e/O).toFixed(3)," T"):e>L?"$".concat((e/L).toFixed(2)," B"):e>F?"$".concat((e/F).toFixed(1)," M"):"$ ".concat(e)},getCountryFlag:function(e){var t={"S. Arabia":"Saudi Arabia","S. Korea":"South Korea"},a=Object(u["findFlagUrlByCountryName"])(t[e]||e);return a}}},E=B,U=(a("1e58"),a("62ad")),j=a("a523"),N=a("8fea"),I=a("cd55"),$=a("49e2"),D=a("c865"),H=a("0393"),Z=a("0fd9"),M=Object(h["a"])(E,i,l,!1,null,"6d7466c0",null),G=M.exports;x()(M,{VBtn:_["a"],VCard:k["a"],VCol:U["a"],VContainer:j["a"],VDataTable:N["a"],VExpansionPanel:I["a"],VExpansionPanelContent:$["a"],VExpansionPanelHeader:D["a"],VExpansionPanels:H["a"],VIcon:w["a"],VRow:Z["a"],VSelect:R["a"]});var K={name:"App",components:{Example:G}},W=K,z=(a("034f"),a("7496")),J=Object(h["a"])(W,o,r,!1,null,null,null),Y=J.exports;x()(J,{VApp:z["a"]});var q=a("f309");n["a"].use(q["a"]);var Q=new q["a"]({});n["a"].config.productionTip=!1,new n["a"]({vuetify:Q,render:function(e){return e(Y)}}).$mount("#app")},"85ec":function(e,t,a){}}); 2 | //# sourceMappingURL=app.2cb72c4f.js.map -------------------------------------------------------------------------------- /api/db/seed.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | company: 'Apple', 4 | symbol: 'AAPL', 5 | marketCap: 2222000000, 6 | country: 'USA', 7 | }, 8 | { 9 | company: 'Saudi Aramco', 10 | symbol: '2222.SR', 11 | marketCap: 2046000000, 12 | country: 'S. Arabia', 13 | }, 14 | { 15 | company: 'Microsoft', 16 | symbol: 'MSFT', 17 | marketCap: 1660000000, 18 | country: 'USA', 19 | }, 20 | { 21 | company: 'Amazon', 22 | symbol: 'AMZN', 23 | marketCap: 1597000000, 24 | country: 'USA', 25 | }, 26 | { 27 | company: 'Alphabet (Google)', 28 | symbol: 'GOOG', 29 | marketCap: 1218000000, 30 | country: 'USA', 31 | }, 32 | { 33 | company: 'Tesla', 34 | symbol: 'TSLA', 35 | marketCap: 834170000, 36 | country: 'USA', 37 | }, 38 | { 39 | company: 'Facebook', 40 | symbol: 'FB', 41 | marketCap: 762110000, 42 | country: 'USA', 43 | }, 44 | { 45 | company: 'Tencent', 46 | symbol: 'TCEHY', 47 | marketCap: 742230000, 48 | country: 'China', 49 | }, 50 | { 51 | company: 'Alibaba', 52 | symbol: 'BABA', 53 | marketCap: 642220000, 54 | country: 'China', 55 | }, 56 | { 57 | company: 'Berkshire Hathaway', 58 | symbol: 'BRK-A', 59 | marketCap: 549580000, 60 | country: 'USA', 61 | }, 62 | { 63 | company: 'Samsung', 64 | symbol: '005930.KS', 65 | marketCap: 526630000, 66 | country: 'S. Korea', 67 | }, 68 | { 69 | company: 'TSMC', 70 | symbol: 'TSM', 71 | marketCap: 511700000, 72 | country: 'Taiwan', 73 | }, 74 | { 75 | company: 'Visa', 76 | symbol: 'V', 77 | marketCap: 474940000, 78 | country: 'USA', 79 | }, 80 | { 81 | company: 'Johnson & Johnson', 82 | symbol: 'JNJ', 83 | marketCap: 421310000, 84 | country: 'USA', 85 | }, 86 | { 87 | company: 'Walmart', 88 | symbol: 'WMT', 89 | marketCap: 414850000, 90 | country: 'USA', 91 | }, 92 | { 93 | company: 'JPMorgan Chase', 94 | symbol: 'JPM', 95 | marketCap: 414610000, 96 | country: 'USA', 97 | }, 98 | { 99 | company: 'Kweichow Moutai', 100 | symbol: '600519.SS', 101 | marketCap: 392630000, 102 | country: 'China', 103 | }, 104 | { 105 | company: 'Mastercard', 106 | symbol: 'MA', 107 | marketCap: 352760000, 108 | country: 'USA', 109 | }, 110 | { 111 | company: 'UnitedHealth', 112 | symbol: 'UNH', 113 | marketCap: 344790000, 114 | country: 'USA', 115 | }, 116 | { 117 | company: 'Procter & Gamble', 118 | symbol: 'PG', 119 | marketCap: 344140000, 120 | country: 'USA', 121 | }, 122 | { 123 | company: 'Nestlé', 124 | symbol: 'NSRGY', 125 | marketCap: 333610000, 126 | country: 'Switzerland', 127 | }, 128 | { 129 | company: 'NVIDIA', 130 | symbol: 'NVDA', 131 | marketCap: 328730000, 132 | country: 'USA', 133 | }, 134 | { 135 | company: 'LVMH', 136 | symbol: 'LVMUY', 137 | marketCap: 327040000, 138 | country: 'France', 139 | }, 140 | { 141 | company: 'Walt Disney', 142 | symbol: 'DIS', 143 | marketCap: 322900000, 144 | country: 'USA', 145 | }, 146 | { 147 | company: 'Roche', 148 | symbol: 'RHHBY', 149 | marketCap: 293520000, 150 | country: 'Switzerland', 151 | }, 152 | { 153 | company: 'Home Depot', 154 | symbol: 'HD', 155 | marketCap: 289700000, 156 | country: 'USA', 157 | }, 158 | { 159 | company: 'PayPal', 160 | symbol: 'PYPL', 161 | marketCap: 284080000, 162 | country: 'USA', 163 | }, 164 | { 165 | company: 'Bank of America', 166 | symbol: 'BAC', 167 | marketCap: 281410000, 168 | country: 'USA', 169 | }, 170 | { 171 | company: 'ICBC', 172 | symbol: '1398.HK', 173 | marketCap: 266230000, 174 | country: 'China', 175 | }, 176 | { 177 | company: 'Meituan-Dianping', 178 | symbol: 'MPNGF', 179 | marketCap: 246210000, 180 | country: 'China', 181 | }, 182 | { 183 | company: 'Verizon', 184 | symbol: 'VZ', 185 | marketCap: 239180000, 186 | country: 'USA', 187 | }, 188 | { 189 | company: 'Ping An Insurance', 190 | symbol: 'PNGAY', 191 | marketCap: 237140000, 192 | country: 'China', 193 | }, 194 | { 195 | company: 'Comcast', 196 | symbol: 'CMCSA', 197 | marketCap: 235810000, 198 | country: 'USA', 199 | }, 200 | { 201 | company: 'Adobe', 202 | symbol: 'ADBE', 203 | marketCap: 232710000, 204 | country: 'USA', 205 | }, 206 | { 207 | company: 'Nike', 208 | symbol: 'NKE', 209 | marketCap: 230710000, 210 | country: 'USA', 211 | }, 212 | { 213 | company: 'Netflix', 214 | symbol: 'NFLX', 215 | marketCap: 225490000, 216 | country: 'USA', 217 | }, 218 | { 219 | company: 'Pinduoduo', 220 | symbol: 'PDD', 221 | marketCap: 221680000, 222 | country: 'China', 223 | }, 224 | { 225 | company: 'Coca-Cola', 226 | symbol: 'KO', 227 | marketCap: 219510000, 228 | country: 'USA', 229 | }, 230 | { 231 | company: 'Novartis', 232 | symbol: 'NVS', 233 | marketCap: 214590000, 234 | country: 'Switzerland', 235 | }, 236 | { 237 | company: 'Toyota', 238 | symbol: 'TM', 239 | marketCap: 212390000, 240 | country: 'Japan', 241 | }, 242 | { 243 | company: 'ASML', 244 | symbol: 'ASML', 245 | marketCap: 212100000, 246 | country: 'Netherlands', 247 | }, 248 | { 249 | company: 'Intel', 250 | symbol: 'INTC', 251 | marketCap: 211660000, 252 | country: 'USA', 253 | }, 254 | { 255 | company: 'L\' Oréal', 256 | symbol: 'OR.PA', 257 | marketCap: 210160000, 258 | country: 'France', 259 | }, 260 | { 261 | company: 'Merck', 262 | symbol: 'MRK', 263 | marketCap: 210060000, 264 | country: 'USA', 265 | }, 266 | { 267 | company: 'AT&T', 268 | symbol: 'T', 269 | marketCap: 206790000, 270 | country: 'USA', 271 | }, 272 | { 273 | company: 'Pfizer', 274 | symbol: 'PFE', 275 | marketCap: 206380000, 276 | country: 'USA', 277 | }, 278 | { 279 | company: 'Salesforce', 280 | symbol: 'CRM', 281 | marketCap: 203770000, 282 | country: 'USA', 283 | }, 284 | { 285 | company: 'Thermo Fisher Scientific', 286 | symbol: 'TMO', 287 | marketCap: 203040000, 288 | country: 'USA', 289 | }, 290 | { 291 | company: 'Pepsico', 292 | symbol: 'PEP', 293 | marketCap: 199250000, 294 | country: 'USA', 295 | }, 296 | { 297 | company: 'Abbott Laboratories', 298 | symbol: 'ABT', 299 | marketCap: 197810000, 300 | country: 'USA', 301 | }, 302 | { 303 | company: 'China Construction Bank', 304 | symbol: 'CICHY', 305 | marketCap: 193710000, 306 | country: 'China', 307 | }, 308 | { 309 | company: 'Exxon Mobil', 310 | symbol: 'XOM', 311 | marketCap: 192210000, 312 | country: 'USA', 313 | }, 314 | { 315 | company: 'Oracle', 316 | symbol: 'ORCL', 317 | marketCap: 190830000, 318 | country: 'USA', 319 | }, 320 | { 321 | company: 'Cisco', 322 | symbol: 'CSCO', 323 | marketCap: 190400000, 324 | country: 'USA', 325 | }, 326 | { 327 | company: 'AbbVie', 328 | symbol: 'ABBV', 329 | marketCap: 189380000, 330 | country: 'USA', 331 | }, 332 | { 333 | company: 'BHP Group', 334 | symbol: 'BHP', 335 | marketCap: 186040000, 336 | country: 'Australia', 337 | }, 338 | { 339 | company: 'Broadcom', 340 | symbol: 'AVGO', 341 | marketCap: 181240000, 342 | country: 'USA', 343 | }, 344 | { 345 | company: 'CM Bank', 346 | symbol: '3968.HK', 347 | marketCap: 180460000, 348 | country: 'China', 349 | }, 350 | { 351 | company: 'QUALCOMM', 352 | symbol: 'QCOM', 353 | marketCap: 177150000, 354 | country: 'USA', 355 | }, 356 | { 357 | company: 'Reliance Industries', 358 | symbol: 'RELIANCE.NS', 359 | marketCap: 177100000, 360 | country: 'India', 361 | }, 362 | { 363 | company: 'Chevron', 364 | symbol: 'CVX', 365 | marketCap: 175320000, 366 | country: 'USA', 367 | }, 368 | { 369 | company: 'Accenture', 370 | symbol: 'ACN', 371 | marketCap: 175020000, 372 | country: 'Ireland', 373 | }, 374 | { 375 | company: 'Danaher', 376 | symbol: 'DHR', 377 | marketCap: 172960000, 378 | country: 'USA', 379 | }, 380 | { 381 | company: 'Agricultural Bank of China', 382 | symbol: 'ACGBY', 383 | marketCap: 168730000, 384 | country: 'China', 385 | }, 386 | { 387 | company: 'T-Mobile US', 388 | symbol: 'TMUS', 389 | marketCap: 167630000, 390 | country: 'USA', 391 | }, 392 | { 393 | company: 'Prosus', 394 | symbol: 'PRX.VI', 395 | marketCap: 165690000, 396 | country: 'Netherlands', 397 | }, 398 | { 399 | company: 'Costco', 400 | symbol: 'COST', 401 | marketCap: 163860000, 402 | country: 'USA', 403 | }, 404 | { 405 | company: 'Novo Nordisk', 406 | symbol: 'NVO', 407 | marketCap: 162260000, 408 | country: 'Denmark', 409 | }, 410 | { 411 | company: 'Medtronic', 412 | symbol: 'MDT', 413 | marketCap: 161130000, 414 | country: 'Ireland', 415 | }, 416 | { 417 | company: 'McDonald', 418 | symbol: 'MCD', 419 | marketCap: 160840000, 420 | country: 'USA', 421 | }, 422 | { 423 | company: 'Unilever', 424 | symbol: 'UL', 425 | marketCap: 160420000, 426 | country: 'Netherlands', 427 | }, 428 | { 429 | company: 'Eli Lilly', 430 | symbol: 'LLY', 431 | marketCap: 159180000, 432 | country: 'USA', 433 | }, 434 | { 435 | company: 'Nextera Energy', 436 | symbol: 'NEE', 437 | marketCap: 158930000, 438 | country: 'USA', 439 | }, 440 | { 441 | company: 'Texas Instruments', 442 | symbol: 'TXN', 443 | marketCap: 157110000, 444 | country: 'USA', 445 | }, 446 | { 447 | company: 'SAP', 448 | symbol: 'SAP', 449 | marketCap: 156750000, 450 | country: 'Germany', 451 | }, 452 | { 453 | company: 'Tata', 454 | symbol: 'TCS.NS', 455 | marketCap: 156350000, 456 | country: 'India', 457 | }, 458 | { 459 | company: 'Shell', 460 | symbol: 'RYDAF', 461 | marketCap: 155950000, 462 | country: 'Netherlands', 463 | }, 464 | { 465 | company: 'AIA', 466 | symbol: 'AAIGF', 467 | marketCap: 153920000, 468 | country: 'Hong Kong', 469 | }, 470 | { 471 | company: 'Union Pacific Corporation', 472 | symbol: 'UNP', 473 | marketCap: 147450000, 474 | country: 'USA', 475 | }, 476 | { 477 | company: 'Honeywell', 478 | symbol: 'HON', 479 | marketCap: 147370000, 480 | country: 'USA', 481 | }, 482 | { 483 | company: 'Jingdong Mall', 484 | symbol: 'JD', 485 | marketCap: 146600000, 486 | country: 'China', 487 | }, 488 | { 489 | company: 'Shopify', 490 | symbol: 'SHOP', 491 | marketCap: 145120000, 492 | country: 'Canada', 493 | }, 494 | { 495 | company: 'SoftBank', 496 | symbol: 'SFTBF', 497 | marketCap: 143310000, 498 | country: 'Japan', 499 | }, 500 | { 501 | company: 'China Life Insurance', 502 | symbol: 'LFC', 503 | marketCap: 142650000, 504 | country: 'China', 505 | }, 506 | { 507 | company: 'Linde', 508 | symbol: 'LIN', 509 | marketCap: 141920000, 510 | country: 'UK', 511 | }, 512 | { 513 | company: 'Anheuser-Busch Inbev', 514 | symbol: 'BUD', 515 | marketCap: 141810000, 516 | country: 'Belgium', 517 | }, 518 | { 519 | company: 'Bristol-Myers Squibb', 520 | symbol: 'BMY', 521 | marketCap: 141210000, 522 | country: 'USA', 523 | }, 524 | { 525 | company: 'Amgen', 526 | symbol: 'AMGN', 527 | marketCap: 138840000, 528 | country: 'USA', 529 | }, 530 | { 531 | company: 'Keyence', 532 | symbol: 'KYCCF', 533 | marketCap: 137430000, 534 | country: 'Japan', 535 | }, 536 | { 537 | company: 'Wells Fargo', 538 | symbol: 'WFC', 539 | marketCap: 137220000, 540 | country: 'USA', 541 | }, 542 | { 543 | company: 'United Parcel Service', 544 | symbol: 'UPS', 545 | marketCap: 136910000, 546 | country: 'USA', 547 | }, 548 | { 549 | company: 'Morgan Stanley', 550 | symbol: 'MS', 551 | marketCap: 136140000, 552 | country: 'USA', 553 | }, 554 | { 555 | company: 'Citigroup', 556 | symbol: 'C', 557 | marketCap: 136090000, 558 | country: 'USA', 559 | }, 560 | { 561 | company: 'Astrazeneca', 562 | symbol: 'AZN', 563 | marketCap: 135460000, 564 | country: 'UK', 565 | }, 566 | { 567 | company: 'Bank of China', 568 | symbol: 'BACHF', 569 | marketCap: 132660000, 570 | country: 'China', 571 | }, 572 | { 573 | company: 'Philip Morris', 574 | symbol: 'PM', 575 | marketCap: 129390000, 576 | country: 'USA', 577 | }, 578 | { 579 | company: 'Sony', 580 | symbol: 'SNE', 581 | marketCap: 127620000, 582 | country: 'Japan', 583 | }, 584 | { 585 | company: 'Charter Communications', 586 | symbol: 'CHTR', 587 | marketCap: 126790000, 588 | country: 'USA', 589 | }, 590 | { 591 | company: 'Starbucks', 592 | symbol: 'SBUX', 593 | marketCap: 124020000, 594 | country: 'USA', 595 | }, 596 | { 597 | company: 'NTT Docomo', 598 | symbol: 'NTDMF', 599 | marketCap: 122470000, 600 | country: 'Japan', 601 | } 602 | ] -------------------------------------------------------------------------------- /public/js/app.2cb72c4f.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?0f16","webpack:///./src/components/Example.vue?5af1","webpack:///./src/App.vue?0bd8","webpack:///./src/components/Example.vue?8026","webpack:///./src/components/RankSelectionModal.vue?a1d2","webpack:///src/components/RankSelectionModal.vue","webpack:///./src/components/RankSelectionModal.vue?8d6e","webpack:///./src/components/RankSelectionModal.vue","webpack:///src/components/Example.vue","webpack:///./src/components/Example.vue?8849","webpack:///./src/components/Example.vue?baf6","webpack:///src/App.vue","webpack:///./src/App.vue?3359","webpack:///./src/App.vue?2667","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","staticStyle","_v","staticRenderFns","model","callback","$$v","panel","expression","ACTION_LIST","method","companies","on","onUpdateRank","scopedSlots","_u","fn","ref","_g","rankForm","headers","loading","item","_s","rank","symbol","toUpperCase","company","formatUSD","marketCap","getCountryFlag","country","proxy","loadData","_e","_t","dialog","close","internalValue","$set","RANK_OP","AMOUNT_LIST","isValid","components","props","type","Array","watch","computed","op","amount","set","$emit","val","methods","component","VBtn","VCard","VCardActions","VCardText","VCardTitle","VDialog","VIcon","VSelect","VSpacer","RankSelectionModal","handler","immediate","created","usd","MILLION","VCol","VContainer","VDataTable","VExpansionPanel","VExpansionPanelContent","VExpansionPanelHeader","VExpansionPanels","VRow","Example","VApp","Vue","use","Vuetify","config","productionTip","vuetify","render","h","App","$mount"],"mappings":"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","file":"js/app.2cb72c4f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Example.vue?vue&type=style&index=0&id=6d7466c0&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{staticClass:\"mt-0\",attrs:{\"id\":\"app\"}},[_c('div',{staticStyle:{\"position\":\"absolute\",\"top\":\"-50px\",\"right\":\"0px\",\"width\":\"300px\"}},[_c('img',{attrs:{\"src\":\"https://redislabs.com/wp-content/uploads/2020/12/RedisLabs_Illustration_HomepageHero_v4.svg\"}})]),_c('div',{staticStyle:{\"height\":\"50px\"}}),_c('h1',{staticClass:\"text-center\",staticStyle:{\"color\":\"#444444\"}},[_vm._v(\"Redis Leadboard Demo\")]),_c('div',{staticStyle:{\"height\":\"50px\"}}),_c('example')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"example\"},[_c('v-row',{staticClass:\"mb-5\"},[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-expansion-panels',{attrs:{\"multiple\":\"\"},model:{value:(_vm.panel),callback:function ($$v) {_vm.panel=$$v},expression:\"panel\"}},[_c('v-expansion-panel',[_c('v-expansion-panel-header',[_vm._v(\"How it works?\")]),_c('v-expansion-panel-content',[_c('b',[_vm._v(\"1. How the data is stored:\")]),_c('ol',[_c('li',[_vm._v(\"The company data is stored in a hash like below: \"),_c('pre',[_vm._v(\"HSET \\\"company:AAPL\\\" symbol \\\"AAPL\\\" market_cap \\\"2600000000000\\\" country USA\")])]),_c('li',[_vm._v(\"The Ranks are stored in a ZSET. \"),_c('pre',[_vm._v(\"ZADD companyLeaderboard 2600000000000 company:AAPL\")])])]),_c('br'),_c('b',[_vm._v(\"2. How the data is accessed:\")]),_c('ol',[_c('li',[_vm._v(\"Top 10 companies: \"),_c('pre',[_vm._v(\"ZREVRANGE companyLeaderboard 0 9 WITHSCORES\")])]),_c('li',[_vm._v(\"All companies: \"),_c('pre',[_vm._v(\"ZREVRANGE companyLeaderboard 0 -1 WITHSCORES\")])]),_c('li',[_vm._v(\"Bottom 10 companies: \"),_c('pre',[_vm._v(\"ZRANGE companyLeaderboard 0 9 WITHSCORES\")])]),_c('li',[_vm._v(\"Between rank 10 and 15: \"),_c('pre',[_vm._v(\"ZREVRANGE companyLeaderboard 9 14 WITHSCORES\")])]),_c('li',[_vm._v(\"Show ranks of AAPL, FB and TSLA: \"),_c('pre',[_vm._v(\"ZSCORE companyLeaderBoard company:AAPL company:FB company:TSLA\")])]),_c('li',[_vm._v(\"Adding market cap to companies: \"),_c('pre',[_vm._v(\"ZINCRBY companyLeaderBoard 1000000000 \\\"company:FB\\\"\")])]),_c('li',[_vm._v(\"Reducing market cap to companies: \"),_c('pre',[_vm._v(\"ZINCRBY companyLeaderBoard -1000000000 \\\"company:FB\\\"\")])]),_c('li',[_vm._v(\"Companies over a Trillion: \"),_c('pre',[_vm._v(\"ZCOUNT companyLeaderBoard 1000000000000 +inf\")])]),_c('li',[_vm._v(\"Companies between 500 billion and 1 trillion: \"),_c('pre',[_vm._v(\"ZCOUNT companyLeaderBoard 500000000000 1000000000000\")])])])])],1)],1)],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"4\"}},[_c('v-select',{staticStyle:{\"background\":\"#FFF\"},attrs:{\"items\":_vm.ACTION_LIST,\"dense\":\"\",\"outlined\":\"\",\"hide-details\":\"\"},model:{value:(_vm.method),callback:function ($$v) {_vm.method=$$v},expression:\"method\"}})],1),_c('v-col',{staticClass:\"text-right\",attrs:{\"cols\":\"8\"}},[_c('rank-selection-modal',{attrs:{\"companies\":_vm.companies},on:{\"onUpdateRank\":_vm.onUpdateRank},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"color\":\"grey\",\"outlined\":\"\"}},on),[_c('v-icon',{staticClass:\"mr-2\"},[_vm._v(\"mdi-cog-outline\")]),_c('span',{staticStyle:{\"color\":\"#111\",\"text-transform\":\"initial\"}},[_vm._v(\"Update Rank\")])],1)]}}]),model:{value:(_vm.rankForm),callback:function ($$v) {_vm.rankForm=$$v},expression:\"rankForm\"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('v-card',{staticClass:\"px-2\",staticStyle:{\"border-right\":\"10px\"}},[_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.companies,\"loading\":_vm.loading,\"disable-pagination\":true,\"hide-default-footer\":true},scopedSlots:_vm._u([{key:\"item.rank\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.rank)+\" \")]}},{key:\"item.company\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{staticClass:\"d-flex align-center py-2\"},[_c('div',[_c('img',{staticClass:\"mr-3 my-2\",attrs:{\"src\":(\"https://companiesmarketcap.com//img/company-logos/80/\" + (item.symbol.toUpperCase()) + \".png\"),\"width\":\"40\",\"height\":\"40\"}})]),_c('div',[_c('div',{staticStyle:{\"font-size\":\"1.1rem\"}},[_vm._v(_vm._s(item.company))]),_c('div',{staticClass:\"grey--text\",staticStyle:{\"font-size\":\"0.7rem\"}},[_vm._v(_vm._s(item.symbol.toUpperCase()))])])])]}},{key:\"item.marketCap\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{},[_vm._v(_vm._s(_vm.formatUSD(item.marketCap)))])]}},{key:\"item.country\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{staticClass:\"d-flex align-center\"},[_c('div',[_c('img',{staticClass:\"mr-1\",attrs:{\"src\":_vm.getCountryFlag(item.country),\"width\":\"20\"}})]),_c('div',{},[_vm._v(_vm._s(item.country))])])]}},{key:\"no-data\",fn:function(){return [_c('span',[_vm._v(\" No Results Found. \")])]},proxy:true}])}),(_vm.method === 'paginate')?_c('v-btn',{attrs:{\"color\":\"primary\",\"block\":\"\"},on:{\"click\":_vm.loadData}},[_vm._v(\" Load next 10 \")]):_vm._e()],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"transition\":\"dialog-bottom-transition\",\"max-width\":\"400px\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_vm._t(\"activator\",null,null,{ on: on, attrs: attrs })]}}],null,true),model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-card',[_c('v-card-title',[_c('v-spacer'),_c('v-icon',{attrs:{\"aria-label\":\"Close\"},on:{\"click\":_vm.close}},[_vm._v(\" mdi-close \")])],1),_c('v-card-text',[_c('div',{staticClass:\"headline text-center mb-4\"},[_vm._v(\" Select the menus below to update the rank of the companies \")]),_c('v-select',{attrs:{\"items\":_vm.companies,\"item-text\":\"company\",\"item-value\":\"symbol\",\"placeholder\":\"Select a company\",\"dense\":\"\",\"outlined\":\"\"},model:{value:(_vm.internalValue.symbol),callback:function ($$v) {_vm.$set(_vm.internalValue, \"symbol\", $$v)},expression:\"internalValue.symbol\"}}),_c('v-select',{attrs:{\"items\":_vm.RANK_OP,\"placeholder\":\"Add or Subtract\",\"dense\":\"\",\"outlined\":\"\"},model:{value:(_vm.internalValue.op),callback:function ($$v) {_vm.$set(_vm.internalValue, \"op\", $$v)},expression:\"internalValue.op\"}}),_c('v-select',{attrs:{\"items\":_vm.AMOUNT_LIST,\"placeholder\":\"Select Amount\",\"dense\":\"\",\"outlined\":\"\"},model:{value:(_vm.internalValue.amount),callback:function ($$v) {_vm.$set(_vm.internalValue, \"amount\", $$v)},expression:\"internalValue.amount\"}})],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"mb-4\",attrs:{\"color\":\"primary\",\"disabled\":!_vm.isValid},on:{\"click\":_vm.onUpdateRank}},[_vm._v(\" Update \")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RankSelectionModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RankSelectionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RankSelectionModal.vue?vue&type=template&id=67081f4c&\"\nimport script from \"./RankSelectionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RankSelectionModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCardTitle,VDialog,VIcon,VSelect,VSpacer})\n","\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Example.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Example.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Example.vue?vue&type=template&id=6d7466c0&scoped=true&\"\nimport script from \"./Example.vue?vue&type=script&lang=js&\"\nexport * from \"./Example.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Example.vue?vue&type=style&index=0&id=6d7466c0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d7466c0\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VExpansionPanel } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelContent } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanelHeader } from 'vuetify/lib/components/VExpansionPanel';\nimport { VExpansionPanels } from 'vuetify/lib/components/VExpansionPanel';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VBtn,VCard,VCol,VContainer,VDataTable,VExpansionPanel,VExpansionPanelContent,VExpansionPanelHeader,VExpansionPanels,VIcon,VRow,VSelect})\n","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=65c68803&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\ninstallComponents(component, {VApp})\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n});\n","import Vue from 'vue'\nimport App from './App.vue'\nimport vuetify from './plugins/vuetify';\n\nVue.config.productionTip = false\n\nnew Vue({\n vuetify,\n render: h => h(App)\n}).$mount('#app')\n"],"sourceRoot":""} -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@sindresorhus/is@^0.14.0": 6 | version "0.14.0" 7 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 8 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 9 | 10 | "@szmarczak/http-timer@^1.1.2": 11 | version "1.1.2" 12 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 13 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 14 | dependencies: 15 | defer-to-connect "^1.0.1" 16 | 17 | "@types/node@*": 18 | version "14.14.22" 19 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" 20 | integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== 21 | 22 | "@vercel/node@^1.9.0": 23 | version "1.9.0" 24 | resolved "https://registry.yarnpkg.com/@vercel/node/-/node-1.9.0.tgz#6b64f3b9a962ddb1089276fad00f441a1f4b9cf0" 25 | integrity sha512-Vk/ZpuY4Cdc8oUwBi/kf8qETRaJb/KYdFddVkLuS10QwA0yJx+RQ11trhZ1KFUdc27aBr5S2k8/dDxK8sLr+IA== 26 | dependencies: 27 | "@types/node" "*" 28 | ts-node "8.9.1" 29 | typescript "3.9.3" 30 | 31 | abbrev@1: 32 | version "1.1.1" 33 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 34 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 35 | 36 | accepts@~1.3.7: 37 | version "1.3.7" 38 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 39 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 40 | dependencies: 41 | mime-types "~2.1.24" 42 | negotiator "0.6.2" 43 | 44 | ansi-align@^3.0.0: 45 | version "3.0.0" 46 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 47 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 48 | dependencies: 49 | string-width "^3.0.0" 50 | 51 | ansi-regex@^4.1.0: 52 | version "4.1.0" 53 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 54 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 55 | 56 | ansi-regex@^5.0.0: 57 | version "5.0.0" 58 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 59 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 60 | 61 | ansi-styles@^4.1.0: 62 | version "4.3.0" 63 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 64 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 65 | dependencies: 66 | color-convert "^2.0.1" 67 | 68 | anymatch@~3.1.1: 69 | version "3.1.1" 70 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 71 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 72 | dependencies: 73 | normalize-path "^3.0.0" 74 | picomatch "^2.0.4" 75 | 76 | arg@^4.1.0: 77 | version "4.1.3" 78 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 79 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 80 | 81 | array-flatten@1.1.1: 82 | version "1.1.1" 83 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 84 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 85 | 86 | balanced-match@^1.0.0: 87 | version "1.0.0" 88 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 89 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 90 | 91 | binary-extensions@^2.0.0: 92 | version "2.2.0" 93 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 94 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 95 | 96 | body-parser@1.19.0: 97 | version "1.19.0" 98 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 99 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 100 | dependencies: 101 | bytes "3.1.0" 102 | content-type "~1.0.4" 103 | debug "2.6.9" 104 | depd "~1.1.2" 105 | http-errors "1.7.2" 106 | iconv-lite "0.4.24" 107 | on-finished "~2.3.0" 108 | qs "6.7.0" 109 | raw-body "2.4.0" 110 | type-is "~1.6.17" 111 | 112 | boxen@^4.2.0: 113 | version "4.2.0" 114 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" 115 | integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== 116 | dependencies: 117 | ansi-align "^3.0.0" 118 | camelcase "^5.3.1" 119 | chalk "^3.0.0" 120 | cli-boxes "^2.2.0" 121 | string-width "^4.1.0" 122 | term-size "^2.1.0" 123 | type-fest "^0.8.1" 124 | widest-line "^3.1.0" 125 | 126 | brace-expansion@^1.1.7: 127 | version "1.1.11" 128 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 129 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 130 | dependencies: 131 | balanced-match "^1.0.0" 132 | concat-map "0.0.1" 133 | 134 | braces@~3.0.2: 135 | version "3.0.2" 136 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 137 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 138 | dependencies: 139 | fill-range "^7.0.1" 140 | 141 | buffer-from@^1.0.0: 142 | version "1.1.1" 143 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 144 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 145 | 146 | bytes@3.1.0: 147 | version "3.1.0" 148 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 149 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 150 | 151 | cacheable-request@^6.0.0: 152 | version "6.1.0" 153 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 154 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 155 | dependencies: 156 | clone-response "^1.0.2" 157 | get-stream "^5.1.0" 158 | http-cache-semantics "^4.0.0" 159 | keyv "^3.0.0" 160 | lowercase-keys "^2.0.0" 161 | normalize-url "^4.1.0" 162 | responselike "^1.0.2" 163 | 164 | camelcase@^5.3.1: 165 | version "5.3.1" 166 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 167 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 168 | 169 | chalk@^3.0.0: 170 | version "3.0.0" 171 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 172 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 173 | dependencies: 174 | ansi-styles "^4.1.0" 175 | supports-color "^7.1.0" 176 | 177 | chokidar@^3.2.2: 178 | version "3.5.0" 179 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" 180 | integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== 181 | dependencies: 182 | anymatch "~3.1.1" 183 | braces "~3.0.2" 184 | glob-parent "~5.1.0" 185 | is-binary-path "~2.1.0" 186 | is-glob "~4.0.1" 187 | normalize-path "~3.0.0" 188 | readdirp "~3.5.0" 189 | optionalDependencies: 190 | fsevents "~2.3.1" 191 | 192 | ci-info@^2.0.0: 193 | version "2.0.0" 194 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 195 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 196 | 197 | cli-boxes@^2.2.0: 198 | version "2.2.1" 199 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 200 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 201 | 202 | clone-response@^1.0.2: 203 | version "1.0.2" 204 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 205 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 206 | dependencies: 207 | mimic-response "^1.0.0" 208 | 209 | color-convert@^2.0.1: 210 | version "2.0.1" 211 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 212 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 213 | dependencies: 214 | color-name "~1.1.4" 215 | 216 | color-name@~1.1.4: 217 | version "1.1.4" 218 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 219 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 220 | 221 | concat-map@0.0.1: 222 | version "0.0.1" 223 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 224 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 225 | 226 | configstore@^5.0.1: 227 | version "5.0.1" 228 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 229 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 230 | dependencies: 231 | dot-prop "^5.2.0" 232 | graceful-fs "^4.1.2" 233 | make-dir "^3.0.0" 234 | unique-string "^2.0.0" 235 | write-file-atomic "^3.0.0" 236 | xdg-basedir "^4.0.0" 237 | 238 | content-disposition@0.5.3: 239 | version "0.5.3" 240 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 241 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 242 | dependencies: 243 | safe-buffer "5.1.2" 244 | 245 | content-type@~1.0.4: 246 | version "1.0.4" 247 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 248 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 249 | 250 | cookie-signature@1.0.6: 251 | version "1.0.6" 252 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 253 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 254 | 255 | cookie@0.4.0: 256 | version "0.4.0" 257 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 258 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 259 | 260 | cors@^2.8.5: 261 | version "2.8.5" 262 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 263 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 264 | dependencies: 265 | object-assign "^4" 266 | vary "^1" 267 | 268 | crypto-random-string@^2.0.0: 269 | version "2.0.0" 270 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 271 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 272 | 273 | debug@2.6.9, debug@^2.2.0: 274 | version "2.6.9" 275 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 276 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 277 | dependencies: 278 | ms "2.0.0" 279 | 280 | debug@^3.2.6: 281 | version "3.2.7" 282 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 283 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 284 | dependencies: 285 | ms "^2.1.1" 286 | 287 | decompress-response@^3.3.0: 288 | version "3.3.0" 289 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 290 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 291 | dependencies: 292 | mimic-response "^1.0.0" 293 | 294 | deep-extend@^0.6.0: 295 | version "0.6.0" 296 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 297 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 298 | 299 | defer-to-connect@^1.0.1: 300 | version "1.1.3" 301 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 302 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 303 | 304 | denque@^1.4.1: 305 | version "1.5.0" 306 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de" 307 | integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== 308 | 309 | depd@~1.1.2: 310 | version "1.1.2" 311 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 312 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 313 | 314 | destroy@~1.0.4: 315 | version "1.0.4" 316 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 317 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 318 | 319 | diff@^4.0.1: 320 | version "4.0.2" 321 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 322 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 323 | 324 | dot-prop@^5.2.0: 325 | version "5.3.0" 326 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 327 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 328 | dependencies: 329 | is-obj "^2.0.0" 330 | 331 | dotenv@^8.2.0: 332 | version "8.2.0" 333 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 334 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== 335 | 336 | duplexer3@^0.1.4: 337 | version "0.1.4" 338 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 339 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 340 | 341 | ee-first@1.1.1: 342 | version "1.1.1" 343 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 344 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 345 | 346 | emoji-regex@^7.0.1: 347 | version "7.0.3" 348 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 349 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 350 | 351 | emoji-regex@^8.0.0: 352 | version "8.0.0" 353 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 354 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 355 | 356 | encodeurl@~1.0.2: 357 | version "1.0.2" 358 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 359 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 360 | 361 | end-of-stream@^1.1.0: 362 | version "1.4.4" 363 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 364 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 365 | dependencies: 366 | once "^1.4.0" 367 | 368 | escape-goat@^2.0.0: 369 | version "2.1.1" 370 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 371 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 372 | 373 | escape-html@~1.0.3: 374 | version "1.0.3" 375 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 376 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 377 | 378 | etag@~1.8.1: 379 | version "1.8.1" 380 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 381 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 382 | 383 | express@^4.17.1: 384 | version "4.17.1" 385 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 386 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 387 | dependencies: 388 | accepts "~1.3.7" 389 | array-flatten "1.1.1" 390 | body-parser "1.19.0" 391 | content-disposition "0.5.3" 392 | content-type "~1.0.4" 393 | cookie "0.4.0" 394 | cookie-signature "1.0.6" 395 | debug "2.6.9" 396 | depd "~1.1.2" 397 | encodeurl "~1.0.2" 398 | escape-html "~1.0.3" 399 | etag "~1.8.1" 400 | finalhandler "~1.1.2" 401 | fresh "0.5.2" 402 | merge-descriptors "1.0.1" 403 | methods "~1.1.2" 404 | on-finished "~2.3.0" 405 | parseurl "~1.3.3" 406 | path-to-regexp "0.1.7" 407 | proxy-addr "~2.0.5" 408 | qs "6.7.0" 409 | range-parser "~1.2.1" 410 | safe-buffer "5.1.2" 411 | send "0.17.1" 412 | serve-static "1.14.1" 413 | setprototypeof "1.1.1" 414 | statuses "~1.5.0" 415 | type-is "~1.6.18" 416 | utils-merge "1.0.1" 417 | vary "~1.1.2" 418 | 419 | fill-range@^7.0.1: 420 | version "7.0.1" 421 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 422 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 423 | dependencies: 424 | to-regex-range "^5.0.1" 425 | 426 | finalhandler@~1.1.2: 427 | version "1.1.2" 428 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 429 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 430 | dependencies: 431 | debug "2.6.9" 432 | encodeurl "~1.0.2" 433 | escape-html "~1.0.3" 434 | on-finished "~2.3.0" 435 | parseurl "~1.3.3" 436 | statuses "~1.5.0" 437 | unpipe "~1.0.0" 438 | 439 | forwarded@~0.1.2: 440 | version "0.1.2" 441 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 442 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 443 | 444 | fresh@0.5.2: 445 | version "0.5.2" 446 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 447 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 448 | 449 | fsevents@~2.3.1: 450 | version "2.3.1" 451 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" 452 | integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== 453 | 454 | get-stream@^4.1.0: 455 | version "4.1.0" 456 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 457 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 458 | dependencies: 459 | pump "^3.0.0" 460 | 461 | get-stream@^5.1.0: 462 | version "5.2.0" 463 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 464 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 465 | dependencies: 466 | pump "^3.0.0" 467 | 468 | glob-parent@~5.1.0: 469 | version "5.1.1" 470 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 471 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 472 | dependencies: 473 | is-glob "^4.0.1" 474 | 475 | global-dirs@^2.0.1: 476 | version "2.1.0" 477 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" 478 | integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== 479 | dependencies: 480 | ini "1.3.7" 481 | 482 | got@^9.6.0: 483 | version "9.6.0" 484 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 485 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 486 | dependencies: 487 | "@sindresorhus/is" "^0.14.0" 488 | "@szmarczak/http-timer" "^1.1.2" 489 | cacheable-request "^6.0.0" 490 | decompress-response "^3.3.0" 491 | duplexer3 "^0.1.4" 492 | get-stream "^4.1.0" 493 | lowercase-keys "^1.0.1" 494 | mimic-response "^1.0.1" 495 | p-cancelable "^1.0.0" 496 | to-readable-stream "^1.0.0" 497 | url-parse-lax "^3.0.0" 498 | 499 | graceful-fs@^4.1.2: 500 | version "4.2.4" 501 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 502 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 503 | 504 | has-flag@^3.0.0: 505 | version "3.0.0" 506 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 507 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 508 | 509 | has-flag@^4.0.0: 510 | version "4.0.0" 511 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 512 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 513 | 514 | has-yarn@^2.1.0: 515 | version "2.1.0" 516 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 517 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 518 | 519 | http-cache-semantics@^4.0.0: 520 | version "4.1.0" 521 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 522 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 523 | 524 | http-errors@1.7.2: 525 | version "1.7.2" 526 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 527 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 528 | dependencies: 529 | depd "~1.1.2" 530 | inherits "2.0.3" 531 | setprototypeof "1.1.1" 532 | statuses ">= 1.5.0 < 2" 533 | toidentifier "1.0.0" 534 | 535 | http-errors@~1.7.2: 536 | version "1.7.3" 537 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 538 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 539 | dependencies: 540 | depd "~1.1.2" 541 | inherits "2.0.4" 542 | setprototypeof "1.1.1" 543 | statuses ">= 1.5.0 < 2" 544 | toidentifier "1.0.0" 545 | 546 | iconv-lite@0.4.24: 547 | version "0.4.24" 548 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 549 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 550 | dependencies: 551 | safer-buffer ">= 2.1.2 < 3" 552 | 553 | ignore-by-default@^1.0.1: 554 | version "1.0.1" 555 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 556 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 557 | 558 | import-lazy@^2.1.0: 559 | version "2.1.0" 560 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 561 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 562 | 563 | imurmurhash@^0.1.4: 564 | version "0.1.4" 565 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 566 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 567 | 568 | inherits@2.0.3: 569 | version "2.0.3" 570 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 571 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 572 | 573 | inherits@2.0.4: 574 | version "2.0.4" 575 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 576 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 577 | 578 | ini@1.3.7: 579 | version "1.3.7" 580 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" 581 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== 582 | 583 | ini@~1.3.0: 584 | version "1.3.8" 585 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 586 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 587 | 588 | ipaddr.js@1.9.1: 589 | version "1.9.1" 590 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 591 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 592 | 593 | is-binary-path@~2.1.0: 594 | version "2.1.0" 595 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 596 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 597 | dependencies: 598 | binary-extensions "^2.0.0" 599 | 600 | is-ci@^2.0.0: 601 | version "2.0.0" 602 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 603 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 604 | dependencies: 605 | ci-info "^2.0.0" 606 | 607 | is-extglob@^2.1.1: 608 | version "2.1.1" 609 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 610 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 611 | 612 | is-fullwidth-code-point@^2.0.0: 613 | version "2.0.0" 614 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 615 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 616 | 617 | is-fullwidth-code-point@^3.0.0: 618 | version "3.0.0" 619 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 620 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 621 | 622 | is-glob@^4.0.1, is-glob@~4.0.1: 623 | version "4.0.1" 624 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 625 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 626 | dependencies: 627 | is-extglob "^2.1.1" 628 | 629 | is-installed-globally@^0.3.1: 630 | version "0.3.2" 631 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" 632 | integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== 633 | dependencies: 634 | global-dirs "^2.0.1" 635 | is-path-inside "^3.0.1" 636 | 637 | is-npm@^4.0.0: 638 | version "4.0.0" 639 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" 640 | integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== 641 | 642 | is-number@^7.0.0: 643 | version "7.0.0" 644 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 645 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 646 | 647 | is-obj@^2.0.0: 648 | version "2.0.0" 649 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 650 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 651 | 652 | is-path-inside@^3.0.1: 653 | version "3.0.2" 654 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" 655 | integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== 656 | 657 | is-typedarray@^1.0.0: 658 | version "1.0.0" 659 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 660 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 661 | 662 | is-yarn-global@^0.3.0: 663 | version "0.3.0" 664 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 665 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 666 | 667 | json-buffer@3.0.0: 668 | version "3.0.0" 669 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 670 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 671 | 672 | keyv@^3.0.0: 673 | version "3.1.0" 674 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 675 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 676 | dependencies: 677 | json-buffer "3.0.0" 678 | 679 | latest-version@^5.0.0: 680 | version "5.1.0" 681 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 682 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 683 | dependencies: 684 | package-json "^6.3.0" 685 | 686 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 687 | version "1.0.1" 688 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 689 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 690 | 691 | lowercase-keys@^2.0.0: 692 | version "2.0.0" 693 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 694 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 695 | 696 | make-dir@^3.0.0: 697 | version "3.1.0" 698 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 699 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 700 | dependencies: 701 | semver "^6.0.0" 702 | 703 | make-error@^1.1.1: 704 | version "1.3.6" 705 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 706 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 707 | 708 | media-typer@0.3.0: 709 | version "0.3.0" 710 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 711 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 712 | 713 | merge-descriptors@1.0.1: 714 | version "1.0.1" 715 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 716 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 717 | 718 | methods@~1.1.2: 719 | version "1.1.2" 720 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 721 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 722 | 723 | mime-db@1.45.0: 724 | version "1.45.0" 725 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" 726 | integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== 727 | 728 | mime-types@~2.1.24: 729 | version "2.1.28" 730 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" 731 | integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== 732 | dependencies: 733 | mime-db "1.45.0" 734 | 735 | mime@1.6.0: 736 | version "1.6.0" 737 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 738 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 739 | 740 | mimic-response@^1.0.0, mimic-response@^1.0.1: 741 | version "1.0.1" 742 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 743 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 744 | 745 | minimatch@^3.0.4: 746 | version "3.0.4" 747 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 748 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 749 | dependencies: 750 | brace-expansion "^1.1.7" 751 | 752 | minimist@^1.2.0: 753 | version "1.2.5" 754 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 755 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 756 | 757 | ms@2.0.0: 758 | version "2.0.0" 759 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 760 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 761 | 762 | ms@2.1.1: 763 | version "2.1.1" 764 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 765 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 766 | 767 | ms@^2.1.1: 768 | version "2.1.3" 769 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 770 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 771 | 772 | negotiator@0.6.2: 773 | version "0.6.2" 774 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 775 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 776 | 777 | nodemon@^2.0.7: 778 | version "2.0.7" 779 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" 780 | integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== 781 | dependencies: 782 | chokidar "^3.2.2" 783 | debug "^3.2.6" 784 | ignore-by-default "^1.0.1" 785 | minimatch "^3.0.4" 786 | pstree.remy "^1.1.7" 787 | semver "^5.7.1" 788 | supports-color "^5.5.0" 789 | touch "^3.1.0" 790 | undefsafe "^2.0.3" 791 | update-notifier "^4.1.0" 792 | 793 | nopt@~1.0.10: 794 | version "1.0.10" 795 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 796 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 797 | dependencies: 798 | abbrev "1" 799 | 800 | normalize-path@^3.0.0, normalize-path@~3.0.0: 801 | version "3.0.0" 802 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 803 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 804 | 805 | normalize-url@^4.1.0: 806 | version "4.5.0" 807 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" 808 | integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== 809 | 810 | object-assign@^4: 811 | version "4.1.1" 812 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 813 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 814 | 815 | on-finished@~2.3.0: 816 | version "2.3.0" 817 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 818 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 819 | dependencies: 820 | ee-first "1.1.1" 821 | 822 | once@^1.3.1, once@^1.4.0: 823 | version "1.4.0" 824 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 825 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 826 | dependencies: 827 | wrappy "1" 828 | 829 | p-cancelable@^1.0.0: 830 | version "1.1.0" 831 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 832 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 833 | 834 | package-json@^6.3.0: 835 | version "6.5.0" 836 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 837 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 838 | dependencies: 839 | got "^9.6.0" 840 | registry-auth-token "^4.0.0" 841 | registry-url "^5.0.0" 842 | semver "^6.2.0" 843 | 844 | parseurl@~1.3.3: 845 | version "1.3.3" 846 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 847 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 848 | 849 | path-to-regexp@0.1.7: 850 | version "0.1.7" 851 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 852 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 853 | 854 | picomatch@^2.0.4, picomatch@^2.2.1: 855 | version "2.2.2" 856 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 857 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 858 | 859 | prepend-http@^2.0.0: 860 | version "2.0.0" 861 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 862 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 863 | 864 | proxy-addr@~2.0.5: 865 | version "2.0.6" 866 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 867 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 868 | dependencies: 869 | forwarded "~0.1.2" 870 | ipaddr.js "1.9.1" 871 | 872 | pstree.remy@^1.1.7: 873 | version "1.1.8" 874 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 875 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 876 | 877 | pump@^3.0.0: 878 | version "3.0.0" 879 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 880 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 881 | dependencies: 882 | end-of-stream "^1.1.0" 883 | once "^1.3.1" 884 | 885 | pupa@^2.0.1: 886 | version "2.1.1" 887 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 888 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 889 | dependencies: 890 | escape-goat "^2.0.0" 891 | 892 | qs@6.7.0: 893 | version "6.7.0" 894 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 895 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 896 | 897 | range-parser@~1.2.1: 898 | version "1.2.1" 899 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 900 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 901 | 902 | raw-body@2.4.0: 903 | version "2.4.0" 904 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 905 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 906 | dependencies: 907 | bytes "3.1.0" 908 | http-errors "1.7.2" 909 | iconv-lite "0.4.24" 910 | unpipe "1.0.0" 911 | 912 | rc@^1.2.8: 913 | version "1.2.8" 914 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 915 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 916 | dependencies: 917 | deep-extend "^0.6.0" 918 | ini "~1.3.0" 919 | minimist "^1.2.0" 920 | strip-json-comments "~2.0.1" 921 | 922 | readdirp@~3.5.0: 923 | version "3.5.0" 924 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 925 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 926 | dependencies: 927 | picomatch "^2.2.1" 928 | 929 | redis-commands@^1.5.0: 930 | version "1.6.0" 931 | resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23" 932 | integrity sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ== 933 | 934 | redis-errors@^1.0.0, redis-errors@^1.2.0: 935 | version "1.2.0" 936 | resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" 937 | integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= 938 | 939 | redis-parser@^3.0.0: 940 | version "3.0.0" 941 | resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" 942 | integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= 943 | dependencies: 944 | redis-errors "^1.0.0" 945 | 946 | redis@^3.0.2: 947 | version "3.0.2" 948 | resolved "https://registry.yarnpkg.com/redis/-/redis-3.0.2.tgz#bd47067b8a4a3e6a2e556e57f71cc82c7360150a" 949 | integrity sha512-PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ== 950 | dependencies: 951 | denque "^1.4.1" 952 | redis-commands "^1.5.0" 953 | redis-errors "^1.2.0" 954 | redis-parser "^3.0.0" 955 | 956 | registry-auth-token@^4.0.0: 957 | version "4.2.1" 958 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 959 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 960 | dependencies: 961 | rc "^1.2.8" 962 | 963 | registry-url@^5.0.0: 964 | version "5.1.0" 965 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 966 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 967 | dependencies: 968 | rc "^1.2.8" 969 | 970 | responselike@^1.0.2: 971 | version "1.0.2" 972 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 973 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 974 | dependencies: 975 | lowercase-keys "^1.0.0" 976 | 977 | safe-buffer@5.1.2: 978 | version "5.1.2" 979 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 980 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 981 | 982 | "safer-buffer@>= 2.1.2 < 3": 983 | version "2.1.2" 984 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 985 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 986 | 987 | semver-diff@^3.1.1: 988 | version "3.1.1" 989 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 990 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 991 | dependencies: 992 | semver "^6.3.0" 993 | 994 | semver@^5.7.1: 995 | version "5.7.1" 996 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 997 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 998 | 999 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1000 | version "6.3.0" 1001 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1002 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1003 | 1004 | send@0.17.1: 1005 | version "0.17.1" 1006 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1007 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 1008 | dependencies: 1009 | debug "2.6.9" 1010 | depd "~1.1.2" 1011 | destroy "~1.0.4" 1012 | encodeurl "~1.0.2" 1013 | escape-html "~1.0.3" 1014 | etag "~1.8.1" 1015 | fresh "0.5.2" 1016 | http-errors "~1.7.2" 1017 | mime "1.6.0" 1018 | ms "2.1.1" 1019 | on-finished "~2.3.0" 1020 | range-parser "~1.2.1" 1021 | statuses "~1.5.0" 1022 | 1023 | serve-static@1.14.1: 1024 | version "1.14.1" 1025 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 1026 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 1027 | dependencies: 1028 | encodeurl "~1.0.2" 1029 | escape-html "~1.0.3" 1030 | parseurl "~1.3.3" 1031 | send "0.17.1" 1032 | 1033 | setprototypeof@1.1.1: 1034 | version "1.1.1" 1035 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 1036 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 1037 | 1038 | signal-exit@^3.0.2: 1039 | version "3.0.3" 1040 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1041 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1042 | 1043 | source-map-support@^0.5.17: 1044 | version "0.5.19" 1045 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1046 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1047 | dependencies: 1048 | buffer-from "^1.0.0" 1049 | source-map "^0.6.0" 1050 | 1051 | source-map@^0.6.0: 1052 | version "0.6.1" 1053 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1054 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1055 | 1056 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1057 | version "1.5.0" 1058 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1059 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1060 | 1061 | string-width@^3.0.0: 1062 | version "3.1.0" 1063 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1064 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1065 | dependencies: 1066 | emoji-regex "^7.0.1" 1067 | is-fullwidth-code-point "^2.0.0" 1068 | strip-ansi "^5.1.0" 1069 | 1070 | string-width@^4.0.0, string-width@^4.1.0: 1071 | version "4.2.0" 1072 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1073 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 1074 | dependencies: 1075 | emoji-regex "^8.0.0" 1076 | is-fullwidth-code-point "^3.0.0" 1077 | strip-ansi "^6.0.0" 1078 | 1079 | strip-ansi@^5.1.0: 1080 | version "5.2.0" 1081 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1082 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1083 | dependencies: 1084 | ansi-regex "^4.1.0" 1085 | 1086 | strip-ansi@^6.0.0: 1087 | version "6.0.0" 1088 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1089 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1090 | dependencies: 1091 | ansi-regex "^5.0.0" 1092 | 1093 | strip-json-comments@~2.0.1: 1094 | version "2.0.1" 1095 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1096 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1097 | 1098 | supports-color@^5.5.0: 1099 | version "5.5.0" 1100 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1101 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1102 | dependencies: 1103 | has-flag "^3.0.0" 1104 | 1105 | supports-color@^7.1.0: 1106 | version "7.2.0" 1107 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1108 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1109 | dependencies: 1110 | has-flag "^4.0.0" 1111 | 1112 | term-size@^2.1.0: 1113 | version "2.2.1" 1114 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 1115 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 1116 | 1117 | to-readable-stream@^1.0.0: 1118 | version "1.0.0" 1119 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 1120 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 1121 | 1122 | to-regex-range@^5.0.1: 1123 | version "5.0.1" 1124 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1125 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1126 | dependencies: 1127 | is-number "^7.0.0" 1128 | 1129 | toidentifier@1.0.0: 1130 | version "1.0.0" 1131 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1132 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1133 | 1134 | touch@^3.1.0: 1135 | version "3.1.0" 1136 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1137 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1138 | dependencies: 1139 | nopt "~1.0.10" 1140 | 1141 | ts-node@8.9.1: 1142 | version "8.9.1" 1143 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.1.tgz#2f857f46c47e91dcd28a14e052482eb14cfd65a5" 1144 | integrity sha512-yrq6ODsxEFTLz0R3BX2myf0WBCSQh9A+py8PBo1dCzWIOcvisbyH6akNKqDHMgXePF2kir5mm5JXJTH3OUJYOQ== 1145 | dependencies: 1146 | arg "^4.1.0" 1147 | diff "^4.0.1" 1148 | make-error "^1.1.1" 1149 | source-map-support "^0.5.17" 1150 | yn "3.1.1" 1151 | 1152 | type-fest@^0.8.1: 1153 | version "0.8.1" 1154 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1155 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1156 | 1157 | type-is@~1.6.17, type-is@~1.6.18: 1158 | version "1.6.18" 1159 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1160 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1161 | dependencies: 1162 | media-typer "0.3.0" 1163 | mime-types "~2.1.24" 1164 | 1165 | typedarray-to-buffer@^3.1.5: 1166 | version "3.1.5" 1167 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1168 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1169 | dependencies: 1170 | is-typedarray "^1.0.0" 1171 | 1172 | typescript@3.9.3: 1173 | version "3.9.3" 1174 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a" 1175 | integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ== 1176 | 1177 | undefsafe@^2.0.3: 1178 | version "2.0.3" 1179 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 1180 | integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 1181 | dependencies: 1182 | debug "^2.2.0" 1183 | 1184 | unique-string@^2.0.0: 1185 | version "2.0.0" 1186 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 1187 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 1188 | dependencies: 1189 | crypto-random-string "^2.0.0" 1190 | 1191 | unpipe@1.0.0, unpipe@~1.0.0: 1192 | version "1.0.0" 1193 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1194 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1195 | 1196 | update-notifier@^4.1.0: 1197 | version "4.1.3" 1198 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" 1199 | integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== 1200 | dependencies: 1201 | boxen "^4.2.0" 1202 | chalk "^3.0.0" 1203 | configstore "^5.0.1" 1204 | has-yarn "^2.1.0" 1205 | import-lazy "^2.1.0" 1206 | is-ci "^2.0.0" 1207 | is-installed-globally "^0.3.1" 1208 | is-npm "^4.0.0" 1209 | is-yarn-global "^0.3.0" 1210 | latest-version "^5.0.0" 1211 | pupa "^2.0.1" 1212 | semver-diff "^3.1.1" 1213 | xdg-basedir "^4.0.0" 1214 | 1215 | url-parse-lax@^3.0.0: 1216 | version "3.0.0" 1217 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 1218 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 1219 | dependencies: 1220 | prepend-http "^2.0.0" 1221 | 1222 | utils-merge@1.0.1: 1223 | version "1.0.1" 1224 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1225 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1226 | 1227 | vary@^1, vary@~1.1.2: 1228 | version "1.1.2" 1229 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1230 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1231 | 1232 | widest-line@^3.1.0: 1233 | version "3.1.0" 1234 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1235 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1236 | dependencies: 1237 | string-width "^4.0.0" 1238 | 1239 | wrappy@1: 1240 | version "1.0.2" 1241 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1242 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1243 | 1244 | write-file-atomic@^3.0.0: 1245 | version "3.0.3" 1246 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 1247 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 1248 | dependencies: 1249 | imurmurhash "^0.1.4" 1250 | is-typedarray "^1.0.0" 1251 | signal-exit "^3.0.2" 1252 | typedarray-to-buffer "^3.1.5" 1253 | 1254 | xdg-basedir@^4.0.0: 1255 | version "4.0.0" 1256 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 1257 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 1258 | 1259 | yn@3.1.1: 1260 | version "3.1.1" 1261 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1262 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1263 | --------------------------------------------------------------------------------