├── .eslintignore ├── .prettierignore ├── .gitignore ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE.md ├── src ├── index.ts └── formatters │ ├── lib │ └── get-in.ts │ ├── get-user-email.ts │ └── git-log.ts ├── static ├── screenshot.png └── screenshot-when-filtered.png ├── .prettierrc ├── .codeclimate.yml ├── .editorconfig ├── tsconfig.json ├── .travis.yml ├── .eslintrc.js ├── LICENSE ├── DEPENDENCIES.md ├── package.json ├── CHANGELOG.md ├── README.md └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | *.d.ts 2 | dist 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.md 2 | dist 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.log.* 3 | coverage 4 | dist 5 | node_modules 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: fold_left 2 | custom: ['https://www.paypal.me/foldleft'] 3 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { gitLogFormatter } from './formatters/git-log'; 2 | 3 | export = gitLogFormatter; 4 | -------------------------------------------------------------------------------- /static/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamieMason/eslint-formatter-git-log/HEAD/static/screenshot.png -------------------------------------------------------------------------------- /static/screenshot-when-filtered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamieMason/eslint-formatter-git-log/HEAD/static/screenshot-when-filtered.png -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "printWidth": 80, 4 | "proseWrap": "always", 5 | "singleQuote": true, 6 | "trailingComma": "all" 7 | } 8 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | TypeScript: true 3 | exclude_paths: 4 | - 'dist/*' 5 | plugins: 6 | tslint: 7 | enabled: true 8 | config: .eslintrc.js 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.ts] 4 | charset = utf-8 5 | indent_size = 2 6 | indent_style = space 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "forceConsistentCasingInFileNames": true, 5 | "lib": ["es2017", "es6"], 6 | "module": "commonjs", 7 | "outDir": "./dist", 8 | "skipLibCheck": true, 9 | "strict": true, 10 | "target": "es5" 11 | }, 12 | "include": ["./package.json", "./src/**/*.ts"] 13 | } 14 | -------------------------------------------------------------------------------- /src/formatters/lib/get-in.ts: -------------------------------------------------------------------------------- 1 | const isWalkable = (value: any) => 2 | value !== null && typeof value !== 'undefined'; 3 | 4 | const getChild = (parent: any, child: any): any => 5 | isWalkable(parent) ? parent[child] : undefined; 6 | 7 | export const getIn = ( 8 | pathToValue: string | number, 9 | owner?: any, 10 | defaultValue?: T, 11 | ) => { 12 | const value = `${pathToValue}`.split('.').reduce(getChild, owner); 13 | return value !== undefined ? (value as T) : defaultValue; 14 | }; 15 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | matrix: 3 | fast_finish: true 4 | node_js: 5 | - 16.13.1 6 | before_script: 7 | - curl -L 8 | https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 9 | > ./codeclimate-test-reporter 10 | - chmod +x ./codeclimate-test-reporter 11 | - ./codeclimate-test-reporter before-build 12 | - npm run build 13 | script: 14 | - npm run lint 15 | after_script: 16 | - ./codeclimate-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT 17 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | plugins: ['@typescript-eslint'], 4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], 5 | parserOptions: { 6 | ecmaVersion: 6, 7 | sourceType: 'module', 8 | }, 9 | env: { 10 | es6: true, 11 | node: true, 12 | }, 13 | rules: { 14 | '@typescript-eslint/no-var-requires': 0, 15 | '@typescript-eslint/consistent-type-imports': [ 16 | 2, 17 | { prefer: 'type-imports' }, 18 | ], 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Explain how to reproduce a Bug 4 | --- 5 | 6 | ## Description 7 | 8 | 13 | 14 | ## Suggested Solution 15 | 16 | 20 | 21 | ## Help Needed 22 | 23 | 27 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description (What) 2 | 3 | 9 | 10 | ## Justification (Why) 11 | 12 | 18 | 19 | ## How Can This Be Tested? 20 | 21 | 24 | -------------------------------------------------------------------------------- /src/formatters/get-user-email.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | import { execSync } from 'child_process'; 3 | 4 | export const getUserEmail = () => { 5 | try { 6 | const mailmap = execSync( 7 | 'echo "<$(git config user.email)>" | git check-mailmap --stdin', 8 | { encoding: 'utf8', stdio: ['pipe', null, null] }, 9 | ); 10 | return (mailmap.match(/<([^>]+)>\s?$/) || [])[1] || ''; 11 | } catch (err) { 12 | console.error( 13 | chalk.red( 14 | ` 15 | ERROR: No Git Committer Email could be found. 16 | 17 | Possible Reasons 18 | 1. git config user.email did not return a valid Email. 19 | 2. git check-mailmap did not return a valid Email. 20 | 21 | https://github.com/JamieMason/eslint-formatter-git-log 22 | `.replace(/^\s+/, ''), 23 | ), 24 | ); 25 | throw err; 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | --- 5 | 6 | ## Description 7 | 8 | 14 | 15 | ## Suggested Solution 16 | 17 | 21 | 22 | ## Help Needed 23 | 24 | 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Jamie Mason 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /DEPENDENCIES.md: -------------------------------------------------------------------------------- 1 | # eslint-formatter-git-log 2 | 3 | ESLint Formatter featuring Git Author, Date, and Hash 4 | 5 | ## Installation 6 | 7 | This is a [Node.js](https://nodejs.org/) module available through the 8 | [npm registry](https://www.npmjs.com/). It can be installed using the 9 | [`npm`](https://docs.npmjs.com/getting-started/installing-npm-packages-locally) 10 | or 11 | [`yarn`](https://yarnpkg.com/en/) 12 | command line tools. 13 | 14 | ```sh 15 | npm install eslint-formatter-git-log --save 16 | ``` 17 | 18 | ## Dependencies 19 | 20 | - [chalk](https://ghub.io/chalk): Terminal string styling done right 21 | 22 | ## Dev Dependencies 23 | 24 | - [@types/eslint](https://ghub.io/@types/eslint): TypeScript definitions for eslint 25 | - [@types/node](https://ghub.io/@types/node): TypeScript definitions for Node.js 26 | - [@typescript-eslint/eslint-plugin](https://ghub.io/@typescript-eslint/eslint-plugin): TypeScript plugin for ESLint 27 | - [@typescript-eslint/parser](https://ghub.io/@typescript-eslint/parser): An ESLint custom parser which leverages TypeScript ESTree 28 | - [eslint](https://ghub.io/eslint): An AST-based pattern checker for JavaScript. 29 | - [prettier](https://ghub.io/prettier): Prettier is an opinionated code formatter 30 | - [typescript](https://ghub.io/typescript): TypeScript is a language for application scale JavaScript development 31 | 32 | ## License 33 | 34 | MIT -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-formatter-git-log", 3 | "description": "ESLint Formatter featuring Git Author, Date, and Hash", 4 | "version": "0.6.4", 5 | "author": "Jamie Mason (https://github.com/JamieMason)", 6 | "bugs": "https://github.com/JamieMason/eslint-formatter-git-log/issues", 7 | "dependencies": { 8 | "chalk": "4.1.2" 9 | }, 10 | "devDependencies": { 11 | "@types/eslint": "8.4.1", 12 | "@types/node": "17.0.31", 13 | "@typescript-eslint/eslint-plugin": "5.21.0", 14 | "@typescript-eslint/parser": "5.21.0", 15 | "eslint": "8.14.0", 16 | "prettier": "2.6.2", 17 | "typescript": "4.6.4" 18 | }, 19 | "engines": { 20 | "node": ">=16" 21 | }, 22 | "files": [ 23 | "dist" 24 | ], 25 | "homepage": "https://github.com/JamieMason/eslint-formatter-git-log", 26 | "keywords": [ 27 | "eslint", 28 | "eslint-formatter", 29 | "eslintformatter", 30 | "formatter", 31 | "git", 32 | "git-log", 33 | "lint", 34 | "reporter", 35 | "validate" 36 | ], 37 | "license": "MIT", 38 | "main": "dist/index.js", 39 | "peerDependencies": { 40 | "eslint": ">=8.0.0" 41 | }, 42 | "repository": "JamieMason/eslint-formatter-git-log", 43 | "resolutions": { 44 | "chalk": "4.1.2" 45 | }, 46 | "scripts": { 47 | "build": "rm -rf ./dist && tsc --project .", 48 | "format": "yarn format:lint && yarn format:source", 49 | "format:lint": "yarn lint --fix", 50 | "format:source": "prettier --write .", 51 | "lint": "eslint --ext .ts .", 52 | "prepack": "yarn build" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [0.6.4](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.5.4...0.6.4) (2022-05-02) 2 | 3 | 4 | ### Features 5 | 6 | * **output:** remove footer containing totals of each type of entry ([9a85f42](https://github.com/JamieMason/eslint-formatter-git-log/commit/9a85f4266962203861c0eb6143f7c7f04af839c9)), closes [#2](https://github.com/JamieMason/eslint-formatter-git-log/issues/2) 7 | 8 | 9 | 10 | ## [0.5.4](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.5.3...0.5.4) (2022-05-02) 11 | 12 | 13 | ### Bug Fixes 14 | 15 | * **npm:** update dependencies ([036eae2](https://github.com/JamieMason/eslint-formatter-git-log/commit/036eae28146ad0f6216457accd7b09b38485c0eb)) 16 | 17 | 18 | 19 | ## [0.5.3](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.5.1...0.5.3) (2019-08-28) 20 | 21 | 22 | ### Bug Fixes 23 | 24 | * **format:** handle undefined file locations ([860ac92](https://github.com/JamieMason/eslint-formatter-git-log/commit/860ac92de589e7e92830ec059d79d89d0bb9a829)) 25 | * **npm:** update dependencies ([e6f3143](https://github.com/JamieMason/eslint-formatter-git-log/commit/e6f3143fa387219912f7dd0a19c6eee04377ec8d)) 26 | 27 | 28 | 29 | ## [0.5.1](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.3.1...0.5.1) (2019-08-04) 30 | 31 | 32 | ### Features 33 | 34 | * **format:** add .getUserEmail() method to aid with filtered reports ([f7e3d87](https://github.com/JamieMason/eslint-formatter-git-log/commit/f7e3d870ec47905084a521c0bc6eaf6fd808e226)) 35 | * **format:** expose more configuration ([e985cce](https://github.com/JamieMason/eslint-formatter-git-log/commit/e985ccec0b79767a820449a635e43dcd7c583aa3)) 36 | 37 | 38 | 39 | ## [0.3.1](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.2.1...0.3.1) (2019-08-03) 40 | 41 | 42 | ### Features 43 | 44 | * **format:** add support for personalised reports ([ae941c1](https://github.com/JamieMason/eslint-formatter-git-log/commit/ae941c1cbc9c23f6b779084a8fe02f1dfa0c436c)) 45 | 46 | 47 | 48 | ## [0.2.1](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.2.0...0.2.1) (2019-08-03) 49 | 50 | 51 | ### Bug Fixes 52 | 53 | * **format:** ESLint doesn't always provide an endLine ([5663ee5](https://github.com/JamieMason/eslint-formatter-git-log/commit/5663ee5bf0861afae2538e53ebc99dafa9a65a5e)) 54 | 55 | 56 | 57 | # [0.2.0](https://github.com/JamieMason/eslint-formatter-git-log/compare/0.1.0...0.2.0) (2019-08-02) 58 | 59 | 60 | ### Features 61 | 62 | * **format:** expose configuration for customisation ([4468586](https://github.com/JamieMason/eslint-formatter-git-log/commit/4468586451d1c14a0d0101eef13c396276dadc87)) 63 | 64 | 65 | 66 | # [0.1.0](https://github.com/JamieMason/eslint-formatter-git-log/compare/3aea523e7a910e4d9989e75422a7589e1f486672...0.1.0) (2019-08-02) 67 | 68 | 69 | ### Features 70 | 71 | * **format:** include git author, date, and hash ([3aea523](https://github.com/JamieMason/eslint-formatter-git-log/commit/3aea523e7a910e4d9989e75422a7589e1f486672)) 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/formatters/git-log.ts: -------------------------------------------------------------------------------- 1 | import type { Chalk } from 'chalk'; 2 | import chalk from 'chalk'; 3 | import { execSync } from 'child_process'; 4 | import { getUserEmail } from './get-user-email'; 5 | import { getIn } from './lib/get-in'; 6 | 7 | type DeepPartial = { 8 | [P in keyof T]?: DeepPartial; 9 | }; 10 | 11 | interface EslintMessage { 12 | column: number; 13 | endColumn?: number; 14 | endLine?: number; 15 | fatal?: boolean; 16 | fix?: { 17 | range: [number, number]; 18 | text: string; 19 | }; 20 | line: number; 21 | message: string; 22 | nodeType: string; 23 | ruleId: string | null; 24 | severity: number; 25 | } 26 | 27 | interface EslintResult { 28 | errorCount: number; 29 | filePath: string; 30 | fixableErrorCount: number; 31 | fixableWarningCount: number; 32 | messages: EslintMessage[]; 33 | warningCount: number; 34 | output?: string; 35 | source?: string; 36 | } 37 | 38 | interface ResultItem { 39 | commit: string; 40 | date: string; 41 | email: string; 42 | message: EslintMessage; 43 | result: EslintResult; 44 | } 45 | 46 | interface FinalConfig { 47 | /** If set, show only results for Emails matching this pattern */ 48 | emailRegExp?: RegExp; 49 | /** Whitespace to insert between items when formatting */ 50 | gutter: string; 51 | /** Translations for plain text used when formatting */ 52 | label: { 53 | /** @example "error" */ 54 | error: string; 55 | /** @example "warning" */ 56 | warning: string; 57 | }; 58 | /** Increase if you have files with 1000s of lines */ 59 | locationColumnWidth: number; 60 | /** Which methods of https://github.com/chalk/chalk to use when formatting */ 61 | style: { 62 | /** @example "error" */ 63 | error: Chalk; 64 | /** @example "/Users/guybrush/Dev/grogrates/src/index.js" */ 65 | filePath: Chalk; 66 | /** @example "warning" */ 67 | warning: Chalk; 68 | /** @example "161:12" */ 69 | location: Chalk; 70 | /** @example "no-process-exit" */ 71 | rule: Chalk; 72 | /** @example "bda304e570" */ 73 | commit: Chalk; 74 | /** @example "(1 year, 2 months ago)" */ 75 | date: Chalk; 76 | /** @example "" */ 77 | email: Chalk; 78 | }; 79 | } 80 | 81 | export type Config = DeepPartial; 82 | 83 | export interface GitLogFormatter { 84 | (results: EslintResult[]): string; 85 | defaultConfig: Config; 86 | withConfig: CreateGitLogFormatter; 87 | } 88 | 89 | export type CreateGitLogFormatter = (config: Config) => GitLogFormatter; 90 | 91 | export const defaultConfig: FinalConfig = Object.freeze({ 92 | emailRegExp: undefined, 93 | gutter: ' ', 94 | label: { 95 | error: 'error', 96 | warning: 'warning', 97 | }, 98 | locationColumnWidth: 8, 99 | style: { 100 | error: chalk.red, 101 | filePath: chalk.underline, 102 | warning: chalk.yellow, 103 | location: chalk.dim, 104 | rule: chalk.dim, 105 | commit: chalk.magenta, 106 | date: chalk.greenBright, 107 | email: chalk.blueBright, 108 | }, 109 | }); 110 | 111 | /** Create an instance of the Formatter with your own alternative config */ 112 | export const createGitLogFormatter: CreateGitLogFormatter = (config) => { 113 | const formatter = (results: EslintResult[]) => { 114 | const getConfig = (path: string) => 115 | getIn(path, config) || (getIn(path, defaultConfig) as T); 116 | 117 | const emailRegExp = getIn('emailRegExp', config); 118 | const gutter = getConfig('gutter'); 119 | const locationColumnWidth = getConfig('locationColumnWidth'); 120 | const errorLabel = getConfig('label.error'); 121 | const warningLabel = getConfig('label.warning'); 122 | const styledError = getConfig('style.error'); 123 | const styledFilePath = getConfig('style.filePath'); 124 | const styledWarning = getConfig('style.warning'); 125 | const styledLocation = getConfig('style.location'); 126 | const styledRule = getConfig('style.rule'); 127 | const styledCommit = getConfig('style.commit'); 128 | const styledDate = getConfig('style.date'); 129 | const styledEmail = getConfig('style.email'); 130 | const WARNING = styledWarning(warningLabel); 131 | const ERROR = styledError(errorLabel); 132 | 133 | const mergeMessageWith = 134 | (result: EslintResult) => 135 | (message: EslintMessage): ResultItem => { 136 | const { filePath } = result; 137 | const { line } = message; 138 | const command = `git blame --date=relative --show-email -L ${line},${line} -- "${filePath}"`; 139 | const blame = execSync(command, { encoding: 'utf8' }); 140 | const commitMatch = blame.match(/^[^ ]+/) || ['']; 141 | const dateMatch = blame.match(/> (.+ ago)/) || ['', '']; 142 | const emailMatch = blame.match(/<([^>]+)>/) || ['', '']; 143 | const commit = commitMatch[0]; 144 | const date = dateMatch[1].trim(); 145 | const email = emailMatch[1]; 146 | return { 147 | commit, 148 | date, 149 | email, 150 | message, 151 | result, 152 | }; 153 | }; 154 | 155 | const rightAlignToCol1 = (col1Contents: string) => 156 | ' '.repeat(locationColumnWidth - col1Contents.length); 157 | 158 | const leftAlignToCol2 = (col1Contents: string) => 159 | ' '.repeat( 160 | rightAlignToCol1(col1Contents).length + 161 | col1Contents.length + 162 | gutter.length, 163 | ); 164 | 165 | const formatMessage = ({ 166 | commit: rawCommit, 167 | date: rawDate, 168 | email: rawEmail, 169 | message: { ruleId, severity, message, line, column }, 170 | }: ResultItem) => { 171 | const rawLocation = `${line}:${column}`; 172 | const status = severity === 1 ? WARNING : ERROR; 173 | const headIndent = rightAlignToCol1(rawLocation); 174 | const footIndent = leftAlignToCol2(rawLocation); 175 | const location = styledLocation(rawLocation); 176 | const rule = ruleId ? styledRule(ruleId) : ''; 177 | const commit = styledCommit(`${rawCommit}`); 178 | const date = styledDate(`(${rawDate})`); 179 | const email = styledEmail(`<${rawEmail}>`); 180 | let output = ''; 181 | output += `${headIndent}${location}${gutter}${status}${gutter}${message}${gutter}${rule}\n`; 182 | output += `${footIndent}${commit} ${email} ${date}\n`; 183 | return output; 184 | }; 185 | 186 | const isIncluded = ({ email }: ResultItem) => 187 | emailRegExp ? emailRegExp.test(email) : true; 188 | 189 | const authors = new Set(); 190 | 191 | const body = results.reduce((output, result) => { 192 | if (result.messages.length > 0) { 193 | const items = result.messages 194 | .map((message) => { 195 | message.column = message.column || 1; 196 | message.line = message.line || 1; 197 | return message; 198 | }) 199 | .map(mergeMessageWith(result)) 200 | .map((item) => { 201 | authors.add(item.email); 202 | return item; 203 | }) 204 | .filter(isIncluded); 205 | 206 | if (items.length > 0) { 207 | output += `\n${styledFilePath(result.filePath)}\n`; 208 | output += items.reduce( 209 | (str: string, item: ResultItem) => `${str}${formatMessage(item)}`, 210 | '', 211 | ); 212 | } 213 | } 214 | return output; 215 | }, ''); 216 | 217 | return body; 218 | }; 219 | 220 | formatter.defaultConfig = defaultConfig; 221 | formatter.getUserEmail = getUserEmail; 222 | formatter.withConfig = createGitLogFormatter; 223 | return formatter; 224 | }; 225 | 226 | export const gitLogFormatter = createGitLogFormatter(defaultConfig); 227 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-formatter-git-log 2 | 3 | > ESLint Formatter featuring Git Author, Date, and Hash 4 | 5 | [![NPM version](http://img.shields.io/npm/v/eslint-formatter-git-log.svg?style=flat-square)](https://www.npmjs.com/package/eslint-formatter-git-log) 6 | [![NPM downloads](http://img.shields.io/npm/dm/eslint-formatter-git-log.svg?style=flat-square)](https://www.npmjs.com/package/eslint-formatter-git-log) 7 | [![Build Status](http://img.shields.io/travis/JamieMason/eslint-formatter-git-log/master.svg?style=flat-square)](https://travis-ci.org/JamieMason/eslint-formatter-git-log) 8 | [![Maintainability](https://api.codeclimate.com/v1/badges/12697dca45d1de3f1bfc/maintainability)](https://codeclimate.com/github/JamieMason/eslint-formatter-git-log/maintainability) 9 | 10 | ## Table of Contents 11 | 12 | - [🌩 Installation](#-installation) 13 | - [🕹 Usage](#-usage) 14 | - [👀 Examples](#-examples) 15 | - [⚖️ Configuration](#️-configuration) 16 | - [🙋🏽‍♂️ Getting Help](#♂️-getting-help) 17 | - [👀 Other Projects](#-other-projects) 18 | - [🤓 Author](#-author) 19 | 20 | ## 🌩 Installation 21 | 22 | ```bash 23 | npm install --save-dev eslint eslint-formatter-git-log 24 | ``` 25 | 26 | ## 🕹 Usage 27 | 28 | To use the default configuration, set ESLint's 29 | [`--format`](https://eslint.org/docs/user-guide/command-line-interface#-f---format) 30 | option to `git-log` as follows: 31 | 32 | ```bash 33 | eslint --format git-log './src/**/*.js' 34 | ``` 35 | 36 | ## 👀 Examples 37 | 38 | ### Full Report 39 | 40 | By default, a report of every Error or Warning in the Codebase is displayed: 41 | 42 | ![screenshot](static/screenshot.png) 43 | 44 | ### Personalised Reports 45 | 46 | When an `emailRegExp` is provided such as `/you@yours.com/`, a report is shown 47 | that relates only to changes you yourself have made. 48 | 49 | 1. Create a file in your project which follows the structure below. 50 | 51 | ```js 52 | const gitLogFormatter = require('eslint-formatter-git-log'); 53 | 54 | module.exports = gitLogFormatter.withConfig({ 55 | emailRegExp: /you@yours.com/, 56 | }); 57 | ``` 58 | 59 | 2. Set ESLint's 60 | [`--format`](https://eslint.org/docs/user-guide/command-line-interface#-f---format) 61 | option to your customised version instead of `git-log`: 62 | 63 | ```bash 64 | eslint --format ./path/to/your/custom-formatter.js './src/**/*.js' 65 | ``` 66 | 67 | ![screenshot](static/screenshot-when-filtered.png) 68 | 69 | ### Contributor Reports 70 | 71 | To extend personalised reports to your Team, the Git Committer Email is needed. 72 | 73 | #### `gitLogFormatter.getUserEmail()` 74 | 75 | An optional helper is available at `gitLogFormatter.getUserEmail()` which reads 76 | `git config user.email` and feeds it through `git check-mailmap`. 77 | 78 | ```js 79 | const gitLogFormatter = require('eslint-formatter-git-log'); 80 | 81 | module.exports = gitLogFormatter.withConfig({ 82 | emailRegExp: new RegExp(gitLogFormatter.getUserEmail()), 83 | }); 84 | ``` 85 | 86 | #### `$GIT_COMMITTER_EMAIL` 87 | 88 | Alternatively, if your Team each have their `$GIT_COMMITTER_EMAIL` Environment 89 | Variable exported and reachable, then the following is enough. 90 | 91 | ```js 92 | const gitLogFormatter = require('eslint-formatter-git-log'); 93 | 94 | module.exports = gitLogFormatter.withConfig({ 95 | emailRegExp: new RegExp(process.env.GIT_COMMITTER_EMAIL), 96 | }); 97 | ``` 98 | 99 | #### References 100 | 101 | - [First-time git setup](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) 102 | - [Setting your commit email address](https://help.github.com/en/articles/setting-your-commit-email-address) 103 | - [Configure git to not guess `user.email`](https://stackoverflow.com/questions/19821895/can-i-configure-git-so-it-does-not-guess-user-email-configuration-settings) 104 | - [`git config`](https://git-scm.com/docs/git-config) 105 | - [`git check-mailmap`](https://www.git-scm.com/docs/git-check-mailmap) 106 | - [`$GIT_COMMITTER_EMAIL`](https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables) 107 | 108 | ## ⚖️ Configuration 109 | 110 | This example lists every available option with its corresponding default value. 111 | You don't need to provide a value for every configuration item, just the ones 112 | you want to change. 113 | 114 | ```js 115 | const chalk = require('chalk'); 116 | const gitLogFormatter = require('eslint-formatter-git-log'); 117 | 118 | module.exports = gitLogFormatter.withConfig({ 119 | // If set, only show result when Author Email matches this pattern 120 | emailRegExp: undefined, 121 | // Whitespace to insert between items when formatting 122 | gutter: ' ', 123 | // Translations for plain text used when formatting 124 | label: { 125 | error: 'error', 126 | warning: 'warning' 127 | }, 128 | // Increase if you have files with 1000s of lines 129 | locationColumnWidth: 8, 130 | // Which methods of https://github.com/chalk/chalk to use when formatting 131 | style: { 132 | // eg. "error" 133 | error: chalk.red, 134 | // eg. "/Users/guybrush/Dev/grogrates/src/index.js" 135 | filePath: chalk.underline, 136 | // eg. "warning" 137 | warning: chalk.yellow, 138 | // eg. "161:12" 139 | location: chalk.dim, 140 | // eg. "no-process-exit" 141 | rule: chalk.dim, 142 | // eg. "bda304e570" 143 | commit: chalk.magenta, 144 | // eg. "(1 year, 2 months ago)" 145 | date: chalk.greenBright, 146 | // eg. "" 147 | email: chalk.blueBright, 148 | }, 149 | }); 150 | ``` 151 | 152 | ## 🙋🏽‍♂️ Getting Help 153 | 154 | Get help with issues by creating a [Bug Report] or discuss ideas by opening a 155 | [Feature Request]. 156 | 157 | [bug report]: 158 | https://github.com/JamieMason/eslint-formatter-git-log/issues/new?template=bug_report.md 159 | [feature request]: 160 | https://github.com/JamieMason/eslint-formatter-git-log/issues/new?template=feature_request.md 161 | 162 | ## 👀 Other Projects 163 | 164 | If you find my Open Source projects useful, please share them ❤️ 165 | 166 | - [**eslint-plugin-move-files**](https://github.com/JamieMason/eslint-plugin-move-files)
Move 167 | and rename files while keeping imports up to date 168 | - [**eslint-plugin-prefer-arrow-functions**](https://github.com/JamieMason/eslint-plugin-prefer-arrow-functions)
Convert 169 | functions to arrow functions 170 | - [**ImageOptim-CLI**](https://github.com/JamieMason/ImageOptim-CLI)
Automates 171 | ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimisation of 172 | images part of your automated build process. 173 | - [**Jasmine-Matchers**](https://github.com/JamieMason/Jasmine-Matchers)
Write 174 | Beautiful Specs with Custom Matchers 175 | - [**karma-benchmark**](https://github.com/JamieMason/karma-benchmark)
Run 176 | Benchmark.js over multiple Browsers, with CI compatible output 177 | - [**self-help**](https://github.com/JamieMason/self-help#readme)
Interactive 178 | Q&A Guides for Web and the Command Line 179 | - [**syncpack**](https://github.com/JamieMason/syncpack#readme)
Manage 180 | multiple package.json files, such as in Lerna Monorepos and Yarn Workspaces 181 | 182 | ## 🤓 Author 183 | 184 | 185 | 186 | I'm [Jamie Mason] from [Leeds] in England, I began Web Design and Development in 187 | 1999 and have been Contracting and offering Consultancy as Fold Left Ltd 188 | since 2012. Who I've worked with includes [Sky Sports], [Sky Bet], [Sky Poker], 189 | The [Premier League], [William Hill], [Shell], [Betfair], and Football Clubs 190 | including [Leeds United], [Spurs], [West Ham], [Arsenal], and more. 191 | 192 |
193 | 194 | [![Follow JamieMason on GitHub][github badge]][github]      [![Follow fold_left on Twitter][twitter badge]][twitter] 195 | 196 |
197 | 198 | 199 | 200 | [github badge]: 201 | https://img.shields.io/github/followers/JamieMason.svg?style=social&label=Follow 202 | [twitter badge]: 203 | https://img.shields.io/twitter/follow/fold_left.svg?style=social&label=Follow 204 | 205 | 206 | 207 | [arsenal]: https://www.arsenal.com 208 | [betfair]: https://www.betfair.com 209 | [github]: https://github.com/JamieMason 210 | [jamie mason]: https://www.linkedin.com/in/jamiemasonleeds 211 | [leeds united]: https://www.leedsunited.com/ 212 | [leeds]: https://www.instagram.com/visitleeds 213 | [premier league]: https://www.premierleague.com 214 | [shell]: https://www.shell.com 215 | [sky bet]: https://www.skybet.com 216 | [sky poker]: https://www.skypoker.com 217 | [sky sports]: https://www.skysports.com 218 | [spurs]: https://www.tottenhamhotspur.com 219 | [twitter]: https://twitter.com/fold_left 220 | [west ham]: https://www.whufc.com 221 | [william hill]: https://www.williamhill.com 222 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@eslint/eslintrc@^1.2.2": 6 | version "1.2.2" 7 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" 8 | integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg== 9 | dependencies: 10 | ajv "^6.12.4" 11 | debug "^4.3.2" 12 | espree "^9.3.1" 13 | globals "^13.9.0" 14 | ignore "^5.2.0" 15 | import-fresh "^3.2.1" 16 | js-yaml "^4.1.0" 17 | minimatch "^3.0.4" 18 | strip-json-comments "^3.1.1" 19 | 20 | "@humanwhocodes/config-array@^0.9.2": 21 | version "0.9.5" 22 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 23 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 24 | dependencies: 25 | "@humanwhocodes/object-schema" "^1.2.1" 26 | debug "^4.1.1" 27 | minimatch "^3.0.4" 28 | 29 | "@humanwhocodes/object-schema@^1.2.1": 30 | version "1.2.1" 31 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 32 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 33 | 34 | "@nodelib/fs.scandir@2.1.5": 35 | version "2.1.5" 36 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 37 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 38 | dependencies: 39 | "@nodelib/fs.stat" "2.0.5" 40 | run-parallel "^1.1.9" 41 | 42 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 43 | version "2.0.5" 44 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 45 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 46 | 47 | "@nodelib/fs.walk@^1.2.3": 48 | version "1.2.8" 49 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 50 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 51 | dependencies: 52 | "@nodelib/fs.scandir" "2.1.5" 53 | fastq "^1.6.0" 54 | 55 | "@types/eslint@8.4.1": 56 | version "8.4.1" 57 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" 58 | integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== 59 | dependencies: 60 | "@types/estree" "*" 61 | "@types/json-schema" "*" 62 | 63 | "@types/estree@*": 64 | version "0.0.51" 65 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" 66 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 67 | 68 | "@types/json-schema@*", "@types/json-schema@^7.0.9": 69 | version "7.0.11" 70 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 71 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 72 | 73 | "@types/node@17.0.31": 74 | version "17.0.31" 75 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" 76 | integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== 77 | 78 | "@typescript-eslint/eslint-plugin@5.21.0": 79 | version "5.21.0" 80 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz#bfc22e0191e6404ab1192973b3b4ea0461c1e878" 81 | integrity sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg== 82 | dependencies: 83 | "@typescript-eslint/scope-manager" "5.21.0" 84 | "@typescript-eslint/type-utils" "5.21.0" 85 | "@typescript-eslint/utils" "5.21.0" 86 | debug "^4.3.2" 87 | functional-red-black-tree "^1.0.1" 88 | ignore "^5.1.8" 89 | regexpp "^3.2.0" 90 | semver "^7.3.5" 91 | tsutils "^3.21.0" 92 | 93 | "@typescript-eslint/parser@5.21.0": 94 | version "5.21.0" 95 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.21.0.tgz#6cb72673dbf3e1905b9c432175a3c86cdaf2071f" 96 | integrity sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg== 97 | dependencies: 98 | "@typescript-eslint/scope-manager" "5.21.0" 99 | "@typescript-eslint/types" "5.21.0" 100 | "@typescript-eslint/typescript-estree" "5.21.0" 101 | debug "^4.3.2" 102 | 103 | "@typescript-eslint/scope-manager@5.21.0": 104 | version "5.21.0" 105 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz#a4b7ed1618f09f95e3d17d1c0ff7a341dac7862e" 106 | integrity sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ== 107 | dependencies: 108 | "@typescript-eslint/types" "5.21.0" 109 | "@typescript-eslint/visitor-keys" "5.21.0" 110 | 111 | "@typescript-eslint/type-utils@5.21.0": 112 | version "5.21.0" 113 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz#ff89668786ad596d904c21b215e5285da1b6262e" 114 | integrity sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw== 115 | dependencies: 116 | "@typescript-eslint/utils" "5.21.0" 117 | debug "^4.3.2" 118 | tsutils "^3.21.0" 119 | 120 | "@typescript-eslint/types@5.21.0": 121 | version "5.21.0" 122 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.21.0.tgz#8cdb9253c0dfce3f2ab655b9d36c03f72e684017" 123 | integrity sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA== 124 | 125 | "@typescript-eslint/typescript-estree@5.21.0": 126 | version "5.21.0" 127 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz#9f0c233e28be2540eaed3df050f0d54fb5aa52de" 128 | integrity sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg== 129 | dependencies: 130 | "@typescript-eslint/types" "5.21.0" 131 | "@typescript-eslint/visitor-keys" "5.21.0" 132 | debug "^4.3.2" 133 | globby "^11.0.4" 134 | is-glob "^4.0.3" 135 | semver "^7.3.5" 136 | tsutils "^3.21.0" 137 | 138 | "@typescript-eslint/utils@5.21.0": 139 | version "5.21.0" 140 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.21.0.tgz#51d7886a6f0575e23706e5548c7e87bce42d7c18" 141 | integrity sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q== 142 | dependencies: 143 | "@types/json-schema" "^7.0.9" 144 | "@typescript-eslint/scope-manager" "5.21.0" 145 | "@typescript-eslint/types" "5.21.0" 146 | "@typescript-eslint/typescript-estree" "5.21.0" 147 | eslint-scope "^5.1.1" 148 | eslint-utils "^3.0.0" 149 | 150 | "@typescript-eslint/visitor-keys@5.21.0": 151 | version "5.21.0" 152 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz#453fb3662409abaf2f8b1f65d515699c888dd8ae" 153 | integrity sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA== 154 | dependencies: 155 | "@typescript-eslint/types" "5.21.0" 156 | eslint-visitor-keys "^3.0.0" 157 | 158 | acorn-jsx@^5.3.1: 159 | version "5.3.2" 160 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 161 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 162 | 163 | acorn@^8.7.0: 164 | version "8.7.1" 165 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" 166 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== 167 | 168 | ajv@^6.10.0, ajv@^6.12.4: 169 | version "6.12.6" 170 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 171 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 172 | dependencies: 173 | fast-deep-equal "^3.1.1" 174 | fast-json-stable-stringify "^2.0.0" 175 | json-schema-traverse "^0.4.1" 176 | uri-js "^4.2.2" 177 | 178 | ansi-regex@^5.0.1: 179 | version "5.0.1" 180 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 181 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 182 | 183 | ansi-styles@^4.1.0: 184 | version "4.3.0" 185 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 186 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 187 | dependencies: 188 | color-convert "^2.0.1" 189 | 190 | argparse@^2.0.1: 191 | version "2.0.1" 192 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 193 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 194 | 195 | array-union@^2.1.0: 196 | version "2.1.0" 197 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 198 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 199 | 200 | balanced-match@^1.0.0: 201 | version "1.0.2" 202 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 203 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 204 | 205 | brace-expansion@^1.1.7: 206 | version "1.1.11" 207 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 208 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 209 | dependencies: 210 | balanced-match "^1.0.0" 211 | concat-map "0.0.1" 212 | 213 | braces@^3.0.2: 214 | version "3.0.2" 215 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 216 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 217 | dependencies: 218 | fill-range "^7.0.1" 219 | 220 | callsites@^3.0.0: 221 | version "3.1.0" 222 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 223 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 224 | 225 | chalk@4.1.2, chalk@^4.0.0: 226 | version "4.1.2" 227 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 228 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 229 | dependencies: 230 | ansi-styles "^4.1.0" 231 | supports-color "^7.1.0" 232 | 233 | color-convert@^2.0.1: 234 | version "2.0.1" 235 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 236 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 237 | dependencies: 238 | color-name "~1.1.4" 239 | 240 | color-name@~1.1.4: 241 | version "1.1.4" 242 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 243 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 244 | 245 | concat-map@0.0.1: 246 | version "0.0.1" 247 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 248 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 249 | 250 | cross-spawn@^7.0.2: 251 | version "7.0.3" 252 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 253 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 254 | dependencies: 255 | path-key "^3.1.0" 256 | shebang-command "^2.0.0" 257 | which "^2.0.1" 258 | 259 | debug@^4.1.1, debug@^4.3.2: 260 | version "4.3.4" 261 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 262 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 263 | dependencies: 264 | ms "2.1.2" 265 | 266 | deep-is@^0.1.3: 267 | version "0.1.4" 268 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 269 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 270 | 271 | dir-glob@^3.0.1: 272 | version "3.0.1" 273 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 274 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 275 | dependencies: 276 | path-type "^4.0.0" 277 | 278 | doctrine@^3.0.0: 279 | version "3.0.0" 280 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 281 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 282 | dependencies: 283 | esutils "^2.0.2" 284 | 285 | escape-string-regexp@^4.0.0: 286 | version "4.0.0" 287 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 288 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 289 | 290 | eslint-scope@^5.1.1: 291 | version "5.1.1" 292 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 293 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 294 | dependencies: 295 | esrecurse "^4.3.0" 296 | estraverse "^4.1.1" 297 | 298 | eslint-scope@^7.1.1: 299 | version "7.1.1" 300 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 301 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 302 | dependencies: 303 | esrecurse "^4.3.0" 304 | estraverse "^5.2.0" 305 | 306 | eslint-utils@^3.0.0: 307 | version "3.0.0" 308 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 309 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 310 | dependencies: 311 | eslint-visitor-keys "^2.0.0" 312 | 313 | eslint-visitor-keys@^2.0.0: 314 | version "2.1.0" 315 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 316 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 317 | 318 | eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: 319 | version "3.3.0" 320 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 321 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 322 | 323 | eslint@8.14.0: 324 | version "8.14.0" 325 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239" 326 | integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw== 327 | dependencies: 328 | "@eslint/eslintrc" "^1.2.2" 329 | "@humanwhocodes/config-array" "^0.9.2" 330 | ajv "^6.10.0" 331 | chalk "^4.0.0" 332 | cross-spawn "^7.0.2" 333 | debug "^4.3.2" 334 | doctrine "^3.0.0" 335 | escape-string-regexp "^4.0.0" 336 | eslint-scope "^7.1.1" 337 | eslint-utils "^3.0.0" 338 | eslint-visitor-keys "^3.3.0" 339 | espree "^9.3.1" 340 | esquery "^1.4.0" 341 | esutils "^2.0.2" 342 | fast-deep-equal "^3.1.3" 343 | file-entry-cache "^6.0.1" 344 | functional-red-black-tree "^1.0.1" 345 | glob-parent "^6.0.1" 346 | globals "^13.6.0" 347 | ignore "^5.2.0" 348 | import-fresh "^3.0.0" 349 | imurmurhash "^0.1.4" 350 | is-glob "^4.0.0" 351 | js-yaml "^4.1.0" 352 | json-stable-stringify-without-jsonify "^1.0.1" 353 | levn "^0.4.1" 354 | lodash.merge "^4.6.2" 355 | minimatch "^3.0.4" 356 | natural-compare "^1.4.0" 357 | optionator "^0.9.1" 358 | regexpp "^3.2.0" 359 | strip-ansi "^6.0.1" 360 | strip-json-comments "^3.1.0" 361 | text-table "^0.2.0" 362 | v8-compile-cache "^2.0.3" 363 | 364 | espree@^9.3.1: 365 | version "9.3.1" 366 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" 367 | integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== 368 | dependencies: 369 | acorn "^8.7.0" 370 | acorn-jsx "^5.3.1" 371 | eslint-visitor-keys "^3.3.0" 372 | 373 | esquery@^1.4.0: 374 | version "1.4.0" 375 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 376 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 377 | dependencies: 378 | estraverse "^5.1.0" 379 | 380 | esrecurse@^4.3.0: 381 | version "4.3.0" 382 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 383 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 384 | dependencies: 385 | estraverse "^5.2.0" 386 | 387 | estraverse@^4.1.1: 388 | version "4.3.0" 389 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 390 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 391 | 392 | estraverse@^5.1.0, estraverse@^5.2.0: 393 | version "5.3.0" 394 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 395 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 396 | 397 | esutils@^2.0.2: 398 | version "2.0.3" 399 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 400 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 401 | 402 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 403 | version "3.1.3" 404 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 405 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 406 | 407 | fast-glob@^3.2.9: 408 | version "3.2.11" 409 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 410 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 411 | dependencies: 412 | "@nodelib/fs.stat" "^2.0.2" 413 | "@nodelib/fs.walk" "^1.2.3" 414 | glob-parent "^5.1.2" 415 | merge2 "^1.3.0" 416 | micromatch "^4.0.4" 417 | 418 | fast-json-stable-stringify@^2.0.0: 419 | version "2.1.0" 420 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 421 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 422 | 423 | fast-levenshtein@^2.0.6: 424 | version "2.0.6" 425 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 426 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 427 | 428 | fastq@^1.6.0: 429 | version "1.13.0" 430 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 431 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 432 | dependencies: 433 | reusify "^1.0.4" 434 | 435 | file-entry-cache@^6.0.1: 436 | version "6.0.1" 437 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 438 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 439 | dependencies: 440 | flat-cache "^3.0.4" 441 | 442 | fill-range@^7.0.1: 443 | version "7.0.1" 444 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 445 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 446 | dependencies: 447 | to-regex-range "^5.0.1" 448 | 449 | flat-cache@^3.0.4: 450 | version "3.0.4" 451 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 452 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 453 | dependencies: 454 | flatted "^3.1.0" 455 | rimraf "^3.0.2" 456 | 457 | flatted@^3.1.0: 458 | version "3.2.5" 459 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 460 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 461 | 462 | fs.realpath@^1.0.0: 463 | version "1.0.0" 464 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 465 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 466 | 467 | functional-red-black-tree@^1.0.1: 468 | version "1.0.1" 469 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 470 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 471 | 472 | glob-parent@^5.1.2: 473 | version "5.1.2" 474 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 475 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 476 | dependencies: 477 | is-glob "^4.0.1" 478 | 479 | glob-parent@^6.0.1: 480 | version "6.0.2" 481 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 482 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 483 | dependencies: 484 | is-glob "^4.0.3" 485 | 486 | glob@^7.1.3: 487 | version "7.2.0" 488 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 489 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 490 | dependencies: 491 | fs.realpath "^1.0.0" 492 | inflight "^1.0.4" 493 | inherits "2" 494 | minimatch "^3.0.4" 495 | once "^1.3.0" 496 | path-is-absolute "^1.0.0" 497 | 498 | globals@^13.6.0, globals@^13.9.0: 499 | version "13.13.0" 500 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" 501 | integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== 502 | dependencies: 503 | type-fest "^0.20.2" 504 | 505 | globby@^11.0.4: 506 | version "11.1.0" 507 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 508 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 509 | dependencies: 510 | array-union "^2.1.0" 511 | dir-glob "^3.0.1" 512 | fast-glob "^3.2.9" 513 | ignore "^5.2.0" 514 | merge2 "^1.4.1" 515 | slash "^3.0.0" 516 | 517 | has-flag@^4.0.0: 518 | version "4.0.0" 519 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 520 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 521 | 522 | ignore@^5.1.8, ignore@^5.2.0: 523 | version "5.2.0" 524 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 525 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 526 | 527 | import-fresh@^3.0.0, import-fresh@^3.2.1: 528 | version "3.3.0" 529 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 530 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 531 | dependencies: 532 | parent-module "^1.0.0" 533 | resolve-from "^4.0.0" 534 | 535 | imurmurhash@^0.1.4: 536 | version "0.1.4" 537 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 538 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 539 | 540 | inflight@^1.0.4: 541 | version "1.0.6" 542 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 543 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 544 | dependencies: 545 | once "^1.3.0" 546 | wrappy "1" 547 | 548 | inherits@2: 549 | version "2.0.4" 550 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 551 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 552 | 553 | is-extglob@^2.1.1: 554 | version "2.1.1" 555 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 556 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 557 | 558 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 559 | version "4.0.3" 560 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 561 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 562 | dependencies: 563 | is-extglob "^2.1.1" 564 | 565 | is-number@^7.0.0: 566 | version "7.0.0" 567 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 568 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 569 | 570 | isexe@^2.0.0: 571 | version "2.0.0" 572 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 573 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 574 | 575 | js-yaml@^4.1.0: 576 | version "4.1.0" 577 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 578 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 579 | dependencies: 580 | argparse "^2.0.1" 581 | 582 | json-schema-traverse@^0.4.1: 583 | version "0.4.1" 584 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 585 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 586 | 587 | json-stable-stringify-without-jsonify@^1.0.1: 588 | version "1.0.1" 589 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 590 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 591 | 592 | levn@^0.4.1: 593 | version "0.4.1" 594 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 595 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 596 | dependencies: 597 | prelude-ls "^1.2.1" 598 | type-check "~0.4.0" 599 | 600 | lodash.merge@^4.6.2: 601 | version "4.6.2" 602 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 603 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 604 | 605 | lru-cache@^6.0.0: 606 | version "6.0.0" 607 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 608 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 609 | dependencies: 610 | yallist "^4.0.0" 611 | 612 | merge2@^1.3.0, merge2@^1.4.1: 613 | version "1.4.1" 614 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 615 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 616 | 617 | micromatch@^4.0.4: 618 | version "4.0.5" 619 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 620 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 621 | dependencies: 622 | braces "^3.0.2" 623 | picomatch "^2.3.1" 624 | 625 | minimatch@^3.0.4: 626 | version "3.1.2" 627 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 628 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 629 | dependencies: 630 | brace-expansion "^1.1.7" 631 | 632 | ms@2.1.2: 633 | version "2.1.2" 634 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 635 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 636 | 637 | natural-compare@^1.4.0: 638 | version "1.4.0" 639 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 640 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 641 | 642 | once@^1.3.0: 643 | version "1.4.0" 644 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 645 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 646 | dependencies: 647 | wrappy "1" 648 | 649 | optionator@^0.9.1: 650 | version "0.9.1" 651 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 652 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 653 | dependencies: 654 | deep-is "^0.1.3" 655 | fast-levenshtein "^2.0.6" 656 | levn "^0.4.1" 657 | prelude-ls "^1.2.1" 658 | type-check "^0.4.0" 659 | word-wrap "^1.2.3" 660 | 661 | parent-module@^1.0.0: 662 | version "1.0.1" 663 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 664 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 665 | dependencies: 666 | callsites "^3.0.0" 667 | 668 | path-is-absolute@^1.0.0: 669 | version "1.0.1" 670 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 671 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 672 | 673 | path-key@^3.1.0: 674 | version "3.1.1" 675 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 676 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 677 | 678 | path-type@^4.0.0: 679 | version "4.0.0" 680 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 681 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 682 | 683 | picomatch@^2.3.1: 684 | version "2.3.1" 685 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 686 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 687 | 688 | prelude-ls@^1.2.1: 689 | version "1.2.1" 690 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 691 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 692 | 693 | prettier@2.6.2: 694 | version "2.6.2" 695 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" 696 | integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== 697 | 698 | punycode@^2.1.0: 699 | version "2.1.1" 700 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 701 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 702 | 703 | queue-microtask@^1.2.2: 704 | version "1.2.3" 705 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 706 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 707 | 708 | regexpp@^3.2.0: 709 | version "3.2.0" 710 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 711 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 712 | 713 | resolve-from@^4.0.0: 714 | version "4.0.0" 715 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 716 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 717 | 718 | reusify@^1.0.4: 719 | version "1.0.4" 720 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 721 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 722 | 723 | rimraf@^3.0.2: 724 | version "3.0.2" 725 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 726 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 727 | dependencies: 728 | glob "^7.1.3" 729 | 730 | run-parallel@^1.1.9: 731 | version "1.2.0" 732 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 733 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 734 | dependencies: 735 | queue-microtask "^1.2.2" 736 | 737 | semver@^7.3.5: 738 | version "7.3.7" 739 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 740 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 741 | dependencies: 742 | lru-cache "^6.0.0" 743 | 744 | shebang-command@^2.0.0: 745 | version "2.0.0" 746 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 747 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 748 | dependencies: 749 | shebang-regex "^3.0.0" 750 | 751 | shebang-regex@^3.0.0: 752 | version "3.0.0" 753 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 754 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 755 | 756 | slash@^3.0.0: 757 | version "3.0.0" 758 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 759 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 760 | 761 | strip-ansi@^6.0.1: 762 | version "6.0.1" 763 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 764 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 765 | dependencies: 766 | ansi-regex "^5.0.1" 767 | 768 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 769 | version "3.1.1" 770 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 771 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 772 | 773 | supports-color@^7.1.0: 774 | version "7.2.0" 775 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 776 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 777 | dependencies: 778 | has-flag "^4.0.0" 779 | 780 | text-table@^0.2.0: 781 | version "0.2.0" 782 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 783 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 784 | 785 | to-regex-range@^5.0.1: 786 | version "5.0.1" 787 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 788 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 789 | dependencies: 790 | is-number "^7.0.0" 791 | 792 | tslib@^1.8.1: 793 | version "1.14.1" 794 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 795 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 796 | 797 | tsutils@^3.21.0: 798 | version "3.21.0" 799 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 800 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 801 | dependencies: 802 | tslib "^1.8.1" 803 | 804 | type-check@^0.4.0, type-check@~0.4.0: 805 | version "0.4.0" 806 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 807 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 808 | dependencies: 809 | prelude-ls "^1.2.1" 810 | 811 | type-fest@^0.20.2: 812 | version "0.20.2" 813 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 814 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 815 | 816 | typescript@4.6.4: 817 | version "4.6.4" 818 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" 819 | integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== 820 | 821 | uri-js@^4.2.2: 822 | version "4.4.1" 823 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 824 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 825 | dependencies: 826 | punycode "^2.1.0" 827 | 828 | v8-compile-cache@^2.0.3: 829 | version "2.3.0" 830 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 831 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 832 | 833 | which@^2.0.1: 834 | version "2.0.2" 835 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 836 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 837 | dependencies: 838 | isexe "^2.0.0" 839 | 840 | word-wrap@^1.2.3: 841 | version "1.2.3" 842 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 843 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 844 | 845 | wrappy@1: 846 | version "1.0.2" 847 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 848 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 849 | 850 | yallist@^4.0.0: 851 | version "4.0.0" 852 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 853 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 854 | --------------------------------------------------------------------------------