├── .eslintrc.js ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── esbuild.js ├── package.json ├── src ├── action.ts ├── downloader.ts ├── index.ts ├── neonLint.ts ├── phpstanLint.ts └── types.ts ├── tsconfig.json └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, 4 | }, 5 | parser: '@typescript-eslint/parser', 6 | extends: ['plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'], 7 | rules: { 8 | '@typescript-eslint/ban-ts-comment': 'off', 9 | '@typescript-eslint/no-explicit-any': 'off', 10 | '@typescript-eslint/no-non-null-assertion': 'off', 11 | '@typescript-eslint/no-namespace': 'off', 12 | '@typescript-eslint/no-empty-function': 'off', 13 | '@typescript-eslint/explicit-function-return-type': 'off', 14 | '@typescript-eslint/explicit-module-boundary-types': 'off', 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### ADD 2 | 3 | lib 4 | _ref 5 | 6 | ### https://raw.github.com/github/gitignore/3bb7b4b767f3f8df07e362dfa03c8bd425f16d32/Node.gitignore 7 | 8 | # Logs 9 | logs 10 | *.log 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | lerna-debug.log* 15 | .pnpm-debug.log* 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 19 | 20 | # Runtime data 21 | pids 22 | *.pid 23 | *.seed 24 | *.pid.lock 25 | 26 | # Directory for instrumented libs generated by jscoverage/JSCover 27 | lib-cov 28 | 29 | # Coverage directory used by tools like istanbul 30 | coverage 31 | *.lcov 32 | 33 | # nyc test coverage 34 | .nyc_output 35 | 36 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 37 | .grunt 38 | 39 | # Bower dependency directory (https://bower.io/) 40 | bower_components 41 | 42 | # node-waf configuration 43 | .lock-wscript 44 | 45 | # Compiled binary addons (https://nodejs.org/api/addons.html) 46 | build/Release 47 | 48 | # Dependency directories 49 | node_modules/ 50 | jspm_packages/ 51 | 52 | # Snowpack dependency directory (https://snowpack.dev/) 53 | web_modules/ 54 | 55 | # TypeScript cache 56 | *.tsbuildinfo 57 | 58 | # Optional npm cache directory 59 | .npm 60 | 61 | # Optional eslint cache 62 | .eslintcache 63 | 64 | # Microbundle cache 65 | .rpt2_cache/ 66 | .rts2_cache_cjs/ 67 | .rts2_cache_es/ 68 | .rts2_cache_umd/ 69 | 70 | # Optional REPL history 71 | .node_repl_history 72 | 73 | # Output of 'npm pack' 74 | *.tgz 75 | 76 | # Yarn Integrity file 77 | .yarn-integrity 78 | 79 | # dotenv environment variables file 80 | .env 81 | .env.test 82 | .env.production 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | out 91 | 92 | # Nuxt.js build / generate output 93 | .nuxt 94 | dist 95 | 96 | # Gatsby files 97 | .cache/ 98 | # Comment in the public line in if your project uses Gatsby and not Next.js 99 | # https://nextjs.org/blog/next-9-1#public-directory-support 100 | # public 101 | 102 | # vuepress build output 103 | .vuepress/dist 104 | 105 | # Serverless directories 106 | .serverless/ 107 | 108 | # FuseBox cache 109 | .fusebox/ 110 | 111 | # DynamoDB Local files 112 | .dynamodb/ 113 | 114 | # TernJS port file 115 | .tern-port 116 | 117 | # Stores VSCode versions used for testing VSCode extensions 118 | .vscode-test 119 | 120 | # yarn v2 121 | .yarn/cache 122 | .yarn/unplugged 123 | .yarn/build-state.yml 124 | .yarn/install-state.gz 125 | .pnp.* 126 | 127 | 128 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules 3 | tsconfig.json 4 | *.map 5 | .tags 6 | .DS_Store 7 | webpack.config.js 8 | esbuild.js 9 | yarn.lock 10 | yarn-error.log 11 | .github 12 | .eslintrc.js 13 | .prettierrc 14 | _ref 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 yaegassy 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # coc-phpstan 2 | 3 | [PHPStan](https://phpstan.org/) (PHP Static Analysis tool) extension for [coc.nvim](https://github.com/neoclide/coc.nvim). 4 | 5 | coc-phpstan-demo 6 | 7 | ## Install 8 | 9 | **CocInstall**: 10 | 11 | ```vim 12 | :CocInstall @yaegassy/coc-phpstan 13 | ``` 14 | 15 | > scoped package 16 | 17 | **vim-plug**: 18 | 19 | ```vim 20 | Plug 'yaegassy/coc-phpstan', {'do': 'yarn install --frozen-lockfile'} 21 | ``` 22 | 23 | ## Features 24 | 25 | - Linter 26 | - CodeAction 27 | - Downloader 28 | 29 | ## Detect tool: phpstan 30 | 31 | 1. `phpstan.toolPath` setting 32 | 1. `vendor/bin/phpstan` (project) 33 | 1. Extension-only `phpstan` retrieved by the download feature (`:CocCommand phpstan.download`) 34 | - Mac/Linux: `~/.config/coc/extensions/@yaegassy/coc-phpstan-data/phpstan` 35 | - Windows: `~/AppData/Local/coc/extensions/@yaegassy/coc-phpstan-data/phpstan` 36 | 37 | ## "phpstan.neon", "phpstan.neon.dist" or "phpstan.dist.neon" configuration file 38 | 39 | If you wish to use a [configuration file](https://phpstan.org/config-reference) you should place the `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon` file in the root of your project folder 40 | 41 | ## Linting of NEON file 42 | 43 | This extension includes a feature to perform linting using the `neon-js` library in a phpstan configuration file (`phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon`). 44 | 45 | To run this linting feature, the filetype must be `neon`. 46 | 47 | Install "neon" related plugin (e.g. [yaegassy/nette-neon.vim](https://github.com/yaegassy/nette-neon.vim)). 48 | 49 | --- 50 | 51 | - [DEMO](https://github.com/yaegassy/coc-phpstan/pull/2#issue-1700077931) 52 | 53 | ## Configuration options ("coc-settings.json" or ".vim/coc-settings.json") 54 | 55 | - `phpstan.enable`: Enable coc-phpstan extension, default: `true` 56 | - `phpstan.toolPath`: The path to the phpstan (Absolute path), default: `""` 57 | - `phpstan.level`: Specifies the rule level (0 - 9 and max) to run, If you apply this setting, the level setting in the phpstan.neon file will be ignored, e.g. valid option `"9"`, `"max"`, default: `null` 58 | - `phpstan.configuration`: Specifies the path to a configuration file, default: `null` 59 | - `phpstan.memoryLimit`: Specifies the memory limit in the same format php.ini accepts, Example: -1, 1024M, 2G, default: `"-1"` 60 | - `phpstan.download.checkOnStartup`: Perform built-in download if phpstan is not present at startup, default: `true` 61 | - `phpstan.neonLint.enable`: Enable neon-js lint (diagnostics). It will only work if the file name is `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon`, default: `true` 62 | 63 | ## Commands 64 | 65 | - `phpstan.download`: Download PHPStan 66 | - `phpstan.showOutput`: Show phpstan output channel 67 | 68 | ## Code Actions 69 | 70 | **Example key mapping (Code Action related)**: 71 | 72 | ```vim 73 | nmap ga (coc-codeaction-line) 74 | ``` 75 | 76 | **Usage**: 77 | 78 | In the line with diagnostic message, enter the mapped key (e.g. `ga`) and you will see a list of code actions that can be performed. 79 | 80 | **Actions**: 81 | 82 | - `Add @phpstan-ignore-next-line` 83 | - `Add @phpstan-ignore-line` 84 | 85 | ## Thanks 86 | 87 | - [phpstan/phpstan](https://github.com/phpstan/phpstan) 88 | - [matej21/neon-js](https://github.com/matej21/neon-js) 89 | 90 | ## License 91 | 92 | MIT 93 | 94 | --- 95 | 96 | > This extension is built with [create-coc-extension](https://github.com/fannheyward/create-coc-extension) 97 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | async function start(watch) { 3 | await require('esbuild').build({ 4 | entryPoints: ['src/index.ts'], 5 | bundle: true, 6 | watch, 7 | minify: process.env.NODE_ENV === 'production', 8 | sourcemap: process.env.NODE_ENV === 'development', 9 | mainFields: ['module', 'main'], 10 | external: ['coc.nvim'], 11 | platform: 'node', 12 | target: 'node14.14', 13 | outfile: 'lib/index.js', 14 | }); 15 | } 16 | 17 | let watch = false; 18 | if (process.argv.length > 2 && process.argv[2] === '--watch') { 19 | console.log('watching...'); 20 | watch = { 21 | onRebuild(error) { 22 | if (error) { 23 | console.error('watch build failed:', error); 24 | } else { 25 | console.log('watch build succeeded'); 26 | } 27 | }, 28 | }; 29 | } 30 | 31 | start(watch).catch((e) => { 32 | console.error(e); 33 | }); 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@yaegassy/coc-phpstan", 3 | "version": "0.5.1", 4 | "description": "PHPStan (PHP Static Analysis tool) extension for coc.nvim", 5 | "author": "yaegassy ", 6 | "license": "MIT", 7 | "main": "lib/index.js", 8 | "keywords": [ 9 | "coc.nvim", 10 | "php", 11 | "linter", 12 | "phpstan", 13 | "vim", 14 | "neovim" 15 | ], 16 | "engines": { 17 | "coc": "^0.0.80" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/yaegassy/coc-phpstan" 22 | }, 23 | "publishConfig": { 24 | "access": "public" 25 | }, 26 | "scripts": { 27 | "lint": "eslint src --ext ts", 28 | "clean": "rimraf lib", 29 | "watch": "node esbuild.js --watch", 30 | "build": "node esbuild.js", 31 | "prepare": "node esbuild.js" 32 | }, 33 | "prettier": { 34 | "singleQuote": true, 35 | "printWidth": 120, 36 | "semi": true 37 | }, 38 | "devDependencies": { 39 | "@types/node": "^18.16.5", 40 | "@types/node-fetch": "^2.6.2", 41 | "@typescript-eslint/eslint-plugin": "^5.59.2", 42 | "@typescript-eslint/parser": "^5.59.2", 43 | "coc.nvim": "^0.0.82", 44 | "esbuild": "^0.16.17", 45 | "eslint": "^8.40.0", 46 | "eslint-config-prettier": "^8.8.0", 47 | "eslint-plugin-prettier": "^4.2.1", 48 | "https-proxy-agent": "^5.0.1", 49 | "node-fetch": "^2.6.7", 50 | "prettier": "^2.8.8", 51 | "rimraf": "^3.0.2", 52 | "typescript": "^5.0.4" 53 | }, 54 | "activationEvents": [ 55 | "onLanguage:php", 56 | "onLanguage:neon" 57 | ], 58 | "contributes": { 59 | "rootPatterns": [ 60 | { 61 | "filetype": "php", 62 | "patterns": [ 63 | "phpstan.neon", 64 | "phpstan.neon.dist", 65 | "phpstan.dist.neon" 66 | ] 67 | } 68 | ], 69 | "configuration": { 70 | "type": "object", 71 | "title": "coc-phpstan configuration", 72 | "properties": { 73 | "phpstan.enable": { 74 | "type": "boolean", 75 | "default": true, 76 | "description": "Enable coc-phpstan extension" 77 | }, 78 | "phpstan.toolPath": { 79 | "type": "string", 80 | "default": "", 81 | "description": "The path to the phpstan (Absolute path)" 82 | }, 83 | "phpstan.level": { 84 | "type": "string", 85 | "default": null, 86 | "description": "Specifies the rule level (0 - 9 and max) to run, If you apply this setting, the level setting in the phpstan.neon file will be ignored" 87 | }, 88 | "phpstan.configuration": { 89 | "type": "string", 90 | "default": null, 91 | "description": "Specifies the path to a configuration file" 92 | }, 93 | "phpstan.memoryLimit": { 94 | "type": "string", 95 | "default": "-1", 96 | "description": "Specifies the memory limit in the same format php.ini accepts, Example: -1, 1024M, 2G" 97 | }, 98 | "phpstan.download.checkOnStartup": { 99 | "type": "boolean", 100 | "default": true, 101 | "description": "Perform built-in download if phpstan is not present at startup" 102 | }, 103 | "phpstan.neonLint.enable": { 104 | "type": "boolean", 105 | "default": true, 106 | "description": "Enable neon-js lint (diagnostics). It will only work if the file name is `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon`" 107 | } 108 | } 109 | }, 110 | "commands": [ 111 | { 112 | "command": "phpstan.download", 113 | "title": "Download PHPStan" 114 | }, 115 | { 116 | "command": "phpstan.showOutput", 117 | "title": "Show phpstan output channel" 118 | } 119 | ] 120 | }, 121 | "dependencies": { 122 | "neon-js": "^1.1.2" 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /src/action.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CodeAction, 3 | CodeActionContext, 4 | CodeActionProvider, 5 | DocumentSelector, 6 | ExtensionContext, 7 | languages, 8 | Position, 9 | Range, 10 | TextDocument, 11 | TextEdit, 12 | workspace, 13 | } from 'coc.nvim'; 14 | 15 | export function register(context: ExtensionContext) { 16 | const languageSelector: DocumentSelector = [{ language: 'php', scheme: 'file' }]; 17 | const codeActionProvider = new PHPStanCodeActionProvider(); 18 | context.subscriptions.push(languages.registerCodeActionProvider(languageSelector, codeActionProvider, 'phpstan')); 19 | } 20 | 21 | class PHPStanCodeActionProvider implements CodeActionProvider { 22 | public async provideCodeActions(document: TextDocument, range: Range, context: CodeActionContext) { 23 | const doc = workspace.getDocument(document.uri); 24 | const wholeRange = Range.create(0, 0, doc.lineCount, 0); 25 | let whole = false; 26 | if ( 27 | range.start.line === wholeRange.start.line && 28 | range.start.character === wholeRange.start.character && 29 | range.end.line === wholeRange.end.line && 30 | range.end.character === wholeRange.end.character 31 | ) { 32 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 33 | whole = true; 34 | } 35 | const codeActions: CodeAction[] = []; 36 | 37 | /** Add phpstan ignore comment */ 38 | if (this.lineRange(range) && context.diagnostics.length > 0) { 39 | let existsPHPStanDiagnostics = false; 40 | context.diagnostics.forEach((d) => { 41 | if (d.source === 'phpstan') { 42 | existsPHPStanDiagnostics = true; 43 | } 44 | }); 45 | 46 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 47 | const line = doc.getline(range.start.line); 48 | 49 | const thisLineFullLength = doc.getline(range.start.line).length; 50 | const thisLineTrimLength = doc.getline(range.start.line).trim().length; 51 | const suppressLineLength = thisLineFullLength - thisLineTrimLength; 52 | 53 | let suppressLineNewText = '/** @phpstan-ignore-next-line */\n'; 54 | if (suppressLineLength > 0) { 55 | const addIndentSpace = ' '.repeat(suppressLineLength); 56 | suppressLineNewText = '/** @phpstan-ignore-next-line */\n' + addIndentSpace; 57 | } 58 | 59 | let thisLineContent = doc.getline(range.start.line); 60 | thisLineContent = thisLineContent.trim(); 61 | 62 | // Add @phpstan-ignore-next-line 63 | if (!thisLineContent.startsWith('/**') && !thisLineContent.startsWith('*') && existsPHPStanDiagnostics) { 64 | const edit = TextEdit.insert(Position.create(range.start.line, suppressLineLength), suppressLineNewText); 65 | codeActions.push({ 66 | title: 'Add @phpstan-ignore-next-line', 67 | edit: { 68 | changes: { 69 | [doc.uri]: [edit], 70 | }, 71 | }, 72 | }); 73 | } 74 | 75 | // Add @phpstan-ignore-line 76 | if (!thisLineContent.startsWith('/**') && !thisLineContent.startsWith('*') && existsPHPStanDiagnostics) { 77 | const edit = TextEdit.replace( 78 | range, 79 | `${line} /* @phpstan-ignore-line */${range.start.line + 1 === range.end.line ? '\n' : ''}` 80 | ); 81 | codeActions.push({ 82 | title: 'Add @phpstan-ignore-line', 83 | edit: { 84 | changes: { 85 | [doc.uri]: [edit], 86 | }, 87 | }, 88 | }); 89 | } 90 | } 91 | 92 | return codeActions; 93 | } 94 | 95 | private lineRange(r: Range): boolean { 96 | return ( 97 | (r.start.line + 1 === r.end.line && r.start.character === 0 && r.end.character === 0) || 98 | (r.start.line === r.end.line && r.start.character === 0) 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/downloader.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, window } from 'coc.nvim'; 2 | import { randomBytes } from 'crypto'; 3 | import { createWriteStream, promises as fs } from 'fs'; 4 | import { HttpsProxyAgent } from 'https-proxy-agent'; 5 | import fetch from 'node-fetch'; 6 | import path from 'path'; 7 | import stream from 'stream'; 8 | import util from 'util'; 9 | 10 | const pipeline = util.promisify(stream.pipeline); 11 | const agent = process.env.https_proxy ? new HttpsProxyAgent(process.env.https_proxy as string) : null; 12 | 13 | export async function download(context: ExtensionContext): Promise { 14 | const statusItem = window.createStatusBarItem(0, { progress: true }); 15 | statusItem.text = `Downloading phpstan`; 16 | statusItem.show(); 17 | 18 | const downloadUrl = 'https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar'; 19 | 20 | // @ts-ignore 21 | const resp = await fetch(downloadUrl, { agent }); 22 | if (!resp.ok) { 23 | statusItem.hide(); 24 | throw new Error('Download failed'); 25 | } 26 | 27 | let cur = 0; 28 | const len = Number(resp.headers.get('content-length')); 29 | resp.body.on('data', (chunk: Buffer) => { 30 | cur += chunk.length; 31 | const p = ((cur / len) * 100).toFixed(2); 32 | statusItem.text = `${p}% Downloading phpstan`; 33 | }); 34 | 35 | const _path = path.join(context.storagePath, 'phpstan'); 36 | const randomHex = randomBytes(5).toString('hex'); 37 | const tempFile = path.join(context.storagePath, `phpstan-${randomHex}`); 38 | 39 | const destFileStream = createWriteStream(tempFile, { mode: 0o755 }); 40 | await pipeline(resp.body, destFileStream); 41 | await new Promise((resolve) => { 42 | destFileStream.on('close', resolve); 43 | destFileStream.destroy(); 44 | setTimeout(resolve, 1000); 45 | }); 46 | 47 | await fs.unlink(_path).catch((err) => { 48 | if (err.code !== 'ENOENT') throw err; 49 | }); 50 | await fs.rename(tempFile, _path); 51 | 52 | statusItem.hide(); 53 | } 54 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, window, workspace } from 'coc.nvim'; 2 | 3 | import fs from 'fs'; 4 | import path from 'path'; 5 | 6 | import * as phpstanCodeActionFeature from './action'; 7 | import { download } from './downloader'; 8 | import * as neonLintFeature from './neonLint'; 9 | import * as phpstanLintFeature from './phpstanLint'; 10 | 11 | export async function activate(context: ExtensionContext): Promise { 12 | if (!workspace.getConfiguration('phpstan').get('enable')) return; 13 | 14 | const extensionStoragePath = context.storagePath; 15 | if (!fs.existsSync(extensionStoragePath)) { 16 | fs.mkdirSync(extensionStoragePath, { recursive: true }); 17 | } 18 | 19 | const outputChannel = window.createOutputChannel('phpstan'); 20 | 21 | context.subscriptions.push( 22 | commands.registerCommand('phpstan.showOutput', () => { 23 | if (outputChannel) { 24 | outputChannel.show(); 25 | } 26 | }) 27 | ); 28 | 29 | context.subscriptions.push( 30 | commands.registerCommand('phpstan.download', async () => { 31 | await downloadWrapper(context); 32 | }) 33 | ); 34 | 35 | // 1. phpstan.toolPath 36 | let toolPath = workspace.getConfiguration('phpstan').get('toolPath', ''); 37 | if (!toolPath) { 38 | if (fs.existsSync(path.join(workspace.root, 'vendor', 'bin', 'phpstan'))) { 39 | // 2. Project's "phpstan" 40 | toolPath = path.join(workspace.root, 'vendor', 'bin', 'phpstan'); 41 | } else if (fs.existsSync(path.join(context.storagePath, 'phpstan'))) { 42 | // 3. builtin "phpstan" 43 | toolPath = path.join(context.storagePath, 'phpstan'); 44 | } 45 | } 46 | 47 | // Donwload "phpstan" if it does not exist. 48 | if (workspace.getConfiguration('phpstan').get('download.checkOnStartup', true)) { 49 | if (!toolPath) { 50 | await downloadWrapper(context); 51 | if (fs.existsSync(path.join(context.storagePath, 'phpstan'))) { 52 | toolPath = path.join(context.storagePath, 'phpstan'); 53 | } else { 54 | return; 55 | } 56 | } 57 | } 58 | 59 | if (!toolPath) return; 60 | 61 | phpstanLintFeature.register(context, toolPath, outputChannel); 62 | neonLintFeature.register(context, outputChannel); 63 | phpstanCodeActionFeature.register(context); 64 | } 65 | 66 | async function downloadWrapper(context: ExtensionContext) { 67 | let msg = 'Do you want to download "phpstan"?'; 68 | const ret = await window.showPrompt(msg); 69 | if (ret) { 70 | try { 71 | await download(context); 72 | } catch (e) { 73 | console.error(e); 74 | msg = 'Download phpstan failed, you can get it from https://github.com/phpstan/phpstan'; 75 | window.showErrorMessage(msg); 76 | return; 77 | } 78 | } else { 79 | return; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/neonLint.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Diagnostic, 3 | DiagnosticCollection, 4 | DiagnosticSeverity, 5 | ExtensionContext, 6 | languages, 7 | OutputChannel, 8 | Position, 9 | Range, 10 | TextDocument, 11 | workspace, 12 | } from 'coc.nvim'; 13 | 14 | import neon from 'neon-js'; 15 | 16 | export function register(context: ExtensionContext, outputChannel: OutputChannel) { 17 | if (!workspace.getConfiguration('phpstan').get('neonLint.enable')) return; 18 | 19 | const engine = new NeonLintEngine(outputChannel); 20 | 21 | workspace.documents.map(async (doc) => { 22 | await engine.lint(doc.textDocument); 23 | }); 24 | 25 | workspace.onDidOpenTextDocument( 26 | async (e) => { 27 | await engine.lint(e); 28 | }, 29 | null, 30 | context.subscriptions 31 | ); 32 | 33 | workspace.onDidChangeTextDocument( 34 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 35 | async (_e) => { 36 | const doc = await workspace.document; 37 | await engine.lint(doc.textDocument); 38 | }, 39 | null, 40 | context.subscriptions 41 | ); 42 | 43 | workspace.onDidSaveTextDocument( 44 | async (e) => { 45 | await engine.lint(e); 46 | }, 47 | null, 48 | context.subscriptions 49 | ); 50 | } 51 | 52 | class NeonLintEngine { 53 | private collection: DiagnosticCollection; 54 | private outputChannel: OutputChannel; 55 | 56 | constructor(outputChannel: OutputChannel) { 57 | this.collection = languages.createDiagnosticCollection('phpstan-neon'); 58 | this.outputChannel = outputChannel; 59 | } 60 | 61 | public async lint(textDocument: TextDocument): Promise { 62 | if ( 63 | !textDocument.uri.endsWith('phpstan.neon') && 64 | !textDocument.uri.endsWith('phpstan.neon.dist') && 65 | !textDocument.uri.endsWith('phpstan.dist.neon') 66 | ) 67 | return; 68 | 69 | const text = textDocument.getText(); 70 | 71 | this.outputChannel.appendLine(`${'#'.repeat(10)} phpstan-neon\n`); 72 | 73 | try { 74 | neon.decode(text); 75 | this.outputChannel.appendLine(`RES: success\n`); 76 | this.collection.set(textDocument.uri, null); 77 | } catch (e: any) { 78 | if (e instanceof neon.Error) { 79 | this.collection.set(textDocument.uri, this.getDiagnostics(e)); 80 | this.outputChannel.appendLine(`ERR: ${e.message}\n`); 81 | } 82 | } 83 | } 84 | 85 | private getDiagnostics(e: any): Diagnostic[] { 86 | const diagnostics: Diagnostic[] = []; 87 | 88 | if ('line' in e && 'column' in e && 'message' in e) { 89 | const line = e.line - 1; 90 | const column = e.column - 1; 91 | 92 | const range = Range.create(Position.create(line, column), Position.create(line, column)); 93 | 94 | diagnostics.push(Diagnostic.create(range, e.message, DiagnosticSeverity.Error)); 95 | } 96 | 97 | return diagnostics; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/phpstanLint.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Diagnostic, 3 | DiagnosticCollection, 4 | DiagnosticSeverity, 5 | ExtensionContext, 6 | languages, 7 | OutputChannel, 8 | Position, 9 | Range, 10 | TextDocument, 11 | Uri, 12 | workspace, 13 | WorkspaceConfiguration, 14 | } from 'coc.nvim'; 15 | 16 | import cp from 'child_process'; 17 | import fs from 'fs'; 18 | 19 | export function register(context: ExtensionContext, toolPath: string, outputChannel: OutputChannel) { 20 | const engine = new LintEngine(toolPath, outputChannel); 21 | 22 | // lint onOpen 23 | workspace.documents.map(async (doc) => { 24 | await engine.lint(doc.textDocument); 25 | }); 26 | 27 | workspace.onDidOpenTextDocument( 28 | async (e) => { 29 | await engine.lint(e); 30 | }, 31 | null, 32 | context.subscriptions 33 | ); 34 | 35 | // lint onSave 36 | workspace.onDidSaveTextDocument( 37 | async (e) => { 38 | await engine.lint(e); 39 | }, 40 | null, 41 | context.subscriptions 42 | ); 43 | } 44 | 45 | type PHPStanDiagnosticsType = { 46 | totals: { 47 | errors: number; 48 | file_errors: number; 49 | }; 50 | files: { 51 | [filepath: string]: { 52 | errors: number; 53 | messages: { 54 | message: string; 55 | line: number | null; 56 | ignorable: boolean; 57 | }[]; 58 | }; 59 | }; 60 | errors: string[]; 61 | }; 62 | 63 | class LintEngine { 64 | private collection: DiagnosticCollection; 65 | private toolPath: string; 66 | private outputChannel: OutputChannel; 67 | private extensionConfig: WorkspaceConfiguration; 68 | 69 | constructor(toolPath: string, outputChannel: OutputChannel) { 70 | this.collection = languages.createDiagnosticCollection('phpstan'); 71 | this.toolPath = toolPath; 72 | this.outputChannel = outputChannel; 73 | 74 | const extensionConfig = workspace.getConfiguration('phpstan'); 75 | this.extensionConfig = extensionConfig; 76 | } 77 | 78 | public async lint(textDocument: TextDocument): Promise { 79 | if (textDocument.languageId !== 'php') return; 80 | 81 | // eslint-disable-next-line @typescript-eslint/no-this-alias 82 | const self = this; 83 | const filePath = Uri.parse(textDocument.uri).fsPath; 84 | const args: string[] = []; 85 | const cwd = Uri.file(workspace.root).fsPath; 86 | const opts = { cwd, shell: true }; 87 | 88 | args.push('analyze'); 89 | args.push('--no-progress'); 90 | args.push('--no-ansi'); 91 | args.push('--no-interaction'); 92 | args.push('--error-format=json'); 93 | 94 | const ruleLevel = this.extensionConfig.get('level', null); 95 | if (ruleLevel !== null) { 96 | args.push(`--level=${ruleLevel}`); 97 | } 98 | 99 | const analyzeMemoryLimit = this.extensionConfig.get('memoryLimit', '-1'); 100 | if (analyzeMemoryLimit) { 101 | // MEMO: Since the value -1 is also valid, we pass the value with = 102 | args.push(`--memory-limit=${analyzeMemoryLimit}`); 103 | } 104 | 105 | const configrationFile = this.extensionConfig.get('configuration', null); 106 | if (configrationFile && fs.existsSync(configrationFile)) { 107 | args.push(`--configuration=${configrationFile}`); 108 | } 109 | 110 | this.outputChannel.appendLine(`${'#'.repeat(10)} phpstan\n`); 111 | this.outputChannel.appendLine(`Cwd: ${opts.cwd}`); 112 | this.outputChannel.appendLine(`Tool: ${this.toolPath}`); 113 | this.outputChannel.appendLine(`Args: ${args.join(' ')}`); 114 | this.outputChannel.appendLine(`File: ${filePath}\n`); 115 | 116 | this.collection.set(textDocument.uri); 117 | 118 | return new Promise(function (resolve) { 119 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 120 | cp.execFile(self.toolPath, [...args, filePath], opts, function (_error, stdout, stderr) { 121 | if (stderr) { 122 | self.outputChannel.appendLine(`**STDERR**\n\n${stderr}`); 123 | } 124 | 125 | self.outputChannel.appendLine(`**STDOUT**\n\n${stdout}\n`); 126 | self.collection.set(textDocument.uri, self.getDiagnostics(stdout)); 127 | resolve(); 128 | }); 129 | }); 130 | } 131 | 132 | private getDiagnostics(decoded: string): Diagnostic[] { 133 | const diagnostics: Diagnostic[] = []; 134 | 135 | if (!this.IsJsonString(decoded)) { 136 | return diagnostics; 137 | } 138 | 139 | const phpstanDiagnostics: PHPStanDiagnosticsType = JSON.parse(decoded); 140 | 141 | for (const filepath in phpstanDiagnostics.files) { 142 | const filepathItem = phpstanDiagnostics.files[filepath]; 143 | for (const messageItem of filepathItem.messages) { 144 | const line = messageItem.line ? messageItem.line - 1 : 0; 145 | const range = Range.create(Position.create(line, 0), Position.create(line, 0)); 146 | diagnostics.push( 147 | Diagnostic.create( 148 | range, 149 | messageItem.message + ` (ignorable: ${messageItem.ignorable})`, 150 | DiagnosticSeverity.Error, 151 | 'analyze' 152 | ) 153 | ); 154 | } 155 | } 156 | 157 | return diagnostics; 158 | } 159 | 160 | private IsJsonString(str: string): boolean { 161 | try { 162 | JSON.parse(str); 163 | } catch (e) { 164 | return false; 165 | } 166 | return true; 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | declare module 'neon-js'; 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": ["es2017", "es2018"], 5 | "module": "commonjs", 6 | "declaration": false, 7 | "sourceMap": true, 8 | "outDir": "lib", 9 | "strict": true, 10 | "moduleResolution": "node", 11 | "noImplicitAny": false, 12 | "esModuleInterop": true 13 | }, 14 | "include": ["src"] 15 | } 16 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/android-arm64@0.16.17": 6 | version "0.16.17" 7 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" 8 | integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== 9 | 10 | "@esbuild/android-arm@0.16.17": 11 | version "0.16.17" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" 13 | integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== 14 | 15 | "@esbuild/android-x64@0.16.17": 16 | version "0.16.17" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" 18 | integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== 19 | 20 | "@esbuild/darwin-arm64@0.16.17": 21 | version "0.16.17" 22 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" 23 | integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== 24 | 25 | "@esbuild/darwin-x64@0.16.17": 26 | version "0.16.17" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" 28 | integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== 29 | 30 | "@esbuild/freebsd-arm64@0.16.17": 31 | version "0.16.17" 32 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" 33 | integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== 34 | 35 | "@esbuild/freebsd-x64@0.16.17": 36 | version "0.16.17" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" 38 | integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== 39 | 40 | "@esbuild/linux-arm64@0.16.17": 41 | version "0.16.17" 42 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" 43 | integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== 44 | 45 | "@esbuild/linux-arm@0.16.17": 46 | version "0.16.17" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" 48 | integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== 49 | 50 | "@esbuild/linux-ia32@0.16.17": 51 | version "0.16.17" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" 53 | integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== 54 | 55 | "@esbuild/linux-loong64@0.16.17": 56 | version "0.16.17" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" 58 | integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== 59 | 60 | "@esbuild/linux-mips64el@0.16.17": 61 | version "0.16.17" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" 63 | integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== 64 | 65 | "@esbuild/linux-ppc64@0.16.17": 66 | version "0.16.17" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" 68 | integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== 69 | 70 | "@esbuild/linux-riscv64@0.16.17": 71 | version "0.16.17" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" 73 | integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== 74 | 75 | "@esbuild/linux-s390x@0.16.17": 76 | version "0.16.17" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" 78 | integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== 79 | 80 | "@esbuild/linux-x64@0.16.17": 81 | version "0.16.17" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" 83 | integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== 84 | 85 | "@esbuild/netbsd-x64@0.16.17": 86 | version "0.16.17" 87 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" 88 | integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== 89 | 90 | "@esbuild/openbsd-x64@0.16.17": 91 | version "0.16.17" 92 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" 93 | integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== 94 | 95 | "@esbuild/sunos-x64@0.16.17": 96 | version "0.16.17" 97 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" 98 | integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== 99 | 100 | "@esbuild/win32-arm64@0.16.17": 101 | version "0.16.17" 102 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" 103 | integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== 104 | 105 | "@esbuild/win32-ia32@0.16.17": 106 | version "0.16.17" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" 108 | integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== 109 | 110 | "@esbuild/win32-x64@0.16.17": 111 | version "0.16.17" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" 113 | integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== 114 | 115 | "@eslint-community/eslint-utils@^4.2.0": 116 | version "4.4.0" 117 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 118 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 119 | dependencies: 120 | eslint-visitor-keys "^3.3.0" 121 | 122 | "@eslint-community/regexpp@^4.4.0": 123 | version "4.5.1" 124 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 125 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 126 | 127 | "@eslint/eslintrc@^2.0.3": 128 | version "2.0.3" 129 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 130 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 131 | dependencies: 132 | ajv "^6.12.4" 133 | debug "^4.3.2" 134 | espree "^9.5.2" 135 | globals "^13.19.0" 136 | ignore "^5.2.0" 137 | import-fresh "^3.2.1" 138 | js-yaml "^4.1.0" 139 | minimatch "^3.1.2" 140 | strip-json-comments "^3.1.1" 141 | 142 | "@eslint/js@8.40.0": 143 | version "8.40.0" 144 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" 145 | integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== 146 | 147 | "@humanwhocodes/config-array@^0.11.8": 148 | version "0.11.8" 149 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 150 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 151 | dependencies: 152 | "@humanwhocodes/object-schema" "^1.2.1" 153 | debug "^4.1.1" 154 | minimatch "^3.0.5" 155 | 156 | "@humanwhocodes/module-importer@^1.0.1": 157 | version "1.0.1" 158 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 159 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 160 | 161 | "@humanwhocodes/object-schema@^1.2.1": 162 | version "1.2.1" 163 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 164 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 165 | 166 | "@nodelib/fs.scandir@2.1.4": 167 | version "2.1.4" 168 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" 169 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== 170 | dependencies: 171 | "@nodelib/fs.stat" "2.0.4" 172 | run-parallel "^1.1.9" 173 | 174 | "@nodelib/fs.scandir@2.1.5": 175 | version "2.1.5" 176 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 177 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 178 | dependencies: 179 | "@nodelib/fs.stat" "2.0.5" 180 | run-parallel "^1.1.9" 181 | 182 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 183 | version "2.0.4" 184 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" 185 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== 186 | 187 | "@nodelib/fs.stat@2.0.5": 188 | version "2.0.5" 189 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 190 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 191 | 192 | "@nodelib/fs.walk@^1.2.3": 193 | version "1.2.6" 194 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" 195 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== 196 | dependencies: 197 | "@nodelib/fs.scandir" "2.1.4" 198 | fastq "^1.6.0" 199 | 200 | "@nodelib/fs.walk@^1.2.8": 201 | version "1.2.8" 202 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 203 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 204 | dependencies: 205 | "@nodelib/fs.scandir" "2.1.5" 206 | fastq "^1.6.0" 207 | 208 | "@types/json-schema@^7.0.9": 209 | version "7.0.11" 210 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 211 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 212 | 213 | "@types/node-fetch@^2.6.2": 214 | version "2.6.2" 215 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" 216 | integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== 217 | dependencies: 218 | "@types/node" "*" 219 | form-data "^3.0.0" 220 | 221 | "@types/node@*": 222 | version "15.6.1" 223 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" 224 | integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== 225 | 226 | "@types/node@^18.16.5": 227 | version "18.16.5" 228 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.5.tgz#bf64e42719dc2e74da24709a2e1c0b50a966120a" 229 | integrity sha512-seOA34WMo9KB+UA78qaJoCO20RJzZGVXQ5Sh6FWu0g/hfT44nKXnej3/tCQl7FL97idFpBhisLYCTB50S0EirA== 230 | 231 | "@types/semver@^7.3.12": 232 | version "7.3.13" 233 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 234 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 235 | 236 | "@typescript-eslint/eslint-plugin@^5.59.2": 237 | version "5.59.2" 238 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz#684a2ce7182f3b4dac342eef7caa1c2bae476abd" 239 | integrity sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A== 240 | dependencies: 241 | "@eslint-community/regexpp" "^4.4.0" 242 | "@typescript-eslint/scope-manager" "5.59.2" 243 | "@typescript-eslint/type-utils" "5.59.2" 244 | "@typescript-eslint/utils" "5.59.2" 245 | debug "^4.3.4" 246 | grapheme-splitter "^1.0.4" 247 | ignore "^5.2.0" 248 | natural-compare-lite "^1.4.0" 249 | semver "^7.3.7" 250 | tsutils "^3.21.0" 251 | 252 | "@typescript-eslint/parser@^5.59.2": 253 | version "5.59.2" 254 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8" 255 | integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ== 256 | dependencies: 257 | "@typescript-eslint/scope-manager" "5.59.2" 258 | "@typescript-eslint/types" "5.59.2" 259 | "@typescript-eslint/typescript-estree" "5.59.2" 260 | debug "^4.3.4" 261 | 262 | "@typescript-eslint/scope-manager@5.59.2": 263 | version "5.59.2" 264 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c" 265 | integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA== 266 | dependencies: 267 | "@typescript-eslint/types" "5.59.2" 268 | "@typescript-eslint/visitor-keys" "5.59.2" 269 | 270 | "@typescript-eslint/type-utils@5.59.2": 271 | version "5.59.2" 272 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz#0729c237503604cd9a7084b5af04c496c9a4cdcf" 273 | integrity sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ== 274 | dependencies: 275 | "@typescript-eslint/typescript-estree" "5.59.2" 276 | "@typescript-eslint/utils" "5.59.2" 277 | debug "^4.3.4" 278 | tsutils "^3.21.0" 279 | 280 | "@typescript-eslint/types@5.59.2": 281 | version "5.59.2" 282 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" 283 | integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== 284 | 285 | "@typescript-eslint/typescript-estree@5.59.2": 286 | version "5.59.2" 287 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" 288 | integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q== 289 | dependencies: 290 | "@typescript-eslint/types" "5.59.2" 291 | "@typescript-eslint/visitor-keys" "5.59.2" 292 | debug "^4.3.4" 293 | globby "^11.1.0" 294 | is-glob "^4.0.3" 295 | semver "^7.3.7" 296 | tsutils "^3.21.0" 297 | 298 | "@typescript-eslint/utils@5.59.2": 299 | version "5.59.2" 300 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.2.tgz#0c45178124d10cc986115885688db6abc37939f4" 301 | integrity sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ== 302 | dependencies: 303 | "@eslint-community/eslint-utils" "^4.2.0" 304 | "@types/json-schema" "^7.0.9" 305 | "@types/semver" "^7.3.12" 306 | "@typescript-eslint/scope-manager" "5.59.2" 307 | "@typescript-eslint/types" "5.59.2" 308 | "@typescript-eslint/typescript-estree" "5.59.2" 309 | eslint-scope "^5.1.1" 310 | semver "^7.3.7" 311 | 312 | "@typescript-eslint/visitor-keys@5.59.2": 313 | version "5.59.2" 314 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" 315 | integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig== 316 | dependencies: 317 | "@typescript-eslint/types" "5.59.2" 318 | eslint-visitor-keys "^3.3.0" 319 | 320 | acorn-jsx@^5.3.2: 321 | version "5.3.2" 322 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 323 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 324 | 325 | acorn@^8.8.0: 326 | version "8.8.2" 327 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 328 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 329 | 330 | agent-base@6: 331 | version "6.0.2" 332 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 333 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 334 | dependencies: 335 | debug "4" 336 | 337 | ajv@^6.10.0, ajv@^6.12.4: 338 | version "6.12.6" 339 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 340 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 341 | dependencies: 342 | fast-deep-equal "^3.1.1" 343 | fast-json-stable-stringify "^2.0.0" 344 | json-schema-traverse "^0.4.1" 345 | uri-js "^4.2.2" 346 | 347 | ansi-regex@^5.0.1: 348 | version "5.0.1" 349 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 350 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 351 | 352 | ansi-styles@^4.1.0: 353 | version "4.3.0" 354 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 355 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 356 | dependencies: 357 | color-convert "^2.0.1" 358 | 359 | argparse@^2.0.1: 360 | version "2.0.1" 361 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 362 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 363 | 364 | array-union@^2.1.0: 365 | version "2.1.0" 366 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 367 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 368 | 369 | asynckit@^0.4.0: 370 | version "0.4.0" 371 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 372 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 373 | 374 | balanced-match@^1.0.0: 375 | version "1.0.2" 376 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 377 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 378 | 379 | brace-expansion@^1.1.7: 380 | version "1.1.11" 381 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 382 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 383 | dependencies: 384 | balanced-match "^1.0.0" 385 | concat-map "0.0.1" 386 | 387 | braces@^3.0.2: 388 | version "3.0.2" 389 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 390 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 391 | dependencies: 392 | fill-range "^7.0.1" 393 | 394 | callsites@^3.0.0: 395 | version "3.1.0" 396 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 397 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 398 | 399 | chalk@^4.0.0: 400 | version "4.1.1" 401 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 402 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 403 | dependencies: 404 | ansi-styles "^4.1.0" 405 | supports-color "^7.1.0" 406 | 407 | coc.nvim@^0.0.82: 408 | version "0.0.82" 409 | resolved "https://registry.yarnpkg.com/coc.nvim/-/coc.nvim-0.0.82.tgz#5230e2eb17e8499a60a97b46d844f2d08c593b29" 410 | integrity sha512-+70ap6FH8FSdaQ0CPijaasQzg6ue84j4/LkX6ZSpALX7YKBcGGDkCcd6adgaC/86b/ZqT3iTTEbMh3mdaI5qPA== 411 | 412 | color-convert@^2.0.1: 413 | version "2.0.1" 414 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 415 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 416 | dependencies: 417 | color-name "~1.1.4" 418 | 419 | color-name@~1.1.4: 420 | version "1.1.4" 421 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 422 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 423 | 424 | combined-stream@^1.0.8: 425 | version "1.0.8" 426 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 427 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 428 | dependencies: 429 | delayed-stream "~1.0.0" 430 | 431 | concat-map@0.0.1: 432 | version "0.0.1" 433 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 434 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 435 | 436 | cross-spawn@^7.0.2: 437 | version "7.0.3" 438 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 439 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 440 | dependencies: 441 | path-key "^3.1.0" 442 | shebang-command "^2.0.0" 443 | which "^2.0.1" 444 | 445 | debug@4, debug@^4.1.1: 446 | version "4.3.1" 447 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 448 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 449 | dependencies: 450 | ms "2.1.2" 451 | 452 | debug@^4.3.2, debug@^4.3.4: 453 | version "4.3.4" 454 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 455 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 456 | dependencies: 457 | ms "2.1.2" 458 | 459 | deep-is@^0.1.3: 460 | version "0.1.3" 461 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 462 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 463 | 464 | delayed-stream@~1.0.0: 465 | version "1.0.0" 466 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 467 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 468 | 469 | dir-glob@^3.0.1: 470 | version "3.0.1" 471 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 472 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 473 | dependencies: 474 | path-type "^4.0.0" 475 | 476 | doctrine@^3.0.0: 477 | version "3.0.0" 478 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 479 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 480 | dependencies: 481 | esutils "^2.0.2" 482 | 483 | esbuild@^0.16.17: 484 | version "0.16.17" 485 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" 486 | integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== 487 | optionalDependencies: 488 | "@esbuild/android-arm" "0.16.17" 489 | "@esbuild/android-arm64" "0.16.17" 490 | "@esbuild/android-x64" "0.16.17" 491 | "@esbuild/darwin-arm64" "0.16.17" 492 | "@esbuild/darwin-x64" "0.16.17" 493 | "@esbuild/freebsd-arm64" "0.16.17" 494 | "@esbuild/freebsd-x64" "0.16.17" 495 | "@esbuild/linux-arm" "0.16.17" 496 | "@esbuild/linux-arm64" "0.16.17" 497 | "@esbuild/linux-ia32" "0.16.17" 498 | "@esbuild/linux-loong64" "0.16.17" 499 | "@esbuild/linux-mips64el" "0.16.17" 500 | "@esbuild/linux-ppc64" "0.16.17" 501 | "@esbuild/linux-riscv64" "0.16.17" 502 | "@esbuild/linux-s390x" "0.16.17" 503 | "@esbuild/linux-x64" "0.16.17" 504 | "@esbuild/netbsd-x64" "0.16.17" 505 | "@esbuild/openbsd-x64" "0.16.17" 506 | "@esbuild/sunos-x64" "0.16.17" 507 | "@esbuild/win32-arm64" "0.16.17" 508 | "@esbuild/win32-ia32" "0.16.17" 509 | "@esbuild/win32-x64" "0.16.17" 510 | 511 | escape-string-regexp@^4.0.0: 512 | version "4.0.0" 513 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 514 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 515 | 516 | eslint-config-prettier@^8.8.0: 517 | version "8.8.0" 518 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" 519 | integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== 520 | 521 | eslint-plugin-prettier@^4.2.1: 522 | version "4.2.1" 523 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" 524 | integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== 525 | dependencies: 526 | prettier-linter-helpers "^1.0.0" 527 | 528 | eslint-scope@^5.1.1: 529 | version "5.1.1" 530 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 531 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 532 | dependencies: 533 | esrecurse "^4.3.0" 534 | estraverse "^4.1.1" 535 | 536 | eslint-scope@^7.2.0: 537 | version "7.2.0" 538 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 539 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 540 | dependencies: 541 | esrecurse "^4.3.0" 542 | estraverse "^5.2.0" 543 | 544 | eslint-visitor-keys@^3.3.0: 545 | version "3.3.0" 546 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 547 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 548 | 549 | eslint-visitor-keys@^3.4.1: 550 | version "3.4.1" 551 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 552 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 553 | 554 | eslint@^8.40.0: 555 | version "8.40.0" 556 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" 557 | integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== 558 | dependencies: 559 | "@eslint-community/eslint-utils" "^4.2.0" 560 | "@eslint-community/regexpp" "^4.4.0" 561 | "@eslint/eslintrc" "^2.0.3" 562 | "@eslint/js" "8.40.0" 563 | "@humanwhocodes/config-array" "^0.11.8" 564 | "@humanwhocodes/module-importer" "^1.0.1" 565 | "@nodelib/fs.walk" "^1.2.8" 566 | ajv "^6.10.0" 567 | chalk "^4.0.0" 568 | cross-spawn "^7.0.2" 569 | debug "^4.3.2" 570 | doctrine "^3.0.0" 571 | escape-string-regexp "^4.0.0" 572 | eslint-scope "^7.2.0" 573 | eslint-visitor-keys "^3.4.1" 574 | espree "^9.5.2" 575 | esquery "^1.4.2" 576 | esutils "^2.0.2" 577 | fast-deep-equal "^3.1.3" 578 | file-entry-cache "^6.0.1" 579 | find-up "^5.0.0" 580 | glob-parent "^6.0.2" 581 | globals "^13.19.0" 582 | grapheme-splitter "^1.0.4" 583 | ignore "^5.2.0" 584 | import-fresh "^3.0.0" 585 | imurmurhash "^0.1.4" 586 | is-glob "^4.0.0" 587 | is-path-inside "^3.0.3" 588 | js-sdsl "^4.1.4" 589 | js-yaml "^4.1.0" 590 | json-stable-stringify-without-jsonify "^1.0.1" 591 | levn "^0.4.1" 592 | lodash.merge "^4.6.2" 593 | minimatch "^3.1.2" 594 | natural-compare "^1.4.0" 595 | optionator "^0.9.1" 596 | strip-ansi "^6.0.1" 597 | strip-json-comments "^3.1.0" 598 | text-table "^0.2.0" 599 | 600 | espree@^9.5.2: 601 | version "9.5.2" 602 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 603 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 604 | dependencies: 605 | acorn "^8.8.0" 606 | acorn-jsx "^5.3.2" 607 | eslint-visitor-keys "^3.4.1" 608 | 609 | esquery@^1.4.2: 610 | version "1.5.0" 611 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 612 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 613 | dependencies: 614 | estraverse "^5.1.0" 615 | 616 | esrecurse@^4.3.0: 617 | version "4.3.0" 618 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 619 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 620 | dependencies: 621 | estraverse "^5.2.0" 622 | 623 | estraverse@^4.1.1: 624 | version "4.3.0" 625 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 626 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 627 | 628 | estraverse@^5.1.0, estraverse@^5.2.0: 629 | version "5.2.0" 630 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 631 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 632 | 633 | esutils@^2.0.2: 634 | version "2.0.3" 635 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 636 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 637 | 638 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 639 | version "3.1.3" 640 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 641 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 642 | 643 | fast-diff@^1.1.2: 644 | version "1.2.0" 645 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 646 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 647 | 648 | fast-glob@^3.2.9: 649 | version "3.2.11" 650 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 651 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 652 | dependencies: 653 | "@nodelib/fs.stat" "^2.0.2" 654 | "@nodelib/fs.walk" "^1.2.3" 655 | glob-parent "^5.1.2" 656 | merge2 "^1.3.0" 657 | micromatch "^4.0.4" 658 | 659 | fast-json-stable-stringify@^2.0.0: 660 | version "2.1.0" 661 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 662 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 663 | 664 | fast-levenshtein@^2.0.6: 665 | version "2.0.6" 666 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 667 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 668 | 669 | fastq@^1.6.0: 670 | version "1.11.0" 671 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 672 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 673 | dependencies: 674 | reusify "^1.0.4" 675 | 676 | file-entry-cache@^6.0.1: 677 | version "6.0.1" 678 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 679 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 680 | dependencies: 681 | flat-cache "^3.0.4" 682 | 683 | fill-range@^7.0.1: 684 | version "7.0.1" 685 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 686 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 687 | dependencies: 688 | to-regex-range "^5.0.1" 689 | 690 | find-up@^5.0.0: 691 | version "5.0.0" 692 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 693 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 694 | dependencies: 695 | locate-path "^6.0.0" 696 | path-exists "^4.0.0" 697 | 698 | flat-cache@^3.0.4: 699 | version "3.0.4" 700 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 701 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 702 | dependencies: 703 | flatted "^3.1.0" 704 | rimraf "^3.0.2" 705 | 706 | flatted@^3.1.0: 707 | version "3.1.1" 708 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 709 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 710 | 711 | form-data@^3.0.0: 712 | version "3.0.1" 713 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 714 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 715 | dependencies: 716 | asynckit "^0.4.0" 717 | combined-stream "^1.0.8" 718 | mime-types "^2.1.12" 719 | 720 | fs.realpath@^1.0.0: 721 | version "1.0.0" 722 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 723 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 724 | 725 | glob-parent@^5.1.2: 726 | version "5.1.2" 727 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 728 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 729 | dependencies: 730 | is-glob "^4.0.1" 731 | 732 | glob-parent@^6.0.2: 733 | version "6.0.2" 734 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 735 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 736 | dependencies: 737 | is-glob "^4.0.3" 738 | 739 | glob@^7.1.3: 740 | version "7.1.7" 741 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 742 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 743 | dependencies: 744 | fs.realpath "^1.0.0" 745 | inflight "^1.0.4" 746 | inherits "2" 747 | minimatch "^3.0.4" 748 | once "^1.3.0" 749 | path-is-absolute "^1.0.0" 750 | 751 | globals@^13.19.0: 752 | version "13.20.0" 753 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 754 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 755 | dependencies: 756 | type-fest "^0.20.2" 757 | 758 | globby@^11.1.0: 759 | version "11.1.0" 760 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 761 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 762 | dependencies: 763 | array-union "^2.1.0" 764 | dir-glob "^3.0.1" 765 | fast-glob "^3.2.9" 766 | ignore "^5.2.0" 767 | merge2 "^1.4.1" 768 | slash "^3.0.0" 769 | 770 | grapheme-splitter@^1.0.4: 771 | version "1.0.4" 772 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 773 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 774 | 775 | has-flag@^4.0.0: 776 | version "4.0.0" 777 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 778 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 779 | 780 | https-proxy-agent@^5.0.1: 781 | version "5.0.1" 782 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 783 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 784 | dependencies: 785 | agent-base "6" 786 | debug "4" 787 | 788 | ignore@^5.2.0: 789 | version "5.2.0" 790 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 791 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 792 | 793 | import-fresh@^3.0.0, import-fresh@^3.2.1: 794 | version "3.3.0" 795 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 796 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 797 | dependencies: 798 | parent-module "^1.0.0" 799 | resolve-from "^4.0.0" 800 | 801 | imurmurhash@^0.1.4: 802 | version "0.1.4" 803 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 804 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 805 | 806 | inflight@^1.0.4: 807 | version "1.0.6" 808 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 809 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 810 | dependencies: 811 | once "^1.3.0" 812 | wrappy "1" 813 | 814 | inherits@2: 815 | version "2.0.4" 816 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 817 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 818 | 819 | is-extglob@^2.1.1: 820 | version "2.1.1" 821 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 822 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 823 | 824 | is-glob@^4.0.0, is-glob@^4.0.1: 825 | version "4.0.1" 826 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 827 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 828 | dependencies: 829 | is-extglob "^2.1.1" 830 | 831 | is-glob@^4.0.3: 832 | version "4.0.3" 833 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 834 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 835 | dependencies: 836 | is-extglob "^2.1.1" 837 | 838 | is-number@^7.0.0: 839 | version "7.0.0" 840 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 841 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 842 | 843 | is-path-inside@^3.0.3: 844 | version "3.0.3" 845 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 846 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 847 | 848 | isexe@^2.0.0: 849 | version "2.0.0" 850 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 851 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 852 | 853 | js-sdsl@^4.1.4: 854 | version "4.4.0" 855 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" 856 | integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== 857 | 858 | js-yaml@^4.1.0: 859 | version "4.1.0" 860 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 861 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 862 | dependencies: 863 | argparse "^2.0.1" 864 | 865 | json-schema-traverse@^0.4.1: 866 | version "0.4.1" 867 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 868 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 869 | 870 | json-stable-stringify-without-jsonify@^1.0.1: 871 | version "1.0.1" 872 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 873 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 874 | 875 | levn@^0.4.1: 876 | version "0.4.1" 877 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 878 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 879 | dependencies: 880 | prelude-ls "^1.2.1" 881 | type-check "~0.4.0" 882 | 883 | locate-path@^6.0.0: 884 | version "6.0.0" 885 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 886 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 887 | dependencies: 888 | p-locate "^5.0.0" 889 | 890 | lodash.merge@^4.6.2: 891 | version "4.6.2" 892 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 893 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 894 | 895 | lru-cache@^6.0.0: 896 | version "6.0.0" 897 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 898 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 899 | dependencies: 900 | yallist "^4.0.0" 901 | 902 | merge2@^1.3.0, merge2@^1.4.1: 903 | version "1.4.1" 904 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 905 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 906 | 907 | micromatch@^4.0.4: 908 | version "4.0.5" 909 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 910 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 911 | dependencies: 912 | braces "^3.0.2" 913 | picomatch "^2.3.1" 914 | 915 | mime-db@1.47.0: 916 | version "1.47.0" 917 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 918 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 919 | 920 | mime-types@^2.1.12: 921 | version "2.1.30" 922 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 923 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 924 | dependencies: 925 | mime-db "1.47.0" 926 | 927 | minimatch@^3.0.4: 928 | version "3.0.4" 929 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 930 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 931 | dependencies: 932 | brace-expansion "^1.1.7" 933 | 934 | minimatch@^3.0.5, minimatch@^3.1.2: 935 | version "3.1.2" 936 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 937 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 938 | dependencies: 939 | brace-expansion "^1.1.7" 940 | 941 | ms@2.1.2: 942 | version "2.1.2" 943 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 944 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 945 | 946 | natural-compare-lite@^1.4.0: 947 | version "1.4.0" 948 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 949 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 950 | 951 | natural-compare@^1.4.0: 952 | version "1.4.0" 953 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 954 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 955 | 956 | neon-js@^1.1.2: 957 | version "1.1.2" 958 | resolved "https://registry.yarnpkg.com/neon-js/-/neon-js-1.1.2.tgz#af85d8e2bb8099cfc7f6fe256a896a5464b00623" 959 | integrity sha512-sAZ4KZ0jbEetYJ+Pt38yTsDevueF2zJXZjYbOVNcvyThJZy+tJ4DEe8J482JeGLYHJXzdEoWLcnEZHsnjsBtwA== 960 | 961 | node-fetch@^2.6.7: 962 | version "2.6.7" 963 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 964 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 965 | dependencies: 966 | whatwg-url "^5.0.0" 967 | 968 | once@^1.3.0: 969 | version "1.4.0" 970 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 971 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 972 | dependencies: 973 | wrappy "1" 974 | 975 | optionator@^0.9.1: 976 | version "0.9.1" 977 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 978 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 979 | dependencies: 980 | deep-is "^0.1.3" 981 | fast-levenshtein "^2.0.6" 982 | levn "^0.4.1" 983 | prelude-ls "^1.2.1" 984 | type-check "^0.4.0" 985 | word-wrap "^1.2.3" 986 | 987 | p-limit@^3.0.2: 988 | version "3.1.0" 989 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 990 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 991 | dependencies: 992 | yocto-queue "^0.1.0" 993 | 994 | p-locate@^5.0.0: 995 | version "5.0.0" 996 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 997 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 998 | dependencies: 999 | p-limit "^3.0.2" 1000 | 1001 | parent-module@^1.0.0: 1002 | version "1.0.1" 1003 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1004 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1005 | dependencies: 1006 | callsites "^3.0.0" 1007 | 1008 | path-exists@^4.0.0: 1009 | version "4.0.0" 1010 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1011 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1012 | 1013 | path-is-absolute@^1.0.0: 1014 | version "1.0.1" 1015 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1016 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1017 | 1018 | path-key@^3.1.0: 1019 | version "3.1.1" 1020 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1021 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1022 | 1023 | path-type@^4.0.0: 1024 | version "4.0.0" 1025 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1026 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1027 | 1028 | picomatch@^2.3.1: 1029 | version "2.3.1" 1030 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1031 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1032 | 1033 | prelude-ls@^1.2.1: 1034 | version "1.2.1" 1035 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1036 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1037 | 1038 | prettier-linter-helpers@^1.0.0: 1039 | version "1.0.0" 1040 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1041 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1042 | dependencies: 1043 | fast-diff "^1.1.2" 1044 | 1045 | prettier@^2.8.8: 1046 | version "2.8.8" 1047 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1048 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1049 | 1050 | punycode@^2.1.0: 1051 | version "2.1.1" 1052 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1053 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1054 | 1055 | queue-microtask@^1.2.2: 1056 | version "1.2.3" 1057 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1058 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1059 | 1060 | resolve-from@^4.0.0: 1061 | version "4.0.0" 1062 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1063 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1064 | 1065 | reusify@^1.0.4: 1066 | version "1.0.4" 1067 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1068 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1069 | 1070 | rimraf@^3.0.2: 1071 | version "3.0.2" 1072 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1073 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1074 | dependencies: 1075 | glob "^7.1.3" 1076 | 1077 | run-parallel@^1.1.9: 1078 | version "1.2.0" 1079 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1080 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1081 | dependencies: 1082 | queue-microtask "^1.2.2" 1083 | 1084 | semver@^7.3.7: 1085 | version "7.3.7" 1086 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1087 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1088 | dependencies: 1089 | lru-cache "^6.0.0" 1090 | 1091 | shebang-command@^2.0.0: 1092 | version "2.0.0" 1093 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1094 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1095 | dependencies: 1096 | shebang-regex "^3.0.0" 1097 | 1098 | shebang-regex@^3.0.0: 1099 | version "3.0.0" 1100 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1101 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1102 | 1103 | slash@^3.0.0: 1104 | version "3.0.0" 1105 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1106 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1107 | 1108 | strip-ansi@^6.0.1: 1109 | version "6.0.1" 1110 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1111 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1112 | dependencies: 1113 | ansi-regex "^5.0.1" 1114 | 1115 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1116 | version "3.1.1" 1117 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1118 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1119 | 1120 | supports-color@^7.1.0: 1121 | version "7.2.0" 1122 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1123 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1124 | dependencies: 1125 | has-flag "^4.0.0" 1126 | 1127 | text-table@^0.2.0: 1128 | version "0.2.0" 1129 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1130 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1131 | 1132 | to-regex-range@^5.0.1: 1133 | version "5.0.1" 1134 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1135 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1136 | dependencies: 1137 | is-number "^7.0.0" 1138 | 1139 | tr46@~0.0.3: 1140 | version "0.0.3" 1141 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1142 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1143 | 1144 | tslib@^1.8.1: 1145 | version "1.14.1" 1146 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1147 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1148 | 1149 | tsutils@^3.21.0: 1150 | version "3.21.0" 1151 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1152 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1153 | dependencies: 1154 | tslib "^1.8.1" 1155 | 1156 | type-check@^0.4.0, type-check@~0.4.0: 1157 | version "0.4.0" 1158 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1159 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1160 | dependencies: 1161 | prelude-ls "^1.2.1" 1162 | 1163 | type-fest@^0.20.2: 1164 | version "0.20.2" 1165 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1166 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1167 | 1168 | typescript@^5.0.4: 1169 | version "5.0.4" 1170 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 1171 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 1172 | 1173 | uri-js@^4.2.2: 1174 | version "4.4.1" 1175 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1176 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1177 | dependencies: 1178 | punycode "^2.1.0" 1179 | 1180 | webidl-conversions@^3.0.0: 1181 | version "3.0.1" 1182 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1183 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1184 | 1185 | whatwg-url@^5.0.0: 1186 | version "5.0.0" 1187 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1188 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1189 | dependencies: 1190 | tr46 "~0.0.3" 1191 | webidl-conversions "^3.0.0" 1192 | 1193 | which@^2.0.1: 1194 | version "2.0.2" 1195 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1196 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1197 | dependencies: 1198 | isexe "^2.0.0" 1199 | 1200 | word-wrap@^1.2.3: 1201 | version "1.2.3" 1202 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1203 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1204 | 1205 | wrappy@1: 1206 | version "1.0.2" 1207 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1208 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1209 | 1210 | yallist@^4.0.0: 1211 | version "4.0.0" 1212 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1213 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1214 | 1215 | yocto-queue@^0.1.0: 1216 | version "0.1.0" 1217 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1218 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1219 | --------------------------------------------------------------------------------