├── .prettierignore ├── .gitignore ├── assets ├── banner.png ├── form.png ├── diagram.png ├── visualization.png ├── write-permission.png └── invite-permission.png ├── src ├── database.ts ├── api.ts ├── types.ts ├── analytics.ts ├── chart.ts ├── user.ts ├── github.ts ├── slack-messages.ts ├── index.ts └── slack-home.ts ├── .prettierrc ├── .vscode └── settings.json ├── tsconfig.json ├── .github └── workflows │ └── main_octo-good-day-bot.yml ├── LICENSE ├── .eslintrc.js ├── package.json ├── README.md └── yarn.lock /.prettierignore: -------------------------------------------------------------------------------- 1 | .github/ 2 | *.md -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | .DS_Store 4 | dist/* 5 | .deployment 6 | yarn-error.log -------------------------------------------------------------------------------- /assets/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/banner.png -------------------------------------------------------------------------------- /assets/form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/form.png -------------------------------------------------------------------------------- /assets/diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/diagram.png -------------------------------------------------------------------------------- /assets/visualization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/visualization.png -------------------------------------------------------------------------------- /assets/write-permission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/write-permission.png -------------------------------------------------------------------------------- /assets/invite-permission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubocto/good-day-bot/HEAD/assets/invite-permission.png -------------------------------------------------------------------------------- /src/database.ts: -------------------------------------------------------------------------------- 1 | import { Pool } from 'pg'; 2 | 3 | export const pool = new Pool({ 4 | connectionString: process.env.PG_CONN_STRING, 5 | }); 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "printWidth": 120, 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "trailingComma": "all", 7 | "useTabs": false 8 | } -------------------------------------------------------------------------------- /src/api.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | const apiUrl = 'https://slack.com/api'; 4 | 5 | export const slaxios = axios.create({ 6 | baseURL: apiUrl, 7 | headers: { 8 | Authorization: `Bearer ${process.env.SLACK_BOT_TOKEN}`, 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "appService.zipIgnorePattern": [ 3 | "node_modules{,/**}", 4 | ".vscode{,/**}" 5 | ], 6 | "appService.defaultWebAppToDeploy": "/subscriptions/b394e68d-7472-42fd-bb1c-d73cb7f4fd3c/resourceGroups/appsvc_linux_centralus_premium/providers/Microsoft.Web/sites/octo-good-day-bot", 7 | "appService.deploySubpath": "." 8 | } -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { questions } from './slack-messages'; 2 | 3 | const fields = questions.map(({ title }) => title); 4 | 5 | export type FormResponseField = typeof fields[number]; 6 | 7 | export type FormResponse = Record; 8 | 9 | export type User = { 10 | ghrepo?: string; 11 | ghuser?: string; 12 | slackid: string; 13 | channelid?: string; 14 | timezone?: string; 15 | // eslint-disable-next-line camelcase 16 | prompt_time?: string; 17 | // eslint-disable-next-line camelcase 18 | is_unsubscribed?: boolean; 19 | }; 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "moduleResolution": "node", 6 | "outDir": "./dist", 7 | "esModuleInterop": true, 8 | "noImplicitAny": false, 9 | "noEmitOnError": true, 10 | "sourceMap": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "lib": ["esnext", "esnext.asynciterable"], 13 | "resolveJsonModule": true, 14 | "strict": false, 15 | "emitDecoratorMetadata": true, 16 | "experimentalDecorators": true 17 | }, 18 | "include": ["./**/*.ts"], 19 | "exclude": ["node_modules"] 20 | } -------------------------------------------------------------------------------- /src/analytics.ts: -------------------------------------------------------------------------------- 1 | /* Analytics */ 2 | import fetch, { Response as FetchResponse } from 'node-fetch'; 3 | 4 | interface TrackParams { 5 | event: string 6 | payload?: Record 7 | } 8 | 9 | export const track = async (params: TrackParams) => { 10 | const { event, payload } = params; 11 | if (process.env.NODE_ENV === 'development') { 12 | console.info('Analytics Disabled in development', params); 13 | return; 14 | } 15 | 16 | const endpoint = 'https://octo-metrics.azurewebsites.net/api/CaptureEvent'; 17 | const body = { 18 | container: 'good-day-bot', 19 | event, 20 | payload: { 21 | source: 'good-day-bot', 22 | ...payload, 23 | }, 24 | }; 25 | 26 | const res: FetchResponse = await fetch(endpoint, 27 | { 28 | method: 'POST', 29 | 'Content-Type': 'application/json', 30 | body: JSON.stringify(body), 31 | }); 32 | 33 | if (!res.ok) { 34 | console.info(res.status, res.statusText); 35 | } 36 | 37 | return res; 38 | }; 39 | -------------------------------------------------------------------------------- /.github/workflows/main_octo-good-day-bot.yml: -------------------------------------------------------------------------------- 1 | # Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy 2 | # More GitHub Actions for Azure: https://github.com/Azure/actions 3 | 4 | name: Build and deploy Azure app 5 | 6 | on: 7 | push: 8 | branches: 9 | - main 10 | workflow_dispatch: {} 11 | 12 | jobs: 13 | build-and-deploy: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: 'Checkout Github Action' 17 | uses: actions/checkout@v2 18 | 19 | - name: Setup Node 14.x 20 | uses: actions/setup-node@v1 21 | with: 22 | node-version: '14.x' 23 | - name: 'npm install, build, and test' 24 | run: | 25 | npm install 26 | npm run build --if-present 27 | npm run test --if-present 28 | 29 | - name: 'Deploy to Azure Web App' 30 | uses: azure/webapps-deploy@v2 31 | with: 32 | app-name: 'octo-good-day-bot' 33 | slot-name: 'production' 34 | publish-profile: ${{ secrets.AzureAppService_PublishProfile_a5f2ccf6d12c463a878da3d06eb19d06 }} 35 | package: . 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 GitHub OCTO 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. -------------------------------------------------------------------------------- /src/chart.ts: -------------------------------------------------------------------------------- 1 | import { getChannelId } from './slack-messages'; 2 | import { User } from './types'; 3 | import { slaxios } from './api'; 4 | 5 | export const notifyUserOfSummary = async (user: User) => { 6 | const link = `https://github.com/${user.ghuser}/${user.ghrepo}`; 7 | const blocks = [ 8 | { 9 | type: 'header', 10 | block_id: 'text', 11 | text: { 12 | type: 'plain_text', 13 | text: 'Your weekly summary is ready!', 14 | emoji: true, 15 | }, 16 | }, 17 | { 18 | type: 'section', 19 | text: { 20 | type: 'mrkdwn', 21 | text: 'Check it out on GitHub', 22 | }, 23 | accessory: { 24 | type: 'button', 25 | text: { 26 | type: 'plain_text', 27 | text: 'Check it out', 28 | emoji: true, 29 | }, 30 | value: 'click_me_123', 31 | url: link, 32 | action_id: 'check-report', 33 | }, 34 | }, 35 | ]; 36 | 37 | const channelId = await getChannelId(user.slackid); 38 | 39 | await slaxios.post('chat.postMessage', { 40 | channel: channelId, 41 | blocks, 42 | }); 43 | 44 | // await sendImageToSlack(`/tmp/${images[0].filename}`, images[0].filename, 'Summary for week', user); 45 | }; 46 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | plugins: ['@typescript-eslint'], 4 | env: { 5 | commonjs: true, 6 | es6: true, 7 | node: true, 8 | }, 9 | extends: ['airbnb-base', 'plugin:@typescript-eslint/recommended'], 10 | globals: { 11 | Atomics: 'readonly', 12 | SharedArrayBuffer: 'readonly', 13 | }, 14 | parserOptions: { 15 | ecmaVersion: 2018, 16 | }, 17 | ignorePatterns: ['node_modules'], 18 | rules: { 19 | 'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/*.test.ts'] }], 20 | 'max-len': ['error', 300], 21 | 'import/prefer-default-export': ['off'], 22 | '@typescript-eslint/explicit-module-boundary-types': 'off', // revisit 23 | '@typescript-eslint/no-explicit-any': 'off', // revisit 24 | 'no-restricted-syntax': 'off', // revisit 25 | eqeqeq: 'off', // revisit 26 | '@typescript-eslint/ban-ts-comment': 'off', 27 | 'no-console': 'off', 28 | 'implicit-arrow-linebreak': 'off', 29 | 'object-curly-newline': ['off'], 30 | '@typescript-eslint/no-use-before-define': ['off'], 31 | 'no-await-in-loop': ['off'], 32 | 'operator-linebreak': ['off'], 33 | indent: ['off'], 34 | 'import/extensions': [ 35 | 'error', 36 | 'ignorePackages', 37 | { 38 | js: 'never', 39 | ts: 'never', 40 | }, 41 | ], 42 | }, 43 | settings: { 44 | 'import/resolver': { 45 | node: { 46 | extensions: ['.js', '.ts'], 47 | }, 48 | }, 49 | }, 50 | }; 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "octo-goodday-server", 3 | "version": "0.0.1", 4 | "description": "A Good Day Slack bot", 5 | "main": "index.js", 6 | "author": "Github OCTO", 7 | "license": "MIT", 8 | "engines": { 9 | "node": ">=12.0.0" 10 | }, 11 | "husky": { 12 | "hooks": { 13 | "pre-commit": "run-s build lint:staged" 14 | } 15 | }, 16 | "lint-staged": { 17 | "src/**/*.{js,ts}": [ 18 | "npm run prettier:fix", 19 | "npm run lint:fix" 20 | ] 21 | }, 22 | "nodemonConfig": { 23 | "delay": "400" 24 | }, 25 | "scripts": { 26 | "dev": "npm-run-all -l build -p build:watch start:watch", 27 | "start": "node dist/index.js", 28 | "start:watch": "NODE_ENV=development nodemon -w dist -e js dist/index.js", 29 | "build": "tsc -p tsconfig.json --pretty", 30 | "build:watch": "npm run build -- -w", 31 | "lint": "eslint \"src/**/*.ts\" --max-warnings 0", 32 | "lint:fix": "npm run lint -- --fix", 33 | "lint:staged": "lint-staged", 34 | "prettier": "prettier -l \"src/**/*.ts\"", 35 | "prettier:fix": "npm run prettier -- --write" 36 | }, 37 | "dependencies": { 38 | "@octokit/rest": "^18.5.3", 39 | "@slack/events-api": "^3.0.0", 40 | "@slack/interactive-messages": "^2.0.1", 41 | "@slack/types": "^2.0.0", 42 | "axios": "^0.21.1", 43 | "canvas": "^2.7.0", 44 | "chart.js": "^3.2.1", 45 | "cors": "^2.8.5", 46 | "d3-dsv": "^2.0.0", 47 | "dotenv": "^8.2.0", 48 | "emoji-js": "^3.5.0", 49 | "express": "^4.17.1", 50 | "form-data": "^4.0.0", 51 | "node-fetch": "^2.6.1", 52 | "pg": "^8.6.0", 53 | "query-string": "^7.0.0" 54 | }, 55 | "devDependencies": { 56 | "@types/d3-dsv": "^2.0.1", 57 | "@types/dotenv": "^8.2.0", 58 | "@types/emoji-js": "^3.5.0", 59 | "@types/express": "^4.17.11", 60 | "@types/node": "^15.0.2", 61 | "@types/pg": "^7.14.11", 62 | "@typescript-eslint/eslint-plugin": "^4.22.1", 63 | "@typescript-eslint/parser": "^4.22.1", 64 | "eslint": "^7.25.0", 65 | "eslint-config-airbnb-base": "^14.2.1", 66 | "eslint-plugin-import": "^2.22.1", 67 | "husky": "^6.0.0", 68 | "nodemon": "^2.0.7", 69 | "npm-run-all": "^4.1.5", 70 | "prettier": "^2.2.1", 71 | "ts-node": "^9.1.1", 72 | "typescript": "^4.2.4" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/user.ts: -------------------------------------------------------------------------------- 1 | import { slaxios } from './api'; 2 | import { pool } from './database'; 3 | import { getChannelId } from './slack-messages'; 4 | import { User } from './types'; 5 | 6 | export const saveUser = async (config: User) => { 7 | // eslint-disable-next-line camelcase 8 | const { slackid, ghuser, ghrepo, prompt_time, is_unsubscribed } = config; 9 | 10 | if (!slackid) { 11 | return; 12 | } 13 | 14 | const findUserSql = `SELECT * FROM users where slackid='${slackid}' LIMIT 1`; 15 | 16 | const { rows: users } = await pool.query(findUserSql); 17 | const user = users[0]; 18 | 19 | if (!user) { 20 | const createUserSql = `INSERT INTO USERS (slackid) VALUES ('${slackid}')`; 21 | 22 | await pool.query(createUserSql); 23 | } 24 | 25 | const userDataRes = await slaxios.get('users.info', { 26 | params: { 27 | user: slackid, 28 | include_locale: true, 29 | }, 30 | }); 31 | 32 | const metrics = { 33 | ghrepo, 34 | ghuser, 35 | timezone: userDataRes.data.user.tz, 36 | prompt_time, 37 | is_unsubscribed, 38 | }; 39 | 40 | // only updates records that are not undefined 41 | const keys = Object.keys(metrics).filter((key) => (metrics as any)[key as string] !== undefined); 42 | const valuesString = keys.map((key) => `${key}='${(metrics as any)[key]}'`).join(', '); 43 | const updateUserSql = `UPDATE USERS SET ${valuesString} WHERE slackid='${slackid}'`; 44 | 45 | await pool.query(updateUserSql); 46 | }; 47 | 48 | export const getUser = async (slackUserId: string): Promise => { 49 | if (!slackUserId) { 50 | return null; 51 | } 52 | 53 | const findUserSql = `SELECT * FROM users where slackid='${slackUserId}' LIMIT 1`; 54 | 55 | const { rows: users } = await pool.query(findUserSql); 56 | 57 | // no user found we need to return 58 | if (users.length === 0) { 59 | return null; 60 | } 61 | 62 | const user: User = users[0]; 63 | 64 | const channelid = await getChannelId(user.slackid); 65 | user.channelid = channelid; 66 | 67 | return user; 68 | }; 69 | 70 | export const isRepoUnique = async (slackid: string, ghuser: string, ghrepo: string) => { 71 | const isUnique = `SELECT * FROM users where ghrepo='${ghrepo}' and ghuser='${ghuser}'`; 72 | 73 | const { rows: users } = await pool.query(isUnique); 74 | 75 | // if no other repo in the db, then unique repo 76 | if (users.length === 0) { 77 | return true; 78 | } 79 | 80 | // if user adds their own repo, then it's already theirs 81 | if (users[0].slackid === slackid) { 82 | return true; 83 | } 84 | return false; 85 | }; 86 | -------------------------------------------------------------------------------- /src/github.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from '@octokit/rest'; 2 | import { csvParse } from 'd3-dsv'; 3 | import { FormResponse, User } from './types'; 4 | 5 | const BOT_GH_ID = 'good-day-bot'; 6 | const FILE_PATH = 'good-day.csv'; 7 | 8 | const key = process.env.GH_API_KEY; 9 | if (typeof key === 'undefined') { 10 | throw new Error('need a valid github API key'); 11 | } 12 | const octokit = new Octokit({ 13 | auth: key, 14 | }); 15 | 16 | export const getContent = async (owner: string, repo: string, path: string) => { 17 | try { 18 | const response = await octokit.repos.getContent({ 19 | owner, 20 | repo, 21 | path, 22 | }); 23 | 24 | const { data } = response; 25 | 26 | if (Array.isArray(data)) { 27 | throw new Error(`path "${path}" returned an array, maybe it's a directory and not a CSV?`); 28 | } 29 | 30 | return data; 31 | } catch (error) { 32 | return null; 33 | } 34 | }; 35 | 36 | export const getDataFromDataFileContents = async (content: string) => { 37 | if (!content) return []; 38 | const contentBuffer = Buffer.from(content, 'base64').toString('utf8'); 39 | const data = csvParse(contentBuffer); 40 | return data; 41 | }; 42 | 43 | export const writeToFile = async (user: User, data: FormResponse) => { 44 | const owner = user.ghuser; 45 | const repo = user.ghrepo; 46 | 47 | // get content of good-day.csv 48 | let file; 49 | try { 50 | file = await getContent(owner, repo, FILE_PATH); 51 | } catch (err) { 52 | return { body: err.message, status: err.status }; 53 | } 54 | 55 | const existingData = await getDataFromDataFileContents(file?.content); 56 | const newData = [...existingData.filter((d: any) => d.date !== data.date), data].sort( 57 | // @ts-ignore 58 | (a, b) => new Date(a.date) - new Date(b.date), 59 | ); 60 | 61 | const header = Object.keys(newData[0]).join(','); 62 | const values = newData.map((o: any) => Object.values(o).join(',')).join('\n'); 63 | const csvString = `${header}\n${values}`; 64 | 65 | const fileProps = { content: Buffer.from(`${csvString}\n`).toString('base64'), sha: file?.sha }; 66 | try { 67 | await octokit.repos.createOrUpdateFileContents({ 68 | owner, 69 | repo, 70 | path: FILE_PATH, 71 | message: 'Good Day update', 72 | ...fileProps, 73 | // committer: { 74 | // name: `Good Day Bot`, 75 | // email: "your-email", 76 | // } 77 | // author: { 78 | // name: "Good Day Bot", 79 | // email: "your-email", 80 | // }, 81 | }); 82 | return { body: 'Wrote to file', status: 200 }; 83 | } catch (err) { 84 | console.log(err.message); 85 | return { body: err.message, status: err.status }; 86 | } 87 | }; 88 | 89 | export const acceptRepoInvitation = async (invitationId: number) => { 90 | const response = await octokit.rest.repos.acceptInvitation({ 91 | invitation_id: invitationId, 92 | }); 93 | 94 | if (!(response.status === 204)) { 95 | throw new Error(`problem accepting the repository invite, status code ${response.status}`); 96 | } 97 | }; 98 | 99 | export const getRepoInvitations = async (ghuser: string, ghrepo: string) => { 100 | const fullName = `${ghuser}/${ghrepo}`; 101 | 102 | const response = await octokit.rest.repos.listInvitationsForAuthenticatedUser(); 103 | 104 | const invite = response.data.find((inv) => inv.repository.full_name == fullName); 105 | 106 | if (invite) { 107 | await acceptRepoInvitation(invite.id); 108 | } 109 | }; 110 | 111 | export const isBotInRepo = async (owner: string, repo: string) => { 112 | try { 113 | const response = await octokit.rest.repos.listCollaborators({ 114 | owner, 115 | repo, 116 | }); 117 | 118 | const collab = response.data.find((entry) => entry.login == BOT_GH_ID); 119 | 120 | if (collab) { 121 | return true; 122 | } 123 | } catch (e) { 124 | return false; 125 | } 126 | 127 | return false; 128 | }; 129 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Good Day Slack Bot 2 | 3 | Good Day is a Slack bot that pings users every day and asks how their day was. It saves the results in a GitHub repository of the user's choice, within a `good-day.csv` file in the repo. Check out this [sample repo](https://github.com/githubocto/good-day-demo) for a preview of what yours could look like. 4 | 5 | drawing 6 | 7 | It also provides a series of visualizations to help users understand their data over time. 8 | 9 | drawing 10 | 11 | ## How it Works 12 | 13 | drawing 14 | 15 | ### Slack App Express server 16 | 17 | The repo contains the code for the core Good Day Slack bot, which is a Slack server that performs a few functions: 18 | 19 | 1. Stores a user's GitHub repo and time preference in a database by collecting info from the Slack app home panel. 20 | 2. Messages a user every day on the time they have specified with a new Good Day form. 21 | 3. Stores user's daily data into a `good-day.csv` file in the repo of their choice. 22 | 4. Messages a user every week when new visualization charts have been generated from their data. 23 | 24 | **⚠️ A note about privacy ⚠️** 25 | 26 | Once a user creates a GitHub repository they have to invite the `good-day-bot` [GitHub user](https://github.com/good-day-bot) as a collaborator to the repo. This GitHub account (and by extension this Slack app) has write access to ___only this one particular user repo___. This means we are NOT asking for or storing any GitHub user authentication data. 27 | 28 | 29 | ### Azure functions 30 | 31 | This Slack Bot depends on two Azure functions: [https://github.com/githubocto/good-day-azure](https://github.com/githubocto/good-day-azure) 32 | 33 | 1. **Timed Notify**: This function runs every hour, checks the database for users who need a new form, and hits an endpoint on the express server to trigger a new Good Day form for users daily. 34 | 2. **Generate Charts**: This function runs every week and generates visualization charts for users in their GitHub repos. It also hits an endpoint on the express server to notify users new charts are ready. 35 | 36 | ## Development 37 | 38 | ### Local setup 39 | 40 | 1. Install ngrok and authenticate 41 | 42 | 2. Create a `.env` file with: 43 | 44 | ``` 45 | GH_API_KEY= 46 | SLACK_SIGNING_SECRET= 47 | SLACK_BOT_TOKEN= 48 | PG_CONN_STRING= 49 | AZURE_FUNCTIONS_ID= # API Key ID for azure functions 50 | AZURE_FUNCTIONS_SECRET= # API Key secret for azure functions 51 | ``` 52 | 53 | 3. Start the server and ngrok 54 | 55 | `yarn install` 56 | 57 | `yarn dev` 58 | 59 | In a new tab: `ngrok http 3000 --hostname octo-devex.ngrok.io` 60 | 61 | ### Slack app configuration 62 | 63 | 1. Enable interactivity and change the endpoint for interactive messages at: [interactivity and shortcuts](https://api.slack.com/apps/A0212TEULJU/interactive-messages?) to `https://octo-devex.ngrok.io/interactive` 64 | 65 | 2. Enable events and change the endpoint for events at: [event subscriptions](https://api.slack.com/apps/A0212TEULJU/event-subscriptions?) to `https://octo-devex.ngrok.io/events` 66 | 67 | ## Building / Releasing 68 | 69 | ### Deployment 70 | 71 | Deployment to the production app happens automatically when pushing to main by using a GitHub Action specified in `.github/workflows/main_octo-good-day-bot.yaml`. 72 | 73 | Or use the [Azure App Service VS Code Extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azureappservice) for dev testing work. 74 | 75 | ### Slack app configuration 76 | 77 | 1. Enable interactivity and change the endpoint for interactive messages at: [interactivity and shortcuts](https://api.slack.com/apps/A0212TEULJU/interactive-messages?) to `PRODUCTION_URL/interactive` 78 | 79 | 2. Enable events and change the endpoint for events at: [event subscriptions](https://api.slack.com/apps/A0212TEULJU/event-subscriptions?) to `PRODUCTION_URL/events` 80 | 81 | 3. Add the following Bot Token Scopes at: [oauth and permissions](https://api.slack.com/apps/A0212TEULJU/oauth?) `chat:write`, `files:write`, `im:write`, `incoming-webhook`, `users:read` 82 | 83 | ## License 84 | 85 | [MIT](LICENSE) 86 | -------------------------------------------------------------------------------- /src/slack-messages.ts: -------------------------------------------------------------------------------- 1 | import { EmojiConvertor } from 'emoji-js'; 2 | import FormData from 'form-data'; 3 | import fs from 'fs'; 4 | import { Block, KnownBlock, SectionBlock } from '@slack/types'; 5 | import { slaxios } from './api'; 6 | import { User } from './types'; 7 | 8 | // Slack convertes emojis to shortcode. We need to convert back to unicode 9 | const emoji = new EmojiConvertor.EmojiConvertor(); 10 | emoji.replace_mode = 'unified'; 11 | 12 | /* General utils */ 13 | 14 | export const getChannelId = async (userId: string) => { 15 | const slackRes = await slaxios.post('/conversations.open', { 16 | users: userId, 17 | }); 18 | return slackRes.data.channel.id; 19 | }; 20 | 21 | export const messageUser = async (channel: string, blocks: (KnownBlock | Block)[]) => { 22 | const args = { 23 | channel, 24 | blocks, 25 | }; 26 | 27 | try { 28 | await slaxios.post('chat.postMessage', args); 29 | } catch (e) { 30 | console.error(e); 31 | } 32 | }; 33 | 34 | export const messageUserImage = async (imagePath: string, imageName: string, imageTitle: string, user: User) => { 35 | const channelId = await getChannelId(user.slackid); 36 | if (!channelId) { 37 | console.log('Channel not found for user ', user.slackid); 38 | return; 39 | } 40 | 41 | const form = new FormData(); 42 | form.append('title', imageTitle); 43 | form.append('filename', imageName); 44 | form.append('filetype', 'auto'); 45 | form.append('channels', channelId); 46 | form.append('file', fs.createReadStream(imagePath)); 47 | 48 | try { 49 | await slaxios.post('files.upload', form, { 50 | headers: form.getHeaders(), 51 | }); 52 | } catch (e) { 53 | console.log(e); 54 | } 55 | }; 56 | 57 | /* Time changes */ 58 | 59 | const getTimeChangeBlock = (time: string) => { 60 | const block: SectionBlock[] = [ 61 | { 62 | type: 'section', 63 | text: { 64 | type: 'mrkdwn', 65 | text: `You've changed your daily time to: ${time}.`, 66 | }, 67 | }, 68 | ]; 69 | 70 | return block; 71 | }; 72 | 73 | export const messageUserTimeChange = async (user: User, time: string) => { 74 | const channelId = await getChannelId(user.slackid); 75 | 76 | await messageUser(channelId, getTimeChangeBlock(time)); 77 | }; 78 | 79 | /* Good day form questions */ 80 | 81 | export const questions = [ 82 | { 83 | title: ':thinking_face: How was your workday?', 84 | id: 'workday_quality', 85 | placeholder: 'My workday was…', 86 | options: [ 87 | ':sob: Terrible', 88 | ':slightly_frowning_face: Bad', 89 | ':neutral_face: OK', 90 | ':slightly_smiling_face: Good', 91 | ':heart_eyes: Awesome!', 92 | ], 93 | }, 94 | { 95 | id: 'worked_with_other_people', 96 | title: ':busts_in_silhouette: I worked with other people…', 97 | placeholder: 'How much?', 98 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 99 | }, 100 | { 101 | id: 'helped_other_people', 102 | title: ':raised_hands: I helped other people…', 103 | placeholder: 'How much?', 104 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 105 | }, 106 | { 107 | id: 'interrupted', 108 | title: ':rotating_light: My work was interrupted…', 109 | placeholder: 'How much?', 110 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 111 | }, 112 | { 113 | id: 'goals', 114 | title: ':dart: I made progress towards my goals…', 115 | placeholder: 'How much?', 116 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 117 | }, 118 | { 119 | id: 'high_quality_work', 120 | title: ':sparkles: I did high-quality work…', 121 | placeholder: 'How much?', 122 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 123 | }, 124 | { 125 | id: 'lot_of_work', 126 | title: ':rocket: I did a lot of work…', 127 | placeholder: 'How much?', 128 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 129 | }, 130 | { 131 | id: 'breaks', 132 | title: ':coffee: I took breaks today…', 133 | placeholder: 'How often?', 134 | options: ['None of the day', 'A little of the day', 'Some of the day', 'Much of the day', 'Most or all of the day'], 135 | }, 136 | { 137 | id: 'meetings', 138 | title: ':speaking_head_in_silhouette: How many meetings did you have today?', 139 | placeholder: 'How many?', 140 | options: ['None', '1', '2', '3–4', '5 or more'], 141 | }, 142 | { 143 | id: 'emotions', 144 | title: ':thought_balloon: How do you feel about your workday?', 145 | placeholder: 'I feel…', 146 | options: [ 147 | ':grimacing: Tense or nervous', 148 | ':worried: Stressed or upset', 149 | ':cry: Sad or depressed', 150 | ':yawning_face: Bored', 151 | ':relaxed: Calm or relaxed', 152 | ':relieved: Serene or content', 153 | ':slightly_smiling_face: Happy or elated', 154 | ':grinning: Excited or alert', 155 | ], 156 | }, 157 | { 158 | id: 'most_productive', 159 | title: ':chart_with_upwards_trend: Today, I felt *most* productive:', 160 | placeholder: 'When?', 161 | options: [ 162 | ':sunrise: In the morning (9:00–11:00)', 163 | ':clock12: Mid-day (11:00-13:00)', 164 | ':clock2: Early afternoon (13:00-15:00)', 165 | ':clock5: Late afternoon (15:00-17:00)', 166 | ':night_with_stars: Outside of typical work hours', 167 | ':date: Equally throughout the day', 168 | ], 169 | }, 170 | { 171 | id: 'least_productive', 172 | title: ':chart_with_downwards_trend: Today, I felt *least* productive:', 173 | placeholder: 'When?', 174 | options: [ 175 | ':sunrise: In the morning (9:00–11:00)', 176 | ':clock12: Mid-day (11:00-13:00)', 177 | ':clock2: Early afternoon (13:00-15:00)', 178 | ':clock5: Late afternoon (15:00-17:00)', 179 | ':night_with_stars: Outside of typical work hours', 180 | ':date: Equally throughout the day', 181 | ], 182 | }, 183 | ].map((d) => ({ 184 | ...d, 185 | titleWithEmoji: emoji.replace_colons(d.title), 186 | optionsWithEmoji: d.options.map((option) => emoji.replace_colons(option)), 187 | })); 188 | 189 | const messageBlocks: (KnownBlock | Block)[] = [ 190 | { 191 | type: 'section', 192 | block_id: '/8H', 193 | text: { 194 | type: 'mrkdwn', 195 | text: 'Hope you had a good day today! Tell us about it:', 196 | verbatim: false, 197 | }, 198 | }, 199 | { 200 | type: 'divider', 201 | block_id: 'AWBp', 202 | }, 203 | ...questions.map(({ id, title, placeholder, options }) => ({ 204 | type: 'section', 205 | block_id: `${id}_block`, 206 | text: { 207 | type: 'mrkdwn', 208 | text: title, 209 | verbatim: false, 210 | }, 211 | accessory: { 212 | type: 'static_select', 213 | action_id: id, 214 | placeholder: { 215 | type: 'plain_text', 216 | text: placeholder, 217 | emoji: true, 218 | }, 219 | options: options.map((option, i) => ({ 220 | text: { 221 | type: 'plain_text', 222 | text: option, 223 | emoji: true, 224 | }, 225 | value: `${i}`, 226 | })), 227 | }, 228 | })), 229 | { 230 | type: 'divider', 231 | block_id: 'zTe', 232 | }, 233 | { 234 | type: 'actions', 235 | block_id: '5YgP', 236 | elements: [ 237 | { 238 | type: 'button', 239 | action_id: 'record-day', 240 | text: { 241 | type: 'plain_text', 242 | text: 'Save my response', 243 | emoji: true, 244 | }, 245 | value: '2021-04-21|idan|repo', 246 | }, 247 | ], 248 | }, 249 | ]; 250 | 251 | // TODO: Create a type for our payload once we decide on parameters 252 | export const parseSlackResponse = (date: string, state: any) => { 253 | const states = Object.values(state); 254 | const data = { date }; 255 | states.forEach((stateData: any) => { 256 | const fieldId = Object.keys(stateData)[0]; 257 | const question = questions.find((o) => o.id === fieldId); 258 | let questionText = question.title; 259 | questionText = emoji.replace_colons(questionText); 260 | questionText = questionText.replace(/,/g, ''); 261 | const value = stateData[fieldId].selected_option?.value; // selected option number 262 | let option = question.options[value] || 'N/A'; 263 | option = emoji.replace_colons(option); 264 | data[questionText] = option; 265 | }); 266 | 267 | return data; 268 | }; 269 | 270 | const formSuccessfulMessages = [ 271 | 'You\'re set for today!', 272 | 'Saved!', 273 | 'Thanks for doing that.', 274 | 'Your Good Day form has been saved.', 275 | 'Keep it up 🙌', 276 | 'Hope you have a great day tomorrow.', 277 | ]; 278 | 279 | const getFormSuccessfulBlock = () => { 280 | const message = formSuccessfulMessages[Math.floor(Math.random() * formSuccessfulMessages.length)]; 281 | console.log(message); 282 | const block: SectionBlock[] = [ 283 | { 284 | type: 'section', 285 | text: { 286 | type: 'mrkdwn', 287 | text: message, 288 | }, 289 | }, 290 | ]; 291 | 292 | return block; 293 | }; 294 | 295 | export const messageUserQuestionsForm = async (channelId: string) => { 296 | const date = new Date(); 297 | const dateString = date.toLocaleDateString(); 298 | const dateFormattedString = date.toDateString(); 299 | 300 | const blocks = [ 301 | { 302 | type: 'header', 303 | block_id: dateString, 304 | text: { 305 | type: 'plain_text', 306 | text: dateFormattedString, 307 | emoji: true, 308 | }, 309 | }, 310 | ...messageBlocks, 311 | ]; 312 | 313 | await messageUser(channelId, blocks); 314 | }; 315 | 316 | export const messageUserFormSuccessful = async (user: User) => { 317 | const channelId = await getChannelId(user.slackid); 318 | 319 | await messageUser(channelId, getFormSuccessfulBlock()); 320 | }; 321 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import express, { Request, Response } from 'express'; 3 | import cors from 'cors'; 4 | import { createEventAdapter } from '@slack/events-api'; 5 | import { createMessageAdapter } from '@slack/interactive-messages'; 6 | import { Block, HeaderBlock } from '@slack/types'; 7 | import { getRepoInvitations, isBotInRepo, writeToFile } from './github'; 8 | import { getHomeBlocks, updateHome, Debug } from './slack-home'; 9 | import { getUser, isRepoUnique, saveUser } from './user'; 10 | import { notifyUserOfSummary } from './chart'; 11 | import { track } from './analytics'; 12 | 13 | import { 14 | parseSlackResponse, 15 | getChannelId, 16 | messageUserQuestionsForm, 17 | messageUserFormSuccessful, 18 | } from './slack-messages'; 19 | import { User } from './types'; 20 | 21 | const slackSigningSecret = process.env.SLACK_SIGNING_SECRET || ''; 22 | 23 | const slackEvents = createEventAdapter(slackSigningSecret); 24 | const slackInteractions = createMessageAdapter(slackSigningSecret); 25 | 26 | const app = express(); 27 | 28 | app.use('/events', slackEvents.requestListener()); 29 | app.use('/interactive', slackInteractions.requestListener()); 30 | 31 | app.use(express.json()); 32 | 33 | const port = process.env.PORT || 3000; 34 | 35 | app.listen(port, () => { 36 | console.log(`Express running on port ${port} in ${app.settings.env} mode`); 37 | }); 38 | 39 | /* Slack events */ 40 | 41 | // Docs: https://api.slack.com/events/message.im 42 | 43 | slackEvents.on('app_home_opened', async (event) => { 44 | const slackUserId = event.user; 45 | const user: User = await getUser(slackUserId); 46 | 47 | // user exists 48 | if (user) { 49 | // there are two cases - if a user exists but hasn't saved a valid repo and if a user exists and has saved a valid repo 50 | const blocks = user.ghrepo ? await getHomeBlocks(user, Debug.setupComplete) : await getHomeBlocks(user, Debug.noDebug); 51 | await updateHome(slackUserId, blocks); 52 | 53 | track({ event: 'app_home_opened' }); 54 | } else { 55 | // first time user opening the app 56 | const defaultUser = { 57 | prompt_time: '17:00', 58 | slackid: slackUserId, 59 | is_unsubscribed: false, 60 | }; 61 | 62 | const blocks = await getHomeBlocks(defaultUser, Debug.noDebug); 63 | await updateHome(slackUserId, blocks); 64 | 65 | await saveUser({ 66 | ...defaultUser, 67 | }); 68 | 69 | track({ event: 'app_home_opened_first_time' }); 70 | } 71 | }); 72 | 73 | /* Slack interactive messages */ 74 | 75 | // Docs: https://slack.dev/node-slack-sdk/interactive-messages 76 | // Docs: https://www.npmjs.com/package/@slack/interactive-messages 77 | 78 | const getUserFromPayload = async (payload: any) => { 79 | const slackUserId = payload.user.id; 80 | const user: User = await getUser(slackUserId); 81 | return user; 82 | }; 83 | 84 | const showHomeBlock = async (isBotSetUp: boolean, slackUserId: string, owner: string, name: string) => { 85 | let newBlocks; 86 | // is bot setup? if yes, proceed to check if repo is unique 87 | if (isBotSetUp) { 88 | const isUnique = await isRepoUnique(slackUserId, owner, name); 89 | 90 | // if repo is unique then we can save the repo info in the DB 91 | if (isUnique) { 92 | await saveUser({ 93 | slackid: slackUserId, 94 | ghuser: owner, 95 | ghrepo: name, 96 | }); 97 | const user: User = await getUser(slackUserId); // fetch the newly saved user 98 | newBlocks = await getHomeBlocks(user, Debug.setupComplete); 99 | 100 | // check if repo successful 101 | if (isBotSetUp) { 102 | track({ event: 'onboarding-github-repo-success' }); 103 | } 104 | } else { // if repo is NOT unique, show debug message around claiming a unique repo 105 | const user: User = await getUser(slackUserId); 106 | user.ghuser = owner; 107 | user.ghrepo = name; 108 | newBlocks = await getHomeBlocks(user, Debug.repoClaimed); 109 | 110 | if (isBotSetUp) { 111 | track({ event: 'onboarding-github-repo-collision' }); 112 | } 113 | } 114 | } else { // if bot is not setup show debug info for inviting the bot 115 | const user: User = await getUser(slackUserId); 116 | user.ghuser = owner; 117 | user.ghrepo = name; 118 | newBlocks = await getHomeBlocks(user, Debug.inviteBot); 119 | 120 | if (isBotSetUp) { 121 | track({ event: 'onboarding-github-repo-no-bot-invite' }); 122 | } 123 | } 124 | 125 | await updateHome(slackUserId, newBlocks); 126 | }; 127 | 128 | slackInteractions.action({ actionId: 'onboarding-github-repo' }, async (payload) => { 129 | const repo = payload.actions[0].value; 130 | const wholeRepoString = repo.split('github.com/')[1] || ''; 131 | const [owner, name] = wholeRepoString.split('/'); 132 | if (!owner || !name) { 133 | const slackUserId = payload.user.id; 134 | const user: User = await getUser(slackUserId); 135 | const newBlocks = await getHomeBlocks(user, Debug.invalidRepo); 136 | await updateHome(slackUserId, newBlocks); 137 | return; 138 | } 139 | 140 | // try to accept the repo invitation 141 | await getRepoInvitations(owner, name); 142 | const isBotSetUp = await isBotInRepo(owner, name); 143 | 144 | // show home block given state of the repo and user 145 | const slackUserId = payload.user.id; 146 | await showHomeBlock(isBotSetUp, slackUserId, owner, name); 147 | }); 148 | 149 | // we might not have saved the repo yet in our database 150 | // haven't verified the bot is added and that it's a unique repo 151 | slackInteractions.action({ actionId: 'check-repo' }, async (payload) => { 152 | const [owner, name] = payload.actions[0].value.replace('https://github.com/', '').split('/'); 153 | 154 | // try to accept the repo invitation 155 | await getRepoInvitations(owner, name); 156 | const isBotSetUp = await isBotInRepo(owner, name); 157 | 158 | // show home block given state of the repo and user 159 | const slackUserId = payload.user.id; 160 | await showHomeBlock(isBotSetUp, slackUserId, owner, name); 161 | }); 162 | 163 | slackInteractions.action({ actionId: 'onboarding-timepicker-action' }, async (payload) => { 164 | const slackUserId = payload.user.id; 165 | let user = await getUser(slackUserId); 166 | 167 | const newPromptTime = payload.actions[0].selected_time; 168 | 169 | await saveUser({ 170 | slackid: slackUserId, 171 | prompt_time: newPromptTime, 172 | }); 173 | user = await getUser(slackUserId); 174 | 175 | const newBlocks = await getHomeBlocks(user); 176 | await updateHome(slackUserId, newBlocks); 177 | 178 | track({ event: 'onboarding-timepicker-action-success', payload: { time: newPromptTime } }); 179 | }); 180 | 181 | slackInteractions.action({ actionId: 'trigger-prompt' }, async (payload) => { 182 | const user = await getUserFromPayload(payload); 183 | await messageUserQuestionsForm(user.channelid); 184 | }); 185 | 186 | slackInteractions.action({ actionId: 'trigger-report' }, async (payload) => { 187 | const user = await getUserFromPayload(payload); 188 | await notifyUserOfSummary(user); 189 | 190 | // report sent to user 191 | track({ event: 'trigger-report' }); 192 | }); 193 | 194 | slackInteractions.action({ actionId: 'check-report' }, async () => { 195 | // user clicks 'check report' button 196 | track({ event: 'check-report' }); 197 | }); 198 | 199 | slackInteractions.action({ actionId: 'resubscribe' }, async (payload) => { 200 | let user = await getUserFromPayload(payload); 201 | await saveUser({ 202 | slackid: user.slackid, 203 | is_unsubscribed: false, 204 | }); 205 | user = await getUserFromPayload(payload); 206 | const newBlocks = await getHomeBlocks(user); 207 | await updateHome(user.slackid, newBlocks); 208 | 209 | track({ event: 'resubscribe' }); 210 | }); 211 | 212 | slackInteractions.action({ actionId: 'unsubscribe' }, async (payload) => { 213 | let user = await getUserFromPayload(payload); 214 | await saveUser({ 215 | slackid: user.slackid, 216 | is_unsubscribed: true, 217 | }); 218 | user = await getUserFromPayload(payload); 219 | const newBlocks = await getHomeBlocks(user); 220 | await updateHome(user.slackid, newBlocks); 221 | 222 | track({ event: 'unsubscribe' }); 223 | }); 224 | 225 | slackInteractions.action({ actionId: 'record-day' }, async (payload) => { 226 | const user = await getUserFromPayload(payload); 227 | 228 | const blocks = payload.message.blocks as Block[]; 229 | const headerBlock = blocks[0] as HeaderBlock; 230 | const date = headerBlock.block_id; 231 | 232 | const state = payload.state.values; 233 | 234 | const data = await parseSlackResponse(date, state); 235 | const error = await writeToFile(user, data); 236 | 237 | if (error.status !== 200) { 238 | return; 239 | } 240 | 241 | await messageUserFormSuccessful(user); 242 | 243 | track({ event: 'record-day-successful' }); 244 | }); 245 | 246 | // Everything else we don't catch above like a dropdown menu select on the user form 247 | // Important to have anyway so app registers a 200 status code when that happens 248 | // If not user sees a warning in Slack 249 | slackInteractions.action({}, (payload) => { 250 | // console.log(payload); 251 | // console.log('Form drowndown select'); 252 | }); 253 | 254 | // Express server endpoints 255 | 256 | const checkAuthenticationHeaders = (authorizationString: string) => { 257 | const encoded = authorizationString.split(' ')[1]; 258 | const decoded = Buffer.from(encoded, 'base64').toString('utf8'); 259 | const id = decoded.split(':')[0]; 260 | const secret = decoded.split(':')[1]; 261 | if (id !== process.env.AZURE_FUNCTIONS_ID || secret !== process.env.AZURE_FUNCTIONS_SECRET) { 262 | return false; 263 | } 264 | 265 | return true; 266 | }; 267 | 268 | app.get('/', async (req: Request, res: Response) => { 269 | res.send('beep boop beep boop'); 270 | }); 271 | 272 | app.post('/notify', async (req: Request, res: Response) => { 273 | // Authentication 274 | if (!req.headers.authorization) { 275 | return res.status(401).send('No credentials sent!'); 276 | } 277 | const authenticated = checkAuthenticationHeaders(req.headers.authorization); 278 | if (!authenticated) { 279 | return res.status(401).send('Invalid credentials'); 280 | } 281 | 282 | if (!req.body.user_id) { 283 | return res.status(400).send('You must provide a User ID'); 284 | } 285 | 286 | try { 287 | const channelId = await getChannelId(req.body.user_id); 288 | 289 | if (channelId) { 290 | await messageUserQuestionsForm(channelId); 291 | } 292 | 293 | return res.status(200).send(req.body.user_id); 294 | } catch (e) { 295 | console.error('Failed to open conversation for user', req.body.user_id); 296 | } 297 | 298 | return res.status(200); 299 | }); 300 | 301 | app.post('/notify-summary', async (req: Request, res: Response) => { 302 | // Authentication 303 | if (!req.headers.authorization) { 304 | return res.status(401).send('No credentials sent!'); 305 | } 306 | const authenticated = checkAuthenticationHeaders(req.headers.authorization); 307 | if (!authenticated) { 308 | return res.status(401).send('Invalid credentials'); 309 | } 310 | 311 | if (!req.body.user_id) { 312 | return res.status(400).send('You must provide a User ID'); 313 | } 314 | 315 | try { 316 | const user = await getUser(req.body.user_id); 317 | if (!user) throw new Error('User not found'); 318 | 319 | await notifyUserOfSummary(user); 320 | 321 | return res.status(200).send(req.body.user_id); 322 | } catch (e) { 323 | console.error('Failed to open conversation for user', req.body.user_id); 324 | } 325 | 326 | return res.status(200); 327 | }); 328 | -------------------------------------------------------------------------------- /src/slack-home.ts: -------------------------------------------------------------------------------- 1 | import { Block, KnownBlock } from '@slack/types'; 2 | import { slaxios } from './api'; 3 | import { User } from './types'; 4 | 5 | // eslint-disable-next-line no-shadow 6 | export enum Debug { 7 | noDebug = 'none', // first time user, do not show any debug info 8 | inviteBot = 'invite', // debug message to invite bot 9 | repoClaimed = 'claimed', // repo was already claimed by someone else 10 | setupComplete = 'complete', // repo setup successful 11 | invalidRepo = 'invalid' // repo is invalid 12 | } 13 | 14 | const padding = { 15 | // blank section for spacing 16 | type: 'section', 17 | text: { 18 | type: 'mrkdwn', 19 | text: ' ', 20 | }, 21 | }; 22 | 23 | export const getHomeBlocks = async (user: User, debug?: Debug) => { 24 | const repo = (user.ghuser && user.ghrepo) ? `${user.ghuser}/${user.ghrepo}` : ''; 25 | const repoUrl = (user.ghuser && user.ghrepo) ? `https://github.com/${user.ghuser}/${user.ghrepo}` : ''; 26 | 27 | const isUnsubscribed = user.is_unsubscribed; 28 | 29 | const promptTime = user.prompt_time; 30 | const [hour] = promptTime.split(':'); 31 | const friendlyPromptTime = +hour === 12 ? '12:00 PM' : `${+hour % 12}:00 ${+hour >= 12 ? 'PM' : 'AM'}`; 32 | 33 | // repo is only truly setup when Debug is setupComplete 34 | const isSetUp = !((debug === Debug.repoClaimed || debug === Debug.inviteBot || debug === Debug.noDebug || debug === Debug.invalidRepo)); 35 | 36 | const showDebug = (() => { 37 | switch (debug) { 38 | case Debug.inviteBot: 39 | return [ 40 | { 41 | type: 'header', 42 | text: { 43 | type: 'plain_text', 44 | text: '🤔 Hmm, something needs to be updated', 45 | emoji: true, 46 | }, 47 | }, 48 | { 49 | type: 'section', 50 | text: { 51 | type: 'mrkdwn', 52 | text: `Make sure to add the \`good-day-bot\` as a collaborator to your repo (and if given an option with *write* permissions). Go to <${repoUrl}/settings/access|${repoUrl}/settings/access> to do that.`, 53 | }, 54 | accessory: { 55 | type: 'button', 56 | text: { 57 | type: 'plain_text', 58 | text: 'Check my repo again', 59 | }, 60 | value: `${repoUrl}`, 61 | action_id: 'check-repo', 62 | }, 63 | }, 64 | { 65 | type: 'image', 66 | image_url: 'https://github.com/githubocto/good-day-bot/blob/main/assets/invite-permission.png?raw=true', 67 | alt_text: 'Add good-day-bot to your repo', 68 | }, 69 | 70 | { 71 | type: 'section', 72 | text: { 73 | type: 'mrkdwn', 74 | text: 'Once invited, you should see something like this:', 75 | }, 76 | }, 77 | { 78 | type: 'image', 79 | image_url: 'https://github.com/githubocto/good-day-bot/blob/main/assets/write-permission.png?raw=true', 80 | alt_text: 'Enable write premissions (if given the option)', 81 | }, 82 | ]; 83 | case Debug.repoClaimed: 84 | return [ 85 | { 86 | type: 'section', 87 | text: { 88 | type: 'mrkdwn', 89 | text: `Hmm it looks like someone that is not you has already registered that repo *<${repoUrl}|${repo}>*`, 90 | }, 91 | }, 92 | ]; 93 | case Debug.invalidRepo: 94 | return [ 95 | { 96 | type: 'section', 97 | text: { 98 | type: 'mrkdwn', 99 | text: 'There\'s something wrong with your repo URL. Try adding it in this format https://github.com/username/repo', 100 | }, 101 | }, 102 | ]; 103 | case Debug.setupComplete: 104 | return [ 105 | { 106 | type: 'section', 107 | text: { 108 | type: 'mrkdwn', 109 | text: `All set! We'll save your data in *<${repoUrl}|${repo}>*`, 110 | }, 111 | }, 112 | ]; 113 | case Debug.noDebug: 114 | return ''; 115 | default: 116 | return ''; 117 | } 118 | })(); 119 | 120 | // eslint-disable-next-line no-nested-ternary 121 | const header = isUnsubscribed 122 | ? [ 123 | { 124 | type: 'section', 125 | text: { 126 | type: 'mrkdwn', 127 | // eslint-disable-next-line quotes 128 | text: `Welcome to Good Day. *You have paused messages for now*.`, 129 | }, 130 | accessory: { 131 | type: 'button', 132 | text: { 133 | type: 'plain_text', 134 | text: 'Turn messages back on', 135 | }, 136 | value: 'GitHub', 137 | action_id: 'resubscribe', 138 | }, 139 | }, 140 | padding, 141 | padding, 142 | { type: 'divider' }, 143 | padding, 144 | padding, 145 | ] 146 | : isSetUp 147 | ? [ 148 | { 149 | type: 'section', 150 | text: { 151 | type: 'mrkdwn', 152 | text: `Welcome to Good Day. You're all set up! You'll get a message on *weekdays at ${friendlyPromptTime}* to fill in your Good Day form. 153 | We left the set-up instructions below, in case you want to change your GitHub repository or your prompt time.`, 154 | }, 155 | }, 156 | padding, 157 | { type: 'divider' }, 158 | padding, 159 | ] 160 | : [ 161 | { 162 | type: 'section', 163 | text: { 164 | type: 'mrkdwn', 165 | text: 'Welcome to Good Day! There are just a few steps to get set up.', 166 | }, 167 | }, 168 | ]; 169 | 170 | const unsubscribe = isSetUp 171 | ? [ 172 | padding, 173 | { type: 'divider' }, 174 | padding, 175 | { 176 | type: 'section', 177 | text: { 178 | type: 'plain_text', 179 | // eslint-disable-next-line quotes 180 | text: `🛑 Not interested in receiving messages from Good Day anymore?`, 181 | emoji: true, 182 | }, 183 | accessory: isUnsubscribed 184 | ? { 185 | type: 'button', 186 | text: { 187 | type: 'plain_text', 188 | text: 'Turn messages back on', 189 | }, 190 | value: 'GitHub', 191 | action_id: 'resubscribe', 192 | } 193 | : { 194 | type: 'button', 195 | text: { 196 | type: 'plain_text', 197 | text: 'Turn messages off', 198 | }, 199 | value: 'GitHub', 200 | action_id: 'unsubscribe', 201 | }, 202 | }, 203 | ] 204 | : []; 205 | 206 | // eslint-disable-next-line no-nested-ternary 207 | const footer = isUnsubscribed 208 | ? [ 209 | { 210 | type: 'header', 211 | text: { 212 | type: 'plain_text', 213 | // eslint-disable-next-line quotes 214 | text: `You're all set, but you have paused messages for now.`, 215 | emoji: true, 216 | }, 217 | }, 218 | ] 219 | : isSetUp 220 | ? [ 221 | { 222 | type: 'header', 223 | text: { 224 | type: 'plain_text', 225 | text: `You're all set 🙌! You'll get a message on weekdays at ${friendlyPromptTime} to fill in your Good Day form.`, 226 | emoji: true, 227 | }, 228 | }, 229 | ] 230 | : []; 231 | return ([ 232 | { 233 | type: 'image', 234 | image_url: 'https://github.com/githubocto/good-day-bot/blob/main/assets/banner.png?raw=true', 235 | alt_text: 'The Good Day Project', 236 | }, 237 | padding, 238 | ...header, 239 | padding, 240 | { 241 | type: 'section', 242 | text: { 243 | type: 'mrkdwn', 244 | text: 245 | '1️⃣\n*Create a GitHub repo*\nClick the link on the right and create a new empty GitHub repository. It can be named anything you like, such as *good-day*.', 246 | }, 247 | accessory: { 248 | type: 'button', 249 | text: { 250 | type: 'plain_text', 251 | text: '+ GitHub repo', 252 | }, 253 | value: 'GitHub', 254 | url: 'https://github.com/new', 255 | action_id: 'button-action', 256 | }, 257 | }, 258 | padding, 259 | padding, 260 | { 261 | type: 'section', 262 | text: { 263 | type: 'mrkdwn', 264 | text: 265 | '2️⃣\n*Invite the good-day bot*\nIn your new GitHub repo, click over to *Settings* and into *Manage access* (in the sidebar).\nClick the *Invite a collaborator* button and add the `good-day-bot` user.\nIf you get the option, give the bot `write` access.', 266 | }, 267 | }, 268 | padding, 269 | padding, 270 | { 271 | type: 'section', 272 | text: { 273 | type: 'mrkdwn', 274 | text: '3️⃣\n*Check your setup*\nAll set? Go to the home page of your repository and copy + paste the url here:', 275 | }, 276 | }, 277 | { 278 | dispatch_action: true, 279 | type: 'input', 280 | element: { 281 | type: 'plain_text_input', 282 | action_id: 'onboarding-github-repo', 283 | initial_value: repoUrl, 284 | }, 285 | label: { 286 | type: 'plain_text', 287 | text: 'Paste the URL of your GitHub repo, then hit enter:', 288 | emoji: true, 289 | }, 290 | }, 291 | ...showDebug, 292 | { 293 | type: 'section', 294 | text: { 295 | type: 'mrkdwn', 296 | text: `*What time you would like me to ask how your day went?* 297 | _This is in your timezone${user.timezone ? ` (${user.timezone})` : ''}_`, 298 | }, 299 | accessory: { 300 | type: 'timepicker', 301 | initial_time: user.prompt_time, 302 | placeholder: { 303 | type: 'plain_text', 304 | text: 'Select time', 305 | emoji: true, 306 | }, 307 | action_id: 'onboarding-timepicker-action', 308 | }, 309 | }, 310 | ...unsubscribe, 311 | ...footer, 312 | // These blocks are useful for debugging 313 | /* 314 | { type: 'divider' }, 315 | { type: 'divider' }, 316 | { 317 | type: 'actions', 318 | elements: [ 319 | { 320 | type: 'button', 321 | text: { 322 | type: 'plain_text', 323 | text: 'Trigger prompt', 324 | emoji: true, 325 | }, 326 | value: 'trigger-prompt', 327 | action_id: 'trigger-prompt', 328 | }, 329 | ], 330 | }, 331 | { 332 | type: 'actions', 333 | elements: [ 334 | { 335 | type: 'button', 336 | text: { 337 | type: 'plain_text', 338 | text: 'Trigger report', 339 | emoji: true, 340 | }, 341 | value: 'trigger-report', 342 | action_id: 'trigger-report', 343 | }, 344 | ], 345 | }, 346 | */ 347 | ] as (KnownBlock | Block)[]).filter(Boolean); 348 | }; 349 | 350 | export const updateHome = async (slackUserId: string, blocks: (Block | KnownBlock)[]) => { 351 | const args = { 352 | user_id: slackUserId, 353 | view: { 354 | type: 'home', 355 | title: { 356 | type: 'plain_text', 357 | text: 'The Good Day Project', 358 | }, 359 | blocks, 360 | }, 361 | }; 362 | try { 363 | await slaxios.post('views.publish', args); 364 | } catch (e) { 365 | console.error(e); 366 | } 367 | }; 368 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.14.0": 13 | version "7.14.0" 14 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz" 15 | integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.14.0" 19 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz" 20 | integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.0" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.0": 27 | version "0.4.0" 28 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz" 29 | integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^12.1.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | minimatch "^3.0.4" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@nodelib/fs.scandir@2.1.4": 42 | version "2.1.4" 43 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz" 44 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== 45 | dependencies: 46 | "@nodelib/fs.stat" "2.0.4" 47 | run-parallel "^1.1.9" 48 | 49 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 50 | version "2.0.4" 51 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz" 52 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== 53 | 54 | "@nodelib/fs.walk@^1.2.3": 55 | version "1.2.6" 56 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz" 57 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== 58 | dependencies: 59 | "@nodelib/fs.scandir" "2.1.4" 60 | fastq "^1.6.0" 61 | 62 | "@octokit/auth-token@^2.4.4": 63 | version "2.4.5" 64 | resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz" 65 | integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== 66 | dependencies: 67 | "@octokit/types" "^6.0.3" 68 | 69 | "@octokit/core@^3.2.3": 70 | version "3.4.0" 71 | resolved "https://registry.npmjs.org/@octokit/core/-/core-3.4.0.tgz" 72 | integrity sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg== 73 | dependencies: 74 | "@octokit/auth-token" "^2.4.4" 75 | "@octokit/graphql" "^4.5.8" 76 | "@octokit/request" "^5.4.12" 77 | "@octokit/request-error" "^2.0.5" 78 | "@octokit/types" "^6.0.3" 79 | before-after-hook "^2.2.0" 80 | universal-user-agent "^6.0.0" 81 | 82 | "@octokit/endpoint@^6.0.1": 83 | version "6.0.11" 84 | resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz" 85 | integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ== 86 | dependencies: 87 | "@octokit/types" "^6.0.3" 88 | is-plain-object "^5.0.0" 89 | universal-user-agent "^6.0.0" 90 | 91 | "@octokit/graphql@^4.5.8": 92 | version "4.6.1" 93 | resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz" 94 | integrity sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA== 95 | dependencies: 96 | "@octokit/request" "^5.3.0" 97 | "@octokit/types" "^6.0.3" 98 | universal-user-agent "^6.0.0" 99 | 100 | "@octokit/openapi-types@^7.0.0": 101 | version "7.0.0" 102 | resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.0.0.tgz" 103 | integrity sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw== 104 | 105 | "@octokit/plugin-paginate-rest@^2.6.2": 106 | version "2.13.3" 107 | resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz" 108 | integrity sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg== 109 | dependencies: 110 | "@octokit/types" "^6.11.0" 111 | 112 | "@octokit/plugin-request-log@^1.0.2": 113 | version "1.0.3" 114 | resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz" 115 | integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== 116 | 117 | "@octokit/plugin-rest-endpoint-methods@5.0.1": 118 | version "5.0.1" 119 | resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz" 120 | integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg== 121 | dependencies: 122 | "@octokit/types" "^6.13.1" 123 | deprecation "^2.3.1" 124 | 125 | "@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5": 126 | version "2.0.5" 127 | resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz" 128 | integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== 129 | dependencies: 130 | "@octokit/types" "^6.0.3" 131 | deprecation "^2.0.0" 132 | once "^1.4.0" 133 | 134 | "@octokit/request@^5.3.0", "@octokit/request@^5.4.12": 135 | version "5.4.15" 136 | resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz" 137 | integrity sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag== 138 | dependencies: 139 | "@octokit/endpoint" "^6.0.1" 140 | "@octokit/request-error" "^2.0.0" 141 | "@octokit/types" "^6.7.1" 142 | is-plain-object "^5.0.0" 143 | node-fetch "^2.6.1" 144 | universal-user-agent "^6.0.0" 145 | 146 | "@octokit/rest@^18.5.3": 147 | version "18.5.3" 148 | resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.5.3.tgz" 149 | integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA== 150 | dependencies: 151 | "@octokit/core" "^3.2.3" 152 | "@octokit/plugin-paginate-rest" "^2.6.2" 153 | "@octokit/plugin-request-log" "^1.0.2" 154 | "@octokit/plugin-rest-endpoint-methods" "5.0.1" 155 | 156 | "@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1": 157 | version "6.14.2" 158 | resolved "https://registry.npmjs.org/@octokit/types/-/types-6.14.2.tgz" 159 | integrity sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA== 160 | dependencies: 161 | "@octokit/openapi-types" "^7.0.0" 162 | 163 | "@sindresorhus/is@^0.14.0": 164 | version "0.14.0" 165 | resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" 166 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 167 | 168 | "@slack/events-api@^3.0.0": 169 | version "3.0.0" 170 | resolved "https://registry.npmjs.org/@slack/events-api/-/events-api-3.0.0.tgz" 171 | integrity sha512-4LdeVuyBCoESSMryACZNafSM4GlX9o881WShABcW+nonh97PnxUKI+hZwuYdTLQpyKu2HSp1zcWsi8QLaiXkrw== 172 | dependencies: 173 | "@types/debug" "^4.1.4" 174 | "@types/express" "^4.17.0" 175 | "@types/lodash.isstring" "^4.0.6" 176 | "@types/node" ">=12.13.0 < 13" 177 | "@types/yargs" "^15.0.4" 178 | debug "^2.6.1" 179 | lodash.isstring "^4.0.1" 180 | raw-body "^2.3.3" 181 | tsscmp "^1.0.6" 182 | yargs "^15.3.1" 183 | optionalDependencies: 184 | express "^4.0.0" 185 | 186 | "@slack/interactive-messages@^2.0.1": 187 | version "2.0.1" 188 | resolved "https://registry.yarnpkg.com/@slack/interactive-messages/-/interactive-messages-2.0.1.tgz#7847aa17f7303cd28ccb7df130632f193b07ff91" 189 | integrity sha512-d213Lx+COphczYqJM+TO5O/Faq4Z5LDHC2j++BqMHZkYRIEplXLaTEM8wmU+DPW0CFgxPwGhiq+bQCylQC+Wiw== 190 | dependencies: 191 | "@types/debug" "^4.1.4" 192 | "@types/express" "^4.17.0" 193 | "@types/lodash.isfunction" "^3.0.6" 194 | "@types/lodash.isplainobject" "^4.0.6" 195 | "@types/lodash.isregexp" "^4.0.6" 196 | "@types/lodash.isstring" "^4.0.6" 197 | "@types/node" ">=12.0.0" 198 | axios "^0.21.1" 199 | debug "^3.1.0" 200 | lodash.isfunction "^3.0.9" 201 | lodash.isplainobject "^4.0.6" 202 | lodash.isregexp "^4.0.1" 203 | lodash.isstring "^4.0.1" 204 | raw-body "^2.3.3" 205 | tsscmp "^1.0.6" 206 | 207 | "@slack/types@^2.0.0": 208 | version "2.0.0" 209 | resolved "https://registry.yarnpkg.com/@slack/types/-/types-2.0.0.tgz#7b938ab576cd1d6c9ff9ad67a96f8058d101af10" 210 | integrity sha512-Nu4jWC39mDY5egAX4oElwOypdu8Cx9tmR7bo3ghaHYaC7mkKM1+b+soanW5s2ssu4yOLxMdFExMh6wlR34B6CA== 211 | 212 | "@szmarczak/http-timer@^1.1.2": 213 | version "1.1.2" 214 | resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" 215 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 216 | dependencies: 217 | defer-to-connect "^1.0.1" 218 | 219 | "@types/body-parser@*": 220 | version "1.19.0" 221 | resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz" 222 | integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== 223 | dependencies: 224 | "@types/connect" "*" 225 | "@types/node" "*" 226 | 227 | "@types/connect@*": 228 | version "3.4.34" 229 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz" 230 | integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== 231 | dependencies: 232 | "@types/node" "*" 233 | 234 | "@types/d3-dsv@^2.0.1": 235 | version "2.0.1" 236 | resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-2.0.1.tgz#44ce09b025cf365d27cbe11fc13cd10954369627" 237 | integrity sha512-wovgiG9Mgkr/SZ/m/c0m+RwrIT4ozsuCWeLxJyoObDWsie2DeQT4wzMdHZPR9Ya5oZLQT3w3uSl0NehG0+0dCA== 238 | 239 | "@types/debug@^4.1.4": 240 | version "4.1.5" 241 | resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz" 242 | integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== 243 | 244 | "@types/dotenv@^8.2.0": 245 | version "8.2.0" 246 | resolved "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.0.tgz" 247 | integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== 248 | dependencies: 249 | dotenv "*" 250 | 251 | "@types/emoji-js@^3.5.0": 252 | version "3.5.0" 253 | resolved "https://registry.npmjs.org/@types/emoji-js/-/emoji-js-3.5.0.tgz" 254 | integrity sha512-6dWe6Hyo7PR5tNEvWNAtnOeiQTLFoyPEofUc/waVJC1fkQqvJPw1j30szbzfJRehyg1/Mw82p4w714x0ImF9ZA== 255 | 256 | "@types/express-serve-static-core@^4.17.18": 257 | version "4.17.19" 258 | resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz" 259 | integrity sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA== 260 | dependencies: 261 | "@types/node" "*" 262 | "@types/qs" "*" 263 | "@types/range-parser" "*" 264 | 265 | "@types/express@^4.17.0", "@types/express@^4.17.11": 266 | version "4.17.11" 267 | resolved "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz" 268 | integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== 269 | dependencies: 270 | "@types/body-parser" "*" 271 | "@types/express-serve-static-core" "^4.17.18" 272 | "@types/qs" "*" 273 | "@types/serve-static" "*" 274 | 275 | "@types/json-schema@^7.0.3": 276 | version "7.0.7" 277 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" 278 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== 279 | 280 | "@types/json5@^0.0.29": 281 | version "0.0.29" 282 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 283 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 284 | 285 | "@types/lodash.isfunction@^3.0.6": 286 | version "3.0.6" 287 | resolved "https://registry.yarnpkg.com/@types/lodash.isfunction/-/lodash.isfunction-3.0.6.tgz#4b040bf914089ec34f0aacfef81a37237a0a8b8f" 288 | integrity sha512-olhgKmBgzHnA5pxsOI6YHunzTBMSyBw1XjxIKFio8W+XhYiELGTt05FStE0suV0GWtlIMdn7V8M/UbYbSVdGYw== 289 | dependencies: 290 | "@types/lodash" "*" 291 | 292 | "@types/lodash.isplainobject@^4.0.6": 293 | version "4.0.6" 294 | resolved "https://registry.yarnpkg.com/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#757d2dcdecbb32f4452018b285a586776092efd1" 295 | integrity sha512-8G41YFhmOl8Ck6NrwLK5hhnbz6ADfuDJP+zusDnX3PoYhfC60+H/rQE6zmdO4yFzPCPJPY4oGZK2spbXm6gYEA== 296 | dependencies: 297 | "@types/lodash" "*" 298 | 299 | "@types/lodash.isregexp@^4.0.6": 300 | version "4.0.6" 301 | resolved "https://registry.yarnpkg.com/@types/lodash.isregexp/-/lodash.isregexp-4.0.6.tgz#873f0505d565f8257204076e7d77e9c00b129f15" 302 | integrity sha512-+MxWeayd6d0xdLuLA6T3kY7uNdfHH82m4gsxgpcQkpHcqEmXJiTWDrfUhDdlmErAn6tlj5zhjKsV0mQEkfJcfA== 303 | dependencies: 304 | "@types/lodash" "*" 305 | 306 | "@types/lodash.isstring@^4.0.6": 307 | version "4.0.6" 308 | resolved "https://registry.npmjs.org/@types/lodash.isstring/-/lodash.isstring-4.0.6.tgz" 309 | integrity sha512-uUGvF9G1G7jQ5H42Y38GA9rZmUoY8wI/OMSwnW0BZA+Ra0uxzpuQf4CixXl3yG3TvF6LjuduMyt1WvKl+je8QA== 310 | dependencies: 311 | "@types/lodash" "*" 312 | 313 | "@types/lodash@*": 314 | version "4.14.168" 315 | resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz" 316 | integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== 317 | 318 | "@types/mime@^1": 319 | version "1.3.2" 320 | resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" 321 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 322 | 323 | "@types/node@*": 324 | version "15.0.1" 325 | resolved "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz" 326 | integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== 327 | 328 | "@types/node@>=12.0.0", "@types/node@^15.0.2": 329 | version "15.0.2" 330 | resolved "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz" 331 | integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== 332 | 333 | "@types/node@>=12.13.0 < 13": 334 | version "12.20.11" 335 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.11.tgz" 336 | integrity sha512-gema+apZ6qLQK7k7F0dGkGCWQYsL0qqKORWOQO6tq46q+x+1C0vbOiOqOwRVlh4RAdbQwV/j/ryr3u5NOG1fPQ== 337 | 338 | "@types/pg@^7.14.11": 339 | version "7.14.11" 340 | resolved "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz" 341 | integrity sha512-EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA== 342 | dependencies: 343 | "@types/node" "*" 344 | pg-protocol "^1.2.0" 345 | pg-types "^2.2.0" 346 | 347 | "@types/qs@*": 348 | version "6.9.6" 349 | resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz" 350 | integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== 351 | 352 | "@types/range-parser@*": 353 | version "1.2.3" 354 | resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz" 355 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 356 | 357 | "@types/serve-static@*": 358 | version "1.13.9" 359 | resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz" 360 | integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== 361 | dependencies: 362 | "@types/mime" "^1" 363 | "@types/node" "*" 364 | 365 | "@types/yargs-parser@*": 366 | version "20.2.0" 367 | resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz" 368 | integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== 369 | 370 | "@types/yargs@^15.0.4": 371 | version "15.0.13" 372 | resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz" 373 | integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== 374 | dependencies: 375 | "@types/yargs-parser" "*" 376 | 377 | "@typescript-eslint/eslint-plugin@^4.22.1": 378 | version "4.22.1" 379 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.1.tgz" 380 | integrity sha512-kVTAghWDDhsvQ602tHBc6WmQkdaYbkcTwZu+7l24jtJiYvm9l+/y/b2BZANEezxPDiX5MK2ZecE+9BFi/YJryw== 381 | dependencies: 382 | "@typescript-eslint/experimental-utils" "4.22.1" 383 | "@typescript-eslint/scope-manager" "4.22.1" 384 | debug "^4.1.1" 385 | functional-red-black-tree "^1.0.1" 386 | lodash "^4.17.15" 387 | regexpp "^3.0.0" 388 | semver "^7.3.2" 389 | tsutils "^3.17.1" 390 | 391 | "@typescript-eslint/experimental-utils@4.22.1": 392 | version "4.22.1" 393 | resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz" 394 | integrity sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ== 395 | dependencies: 396 | "@types/json-schema" "^7.0.3" 397 | "@typescript-eslint/scope-manager" "4.22.1" 398 | "@typescript-eslint/types" "4.22.1" 399 | "@typescript-eslint/typescript-estree" "4.22.1" 400 | eslint-scope "^5.0.0" 401 | eslint-utils "^2.0.0" 402 | 403 | "@typescript-eslint/parser@^4.22.1": 404 | version "4.22.1" 405 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.1.tgz" 406 | integrity sha512-l+sUJFInWhuMxA6rtirzjooh8cM/AATAe3amvIkqKFeMzkn85V+eLzb1RyuXkHak4dLfYzOmF6DXPyflJvjQnw== 407 | dependencies: 408 | "@typescript-eslint/scope-manager" "4.22.1" 409 | "@typescript-eslint/types" "4.22.1" 410 | "@typescript-eslint/typescript-estree" "4.22.1" 411 | debug "^4.1.1" 412 | 413 | "@typescript-eslint/scope-manager@4.22.1": 414 | version "4.22.1" 415 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.1.tgz" 416 | integrity sha512-d5bAiPBiessSmNi8Amq/RuLslvcumxLmyhf1/Xa9IuaoFJ0YtshlJKxhlbY7l2JdEk3wS0EnmnfeJWSvADOe0g== 417 | dependencies: 418 | "@typescript-eslint/types" "4.22.1" 419 | "@typescript-eslint/visitor-keys" "4.22.1" 420 | 421 | "@typescript-eslint/types@4.22.1": 422 | version "4.22.1" 423 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.1.tgz" 424 | integrity sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw== 425 | 426 | "@typescript-eslint/typescript-estree@4.22.1": 427 | version "4.22.1" 428 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz" 429 | integrity sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A== 430 | dependencies: 431 | "@typescript-eslint/types" "4.22.1" 432 | "@typescript-eslint/visitor-keys" "4.22.1" 433 | debug "^4.1.1" 434 | globby "^11.0.1" 435 | is-glob "^4.0.1" 436 | semver "^7.3.2" 437 | tsutils "^3.17.1" 438 | 439 | "@typescript-eslint/visitor-keys@4.22.1": 440 | version "4.22.1" 441 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz" 442 | integrity sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ== 443 | dependencies: 444 | "@typescript-eslint/types" "4.22.1" 445 | eslint-visitor-keys "^2.0.0" 446 | 447 | abbrev@1: 448 | version "1.1.1" 449 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 450 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 451 | 452 | accepts@~1.3.7: 453 | version "1.3.7" 454 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 455 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 456 | dependencies: 457 | mime-types "~2.1.24" 458 | negotiator "0.6.2" 459 | 460 | acorn-jsx@^5.3.1: 461 | version "5.3.1" 462 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" 463 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 464 | 465 | acorn@^7.4.0: 466 | version "7.4.1" 467 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" 468 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 469 | 470 | ajv@^6.10.0, ajv@^6.12.4: 471 | version "6.12.6" 472 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 473 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 474 | dependencies: 475 | fast-deep-equal "^3.1.1" 476 | fast-json-stable-stringify "^2.0.0" 477 | json-schema-traverse "^0.4.1" 478 | uri-js "^4.2.2" 479 | 480 | ajv@^8.0.1: 481 | version "8.2.0" 482 | resolved "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz" 483 | integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== 484 | dependencies: 485 | fast-deep-equal "^3.1.1" 486 | json-schema-traverse "^1.0.0" 487 | require-from-string "^2.0.2" 488 | uri-js "^4.2.2" 489 | 490 | ansi-align@^3.0.0: 491 | version "3.0.0" 492 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 493 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 494 | dependencies: 495 | string-width "^3.0.0" 496 | 497 | ansi-colors@^4.1.1: 498 | version "4.1.1" 499 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 500 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 501 | 502 | ansi-regex@^2.0.0: 503 | version "2.1.1" 504 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 505 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 506 | 507 | ansi-regex@^3.0.0: 508 | version "3.0.0" 509 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 510 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 511 | 512 | ansi-regex@^4.1.0: 513 | version "4.1.0" 514 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 515 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 516 | 517 | ansi-regex@^5.0.0: 518 | version "5.0.0" 519 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 520 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 521 | 522 | ansi-styles@^3.2.1: 523 | version "3.2.1" 524 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 525 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 526 | dependencies: 527 | color-convert "^1.9.0" 528 | 529 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 530 | version "4.3.0" 531 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 532 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 533 | dependencies: 534 | color-convert "^2.0.1" 535 | 536 | anymatch@~3.1.1: 537 | version "3.1.2" 538 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 539 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 540 | dependencies: 541 | normalize-path "^3.0.0" 542 | picomatch "^2.0.4" 543 | 544 | aproba@^1.0.3: 545 | version "1.2.0" 546 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 547 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 548 | 549 | are-we-there-yet@~1.1.2: 550 | version "1.1.5" 551 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 552 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 553 | dependencies: 554 | delegates "^1.0.0" 555 | readable-stream "^2.0.6" 556 | 557 | arg@^4.1.0: 558 | version "4.1.3" 559 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" 560 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 561 | 562 | argparse@^1.0.7: 563 | version "1.0.10" 564 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" 565 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 566 | dependencies: 567 | sprintf-js "~1.0.2" 568 | 569 | array-flatten@1.1.1: 570 | version "1.1.1" 571 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 572 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 573 | 574 | array-includes@^3.1.1: 575 | version "3.1.3" 576 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz" 577 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== 578 | dependencies: 579 | call-bind "^1.0.2" 580 | define-properties "^1.1.3" 581 | es-abstract "^1.18.0-next.2" 582 | get-intrinsic "^1.1.1" 583 | is-string "^1.0.5" 584 | 585 | array-union@^2.1.0: 586 | version "2.1.0" 587 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 588 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 589 | 590 | array.prototype.flat@^1.2.3: 591 | version "1.2.4" 592 | resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz" 593 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== 594 | dependencies: 595 | call-bind "^1.0.0" 596 | define-properties "^1.1.3" 597 | es-abstract "^1.18.0-next.1" 598 | 599 | astral-regex@^2.0.0: 600 | version "2.0.0" 601 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" 602 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 603 | 604 | asynckit@^0.4.0: 605 | version "0.4.0" 606 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 607 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 608 | 609 | axios@^0.21.1: 610 | version "0.21.1" 611 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" 612 | integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== 613 | dependencies: 614 | follow-redirects "^1.10.0" 615 | 616 | balanced-match@^1.0.0: 617 | version "1.0.2" 618 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 619 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 620 | 621 | before-after-hook@^2.2.0: 622 | version "2.2.1" 623 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.1.tgz#73540563558687586b52ed217dad6a802ab1549c" 624 | integrity sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw== 625 | 626 | binary-extensions@^2.0.0: 627 | version "2.2.0" 628 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 629 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 630 | 631 | body-parser@1.19.0: 632 | version "1.19.0" 633 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 634 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 635 | dependencies: 636 | bytes "3.1.0" 637 | content-type "~1.0.4" 638 | debug "2.6.9" 639 | depd "~1.1.2" 640 | http-errors "1.7.2" 641 | iconv-lite "0.4.24" 642 | on-finished "~2.3.0" 643 | qs "6.7.0" 644 | raw-body "2.4.0" 645 | type-is "~1.6.17" 646 | 647 | boxen@^4.2.0: 648 | version "4.2.0" 649 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" 650 | integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== 651 | dependencies: 652 | ansi-align "^3.0.0" 653 | camelcase "^5.3.1" 654 | chalk "^3.0.0" 655 | cli-boxes "^2.2.0" 656 | string-width "^4.1.0" 657 | term-size "^2.1.0" 658 | type-fest "^0.8.1" 659 | widest-line "^3.1.0" 660 | 661 | brace-expansion@^1.1.7: 662 | version "1.1.11" 663 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 664 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 665 | dependencies: 666 | balanced-match "^1.0.0" 667 | concat-map "0.0.1" 668 | 669 | braces@^3.0.1, braces@~3.0.2: 670 | version "3.0.2" 671 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 672 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 673 | dependencies: 674 | fill-range "^7.0.1" 675 | 676 | buffer-from@^1.0.0: 677 | version "1.1.1" 678 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" 679 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 680 | 681 | buffer-writer@2.0.0: 682 | version "2.0.0" 683 | resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" 684 | integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== 685 | 686 | bytes@3.1.0: 687 | version "3.1.0" 688 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 689 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 690 | 691 | cacheable-request@^6.0.0: 692 | version "6.1.0" 693 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 694 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 695 | dependencies: 696 | clone-response "^1.0.2" 697 | get-stream "^5.1.0" 698 | http-cache-semantics "^4.0.0" 699 | keyv "^3.0.0" 700 | lowercase-keys "^2.0.0" 701 | normalize-url "^4.1.0" 702 | responselike "^1.0.2" 703 | 704 | call-bind@^1.0.0, call-bind@^1.0.2: 705 | version "1.0.2" 706 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 707 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 708 | dependencies: 709 | function-bind "^1.1.1" 710 | get-intrinsic "^1.0.2" 711 | 712 | callsites@^3.0.0: 713 | version "3.1.0" 714 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 715 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 716 | 717 | camelcase@^5.0.0, camelcase@^5.3.1: 718 | version "5.3.1" 719 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 720 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 721 | 722 | canvas@^2.7.0: 723 | version "2.7.0" 724 | resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.7.0.tgz#3ce3fe30c69595ccd2bd1232967e681c026be61e" 725 | integrity sha512-pzCxtkHb+5su5MQjTtepMDlIOtaXo277x0C0u3nMOxtkhTyQ+h2yNKhlROAaDllWgRyePAUitC08sXw26Eb6aw== 726 | dependencies: 727 | nan "^2.14.0" 728 | node-pre-gyp "^0.15.0" 729 | simple-get "^3.0.3" 730 | 731 | chalk@^2.0.0, chalk@^2.4.1: 732 | version "2.4.2" 733 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 734 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 735 | dependencies: 736 | ansi-styles "^3.2.1" 737 | escape-string-regexp "^1.0.5" 738 | supports-color "^5.3.0" 739 | 740 | chalk@^3.0.0: 741 | version "3.0.0" 742 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 743 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 744 | dependencies: 745 | ansi-styles "^4.1.0" 746 | supports-color "^7.1.0" 747 | 748 | chalk@^4.0.0: 749 | version "4.1.1" 750 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" 751 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 752 | dependencies: 753 | ansi-styles "^4.1.0" 754 | supports-color "^7.1.0" 755 | 756 | chart.js@^3.2.1: 757 | version "3.2.1" 758 | resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.2.1.tgz#1a17d6a88cef324ef711949e227eb51d6c4c26d3" 759 | integrity sha512-XsNDf3854RGZkLCt+5vWAXGAtUdKP2nhfikLGZqud6G4CvRE2ts64TIxTTfspOin2kEZvPgomE29E6oU02dYjQ== 760 | 761 | chokidar@^3.2.2: 762 | version "3.5.1" 763 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 764 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 765 | dependencies: 766 | anymatch "~3.1.1" 767 | braces "~3.0.2" 768 | glob-parent "~5.1.0" 769 | is-binary-path "~2.1.0" 770 | is-glob "~4.0.1" 771 | normalize-path "~3.0.0" 772 | readdirp "~3.5.0" 773 | optionalDependencies: 774 | fsevents "~2.3.1" 775 | 776 | chownr@^1.1.1: 777 | version "1.1.4" 778 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 779 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 780 | 781 | ci-info@^2.0.0: 782 | version "2.0.0" 783 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 784 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 785 | 786 | cli-boxes@^2.2.0: 787 | version "2.2.1" 788 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 789 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 790 | 791 | cliui@^6.0.0: 792 | version "6.0.0" 793 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" 794 | integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== 795 | dependencies: 796 | string-width "^4.2.0" 797 | strip-ansi "^6.0.0" 798 | wrap-ansi "^6.2.0" 799 | 800 | clone-response@^1.0.2: 801 | version "1.0.2" 802 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 803 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 804 | dependencies: 805 | mimic-response "^1.0.0" 806 | 807 | code-point-at@^1.0.0: 808 | version "1.1.0" 809 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 810 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 811 | 812 | color-convert@^1.9.0: 813 | version "1.9.3" 814 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 815 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 816 | dependencies: 817 | color-name "1.1.3" 818 | 819 | color-convert@^2.0.1: 820 | version "2.0.1" 821 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 822 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 823 | dependencies: 824 | color-name "~1.1.4" 825 | 826 | color-name@1.1.3: 827 | version "1.1.3" 828 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 829 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 830 | 831 | color-name@~1.1.4: 832 | version "1.1.4" 833 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 834 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 835 | 836 | combined-stream@^1.0.8: 837 | version "1.0.8" 838 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 839 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 840 | dependencies: 841 | delayed-stream "~1.0.0" 842 | 843 | commander@2: 844 | version "2.20.3" 845 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 846 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 847 | 848 | concat-map@0.0.1: 849 | version "0.0.1" 850 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 851 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 852 | 853 | configstore@^5.0.1: 854 | version "5.0.1" 855 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 856 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 857 | dependencies: 858 | dot-prop "^5.2.0" 859 | graceful-fs "^4.1.2" 860 | make-dir "^3.0.0" 861 | unique-string "^2.0.0" 862 | write-file-atomic "^3.0.0" 863 | xdg-basedir "^4.0.0" 864 | 865 | confusing-browser-globals@^1.0.10: 866 | version "1.0.10" 867 | resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz" 868 | integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== 869 | 870 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 871 | version "1.1.0" 872 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 873 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 874 | 875 | contains-path@^0.1.0: 876 | version "0.1.0" 877 | resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz" 878 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 879 | 880 | content-disposition@0.5.3: 881 | version "0.5.3" 882 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 883 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 884 | dependencies: 885 | safe-buffer "5.1.2" 886 | 887 | content-type@~1.0.4: 888 | version "1.0.4" 889 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 890 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 891 | 892 | cookie-signature@1.0.6: 893 | version "1.0.6" 894 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 895 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 896 | 897 | cookie@0.4.0: 898 | version "0.4.0" 899 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 900 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 901 | 902 | core-util-is@~1.0.0: 903 | version "1.0.2" 904 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 905 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 906 | 907 | cors@^2.8.5: 908 | version "2.8.5" 909 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 910 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 911 | dependencies: 912 | object-assign "^4" 913 | vary "^1" 914 | 915 | create-require@^1.1.0: 916 | version "1.1.1" 917 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" 918 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 919 | 920 | cross-spawn@^6.0.5: 921 | version "6.0.5" 922 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" 923 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 924 | dependencies: 925 | nice-try "^1.0.4" 926 | path-key "^2.0.1" 927 | semver "^5.5.0" 928 | shebang-command "^1.2.0" 929 | which "^1.2.9" 930 | 931 | cross-spawn@^7.0.2: 932 | version "7.0.3" 933 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 934 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 935 | dependencies: 936 | path-key "^3.1.0" 937 | shebang-command "^2.0.0" 938 | which "^2.0.1" 939 | 940 | crypto-random-string@^2.0.0: 941 | version "2.0.0" 942 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 943 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 944 | 945 | d3-dsv@^2.0.0: 946 | version "2.0.0" 947 | resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5" 948 | integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w== 949 | dependencies: 950 | commander "2" 951 | iconv-lite "0.4" 952 | rw "1" 953 | 954 | debug@2.6.9, debug@^2.2.0, debug@^2.6.1, debug@^2.6.9: 955 | version "2.6.9" 956 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 957 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 958 | dependencies: 959 | ms "2.0.0" 960 | 961 | debug@^3.1.0, debug@^3.2.6: 962 | version "3.2.7" 963 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 964 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 965 | dependencies: 966 | ms "^2.1.1" 967 | 968 | debug@^4.0.1, debug@^4.1.1: 969 | version "4.3.1" 970 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" 971 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 972 | dependencies: 973 | ms "2.1.2" 974 | 975 | decamelize@^1.2.0: 976 | version "1.2.0" 977 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 978 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 979 | 980 | decode-uri-component@^0.2.0: 981 | version "0.2.0" 982 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 983 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 984 | 985 | decompress-response@^3.3.0: 986 | version "3.3.0" 987 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 988 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 989 | dependencies: 990 | mimic-response "^1.0.0" 991 | 992 | decompress-response@^4.2.0: 993 | version "4.2.1" 994 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" 995 | integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== 996 | dependencies: 997 | mimic-response "^2.0.0" 998 | 999 | deep-extend@^0.6.0: 1000 | version "0.6.0" 1001 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 1002 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 1003 | 1004 | deep-is@^0.1.3: 1005 | version "0.1.3" 1006 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" 1007 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 1008 | 1009 | defer-to-connect@^1.0.1: 1010 | version "1.1.3" 1011 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 1012 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 1013 | 1014 | define-properties@^1.1.3: 1015 | version "1.1.3" 1016 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" 1017 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 1018 | dependencies: 1019 | object-keys "^1.0.12" 1020 | 1021 | delayed-stream@~1.0.0: 1022 | version "1.0.0" 1023 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1024 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 1025 | 1026 | delegates@^1.0.0: 1027 | version "1.0.0" 1028 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1029 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 1030 | 1031 | depd@~1.1.2: 1032 | version "1.1.2" 1033 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 1034 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 1035 | 1036 | deprecation@^2.0.0, deprecation@^2.3.1: 1037 | version "2.3.1" 1038 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 1039 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 1040 | 1041 | destroy@~1.0.4: 1042 | version "1.0.4" 1043 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 1044 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 1045 | 1046 | detect-libc@^1.0.2: 1047 | version "1.0.3" 1048 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1049 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 1050 | 1051 | diff@^4.0.1: 1052 | version "4.0.2" 1053 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" 1054 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1055 | 1056 | dir-glob@^3.0.1: 1057 | version "3.0.1" 1058 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 1059 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 1060 | dependencies: 1061 | path-type "^4.0.0" 1062 | 1063 | doctrine@1.5.0: 1064 | version "1.5.0" 1065 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" 1066 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 1067 | dependencies: 1068 | esutils "^2.0.2" 1069 | isarray "^1.0.0" 1070 | 1071 | doctrine@^3.0.0: 1072 | version "3.0.0" 1073 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 1074 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 1075 | dependencies: 1076 | esutils "^2.0.2" 1077 | 1078 | dot-prop@^5.2.0: 1079 | version "5.3.0" 1080 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 1081 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 1082 | dependencies: 1083 | is-obj "^2.0.0" 1084 | 1085 | dotenv@*: 1086 | version "8.3.0" 1087 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.3.0.tgz" 1088 | integrity sha512-1Rzx4VAJIy9LPqtNO21bBdP8A6WAXcTlnLKt92o/vZ8MezXcjjzb1b39Ls0BWSIcW9ijkFtUmjOGrwHiqdb3Cw== 1089 | 1090 | dotenv@^8.2.0: 1091 | version "8.2.0" 1092 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 1093 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== 1094 | 1095 | duplexer3@^0.1.4: 1096 | version "0.1.4" 1097 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 1098 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 1099 | 1100 | ee-first@1.1.1: 1101 | version "1.1.1" 1102 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1103 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 1104 | 1105 | emoji-datasource@4.1.0: 1106 | version "4.1.0" 1107 | resolved "https://registry.yarnpkg.com/emoji-datasource/-/emoji-datasource-4.1.0.tgz#b44557f78a2dfac2f350393391b170a567ec28ad" 1108 | integrity sha1-tEVX94ot+sLzUDkzkbFwpWfsKK0= 1109 | 1110 | emoji-js@^3.5.0: 1111 | version "3.5.0" 1112 | resolved "https://registry.yarnpkg.com/emoji-js/-/emoji-js-3.5.0.tgz#a8665f206da259b660c512a0ec69803611398753" 1113 | integrity sha512-5uaULzdR3g6ALBC8xUzyoxAx6izT1M4+DEsxHLRS2/gaOKC/p62831itMoMsYfUj1fKX3YG01u5YVz2v7qpsWg== 1114 | dependencies: 1115 | emoji-datasource "4.1.0" 1116 | 1117 | emoji-regex@^7.0.1: 1118 | version "7.0.3" 1119 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1120 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 1121 | 1122 | emoji-regex@^8.0.0: 1123 | version "8.0.0" 1124 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1125 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1126 | 1127 | encodeurl@~1.0.2: 1128 | version "1.0.2" 1129 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 1130 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 1131 | 1132 | end-of-stream@^1.1.0: 1133 | version "1.4.4" 1134 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1135 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 1136 | dependencies: 1137 | once "^1.4.0" 1138 | 1139 | enquirer@^2.3.5: 1140 | version "2.3.6" 1141 | resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" 1142 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 1143 | dependencies: 1144 | ansi-colors "^4.1.1" 1145 | 1146 | error-ex@^1.2.0, error-ex@^1.3.1: 1147 | version "1.3.2" 1148 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" 1149 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1150 | dependencies: 1151 | is-arrayish "^0.2.1" 1152 | 1153 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: 1154 | version "1.18.0" 1155 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz" 1156 | integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== 1157 | dependencies: 1158 | call-bind "^1.0.2" 1159 | es-to-primitive "^1.2.1" 1160 | function-bind "^1.1.1" 1161 | get-intrinsic "^1.1.1" 1162 | has "^1.0.3" 1163 | has-symbols "^1.0.2" 1164 | is-callable "^1.2.3" 1165 | is-negative-zero "^2.0.1" 1166 | is-regex "^1.1.2" 1167 | is-string "^1.0.5" 1168 | object-inspect "^1.9.0" 1169 | object-keys "^1.1.1" 1170 | object.assign "^4.1.2" 1171 | string.prototype.trimend "^1.0.4" 1172 | string.prototype.trimstart "^1.0.4" 1173 | unbox-primitive "^1.0.0" 1174 | 1175 | es-to-primitive@^1.2.1: 1176 | version "1.2.1" 1177 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 1178 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1179 | dependencies: 1180 | is-callable "^1.1.4" 1181 | is-date-object "^1.0.1" 1182 | is-symbol "^1.0.2" 1183 | 1184 | escape-goat@^2.0.0: 1185 | version "2.1.1" 1186 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 1187 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 1188 | 1189 | escape-html@~1.0.3: 1190 | version "1.0.3" 1191 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1192 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 1193 | 1194 | escape-string-regexp@^1.0.5: 1195 | version "1.0.5" 1196 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 1197 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1198 | 1199 | eslint-config-airbnb-base@^14.2.1: 1200 | version "14.2.1" 1201 | resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz" 1202 | integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== 1203 | dependencies: 1204 | confusing-browser-globals "^1.0.10" 1205 | object.assign "^4.1.2" 1206 | object.entries "^1.1.2" 1207 | 1208 | eslint-import-resolver-node@^0.3.4: 1209 | version "0.3.4" 1210 | resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz" 1211 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 1212 | dependencies: 1213 | debug "^2.6.9" 1214 | resolve "^1.13.1" 1215 | 1216 | eslint-module-utils@^2.6.0: 1217 | version "2.6.0" 1218 | resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz" 1219 | integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== 1220 | dependencies: 1221 | debug "^2.6.9" 1222 | pkg-dir "^2.0.0" 1223 | 1224 | eslint-plugin-import@^2.22.1: 1225 | version "2.22.1" 1226 | resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz" 1227 | integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== 1228 | dependencies: 1229 | array-includes "^3.1.1" 1230 | array.prototype.flat "^1.2.3" 1231 | contains-path "^0.1.0" 1232 | debug "^2.6.9" 1233 | doctrine "1.5.0" 1234 | eslint-import-resolver-node "^0.3.4" 1235 | eslint-module-utils "^2.6.0" 1236 | has "^1.0.3" 1237 | minimatch "^3.0.4" 1238 | object.values "^1.1.1" 1239 | read-pkg-up "^2.0.0" 1240 | resolve "^1.17.0" 1241 | tsconfig-paths "^3.9.0" 1242 | 1243 | eslint-scope@^5.0.0, eslint-scope@^5.1.1: 1244 | version "5.1.1" 1245 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 1246 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 1247 | dependencies: 1248 | esrecurse "^4.3.0" 1249 | estraverse "^4.1.1" 1250 | 1251 | eslint-utils@^2.0.0, eslint-utils@^2.1.0: 1252 | version "2.1.0" 1253 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" 1254 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 1255 | dependencies: 1256 | eslint-visitor-keys "^1.1.0" 1257 | 1258 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 1259 | version "1.3.0" 1260 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" 1261 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 1262 | 1263 | eslint-visitor-keys@^2.0.0: 1264 | version "2.1.0" 1265 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 1266 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 1267 | 1268 | eslint@^7.25.0: 1269 | version "7.25.0" 1270 | resolved "https://registry.npmjs.org/eslint/-/eslint-7.25.0.tgz" 1271 | integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== 1272 | dependencies: 1273 | "@babel/code-frame" "7.12.11" 1274 | "@eslint/eslintrc" "^0.4.0" 1275 | ajv "^6.10.0" 1276 | chalk "^4.0.0" 1277 | cross-spawn "^7.0.2" 1278 | debug "^4.0.1" 1279 | doctrine "^3.0.0" 1280 | enquirer "^2.3.5" 1281 | eslint-scope "^5.1.1" 1282 | eslint-utils "^2.1.0" 1283 | eslint-visitor-keys "^2.0.0" 1284 | espree "^7.3.1" 1285 | esquery "^1.4.0" 1286 | esutils "^2.0.2" 1287 | file-entry-cache "^6.0.1" 1288 | functional-red-black-tree "^1.0.1" 1289 | glob-parent "^5.0.0" 1290 | globals "^13.6.0" 1291 | ignore "^4.0.6" 1292 | import-fresh "^3.0.0" 1293 | imurmurhash "^0.1.4" 1294 | is-glob "^4.0.0" 1295 | js-yaml "^3.13.1" 1296 | json-stable-stringify-without-jsonify "^1.0.1" 1297 | levn "^0.4.1" 1298 | lodash "^4.17.21" 1299 | minimatch "^3.0.4" 1300 | natural-compare "^1.4.0" 1301 | optionator "^0.9.1" 1302 | progress "^2.0.0" 1303 | regexpp "^3.1.0" 1304 | semver "^7.2.1" 1305 | strip-ansi "^6.0.0" 1306 | strip-json-comments "^3.1.0" 1307 | table "^6.0.4" 1308 | text-table "^0.2.0" 1309 | v8-compile-cache "^2.0.3" 1310 | 1311 | espree@^7.3.0, espree@^7.3.1: 1312 | version "7.3.1" 1313 | resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" 1314 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 1315 | dependencies: 1316 | acorn "^7.4.0" 1317 | acorn-jsx "^5.3.1" 1318 | eslint-visitor-keys "^1.3.0" 1319 | 1320 | esprima@^4.0.0: 1321 | version "4.0.1" 1322 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" 1323 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1324 | 1325 | esquery@^1.4.0: 1326 | version "1.4.0" 1327 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" 1328 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1329 | dependencies: 1330 | estraverse "^5.1.0" 1331 | 1332 | esrecurse@^4.3.0: 1333 | version "4.3.0" 1334 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 1335 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1336 | dependencies: 1337 | estraverse "^5.2.0" 1338 | 1339 | estraverse@^4.1.1: 1340 | version "4.3.0" 1341 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 1342 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1343 | 1344 | estraverse@^5.1.0, estraverse@^5.2.0: 1345 | version "5.2.0" 1346 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" 1347 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 1348 | 1349 | esutils@^2.0.2: 1350 | version "2.0.3" 1351 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 1352 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1353 | 1354 | etag@~1.8.1: 1355 | version "1.8.1" 1356 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1357 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1358 | 1359 | express@^4.0.0, express@^4.17.1: 1360 | version "4.17.1" 1361 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 1362 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 1363 | dependencies: 1364 | accepts "~1.3.7" 1365 | array-flatten "1.1.1" 1366 | body-parser "1.19.0" 1367 | content-disposition "0.5.3" 1368 | content-type "~1.0.4" 1369 | cookie "0.4.0" 1370 | cookie-signature "1.0.6" 1371 | debug "2.6.9" 1372 | depd "~1.1.2" 1373 | encodeurl "~1.0.2" 1374 | escape-html "~1.0.3" 1375 | etag "~1.8.1" 1376 | finalhandler "~1.1.2" 1377 | fresh "0.5.2" 1378 | merge-descriptors "1.0.1" 1379 | methods "~1.1.2" 1380 | on-finished "~2.3.0" 1381 | parseurl "~1.3.3" 1382 | path-to-regexp "0.1.7" 1383 | proxy-addr "~2.0.5" 1384 | qs "6.7.0" 1385 | range-parser "~1.2.1" 1386 | safe-buffer "5.1.2" 1387 | send "0.17.1" 1388 | serve-static "1.14.1" 1389 | setprototypeof "1.1.1" 1390 | statuses "~1.5.0" 1391 | type-is "~1.6.18" 1392 | utils-merge "1.0.1" 1393 | vary "~1.1.2" 1394 | 1395 | fast-deep-equal@^3.1.1: 1396 | version "3.1.3" 1397 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 1398 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1399 | 1400 | fast-glob@^3.1.1: 1401 | version "3.2.5" 1402 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" 1403 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== 1404 | dependencies: 1405 | "@nodelib/fs.stat" "^2.0.2" 1406 | "@nodelib/fs.walk" "^1.2.3" 1407 | glob-parent "^5.1.0" 1408 | merge2 "^1.3.0" 1409 | micromatch "^4.0.2" 1410 | picomatch "^2.2.1" 1411 | 1412 | fast-json-stable-stringify@^2.0.0: 1413 | version "2.1.0" 1414 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 1415 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1416 | 1417 | fast-levenshtein@^2.0.6: 1418 | version "2.0.6" 1419 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 1420 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1421 | 1422 | fastq@^1.6.0: 1423 | version "1.11.0" 1424 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz" 1425 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 1426 | dependencies: 1427 | reusify "^1.0.4" 1428 | 1429 | file-entry-cache@^6.0.1: 1430 | version "6.0.1" 1431 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 1432 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1433 | dependencies: 1434 | flat-cache "^3.0.4" 1435 | 1436 | fill-range@^7.0.1: 1437 | version "7.0.1" 1438 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1439 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1440 | dependencies: 1441 | to-regex-range "^5.0.1" 1442 | 1443 | filter-obj@^1.1.0: 1444 | version "1.1.0" 1445 | resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" 1446 | integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= 1447 | 1448 | finalhandler@~1.1.2: 1449 | version "1.1.2" 1450 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1451 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1452 | dependencies: 1453 | debug "2.6.9" 1454 | encodeurl "~1.0.2" 1455 | escape-html "~1.0.3" 1456 | on-finished "~2.3.0" 1457 | parseurl "~1.3.3" 1458 | statuses "~1.5.0" 1459 | unpipe "~1.0.0" 1460 | 1461 | find-up@^2.0.0, find-up@^2.1.0: 1462 | version "2.1.0" 1463 | resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" 1464 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1465 | dependencies: 1466 | locate-path "^2.0.0" 1467 | 1468 | find-up@^4.1.0: 1469 | version "4.1.0" 1470 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1471 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1472 | dependencies: 1473 | locate-path "^5.0.0" 1474 | path-exists "^4.0.0" 1475 | 1476 | flat-cache@^3.0.4: 1477 | version "3.0.4" 1478 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 1479 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1480 | dependencies: 1481 | flatted "^3.1.0" 1482 | rimraf "^3.0.2" 1483 | 1484 | flatted@^3.1.0: 1485 | version "3.1.1" 1486 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" 1487 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 1488 | 1489 | follow-redirects@^1.10.0: 1490 | version "1.14.0" 1491 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe" 1492 | integrity sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg== 1493 | 1494 | form-data@^4.0.0: 1495 | version "4.0.0" 1496 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 1497 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1498 | dependencies: 1499 | asynckit "^0.4.0" 1500 | combined-stream "^1.0.8" 1501 | mime-types "^2.1.12" 1502 | 1503 | forwarded@~0.1.2: 1504 | version "0.1.2" 1505 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1506 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 1507 | 1508 | fresh@0.5.2: 1509 | version "0.5.2" 1510 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1511 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1512 | 1513 | fs-minipass@^1.2.5: 1514 | version "1.2.7" 1515 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 1516 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 1517 | dependencies: 1518 | minipass "^2.6.0" 1519 | 1520 | fs.realpath@^1.0.0: 1521 | version "1.0.0" 1522 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1523 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1524 | 1525 | fsevents@~2.3.1: 1526 | version "2.3.2" 1527 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1528 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1529 | 1530 | function-bind@^1.1.1: 1531 | version "1.1.1" 1532 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 1533 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1534 | 1535 | functional-red-black-tree@^1.0.1: 1536 | version "1.0.1" 1537 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" 1538 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1539 | 1540 | gauge@~2.7.3: 1541 | version "2.7.4" 1542 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1543 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 1544 | dependencies: 1545 | aproba "^1.0.3" 1546 | console-control-strings "^1.0.0" 1547 | has-unicode "^2.0.0" 1548 | object-assign "^4.1.0" 1549 | signal-exit "^3.0.0" 1550 | string-width "^1.0.1" 1551 | strip-ansi "^3.0.1" 1552 | wide-align "^1.1.0" 1553 | 1554 | get-caller-file@^2.0.1: 1555 | version "2.0.5" 1556 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1557 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1558 | 1559 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: 1560 | version "1.1.1" 1561 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" 1562 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1563 | dependencies: 1564 | function-bind "^1.1.1" 1565 | has "^1.0.3" 1566 | has-symbols "^1.0.1" 1567 | 1568 | get-stream@^4.1.0: 1569 | version "4.1.0" 1570 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1571 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 1572 | dependencies: 1573 | pump "^3.0.0" 1574 | 1575 | get-stream@^5.1.0: 1576 | version "5.2.0" 1577 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1578 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1579 | dependencies: 1580 | pump "^3.0.0" 1581 | 1582 | glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: 1583 | version "5.1.2" 1584 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 1585 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1586 | dependencies: 1587 | is-glob "^4.0.1" 1588 | 1589 | glob@^7.1.3: 1590 | version "7.1.6" 1591 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1592 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1593 | dependencies: 1594 | fs.realpath "^1.0.0" 1595 | inflight "^1.0.4" 1596 | inherits "2" 1597 | minimatch "^3.0.4" 1598 | once "^1.3.0" 1599 | path-is-absolute "^1.0.0" 1600 | 1601 | global-dirs@^2.0.1: 1602 | version "2.1.0" 1603 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" 1604 | integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== 1605 | dependencies: 1606 | ini "1.3.7" 1607 | 1608 | globals@^12.1.0: 1609 | version "12.4.0" 1610 | resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" 1611 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 1612 | dependencies: 1613 | type-fest "^0.8.1" 1614 | 1615 | globals@^13.6.0: 1616 | version "13.8.0" 1617 | resolved "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz" 1618 | integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== 1619 | dependencies: 1620 | type-fest "^0.20.2" 1621 | 1622 | globby@^11.0.1: 1623 | version "11.0.3" 1624 | resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" 1625 | integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== 1626 | dependencies: 1627 | array-union "^2.1.0" 1628 | dir-glob "^3.0.1" 1629 | fast-glob "^3.1.1" 1630 | ignore "^5.1.4" 1631 | merge2 "^1.3.0" 1632 | slash "^3.0.0" 1633 | 1634 | got@^9.6.0: 1635 | version "9.6.0" 1636 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 1637 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 1638 | dependencies: 1639 | "@sindresorhus/is" "^0.14.0" 1640 | "@szmarczak/http-timer" "^1.1.2" 1641 | cacheable-request "^6.0.0" 1642 | decompress-response "^3.3.0" 1643 | duplexer3 "^0.1.4" 1644 | get-stream "^4.1.0" 1645 | lowercase-keys "^1.0.1" 1646 | mimic-response "^1.0.1" 1647 | p-cancelable "^1.0.0" 1648 | to-readable-stream "^1.0.0" 1649 | url-parse-lax "^3.0.0" 1650 | 1651 | graceful-fs@^4.1.2: 1652 | version "4.2.6" 1653 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1654 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1655 | 1656 | has-bigints@^1.0.1: 1657 | version "1.0.1" 1658 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" 1659 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1660 | 1661 | has-flag@^3.0.0: 1662 | version "3.0.0" 1663 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1664 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1665 | 1666 | has-flag@^4.0.0: 1667 | version "4.0.0" 1668 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1669 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1670 | 1671 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1672 | version "1.0.2" 1673 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" 1674 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1675 | 1676 | has-unicode@^2.0.0: 1677 | version "2.0.1" 1678 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1679 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1680 | 1681 | has-yarn@^2.1.0: 1682 | version "2.1.0" 1683 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 1684 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 1685 | 1686 | has@^1.0.3: 1687 | version "1.0.3" 1688 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1689 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1690 | dependencies: 1691 | function-bind "^1.1.1" 1692 | 1693 | hosted-git-info@^2.1.4: 1694 | version "2.8.9" 1695 | resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" 1696 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 1697 | 1698 | http-cache-semantics@^4.0.0: 1699 | version "4.1.0" 1700 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1701 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1702 | 1703 | http-errors@1.7.2: 1704 | version "1.7.2" 1705 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1706 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1707 | dependencies: 1708 | depd "~1.1.2" 1709 | inherits "2.0.3" 1710 | setprototypeof "1.1.1" 1711 | statuses ">= 1.5.0 < 2" 1712 | toidentifier "1.0.0" 1713 | 1714 | http-errors@1.7.3, http-errors@~1.7.2: 1715 | version "1.7.3" 1716 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1717 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1718 | dependencies: 1719 | depd "~1.1.2" 1720 | inherits "2.0.4" 1721 | setprototypeof "1.1.1" 1722 | statuses ">= 1.5.0 < 2" 1723 | toidentifier "1.0.0" 1724 | 1725 | husky@^6.0.0: 1726 | version "6.0.0" 1727 | resolved "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz" 1728 | integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== 1729 | 1730 | iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.4: 1731 | version "0.4.24" 1732 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1733 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1734 | dependencies: 1735 | safer-buffer ">= 2.1.2 < 3" 1736 | 1737 | ignore-by-default@^1.0.1: 1738 | version "1.0.1" 1739 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1740 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 1741 | 1742 | ignore-walk@^3.0.1: 1743 | version "3.0.3" 1744 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" 1745 | integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== 1746 | dependencies: 1747 | minimatch "^3.0.4" 1748 | 1749 | ignore@^4.0.6: 1750 | version "4.0.6" 1751 | resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" 1752 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1753 | 1754 | ignore@^5.1.4: 1755 | version "5.1.8" 1756 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" 1757 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1758 | 1759 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1760 | version "3.3.0" 1761 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1762 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1763 | dependencies: 1764 | parent-module "^1.0.0" 1765 | resolve-from "^4.0.0" 1766 | 1767 | import-lazy@^2.1.0: 1768 | version "2.1.0" 1769 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1770 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1771 | 1772 | imurmurhash@^0.1.4: 1773 | version "0.1.4" 1774 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1775 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1776 | 1777 | inflight@^1.0.4: 1778 | version "1.0.6" 1779 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1780 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1781 | dependencies: 1782 | once "^1.3.0" 1783 | wrappy "1" 1784 | 1785 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: 1786 | version "2.0.4" 1787 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1788 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1789 | 1790 | inherits@2.0.3: 1791 | version "2.0.3" 1792 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1793 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1794 | 1795 | ini@1.3.7: 1796 | version "1.3.7" 1797 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" 1798 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== 1799 | 1800 | ini@~1.3.0: 1801 | version "1.3.8" 1802 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1803 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1804 | 1805 | ipaddr.js@1.9.1: 1806 | version "1.9.1" 1807 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1808 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1809 | 1810 | is-arrayish@^0.2.1: 1811 | version "0.2.1" 1812 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 1813 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1814 | 1815 | is-bigint@^1.0.1: 1816 | version "1.0.2" 1817 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" 1818 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== 1819 | 1820 | is-binary-path@~2.1.0: 1821 | version "2.1.0" 1822 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1823 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1824 | dependencies: 1825 | binary-extensions "^2.0.0" 1826 | 1827 | is-boolean-object@^1.1.0: 1828 | version "1.1.0" 1829 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz" 1830 | integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== 1831 | dependencies: 1832 | call-bind "^1.0.0" 1833 | 1834 | is-callable@^1.1.4, is-callable@^1.2.3: 1835 | version "1.2.3" 1836 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" 1837 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 1838 | 1839 | is-ci@^2.0.0: 1840 | version "2.0.0" 1841 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1842 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 1843 | dependencies: 1844 | ci-info "^2.0.0" 1845 | 1846 | is-core-module@^2.2.0: 1847 | version "2.3.0" 1848 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz" 1849 | integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== 1850 | dependencies: 1851 | has "^1.0.3" 1852 | 1853 | is-date-object@^1.0.1: 1854 | version "1.0.2" 1855 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" 1856 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1857 | 1858 | is-extglob@^2.1.1: 1859 | version "2.1.1" 1860 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1861 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1862 | 1863 | is-fullwidth-code-point@^1.0.0: 1864 | version "1.0.0" 1865 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1866 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1867 | dependencies: 1868 | number-is-nan "^1.0.0" 1869 | 1870 | is-fullwidth-code-point@^2.0.0: 1871 | version "2.0.0" 1872 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1873 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1874 | 1875 | is-fullwidth-code-point@^3.0.0: 1876 | version "3.0.0" 1877 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1878 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1879 | 1880 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 1881 | version "4.0.1" 1882 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1883 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1884 | dependencies: 1885 | is-extglob "^2.1.1" 1886 | 1887 | is-installed-globally@^0.3.1: 1888 | version "0.3.2" 1889 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" 1890 | integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== 1891 | dependencies: 1892 | global-dirs "^2.0.1" 1893 | is-path-inside "^3.0.1" 1894 | 1895 | is-negative-zero@^2.0.1: 1896 | version "2.0.1" 1897 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" 1898 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1899 | 1900 | is-npm@^4.0.0: 1901 | version "4.0.0" 1902 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" 1903 | integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== 1904 | 1905 | is-number-object@^1.0.4: 1906 | version "1.0.4" 1907 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz" 1908 | integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== 1909 | 1910 | is-number@^7.0.0: 1911 | version "7.0.0" 1912 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1913 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1914 | 1915 | is-obj@^2.0.0: 1916 | version "2.0.0" 1917 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 1918 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 1919 | 1920 | is-path-inside@^3.0.1: 1921 | version "3.0.3" 1922 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1923 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1924 | 1925 | is-plain-object@^5.0.0: 1926 | version "5.0.0" 1927 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 1928 | integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 1929 | 1930 | is-regex@^1.1.2: 1931 | version "1.1.2" 1932 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz" 1933 | integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== 1934 | dependencies: 1935 | call-bind "^1.0.2" 1936 | has-symbols "^1.0.1" 1937 | 1938 | is-string@^1.0.5: 1939 | version "1.0.5" 1940 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" 1941 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 1942 | 1943 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1944 | version "1.0.3" 1945 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" 1946 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1947 | dependencies: 1948 | has-symbols "^1.0.1" 1949 | 1950 | is-typedarray@^1.0.0: 1951 | version "1.0.0" 1952 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1953 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1954 | 1955 | is-yarn-global@^0.3.0: 1956 | version "0.3.0" 1957 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 1958 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 1959 | 1960 | isarray@^1.0.0, isarray@~1.0.0: 1961 | version "1.0.0" 1962 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1963 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1964 | 1965 | isexe@^2.0.0: 1966 | version "2.0.0" 1967 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1968 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1969 | 1970 | js-tokens@^4.0.0: 1971 | version "4.0.0" 1972 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1973 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1974 | 1975 | js-yaml@^3.13.1: 1976 | version "3.14.1" 1977 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" 1978 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1979 | dependencies: 1980 | argparse "^1.0.7" 1981 | esprima "^4.0.0" 1982 | 1983 | json-buffer@3.0.0: 1984 | version "3.0.0" 1985 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 1986 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 1987 | 1988 | json-parse-better-errors@^1.0.1: 1989 | version "1.0.2" 1990 | resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" 1991 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1992 | 1993 | json-schema-traverse@^0.4.1: 1994 | version "0.4.1" 1995 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1996 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1997 | 1998 | json-schema-traverse@^1.0.0: 1999 | version "1.0.0" 2000 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" 2001 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 2002 | 2003 | json-stable-stringify-without-jsonify@^1.0.1: 2004 | version "1.0.1" 2005 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 2006 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 2007 | 2008 | json5@^1.0.1: 2009 | version "1.0.1" 2010 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" 2011 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 2012 | dependencies: 2013 | minimist "^1.2.0" 2014 | 2015 | keyv@^3.0.0: 2016 | version "3.1.0" 2017 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 2018 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 2019 | dependencies: 2020 | json-buffer "3.0.0" 2021 | 2022 | latest-version@^5.0.0: 2023 | version "5.1.0" 2024 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 2025 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 2026 | dependencies: 2027 | package-json "^6.3.0" 2028 | 2029 | levn@^0.4.1: 2030 | version "0.4.1" 2031 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 2032 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 2033 | dependencies: 2034 | prelude-ls "^1.2.1" 2035 | type-check "~0.4.0" 2036 | 2037 | load-json-file@^2.0.0: 2038 | version "2.0.0" 2039 | resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" 2040 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 2041 | dependencies: 2042 | graceful-fs "^4.1.2" 2043 | parse-json "^2.2.0" 2044 | pify "^2.0.0" 2045 | strip-bom "^3.0.0" 2046 | 2047 | load-json-file@^4.0.0: 2048 | version "4.0.0" 2049 | resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" 2050 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 2051 | dependencies: 2052 | graceful-fs "^4.1.2" 2053 | parse-json "^4.0.0" 2054 | pify "^3.0.0" 2055 | strip-bom "^3.0.0" 2056 | 2057 | locate-path@^2.0.0: 2058 | version "2.0.0" 2059 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" 2060 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 2061 | dependencies: 2062 | p-locate "^2.0.0" 2063 | path-exists "^3.0.0" 2064 | 2065 | locate-path@^5.0.0: 2066 | version "5.0.0" 2067 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 2068 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 2069 | dependencies: 2070 | p-locate "^4.1.0" 2071 | 2072 | lodash.clonedeep@^4.5.0: 2073 | version "4.5.0" 2074 | resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" 2075 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 2076 | 2077 | lodash.flatten@^4.4.0: 2078 | version "4.4.0" 2079 | resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" 2080 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 2081 | 2082 | lodash.isfunction@^3.0.9: 2083 | version "3.0.9" 2084 | resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" 2085 | integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== 2086 | 2087 | lodash.isplainobject@^4.0.6: 2088 | version "4.0.6" 2089 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 2090 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= 2091 | 2092 | lodash.isregexp@^4.0.1: 2093 | version "4.0.1" 2094 | resolved "https://registry.yarnpkg.com/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz#e13e647b30cd559752a04cd912086faf7da1c30b" 2095 | integrity sha1-4T5kezDNVZdSoEzZEghvr32hwws= 2096 | 2097 | lodash.isstring@^4.0.1: 2098 | version "4.0.1" 2099 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 2100 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= 2101 | 2102 | lodash.truncate@^4.4.2: 2103 | version "4.4.2" 2104 | resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" 2105 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 2106 | 2107 | lodash@^4.17.15, lodash@^4.17.21: 2108 | version "4.17.21" 2109 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 2110 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2111 | 2112 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 2113 | version "1.0.1" 2114 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 2115 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 2116 | 2117 | lowercase-keys@^2.0.0: 2118 | version "2.0.0" 2119 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 2120 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 2121 | 2122 | lru-cache@^6.0.0: 2123 | version "6.0.0" 2124 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 2125 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 2126 | dependencies: 2127 | yallist "^4.0.0" 2128 | 2129 | make-dir@^3.0.0: 2130 | version "3.1.0" 2131 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 2132 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 2133 | dependencies: 2134 | semver "^6.0.0" 2135 | 2136 | make-error@^1.1.1: 2137 | version "1.3.6" 2138 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 2139 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2140 | 2141 | media-typer@0.3.0: 2142 | version "0.3.0" 2143 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 2144 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 2145 | 2146 | memorystream@^0.3.1: 2147 | version "0.3.1" 2148 | resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" 2149 | integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= 2150 | 2151 | merge-descriptors@1.0.1: 2152 | version "1.0.1" 2153 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 2154 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 2155 | 2156 | merge2@^1.3.0: 2157 | version "1.4.1" 2158 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 2159 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 2160 | 2161 | methods@~1.1.2: 2162 | version "1.1.2" 2163 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 2164 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 2165 | 2166 | micromatch@^4.0.2: 2167 | version "4.0.4" 2168 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" 2169 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 2170 | dependencies: 2171 | braces "^3.0.1" 2172 | picomatch "^2.2.3" 2173 | 2174 | mime-db@1.47.0: 2175 | version "1.47.0" 2176 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 2177 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 2178 | 2179 | mime-types@^2.1.12, mime-types@~2.1.24: 2180 | version "2.1.30" 2181 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 2182 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 2183 | dependencies: 2184 | mime-db "1.47.0" 2185 | 2186 | mime@1.6.0: 2187 | version "1.6.0" 2188 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 2189 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 2190 | 2191 | mimic-response@^1.0.0, mimic-response@^1.0.1: 2192 | version "1.0.1" 2193 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 2194 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 2195 | 2196 | mimic-response@^2.0.0: 2197 | version "2.1.0" 2198 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" 2199 | integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== 2200 | 2201 | minimatch@^3.0.4: 2202 | version "3.0.4" 2203 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2204 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 2205 | dependencies: 2206 | brace-expansion "^1.1.7" 2207 | 2208 | minimist@^1.2.0, minimist@^1.2.5: 2209 | version "1.2.5" 2210 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 2211 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 2212 | 2213 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 2214 | version "2.9.0" 2215 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 2216 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 2217 | dependencies: 2218 | safe-buffer "^5.1.2" 2219 | yallist "^3.0.0" 2220 | 2221 | minizlib@^1.2.1: 2222 | version "1.3.3" 2223 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 2224 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 2225 | dependencies: 2226 | minipass "^2.9.0" 2227 | 2228 | mkdirp@^0.5.0, mkdirp@^0.5.3: 2229 | version "0.5.5" 2230 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 2231 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 2232 | dependencies: 2233 | minimist "^1.2.5" 2234 | 2235 | ms@2.0.0: 2236 | version "2.0.0" 2237 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2238 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 2239 | 2240 | ms@2.1.1: 2241 | version "2.1.1" 2242 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2243 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 2244 | 2245 | ms@2.1.2: 2246 | version "2.1.2" 2247 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 2248 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2249 | 2250 | ms@^2.1.1: 2251 | version "2.1.3" 2252 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 2253 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 2254 | 2255 | nan@^2.14.0: 2256 | version "2.14.2" 2257 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 2258 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 2259 | 2260 | natural-compare@^1.4.0: 2261 | version "1.4.0" 2262 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 2263 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 2264 | 2265 | needle@^2.5.0: 2266 | version "2.6.0" 2267 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" 2268 | integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== 2269 | dependencies: 2270 | debug "^3.2.6" 2271 | iconv-lite "^0.4.4" 2272 | sax "^1.2.4" 2273 | 2274 | negotiator@0.6.2: 2275 | version "0.6.2" 2276 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 2277 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 2278 | 2279 | nice-try@^1.0.4: 2280 | version "1.0.5" 2281 | resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" 2282 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 2283 | 2284 | node-fetch@^2.6.1: 2285 | version "2.6.1" 2286 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 2287 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 2288 | 2289 | node-pre-gyp@^0.15.0: 2290 | version "0.15.0" 2291 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087" 2292 | integrity sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA== 2293 | dependencies: 2294 | detect-libc "^1.0.2" 2295 | mkdirp "^0.5.3" 2296 | needle "^2.5.0" 2297 | nopt "^4.0.1" 2298 | npm-packlist "^1.1.6" 2299 | npmlog "^4.0.2" 2300 | rc "^1.2.7" 2301 | rimraf "^2.6.1" 2302 | semver "^5.3.0" 2303 | tar "^4.4.2" 2304 | 2305 | nodemon@^2.0.7: 2306 | version "2.0.7" 2307 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" 2308 | integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== 2309 | dependencies: 2310 | chokidar "^3.2.2" 2311 | debug "^3.2.6" 2312 | ignore-by-default "^1.0.1" 2313 | minimatch "^3.0.4" 2314 | pstree.remy "^1.1.7" 2315 | semver "^5.7.1" 2316 | supports-color "^5.5.0" 2317 | touch "^3.1.0" 2318 | undefsafe "^2.0.3" 2319 | update-notifier "^4.1.0" 2320 | 2321 | nopt@^4.0.1: 2322 | version "4.0.3" 2323 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" 2324 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 2325 | dependencies: 2326 | abbrev "1" 2327 | osenv "^0.1.4" 2328 | 2329 | nopt@~1.0.10: 2330 | version "1.0.10" 2331 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 2332 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 2333 | dependencies: 2334 | abbrev "1" 2335 | 2336 | normalize-package-data@^2.3.2: 2337 | version "2.5.0" 2338 | resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" 2339 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 2340 | dependencies: 2341 | hosted-git-info "^2.1.4" 2342 | resolve "^1.10.0" 2343 | semver "2 || 3 || 4 || 5" 2344 | validate-npm-package-license "^3.0.1" 2345 | 2346 | normalize-path@^3.0.0, normalize-path@~3.0.0: 2347 | version "3.0.0" 2348 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2349 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2350 | 2351 | normalize-url@^4.1.0: 2352 | version "4.5.0" 2353 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" 2354 | integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== 2355 | 2356 | npm-bundled@^1.0.1: 2357 | version "1.1.2" 2358 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" 2359 | integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== 2360 | dependencies: 2361 | npm-normalize-package-bin "^1.0.1" 2362 | 2363 | npm-normalize-package-bin@^1.0.1: 2364 | version "1.0.1" 2365 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" 2366 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 2367 | 2368 | npm-packlist@^1.1.6: 2369 | version "1.4.8" 2370 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" 2371 | integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== 2372 | dependencies: 2373 | ignore-walk "^3.0.1" 2374 | npm-bundled "^1.0.1" 2375 | npm-normalize-package-bin "^1.0.1" 2376 | 2377 | npm-run-all@^4.1.5: 2378 | version "4.1.5" 2379 | resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" 2380 | integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== 2381 | dependencies: 2382 | ansi-styles "^3.2.1" 2383 | chalk "^2.4.1" 2384 | cross-spawn "^6.0.5" 2385 | memorystream "^0.3.1" 2386 | minimatch "^3.0.4" 2387 | pidtree "^0.3.0" 2388 | read-pkg "^3.0.0" 2389 | shell-quote "^1.6.1" 2390 | string.prototype.padend "^3.0.0" 2391 | 2392 | npmlog@^4.0.2: 2393 | version "4.1.2" 2394 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2395 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 2396 | dependencies: 2397 | are-we-there-yet "~1.1.2" 2398 | console-control-strings "~1.1.0" 2399 | gauge "~2.7.3" 2400 | set-blocking "~2.0.0" 2401 | 2402 | number-is-nan@^1.0.0: 2403 | version "1.0.1" 2404 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2405 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 2406 | 2407 | object-assign@^4, object-assign@^4.1.0: 2408 | version "4.1.1" 2409 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2410 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 2411 | 2412 | object-inspect@^1.9.0: 2413 | version "1.10.2" 2414 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz" 2415 | integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== 2416 | 2417 | object-keys@^1.0.12, object-keys@^1.1.1: 2418 | version "1.1.1" 2419 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 2420 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2421 | 2422 | object.assign@^4.1.2: 2423 | version "4.1.2" 2424 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" 2425 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 2426 | dependencies: 2427 | call-bind "^1.0.0" 2428 | define-properties "^1.1.3" 2429 | has-symbols "^1.0.1" 2430 | object-keys "^1.1.1" 2431 | 2432 | object.entries@^1.1.2: 2433 | version "1.1.3" 2434 | resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz" 2435 | integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== 2436 | dependencies: 2437 | call-bind "^1.0.0" 2438 | define-properties "^1.1.3" 2439 | es-abstract "^1.18.0-next.1" 2440 | has "^1.0.3" 2441 | 2442 | object.values@^1.1.1: 2443 | version "1.1.3" 2444 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz" 2445 | integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== 2446 | dependencies: 2447 | call-bind "^1.0.2" 2448 | define-properties "^1.1.3" 2449 | es-abstract "^1.18.0-next.2" 2450 | has "^1.0.3" 2451 | 2452 | on-finished@~2.3.0: 2453 | version "2.3.0" 2454 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2455 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 2456 | dependencies: 2457 | ee-first "1.1.1" 2458 | 2459 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2460 | version "1.4.0" 2461 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2462 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2463 | dependencies: 2464 | wrappy "1" 2465 | 2466 | optionator@^0.9.1: 2467 | version "0.9.1" 2468 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" 2469 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 2470 | dependencies: 2471 | deep-is "^0.1.3" 2472 | fast-levenshtein "^2.0.6" 2473 | levn "^0.4.1" 2474 | prelude-ls "^1.2.1" 2475 | type-check "^0.4.0" 2476 | word-wrap "^1.2.3" 2477 | 2478 | os-homedir@^1.0.0: 2479 | version "1.0.2" 2480 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2481 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 2482 | 2483 | os-tmpdir@^1.0.0: 2484 | version "1.0.2" 2485 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2486 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 2487 | 2488 | osenv@^0.1.4: 2489 | version "0.1.5" 2490 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2491 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 2492 | dependencies: 2493 | os-homedir "^1.0.0" 2494 | os-tmpdir "^1.0.0" 2495 | 2496 | p-cancelable@^1.0.0: 2497 | version "1.1.0" 2498 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 2499 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 2500 | 2501 | p-limit@^1.1.0: 2502 | version "1.3.0" 2503 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" 2504 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 2505 | dependencies: 2506 | p-try "^1.0.0" 2507 | 2508 | p-limit@^2.2.0: 2509 | version "2.3.0" 2510 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2511 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2512 | dependencies: 2513 | p-try "^2.0.0" 2514 | 2515 | p-locate@^2.0.0: 2516 | version "2.0.0" 2517 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" 2518 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 2519 | dependencies: 2520 | p-limit "^1.1.0" 2521 | 2522 | p-locate@^4.1.0: 2523 | version "4.1.0" 2524 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2525 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2526 | dependencies: 2527 | p-limit "^2.2.0" 2528 | 2529 | p-try@^1.0.0: 2530 | version "1.0.0" 2531 | resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" 2532 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 2533 | 2534 | p-try@^2.0.0: 2535 | version "2.2.0" 2536 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2537 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2538 | 2539 | package-json@^6.3.0: 2540 | version "6.5.0" 2541 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 2542 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 2543 | dependencies: 2544 | got "^9.6.0" 2545 | registry-auth-token "^4.0.0" 2546 | registry-url "^5.0.0" 2547 | semver "^6.2.0" 2548 | 2549 | packet-reader@1.0.0: 2550 | version "1.0.0" 2551 | resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" 2552 | integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== 2553 | 2554 | parent-module@^1.0.0: 2555 | version "1.0.1" 2556 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 2557 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2558 | dependencies: 2559 | callsites "^3.0.0" 2560 | 2561 | parse-json@^2.2.0: 2562 | version "2.2.0" 2563 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" 2564 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 2565 | dependencies: 2566 | error-ex "^1.2.0" 2567 | 2568 | parse-json@^4.0.0: 2569 | version "4.0.0" 2570 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" 2571 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 2572 | dependencies: 2573 | error-ex "^1.3.1" 2574 | json-parse-better-errors "^1.0.1" 2575 | 2576 | parseurl@~1.3.3: 2577 | version "1.3.3" 2578 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 2579 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 2580 | 2581 | path-exists@^3.0.0: 2582 | version "3.0.0" 2583 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" 2584 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2585 | 2586 | path-exists@^4.0.0: 2587 | version "4.0.0" 2588 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2589 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2590 | 2591 | path-is-absolute@^1.0.0: 2592 | version "1.0.1" 2593 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2594 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2595 | 2596 | path-key@^2.0.1: 2597 | version "2.0.1" 2598 | resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" 2599 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2600 | 2601 | path-key@^3.1.0: 2602 | version "3.1.1" 2603 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 2604 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2605 | 2606 | path-parse@^1.0.6: 2607 | version "1.0.6" 2608 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" 2609 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 2610 | 2611 | path-to-regexp@0.1.7: 2612 | version "0.1.7" 2613 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2614 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2615 | 2616 | path-type@^2.0.0: 2617 | version "2.0.0" 2618 | resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" 2619 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 2620 | dependencies: 2621 | pify "^2.0.0" 2622 | 2623 | path-type@^3.0.0: 2624 | version "3.0.0" 2625 | resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" 2626 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 2627 | dependencies: 2628 | pify "^3.0.0" 2629 | 2630 | path-type@^4.0.0: 2631 | version "4.0.0" 2632 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 2633 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2634 | 2635 | pg-connection-string@^2.5.0: 2636 | version "2.5.0" 2637 | resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" 2638 | integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== 2639 | 2640 | pg-int8@1.0.1: 2641 | version "1.0.1" 2642 | resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" 2643 | integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== 2644 | 2645 | pg-pool@^3.3.0: 2646 | version "3.3.0" 2647 | resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.3.0.tgz#12d5c7f65ea18a6e99ca9811bd18129071e562fc" 2648 | integrity sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg== 2649 | 2650 | pg-protocol@^1.2.0, pg-protocol@^1.5.0: 2651 | version "1.5.0" 2652 | resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" 2653 | integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== 2654 | 2655 | pg-types@^2.1.0, pg-types@^2.2.0: 2656 | version "2.2.0" 2657 | resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" 2658 | integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== 2659 | dependencies: 2660 | pg-int8 "1.0.1" 2661 | postgres-array "~2.0.0" 2662 | postgres-bytea "~1.0.0" 2663 | postgres-date "~1.0.4" 2664 | postgres-interval "^1.1.0" 2665 | 2666 | pg@^8.6.0: 2667 | version "8.6.0" 2668 | resolved "https://registry.yarnpkg.com/pg/-/pg-8.6.0.tgz#e222296b0b079b280cce106ea991703335487db2" 2669 | integrity sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ== 2670 | dependencies: 2671 | buffer-writer "2.0.0" 2672 | packet-reader "1.0.0" 2673 | pg-connection-string "^2.5.0" 2674 | pg-pool "^3.3.0" 2675 | pg-protocol "^1.5.0" 2676 | pg-types "^2.1.0" 2677 | pgpass "1.x" 2678 | 2679 | pgpass@1.x: 2680 | version "1.0.4" 2681 | resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" 2682 | integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== 2683 | dependencies: 2684 | split2 "^3.1.1" 2685 | 2686 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 2687 | version "2.2.3" 2688 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" 2689 | integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== 2690 | 2691 | pidtree@^0.3.0: 2692 | version "0.3.1" 2693 | resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" 2694 | integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== 2695 | 2696 | pify@^2.0.0: 2697 | version "2.3.0" 2698 | resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" 2699 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 2700 | 2701 | pify@^3.0.0: 2702 | version "3.0.0" 2703 | resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" 2704 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2705 | 2706 | pkg-dir@^2.0.0: 2707 | version "2.0.0" 2708 | resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz" 2709 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 2710 | dependencies: 2711 | find-up "^2.1.0" 2712 | 2713 | postgres-array@~2.0.0: 2714 | version "2.0.0" 2715 | resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" 2716 | integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== 2717 | 2718 | postgres-bytea@~1.0.0: 2719 | version "1.0.0" 2720 | resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" 2721 | integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= 2722 | 2723 | postgres-date@~1.0.4: 2724 | version "1.0.7" 2725 | resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" 2726 | integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== 2727 | 2728 | postgres-interval@^1.1.0: 2729 | version "1.2.0" 2730 | resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" 2731 | integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== 2732 | dependencies: 2733 | xtend "^4.0.0" 2734 | 2735 | prelude-ls@^1.2.1: 2736 | version "1.2.1" 2737 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 2738 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2739 | 2740 | prepend-http@^2.0.0: 2741 | version "2.0.0" 2742 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 2743 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 2744 | 2745 | prettier@^2.2.1: 2746 | version "2.2.1" 2747 | resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" 2748 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== 2749 | 2750 | process-nextick-args@~2.0.0: 2751 | version "2.0.1" 2752 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2753 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2754 | 2755 | progress@^2.0.0: 2756 | version "2.0.3" 2757 | resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" 2758 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2759 | 2760 | proxy-addr@~2.0.5: 2761 | version "2.0.6" 2762 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 2763 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 2764 | dependencies: 2765 | forwarded "~0.1.2" 2766 | ipaddr.js "1.9.1" 2767 | 2768 | pstree.remy@^1.1.7: 2769 | version "1.1.8" 2770 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 2771 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 2772 | 2773 | pump@^3.0.0: 2774 | version "3.0.0" 2775 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2776 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 2777 | dependencies: 2778 | end-of-stream "^1.1.0" 2779 | once "^1.3.1" 2780 | 2781 | punycode@^2.1.0: 2782 | version "2.1.1" 2783 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 2784 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2785 | 2786 | pupa@^2.0.1: 2787 | version "2.1.1" 2788 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 2789 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 2790 | dependencies: 2791 | escape-goat "^2.0.0" 2792 | 2793 | qs@6.7.0: 2794 | version "6.7.0" 2795 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2796 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2797 | 2798 | query-string@^7.0.0: 2799 | version "7.0.0" 2800 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.0.tgz#aaad2c8d5c6a6d0c6afada877fecbd56af79e609" 2801 | integrity sha512-Iy7moLybliR5ZgrK/1R3vjrXq03S13Vz4Rbm5Jg3EFq1LUmQppto0qtXz4vqZ386MSRjZgnTSZ9QC+NZOSd/XA== 2802 | dependencies: 2803 | decode-uri-component "^0.2.0" 2804 | filter-obj "^1.1.0" 2805 | split-on-first "^1.0.0" 2806 | strict-uri-encode "^2.0.0" 2807 | 2808 | queue-microtask@^1.2.2: 2809 | version "1.2.3" 2810 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 2811 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2812 | 2813 | range-parser@~1.2.1: 2814 | version "1.2.1" 2815 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2816 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2817 | 2818 | raw-body@2.4.0: 2819 | version "2.4.0" 2820 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2821 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2822 | dependencies: 2823 | bytes "3.1.0" 2824 | http-errors "1.7.2" 2825 | iconv-lite "0.4.24" 2826 | unpipe "1.0.0" 2827 | 2828 | raw-body@^2.3.3: 2829 | version "2.4.1" 2830 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" 2831 | integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== 2832 | dependencies: 2833 | bytes "3.1.0" 2834 | http-errors "1.7.3" 2835 | iconv-lite "0.4.24" 2836 | unpipe "1.0.0" 2837 | 2838 | rc@^1.2.7, rc@^1.2.8: 2839 | version "1.2.8" 2840 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2841 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 2842 | dependencies: 2843 | deep-extend "^0.6.0" 2844 | ini "~1.3.0" 2845 | minimist "^1.2.0" 2846 | strip-json-comments "~2.0.1" 2847 | 2848 | read-pkg-up@^2.0.0: 2849 | version "2.0.0" 2850 | resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" 2851 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 2852 | dependencies: 2853 | find-up "^2.0.0" 2854 | read-pkg "^2.0.0" 2855 | 2856 | read-pkg@^2.0.0: 2857 | version "2.0.0" 2858 | resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" 2859 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 2860 | dependencies: 2861 | load-json-file "^2.0.0" 2862 | normalize-package-data "^2.3.2" 2863 | path-type "^2.0.0" 2864 | 2865 | read-pkg@^3.0.0: 2866 | version "3.0.0" 2867 | resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" 2868 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2869 | dependencies: 2870 | load-json-file "^4.0.0" 2871 | normalize-package-data "^2.3.2" 2872 | path-type "^3.0.0" 2873 | 2874 | readable-stream@^2.0.6: 2875 | version "2.3.7" 2876 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2877 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2878 | dependencies: 2879 | core-util-is "~1.0.0" 2880 | inherits "~2.0.3" 2881 | isarray "~1.0.0" 2882 | process-nextick-args "~2.0.0" 2883 | safe-buffer "~5.1.1" 2884 | string_decoder "~1.1.1" 2885 | util-deprecate "~1.0.1" 2886 | 2887 | readable-stream@^3.0.0: 2888 | version "3.6.0" 2889 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2890 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2891 | dependencies: 2892 | inherits "^2.0.3" 2893 | string_decoder "^1.1.1" 2894 | util-deprecate "^1.0.1" 2895 | 2896 | readdirp@~3.5.0: 2897 | version "3.5.0" 2898 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2899 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2900 | dependencies: 2901 | picomatch "^2.2.1" 2902 | 2903 | regexpp@^3.0.0, regexpp@^3.1.0: 2904 | version "3.1.0" 2905 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" 2906 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 2907 | 2908 | registry-auth-token@^4.0.0: 2909 | version "4.2.1" 2910 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 2911 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 2912 | dependencies: 2913 | rc "^1.2.8" 2914 | 2915 | registry-url@^5.0.0: 2916 | version "5.1.0" 2917 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 2918 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 2919 | dependencies: 2920 | rc "^1.2.8" 2921 | 2922 | require-directory@^2.1.1: 2923 | version "2.1.1" 2924 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2925 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2926 | 2927 | require-from-string@^2.0.2: 2928 | version "2.0.2" 2929 | resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" 2930 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2931 | 2932 | require-main-filename@^2.0.0: 2933 | version "2.0.0" 2934 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2935 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2936 | 2937 | resolve-from@^4.0.0: 2938 | version "4.0.0" 2939 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 2940 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2941 | 2942 | resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0: 2943 | version "1.20.0" 2944 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" 2945 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 2946 | dependencies: 2947 | is-core-module "^2.2.0" 2948 | path-parse "^1.0.6" 2949 | 2950 | responselike@^1.0.2: 2951 | version "1.0.2" 2952 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 2953 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 2954 | dependencies: 2955 | lowercase-keys "^1.0.0" 2956 | 2957 | reusify@^1.0.4: 2958 | version "1.0.4" 2959 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 2960 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2961 | 2962 | rimraf@^2.6.1: 2963 | version "2.7.1" 2964 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2965 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2966 | dependencies: 2967 | glob "^7.1.3" 2968 | 2969 | rimraf@^3.0.2: 2970 | version "3.0.2" 2971 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 2972 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2973 | dependencies: 2974 | glob "^7.1.3" 2975 | 2976 | run-parallel@^1.1.9: 2977 | version "1.2.0" 2978 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 2979 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2980 | dependencies: 2981 | queue-microtask "^1.2.2" 2982 | 2983 | rw@1: 2984 | version "1.3.3" 2985 | resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" 2986 | integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= 2987 | 2988 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2989 | version "5.1.2" 2990 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2991 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2992 | 2993 | safe-buffer@^5.1.2, safe-buffer@~5.2.0: 2994 | version "5.2.1" 2995 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2996 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2997 | 2998 | "safer-buffer@>= 2.1.2 < 3": 2999 | version "2.1.2" 3000 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 3001 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 3002 | 3003 | sax@^1.2.4: 3004 | version "1.2.4" 3005 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 3006 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 3007 | 3008 | semver-diff@^3.1.1: 3009 | version "3.1.1" 3010 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 3011 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 3012 | dependencies: 3013 | semver "^6.3.0" 3014 | 3015 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: 3016 | version "5.7.1" 3017 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 3018 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 3019 | 3020 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 3021 | version "6.3.0" 3022 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 3023 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 3024 | 3025 | semver@^7.2.1, semver@^7.3.2: 3026 | version "7.3.5" 3027 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" 3028 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 3029 | dependencies: 3030 | lru-cache "^6.0.0" 3031 | 3032 | send@0.17.1: 3033 | version "0.17.1" 3034 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 3035 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 3036 | dependencies: 3037 | debug "2.6.9" 3038 | depd "~1.1.2" 3039 | destroy "~1.0.4" 3040 | encodeurl "~1.0.2" 3041 | escape-html "~1.0.3" 3042 | etag "~1.8.1" 3043 | fresh "0.5.2" 3044 | http-errors "~1.7.2" 3045 | mime "1.6.0" 3046 | ms "2.1.1" 3047 | on-finished "~2.3.0" 3048 | range-parser "~1.2.1" 3049 | statuses "~1.5.0" 3050 | 3051 | serve-static@1.14.1: 3052 | version "1.14.1" 3053 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 3054 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 3055 | dependencies: 3056 | encodeurl "~1.0.2" 3057 | escape-html "~1.0.3" 3058 | parseurl "~1.3.3" 3059 | send "0.17.1" 3060 | 3061 | set-blocking@^2.0.0, set-blocking@~2.0.0: 3062 | version "2.0.0" 3063 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 3064 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 3065 | 3066 | setprototypeof@1.1.1: 3067 | version "1.1.1" 3068 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 3069 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 3070 | 3071 | shebang-command@^1.2.0: 3072 | version "1.2.0" 3073 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" 3074 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 3075 | dependencies: 3076 | shebang-regex "^1.0.0" 3077 | 3078 | shebang-command@^2.0.0: 3079 | version "2.0.0" 3080 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 3081 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 3082 | dependencies: 3083 | shebang-regex "^3.0.0" 3084 | 3085 | shebang-regex@^1.0.0: 3086 | version "1.0.0" 3087 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" 3088 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 3089 | 3090 | shebang-regex@^3.0.0: 3091 | version "3.0.0" 3092 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 3093 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 3094 | 3095 | shell-quote@^1.6.1: 3096 | version "1.7.2" 3097 | resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" 3098 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 3099 | 3100 | signal-exit@^3.0.0, signal-exit@^3.0.2: 3101 | version "3.0.3" 3102 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 3103 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 3104 | 3105 | simple-concat@^1.0.0: 3106 | version "1.0.1" 3107 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" 3108 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== 3109 | 3110 | simple-get@^3.0.3: 3111 | version "3.1.0" 3112 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" 3113 | integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== 3114 | dependencies: 3115 | decompress-response "^4.2.0" 3116 | once "^1.3.1" 3117 | simple-concat "^1.0.0" 3118 | 3119 | slash@^3.0.0: 3120 | version "3.0.0" 3121 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 3122 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 3123 | 3124 | slice-ansi@^4.0.0: 3125 | version "4.0.0" 3126 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" 3127 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 3128 | dependencies: 3129 | ansi-styles "^4.0.0" 3130 | astral-regex "^2.0.0" 3131 | is-fullwidth-code-point "^3.0.0" 3132 | 3133 | source-map-support@^0.5.17: 3134 | version "0.5.19" 3135 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" 3136 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 3137 | dependencies: 3138 | buffer-from "^1.0.0" 3139 | source-map "^0.6.0" 3140 | 3141 | source-map@^0.6.0: 3142 | version "0.6.1" 3143 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 3144 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 3145 | 3146 | spdx-correct@^3.0.0: 3147 | version "3.1.1" 3148 | resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" 3149 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 3150 | dependencies: 3151 | spdx-expression-parse "^3.0.0" 3152 | spdx-license-ids "^3.0.0" 3153 | 3154 | spdx-exceptions@^2.1.0: 3155 | version "2.3.0" 3156 | resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" 3157 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 3158 | 3159 | spdx-expression-parse@^3.0.0: 3160 | version "3.0.1" 3161 | resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" 3162 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 3163 | dependencies: 3164 | spdx-exceptions "^2.1.0" 3165 | spdx-license-ids "^3.0.0" 3166 | 3167 | spdx-license-ids@^3.0.0: 3168 | version "3.0.7" 3169 | resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" 3170 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== 3171 | 3172 | split-on-first@^1.0.0: 3173 | version "1.1.0" 3174 | resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" 3175 | integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== 3176 | 3177 | split2@^3.1.1: 3178 | version "3.2.2" 3179 | resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" 3180 | integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== 3181 | dependencies: 3182 | readable-stream "^3.0.0" 3183 | 3184 | sprintf-js@~1.0.2: 3185 | version "1.0.3" 3186 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 3187 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 3188 | 3189 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 3190 | version "1.5.0" 3191 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 3192 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 3193 | 3194 | strict-uri-encode@^2.0.0: 3195 | version "2.0.0" 3196 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" 3197 | integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= 3198 | 3199 | string-width@^1.0.1: 3200 | version "1.0.2" 3201 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 3202 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 3203 | dependencies: 3204 | code-point-at "^1.0.0" 3205 | is-fullwidth-code-point "^1.0.0" 3206 | strip-ansi "^3.0.0" 3207 | 3208 | "string-width@^1.0.2 || 2": 3209 | version "2.1.1" 3210 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 3211 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 3212 | dependencies: 3213 | is-fullwidth-code-point "^2.0.0" 3214 | strip-ansi "^4.0.0" 3215 | 3216 | string-width@^3.0.0: 3217 | version "3.1.0" 3218 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 3219 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 3220 | dependencies: 3221 | emoji-regex "^7.0.1" 3222 | is-fullwidth-code-point "^2.0.0" 3223 | strip-ansi "^5.1.0" 3224 | 3225 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: 3226 | version "4.2.2" 3227 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 3228 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 3229 | dependencies: 3230 | emoji-regex "^8.0.0" 3231 | is-fullwidth-code-point "^3.0.0" 3232 | strip-ansi "^6.0.0" 3233 | 3234 | string.prototype.padend@^3.0.0: 3235 | version "3.1.2" 3236 | resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz" 3237 | integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== 3238 | dependencies: 3239 | call-bind "^1.0.2" 3240 | define-properties "^1.1.3" 3241 | es-abstract "^1.18.0-next.2" 3242 | 3243 | string.prototype.trimend@^1.0.4: 3244 | version "1.0.4" 3245 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" 3246 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 3247 | dependencies: 3248 | call-bind "^1.0.2" 3249 | define-properties "^1.1.3" 3250 | 3251 | string.prototype.trimstart@^1.0.4: 3252 | version "1.0.4" 3253 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" 3254 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 3255 | dependencies: 3256 | call-bind "^1.0.2" 3257 | define-properties "^1.1.3" 3258 | 3259 | string_decoder@^1.1.1: 3260 | version "1.3.0" 3261 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 3262 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 3263 | dependencies: 3264 | safe-buffer "~5.2.0" 3265 | 3266 | string_decoder@~1.1.1: 3267 | version "1.1.1" 3268 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 3269 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 3270 | dependencies: 3271 | safe-buffer "~5.1.0" 3272 | 3273 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 3274 | version "3.0.1" 3275 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3276 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 3277 | dependencies: 3278 | ansi-regex "^2.0.0" 3279 | 3280 | strip-ansi@^4.0.0: 3281 | version "4.0.0" 3282 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 3283 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 3284 | dependencies: 3285 | ansi-regex "^3.0.0" 3286 | 3287 | strip-ansi@^5.1.0: 3288 | version "5.2.0" 3289 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 3290 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 3291 | dependencies: 3292 | ansi-regex "^4.1.0" 3293 | 3294 | strip-ansi@^6.0.0: 3295 | version "6.0.0" 3296 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 3297 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 3298 | dependencies: 3299 | ansi-regex "^5.0.0" 3300 | 3301 | strip-bom@^3.0.0: 3302 | version "3.0.0" 3303 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 3304 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 3305 | 3306 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 3307 | version "3.1.1" 3308 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 3309 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 3310 | 3311 | strip-json-comments@~2.0.1: 3312 | version "2.0.1" 3313 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 3314 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 3315 | 3316 | supports-color@^5.3.0, supports-color@^5.5.0: 3317 | version "5.5.0" 3318 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 3319 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 3320 | dependencies: 3321 | has-flag "^3.0.0" 3322 | 3323 | supports-color@^7.1.0: 3324 | version "7.2.0" 3325 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 3326 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 3327 | dependencies: 3328 | has-flag "^4.0.0" 3329 | 3330 | table@^6.0.4: 3331 | version "6.6.0" 3332 | resolved "https://registry.npmjs.org/table/-/table-6.6.0.tgz" 3333 | integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== 3334 | dependencies: 3335 | ajv "^8.0.1" 3336 | lodash.clonedeep "^4.5.0" 3337 | lodash.flatten "^4.4.0" 3338 | lodash.truncate "^4.4.2" 3339 | slice-ansi "^4.0.0" 3340 | string-width "^4.2.0" 3341 | strip-ansi "^6.0.0" 3342 | 3343 | tar@^4.4.2: 3344 | version "4.4.13" 3345 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 3346 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 3347 | dependencies: 3348 | chownr "^1.1.1" 3349 | fs-minipass "^1.2.5" 3350 | minipass "^2.8.6" 3351 | minizlib "^1.2.1" 3352 | mkdirp "^0.5.0" 3353 | safe-buffer "^5.1.2" 3354 | yallist "^3.0.3" 3355 | 3356 | term-size@^2.1.0: 3357 | version "2.2.1" 3358 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 3359 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 3360 | 3361 | text-table@^0.2.0: 3362 | version "0.2.0" 3363 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 3364 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 3365 | 3366 | to-readable-stream@^1.0.0: 3367 | version "1.0.0" 3368 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 3369 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 3370 | 3371 | to-regex-range@^5.0.1: 3372 | version "5.0.1" 3373 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 3374 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 3375 | dependencies: 3376 | is-number "^7.0.0" 3377 | 3378 | toidentifier@1.0.0: 3379 | version "1.0.0" 3380 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 3381 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 3382 | 3383 | touch@^3.1.0: 3384 | version "3.1.0" 3385 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 3386 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 3387 | dependencies: 3388 | nopt "~1.0.10" 3389 | 3390 | ts-node@^9.1.1: 3391 | version "9.1.1" 3392 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" 3393 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== 3394 | dependencies: 3395 | arg "^4.1.0" 3396 | create-require "^1.1.0" 3397 | diff "^4.0.1" 3398 | make-error "^1.1.1" 3399 | source-map-support "^0.5.17" 3400 | yn "3.1.1" 3401 | 3402 | tsconfig-paths@^3.9.0: 3403 | version "3.9.0" 3404 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz" 3405 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 3406 | dependencies: 3407 | "@types/json5" "^0.0.29" 3408 | json5 "^1.0.1" 3409 | minimist "^1.2.0" 3410 | strip-bom "^3.0.0" 3411 | 3412 | tslib@^1.8.1: 3413 | version "1.14.1" 3414 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 3415 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 3416 | 3417 | tsscmp@^1.0.6: 3418 | version "1.0.6" 3419 | resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" 3420 | integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== 3421 | 3422 | tsutils@^3.17.1: 3423 | version "3.21.0" 3424 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 3425 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 3426 | dependencies: 3427 | tslib "^1.8.1" 3428 | 3429 | type-check@^0.4.0, type-check@~0.4.0: 3430 | version "0.4.0" 3431 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 3432 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 3433 | dependencies: 3434 | prelude-ls "^1.2.1" 3435 | 3436 | type-fest@^0.20.2: 3437 | version "0.20.2" 3438 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 3439 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 3440 | 3441 | type-fest@^0.8.1: 3442 | version "0.8.1" 3443 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 3444 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 3445 | 3446 | type-is@~1.6.17, type-is@~1.6.18: 3447 | version "1.6.18" 3448 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 3449 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 3450 | dependencies: 3451 | media-typer "0.3.0" 3452 | mime-types "~2.1.24" 3453 | 3454 | typedarray-to-buffer@^3.1.5: 3455 | version "3.1.5" 3456 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 3457 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 3458 | dependencies: 3459 | is-typedarray "^1.0.0" 3460 | 3461 | typescript@^4.2.4: 3462 | version "4.2.4" 3463 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz" 3464 | integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== 3465 | 3466 | unbox-primitive@^1.0.0: 3467 | version "1.0.1" 3468 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" 3469 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 3470 | dependencies: 3471 | function-bind "^1.1.1" 3472 | has-bigints "^1.0.1" 3473 | has-symbols "^1.0.2" 3474 | which-boxed-primitive "^1.0.2" 3475 | 3476 | undefsafe@^2.0.3: 3477 | version "2.0.3" 3478 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 3479 | integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 3480 | dependencies: 3481 | debug "^2.2.0" 3482 | 3483 | unique-string@^2.0.0: 3484 | version "2.0.0" 3485 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 3486 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 3487 | dependencies: 3488 | crypto-random-string "^2.0.0" 3489 | 3490 | universal-user-agent@^6.0.0: 3491 | version "6.0.0" 3492 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 3493 | integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 3494 | 3495 | unpipe@1.0.0, unpipe@~1.0.0: 3496 | version "1.0.0" 3497 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 3498 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 3499 | 3500 | update-notifier@^4.1.0: 3501 | version "4.1.3" 3502 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" 3503 | integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== 3504 | dependencies: 3505 | boxen "^4.2.0" 3506 | chalk "^3.0.0" 3507 | configstore "^5.0.1" 3508 | has-yarn "^2.1.0" 3509 | import-lazy "^2.1.0" 3510 | is-ci "^2.0.0" 3511 | is-installed-globally "^0.3.1" 3512 | is-npm "^4.0.0" 3513 | is-yarn-global "^0.3.0" 3514 | latest-version "^5.0.0" 3515 | pupa "^2.0.1" 3516 | semver-diff "^3.1.1" 3517 | xdg-basedir "^4.0.0" 3518 | 3519 | uri-js@^4.2.2: 3520 | version "4.4.1" 3521 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 3522 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 3523 | dependencies: 3524 | punycode "^2.1.0" 3525 | 3526 | url-parse-lax@^3.0.0: 3527 | version "3.0.0" 3528 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 3529 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 3530 | dependencies: 3531 | prepend-http "^2.0.0" 3532 | 3533 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 3534 | version "1.0.2" 3535 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3536 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 3537 | 3538 | utils-merge@1.0.1: 3539 | version "1.0.1" 3540 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 3541 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 3542 | 3543 | v8-compile-cache@^2.0.3: 3544 | version "2.3.0" 3545 | resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" 3546 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 3547 | 3548 | validate-npm-package-license@^3.0.1: 3549 | version "3.0.4" 3550 | resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" 3551 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 3552 | dependencies: 3553 | spdx-correct "^3.0.0" 3554 | spdx-expression-parse "^3.0.0" 3555 | 3556 | vary@^1, vary@~1.1.2: 3557 | version "1.1.2" 3558 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 3559 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 3560 | 3561 | which-boxed-primitive@^1.0.2: 3562 | version "1.0.2" 3563 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 3564 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 3565 | dependencies: 3566 | is-bigint "^1.0.1" 3567 | is-boolean-object "^1.1.0" 3568 | is-number-object "^1.0.4" 3569 | is-string "^1.0.5" 3570 | is-symbol "^1.0.3" 3571 | 3572 | which-module@^2.0.0: 3573 | version "2.0.0" 3574 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3575 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 3576 | 3577 | which@^1.2.9: 3578 | version "1.3.1" 3579 | resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" 3580 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 3581 | dependencies: 3582 | isexe "^2.0.0" 3583 | 3584 | which@^2.0.1: 3585 | version "2.0.2" 3586 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 3587 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 3588 | dependencies: 3589 | isexe "^2.0.0" 3590 | 3591 | wide-align@^1.1.0: 3592 | version "1.1.3" 3593 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3594 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 3595 | dependencies: 3596 | string-width "^1.0.2 || 2" 3597 | 3598 | widest-line@^3.1.0: 3599 | version "3.1.0" 3600 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 3601 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 3602 | dependencies: 3603 | string-width "^4.0.0" 3604 | 3605 | word-wrap@^1.2.3: 3606 | version "1.2.3" 3607 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" 3608 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 3609 | 3610 | wrap-ansi@^6.2.0: 3611 | version "6.2.0" 3612 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 3613 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 3614 | dependencies: 3615 | ansi-styles "^4.0.0" 3616 | string-width "^4.1.0" 3617 | strip-ansi "^6.0.0" 3618 | 3619 | wrappy@1: 3620 | version "1.0.2" 3621 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3622 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 3623 | 3624 | write-file-atomic@^3.0.0: 3625 | version "3.0.3" 3626 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 3627 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 3628 | dependencies: 3629 | imurmurhash "^0.1.4" 3630 | is-typedarray "^1.0.0" 3631 | signal-exit "^3.0.2" 3632 | typedarray-to-buffer "^3.1.5" 3633 | 3634 | xdg-basedir@^4.0.0: 3635 | version "4.0.0" 3636 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 3637 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 3638 | 3639 | xtend@^4.0.0: 3640 | version "4.0.2" 3641 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 3642 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 3643 | 3644 | y18n@^4.0.0: 3645 | version "4.0.3" 3646 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 3647 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 3648 | 3649 | yallist@^3.0.0, yallist@^3.0.3: 3650 | version "3.1.1" 3651 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 3652 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 3653 | 3654 | yallist@^4.0.0: 3655 | version "4.0.0" 3656 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 3657 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 3658 | 3659 | yargs-parser@^18.1.2: 3660 | version "18.1.3" 3661 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 3662 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== 3663 | dependencies: 3664 | camelcase "^5.0.0" 3665 | decamelize "^1.2.0" 3666 | 3667 | yargs@^15.3.1: 3668 | version "15.4.1" 3669 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 3670 | integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== 3671 | dependencies: 3672 | cliui "^6.0.0" 3673 | decamelize "^1.2.0" 3674 | find-up "^4.1.0" 3675 | get-caller-file "^2.0.1" 3676 | require-directory "^2.1.1" 3677 | require-main-filename "^2.0.0" 3678 | set-blocking "^2.0.0" 3679 | string-width "^4.2.0" 3680 | which-module "^2.0.0" 3681 | y18n "^4.0.0" 3682 | yargs-parser "^18.1.2" 3683 | 3684 | yn@3.1.1: 3685 | version "3.1.1" 3686 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" 3687 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 3688 | --------------------------------------------------------------------------------