├── .eslintrc.js ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── autoload └── coc_symbol_line.vim ├── esbuild.js ├── package.json ├── plugin └── coc_symbol_line.vim ├── src ├── config.ts ├── index.ts └── util │ ├── pos.ts │ ├── symbol.ts │ └── vim.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 | lib 2 | node_modules 3 | .vim 4 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 wongxy 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-symbol-line 2 | 3 | ![demo](https://user-images.githubusercontent.com/47070852/155291646-ec1f5623-63ab-4ff5-a48e-cd9670e5c39e.gif) 4 | 5 | This extension supports both Vim and Neovim. 6 | 7 | ## Install 8 | 9 | `:CocInstall coc-symbol-line` 10 | 11 | ## Setup 12 | 13 | Add section `%{%get(b:, "coc_symbol_line", "")%}` to tabline/statusline or neovim's winbar. 14 | 15 | **NOTE**: `b:coc_symbol_line_plain` does't include clickable sections, maybe you need this if you are using vim. 16 | 17 |
18 | lua snippet for neovim 19 | 20 | ```lua 21 | function _G.symbol_line() 22 | local curwin = vim.g.statusline_winid or 0 23 | local curbuf = vim.api.nvim_win_get_buf(curwin) 24 | local ok, line = pcall(vim.api.nvim_buf_get_var, curbuf, 'coc_symbol_line') 25 | return ok and line or '' 26 | end 27 | 28 | vim.o.tabline = '%!v:lua.symbol_line()' 29 | vim.o.statusline = '%!v:lua.symbol_line()' 30 | vim.o.winbar = '%!v:lua.symbol_line()' 31 | 32 | ``` 33 | 34 |
35 | 36 |
37 | My config for neovim 38 | 39 | ```lua 40 | function _G.symbol_line() 41 | local bufnr = vim.api.nvim_win_get_buf(vim.g.statusline_winid or 0) 42 | local ok, line = pcall(vim.api.nvim_buf_get_var, bufnr, 'coc_symbol_line') 43 | return ok and '%#CocSymbolLine# ' .. line or '' 44 | end 45 | 46 | if fn.exists '&winbar' then 47 | AUTOCMD { 48 | { 49 | { 'CursorHold', 'WinEnter', 'BufWinEnter' }, 50 | function() 51 | if vim.b.coc_symbol_line and vim.bo.buftype == '' then 52 | if vim.opt_local.winbar:get() == '' then 53 | vim.opt_local.winbar = '%!v:lua.symbol_line()' 54 | end 55 | else 56 | vim.opt_local.winbar = '' 57 | end 58 | end, 59 | }, 60 | } 61 | end 62 | ``` 63 | 64 |
65 | 66 | ## Usage 67 | 68 | This plugin only provide buffer localed variable `coc_symbol_line` 69 | 70 | Left click to jump to the position of this symbol. 71 | Right click to select the range of this symbol. 72 | 73 | ![usage](https://user-images.githubusercontent.com/47070852/174428903-ba7ba41b-e74c-4bc6-a96d-c0757cfaf515.gif) 74 | 75 | ## Options 76 | 77 | - `symbol-line.default` 78 | - `symbol-line.separator` 79 | - `symbol-line.icons` 80 | - `symbol-line.show{Kind}s` 81 | - `symbol-line.onlyNearestKinds` 82 | - `symbol-line.maxItems` 83 | - `symbol-line.maxItemsIndicator` 84 | 85 | Please trigger completion in `coc-settings.json` to get details. 86 | 87 | ## Highlights 88 | 89 | Recommend `set termguicolors` 90 | 91 | - `CocSymbolLine` 92 | - `CocSymbolLineSeparator` 93 | - `CocSymbolLineEllipsis` 94 | 95 | You should setup highlights before this extension activated. 96 | 97 | --- 98 | 99 | Most of code is copied from coc.nvim :) 100 | -------------------------------------------------------------------------------- /autoload/coc_symbol_line.vim: -------------------------------------------------------------------------------- 1 | function! coc_symbol_line#click(minwid, clicks, mouse, modifiers) 2 | call CocAction('runCommand', 'symbol-line._click', a:minwid, a:mouse) 3 | endfunction 4 | 5 | function! coc_symbol_line#expand(minwid, clicks, mouse, modifiers) 6 | let line = get(b:, 'coc_symbol_line', '') 7 | let b:coc_symbol_line = get(b:, 'coc_symbol_line_full', line) 8 | redraw 9 | endfunction 10 | 11 | function! s:a(groups, attr) " get gui attribute of highlight 12 | let attr = a:attr =~ '#$' ? a:attr : a:attr.'#' 13 | 14 | for group in a:groups 15 | let ret = synIDattr(synIDtrans(hlID(group)), attr) 16 | if ret =~ '^#' 17 | return ret 18 | endif 19 | endfor 20 | 21 | if attr =~ '^fg' 22 | return 'white' 23 | endif 24 | 25 | return 'NONE' 26 | endfunction 27 | 28 | function! coc_symbol_line#set_highlight() 29 | let bg = s:a(['CocSymbolLine'], 'bg') 30 | 31 | exe 'hi! CocSymbolLineSeparator guifg='.s:a(['CocSymbolLineSeparator', 'CocSymbolLine'], 'fg') .' guibg='.bg 32 | exe 'hi! CocSymbolLineEllipsis guifg='.s:a(['CocSymbolLineEllipsis', 'CocSymbolLine'], 'fg') .' guibg='.bg 33 | 34 | " TODO: update treestiter group names 35 | exe 'hi! CocSymbolLineFile guifg='.s:a(['CocSymbolFile', 'Statement'], 'fg') .' guibg='.bg 36 | exe 'hi! CocSymbolLineModule guifg='.s:a(['CocSymbolModule'], 'fg') .' guibg='.bg 37 | exe 'hi! CocSymbolLineNamespace guifg='.s:a(['CocSymbolNamespace', 'TSNamespace'], 'fg') .' guibg='.bg 38 | exe 'hi! CocSymbolLinePackage guifg='.s:a(['CocSymbolPackage'], 'fg') .' guibg='.bg 39 | exe 'hi! CocSymbolLineClass guifg='.s:a(['CocSymbolClass', 'TSType'], 'fg') .' guibg='.bg 40 | exe 'hi! CocSymbolLineMethod guifg='.s:a(['CocSymbolMethod', 'TSMethod'], 'fg') .' guibg='.bg 41 | exe 'hi! CocSymbolLineProperty guifg='.s:a(['CocSymbolProperty', 'TSProperty'], 'fg') .' guibg='.bg 42 | exe 'hi! CocSymbolLineField guifg='.s:a(['CocSymbolField', 'TSField'], 'fg') .' guibg='.bg 43 | exe 'hi! CocSymbolLineConstructor guifg='.s:a(['CocSymbolConstructor'], 'fg') .' guibg='.bg 44 | exe 'hi! CocSymbolLineEnum guifg='.s:a(['CocSymbolEnum'], 'fg') .' guibg='.bg 45 | exe 'hi! CocSymbolLineInterface guifg='.s:a(['CocSymbolInterface'], 'fg') .' guibg='.bg 46 | exe 'hi! CocSymbolLineFunction guifg='.s:a(['CocSymbolFunction', 'TSFunction'], 'fg') .' guibg='.bg 47 | exe 'hi! CocSymbolLineVariable guifg='.s:a(['CocSymbolVariable', 'TSVariable'], 'fg') .' guibg='.bg 48 | exe 'hi! CocSymbolLineConstant guifg='.s:a(['CocSymbolConstant', 'TSConstant'], 'fg') .' guibg='.bg 49 | exe 'hi! CocSymbolLineString guifg='.s:a(['CocSymbolString', 'TSString'], 'fg') .' guibg='.bg 50 | exe 'hi! CocSymbolLineNumber guifg='.s:a(['CocSymbolNumber', 'TSNumber'], 'fg') .' guibg='.bg 51 | exe 'hi! CocSymbolLineBoolean guifg='.s:a(['CocSymbolBoolean', 'TSBoolean'], 'fg') .' guibg='.bg 52 | exe 'hi! CocSymbolLineArray guifg='.s:a(['CocSymbolArray'], 'fg') .' guibg='.bg 53 | exe 'hi! CocSymbolLineObject guifg='.s:a(['CocSymbolObject'], 'fg') .' guibg='.bg 54 | exe 'hi! CocSymbolLineKey guifg='.s:a(['CocSymbolKey', 'TSKeyword'], 'fg') .' guibg='.bg 55 | exe 'hi! CocSymbolLineNull guifg='.s:a(['CocSymbolNull'], 'fg') .' guibg='.bg 56 | exe 'hi! CocSymbolLineEnumMember guifg='.s:a(['CocSymbolEnumMember'], 'fg') .' guibg='.bg 57 | exe 'hi! CocSymbolLineStruct guifg='.s:a(['CocSymbolStruct', 'TSStructure'], 'fg') .' guibg='.bg 58 | exe 'hi! CocSymbolLineEvent guifg='.s:a(['CocSymbolEvent'], 'fg') .' guibg='.bg 59 | exe 'hi! CocSymbolLineOperator guifg='.s:a(['CocSymbolOperator', 'TSOperator'], 'fg') .' guibg='.bg 60 | exe 'hi! CocSymbolLineTypeParameter guifg='.s:a(['CocSymbolTypeParameter'], 'fg') .' guibg='.bg 61 | 62 | endfunction 63 | -------------------------------------------------------------------------------- /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: 'node10.12', 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": "coc-symbol-line", 3 | "version": "0.0.21", 4 | "description": "", 5 | "author": "wongxy ", 6 | "license": "MIT", 7 | "main": "lib/index.js", 8 | "keywords": [ 9 | "coc.nvim" 10 | ], 11 | "engines": { 12 | "coc": "^0.0.80" 13 | }, 14 | "scripts": { 15 | "lint": "eslint src --ext ts", 16 | "clean": "rimraf lib", 17 | "watch": "node esbuild.js --watch", 18 | "build": "node esbuild.js", 19 | "prepare": "node esbuild.js" 20 | }, 21 | "prettier": { 22 | "singleQuote": true, 23 | "printWidth": 120, 24 | "semi": true 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^17.0.19", 28 | "@typescript-eslint/eslint-plugin": "^4.8.2", 29 | "@typescript-eslint/parser": "^4.8.2", 30 | "coc.nvim": "^0.0.80", 31 | "esbuild": "^0.8.42", 32 | "eslint": "^7.14.0", 33 | "eslint-config-prettier": "^8.1.0", 34 | "eslint-plugin-prettier": "^3.1.4", 35 | "prettier": "^2.2.0", 36 | "rimraf": "^3.0.2", 37 | "typescript": "^4.1.2", 38 | "vscode-languageserver-protocol": "^3.16.0" 39 | }, 40 | "activationEvents": [ 41 | "*" 42 | ], 43 | "contributes": { 44 | "configuration": { 45 | "type": "object", 46 | "title": "coc-symbol-line configuration", 47 | "properties": { 48 | "symbol-line.default": { 49 | "type": "string", 50 | "default": "%f", 51 | "description": "Default line when symbol-line is empty. Use `%f` by default. You can use `%#CocSymbolLine#` for unified highlighting" 52 | }, 53 | "symbol-line.separator": { 54 | "type": "string", 55 | "default": " > ", 56 | "description": "Separator between items" 57 | }, 58 | "symbol-line.icons": { 59 | "type": "boolean", 60 | "default": true, 61 | "description": "Render Symbol-Line Elements with Icons." 62 | }, 63 | "symbol-line.onlyNearestKinds": { 64 | "type": "array", 65 | "default": [], 66 | "items": { 67 | "type": "string" 68 | }, 69 | "uniqueItems": true, 70 | "description": "Shows only the nearest one. Available items: 'File','Module','Namespace','Package','Class','Method','Property','Field','Constructor','Enum','Interface','Function','Variable','Constant','String','Number','Boolean','Array','Object','Key','Null','EnumMember','Struct','Event','Operator','TypeParameter'" 71 | }, 72 | "symbol-line.maxItems": { 73 | "type": "number", 74 | "default": 8, 75 | "description": "Maximum items of symbols." 76 | }, 77 | "symbol-line.maxItemsIndicator": { 78 | "type": "string", 79 | "default": "…", 80 | "description": "A symbol for ellipsis." 81 | }, 82 | "symbol-line.showFiles": { 83 | "type": "boolean", 84 | "default": true, 85 | "markdownDescription": "When enabled symbol-line shows `file`-symbols." 86 | }, 87 | "symbol-line.showModules": { 88 | "type": "boolean", 89 | "default": true, 90 | "markdownDescription": "When enabled symbol-line shows `module`-symbols." 91 | }, 92 | "symbol-line.showNamespaces": { 93 | "type": "boolean", 94 | "default": true, 95 | "markdownDescription": "When enabled symbol-line shows `namespace`-symbols." 96 | }, 97 | "symbol-line.showPackages": { 98 | "type": "boolean", 99 | "default": true, 100 | "markdownDescription": "When enabled symbol-line shows `package`-symbols." 101 | }, 102 | "symbol-line.showClasses": { 103 | "type": "boolean", 104 | "default": true, 105 | "markdownDescription": "When enabled symbol-line shows `class`-symbols." 106 | }, 107 | "symbol-line.showMethods": { 108 | "type": "boolean", 109 | "default": true, 110 | "markdownDescription": "When enabled symbol-line shows `method`-symbols." 111 | }, 112 | "symbol-line.showProperties": { 113 | "type": "boolean", 114 | "default": true, 115 | "markdownDescription": "When enabled symbol-line shows `property`-symbols." 116 | }, 117 | "symbol-line.showFields": { 118 | "type": "boolean", 119 | "default": true, 120 | "markdownDescription": "When enabled symbol-line shows `field`-symbols." 121 | }, 122 | "symbol-line.showConstructors": { 123 | "type": "boolean", 124 | "default": true, 125 | "markdownDescription": "When enabled symbol-line shows `constructor`-symbols." 126 | }, 127 | "symbol-line.showEnums": { 128 | "type": "boolean", 129 | "default": true, 130 | "markdownDescription": "When enabled symbol-line shows `enum`-symbols." 131 | }, 132 | "symbol-line.showInterfaces": { 133 | "type": "boolean", 134 | "default": true, 135 | "markdownDescription": "When enabled symbol-line shows `interface`-symbols." 136 | }, 137 | "symbol-line.showFunctions": { 138 | "type": "boolean", 139 | "default": true, 140 | "markdownDescription": "When enabled symbol-line shows `function`-symbols." 141 | }, 142 | "symbol-line.showVariables": { 143 | "type": "boolean", 144 | "default": true, 145 | "markdownDescription": "When enabled symbol-line shows `variable`-symbols." 146 | }, 147 | "symbol-line.showConstants": { 148 | "type": "boolean", 149 | "default": true, 150 | "markdownDescription": "When enabled symbol-line shows `constant`-symbols." 151 | }, 152 | "symbol-line.showStrings": { 153 | "type": "boolean", 154 | "default": true, 155 | "markdownDescription": "When enabled symbol-line shows `string`-symbols." 156 | }, 157 | "symbol-line.showNumbers": { 158 | "type": "boolean", 159 | "default": true, 160 | "markdownDescription": "When enabled symbol-line shows `number`-symbols." 161 | }, 162 | "symbol-line.showBooleans": { 163 | "type": "boolean", 164 | "default": true, 165 | "markdownDescription": "When enabled symbol-line shows `boolean`-symbols." 166 | }, 167 | "symbol-line.showArrays": { 168 | "type": "boolean", 169 | "default": true, 170 | "markdownDescription": "When enabled symbol-line shows `array`-symbols." 171 | }, 172 | "symbol-line.showObjects": { 173 | "type": "boolean", 174 | "default": true, 175 | "markdownDescription": "When enabled symbol-line shows `object`-symbols." 176 | }, 177 | "symbol-line.showKeys": { 178 | "type": "boolean", 179 | "default": true, 180 | "markdownDescription": "When enabled symbol-line shows `key`-symbols." 181 | }, 182 | "symbol-line.showNull": { 183 | "type": "boolean", 184 | "default": true, 185 | "markdownDescription": "When enabled symbol-line shows `null`-symbols." 186 | }, 187 | "symbol-line.showEnumMembers": { 188 | "type": "boolean", 189 | "default": true, 190 | "markdownDescription": "When enabled symbol-line shows `enumMember`-symbols." 191 | }, 192 | "symbol-line.showStructs": { 193 | "type": "boolean", 194 | "default": true, 195 | "markdownDescription": "When enabled symbol-line shows `struct`-symbols." 196 | }, 197 | "symbol-line.showEvents": { 198 | "type": "boolean", 199 | "default": true, 200 | "markdownDescription": "When enabled symbol-line shows `event`-symbols." 201 | }, 202 | "symbol-line.showOperators": { 203 | "type": "boolean", 204 | "default": true, 205 | "markdownDescription": "When enabled symbol-line shows `operator`-symbols." 206 | }, 207 | "symbol-line.showTypeParameters": { 208 | "type": "boolean", 209 | "default": true, 210 | "markdownDescription": "When enabled symbol-line shows `typeParameter`-symbols." 211 | } 212 | } 213 | }, 214 | "commands": [] 215 | } 216 | } 217 | -------------------------------------------------------------------------------- /plugin/coc_symbol_line.vim: -------------------------------------------------------------------------------- 1 | hi default link CocSymbolLine Normal 2 | hi default link CocSymbolLineSeparator NonText 3 | 4 | hi default link CocSymbolLineEllipsis CocSymbolLine 5 | 6 | hi default link CocSymbolLineFile CocSymbolFile 7 | hi default link CocSymbolLineModule CocSymbolModule 8 | hi default link CocSymbolLineNamespace CocSymbolNamespace 9 | hi default link CocSymbolLinePackage CocSymbolPackage 10 | hi default link CocSymbolLineClass CocSymbolClass 11 | hi default link CocSymbolLineMethod CocSymbolMethod 12 | hi default link CocSymbolLineProperty CocSymbolProperty 13 | hi default link CocSymbolLineField CocSymbolField 14 | hi default link CocSymbolLineConstructor CocSymbolConstructor 15 | hi default link CocSymbolLineEnum CocSymbolEnum 16 | hi default link CocSymbolLineInterface CocSymbolInterface 17 | hi default link CocSymbolLineFunction CocSymbolFunction 18 | hi default link CocSymbolLineVariable CocSymbolVariable 19 | hi default link CocSymbolLineConstant CocSymbolConstant 20 | hi default link CocSymbolLineBoolean CocSymbolBoolean 21 | hi default link CocSymbolLineArray CocSymbolArray 22 | hi default link CocSymbolLineObject CocSymbolObject 23 | hi default link CocSymbolLineKey CocSymbolKey 24 | hi default link CocSymbolLineNull CocSymbolNull 25 | hi default link CocSymbolLineEnumMember CocSymbolEnumMember 26 | hi default link CocSymbolLineStruct CocSymbolStruct 27 | hi default link CocSymbolLineEvent CocSymbolEvent 28 | hi default link CocSymbolLineOperator CocSymbolOperator 29 | hi default link CocSymbolLineTypeParameter CocSymbolTypeParameter 30 | 31 | call coc_symbol_line#set_highlight() 32 | " adjust highlights 33 | call timer_start(3000, { -> coc_symbol_line#set_highlight() }) 34 | 35 | augroup CocSymbolLine 36 | autocmd! 37 | autocmd VimEnter,ColorScheme * call timer_start(3000, { -> coc_symbol_line#set_highlight() }) 38 | augroup END 39 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from 'coc.nvim'; 2 | 3 | const kindsMap = { 4 | showFiles: 'File', 5 | showModules: 'Module', 6 | showNamespaces: 'Namespace', 7 | showPackages: 'Package', 8 | showClasses: 'Class', 9 | showMethods: 'Method', 10 | showProperties: 'Property', 11 | showFields: 'Field', 12 | showConstructors: 'Constructor', 13 | showEnums: 'Enum', 14 | showInterfaces: 'Interface', 15 | showFunctions: 'Function', 16 | showVariables: 'Variable', 17 | showConstants: 'Constant', 18 | showStrings: 'String', 19 | showNumbers: 'Number', 20 | showBooleans: 'Boolean', 21 | showArrays: 'Array', 22 | showObjects: 'Object', 23 | showKeys: 'Key', 24 | showNull: 'Null', 25 | showEnumMembers: 'EnumMember', 26 | showStructs: 'Struct', 27 | showEvents: 'Event', 28 | showOperators: 'Operator', 29 | showTypeParameters: 'TypeParameter', 30 | }; 31 | 32 | class Config { 33 | constructor() { 34 | this.setConfiguration(); 35 | } 36 | 37 | public labels: { [key: string]: string } = {}; 38 | public default_ = '%f'; 39 | public separator = ' > '; 40 | public icons = true; 41 | public showKinds: string[] = []; 42 | public onlyNearestKinds: string[] = []; 43 | public maxItems = 8; 44 | public maxItemsIndicator = '…'; 45 | 46 | setConfiguration() { 47 | this.labels = workspace.getConfiguration('suggest').get('completionItemKindLabels', {}); 48 | 49 | const config = workspace.getConfiguration('symbol-line'); 50 | 51 | this.default_ = config.get('default')!; 52 | this.separator = config.get('separator')!; 53 | this.onlyNearestKinds = config.get('onlyNearestKinds')!; 54 | this.maxItems = config.get('maxItems')!; 55 | this.maxItemsIndicator = config.get('maxItemsIndicator')!; 56 | 57 | const checkBoolean = (key: string) => config.get(key)!; 58 | 59 | this.icons = checkBoolean('icons'); 60 | 61 | this.showKinds = []; 62 | for (const kindKey of [ 63 | 'showFiles', 64 | 'showModules', 65 | 'showNamespaces', 66 | 'showPackages', 67 | 'showClasses', 68 | 'showMethods', 69 | 'showProperties', 70 | 'showFields', 71 | 'showConstructors', 72 | 'showEnums', 73 | 'showInterfaces', 74 | 'showFunctions', 75 | 'showVariables', 76 | 'showConstants', 77 | 'showStrings', 78 | 'showNumbers', 79 | 'showBooleans', 80 | 'showArrays', 81 | 'showObjects', 82 | 'showKeys', 83 | 'showNull', 84 | 'showEnumMembers', 85 | 'showStructs', 86 | 'showEvents', 87 | 'showOperators', 88 | 'showTypeParameters', 89 | ]) { 90 | if (checkBoolean(kindKey)) { 91 | this.showKinds.push(kindsMap[kindKey]); 92 | } 93 | } 94 | } 95 | } 96 | 97 | export const config = new Config(); 98 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CancellationTokenSource, 3 | commands, 4 | Disposable, 5 | DocumentSymbol, 6 | events, 7 | ExtensionContext, 8 | languages, 9 | window, 10 | workspace, 11 | } from 'coc.nvim'; 12 | import { config } from './config'; 13 | import { positionInRange } from './util/pos'; 14 | import { convertSymbols, SymbolInfo } from './util/symbol'; 15 | import { registerRuntimepath } from './util/vim'; 16 | 17 | class DocumentSymbolLine implements Disposable { 18 | private readonly disposables: Disposable[] = []; 19 | private tokenSource: CancellationTokenSource | undefined; 20 | private state: { [key: number]: SymbolInfo[] } = {}; 21 | 22 | constructor() { 23 | workspace.onDidChangeConfiguration(() => config.setConfiguration(), this, this.disposables); 24 | } 25 | 26 | dispose(): void { 27 | this.disposables.forEach((d) => d.dispose()); 28 | } 29 | 30 | private async getDocumentSymbols(bufnr: number): Promise { 31 | const doc = workspace.getDocument(bufnr); 32 | if (!doc || !doc.attached) return; 33 | //@ts-ignore 34 | if (!languages.hasProvider('documentSymbol', doc.textDocument)) return; 35 | this.tokenSource?.cancel(); 36 | this.tokenSource = new CancellationTokenSource(); 37 | const { token } = this.tokenSource; 38 | //@ts-ignore 39 | const symbols: DocumentSymbol[] | undefined = await languages.getDocumentSymbol(doc.textDocument, token); 40 | if (!symbols || !symbols.length) { 41 | return; 42 | } 43 | return convertSymbols(symbols); 44 | } 45 | 46 | private async getSymbols(bufnr: number): Promise { 47 | let symbols = await this.getDocumentSymbols(bufnr); 48 | if (!symbols || symbols.length === 0) return; 49 | 50 | const position = await window.getCursorPosition(); 51 | const { showKinds } = config; 52 | symbols = symbols.filter( 53 | (s) => 54 | s.range && 55 | showKinds.includes(s.kind) && 56 | // !s.text.endsWith(') callback') && 57 | positionInRange(position, s.range) == 0 58 | ); 59 | 60 | const { onlyNearestKinds } = config; 61 | // only need the nearest kinds 62 | const newSymbols: SymbolInfo[] = []; 63 | symbols.forEach((symbol) => { 64 | const count = newSymbols.length; 65 | const lastIdx = count - 1; 66 | if (count === 0) { 67 | newSymbols.push(symbol); 68 | } else if ( 69 | (newSymbols[lastIdx].level != undefined && symbol.level != undefined 70 | ? newSymbols[lastIdx].level == symbol.level 71 | : false) || 72 | (onlyNearestKinds.includes(symbol.kind) && newSymbols[lastIdx].kind == symbol.kind) 73 | ) { 74 | newSymbols[lastIdx] = symbol; 75 | } else { 76 | newSymbols.push(symbol); 77 | } 78 | }); 79 | 80 | return newSymbols; 81 | } 82 | 83 | public async refresh(bufnr: number) { 84 | const symbols = await this.getSymbols(bufnr); 85 | if (!symbols) return; 86 | this.state[bufnr] = symbols; 87 | 88 | const { icons, labels, default_, maxItems, separator, maxItemsIndicator } = config; 89 | 90 | let line = ''; 91 | let fullLine = ''; 92 | let plainLine = ''; 93 | let plainFullLine = ''; 94 | 95 | let addedEllipsis = false; 96 | const totalItems = symbols.length; 97 | symbols.forEach((symbol, index) => { 98 | let label = ''; 99 | if (icons) { 100 | label = labels[symbol.kind.toLowerCase()]; 101 | if (typeof label !== 'string') label = labels.default; 102 | } 103 | const sep = index == 0 ? '' : `%#CocSymbolLineSeparator#${separator}`; 104 | const id = `${bufnr}989${index}`; 105 | if (label) { 106 | fullLine += `%#CocSymbolLine#${sep}%#CocSymbolLine${symbol.kind}#%${id}@coc_symbol_line#click@${label} %#CocSymbolLine#${symbol.text}%X`; 107 | plainFullLine += `%#CocSymbolLine#${sep}%#CocSymbolLine${symbol.kind}#${label} %#CocSymbolLine#${symbol.text}`; 108 | } else { 109 | fullLine += `%#CocSymbolLine#${sep}%#CocSymbolLine#%${id}@coc_symbol_line#click@${symbol.text}%X`; 110 | plainFullLine += `%#CocSymbolLine#${sep}%#CocSymbolLine#${symbol.text}`; 111 | } 112 | 113 | // short line 114 | if (!addedEllipsis) { 115 | const currentItems = index + 1; 116 | const leftItems = totalItems - currentItems; 117 | if (currentItems == maxItems && leftItems > 0) { 118 | addedEllipsis = true; 119 | line = 120 | fullLine + `%#CocSymbolLine#${sep}%#CocSymbolLineEllipsis#%0@coc_symbol_line#expand@${maxItemsIndicator}%X`; 121 | plainLine = fullLine + `%#CocSymbolLine#${sep}%#CocSymbolLineEllipsis#${maxItemsIndicator}`; 122 | } else { 123 | line = fullLine; 124 | plainLine = plainFullLine; 125 | } 126 | } 127 | }); 128 | 129 | if (!line) { 130 | if (default_ === '%f') line = `%#CocSymbolLineFile#${icons ? labels.file || '▤' : ''} %#CocSymbolLine#%f`; 131 | if (default_.length > 0) line = '%#CocSymbolLine#' + line; 132 | // not needed 133 | if (line) fullLine = line; 134 | 135 | if (!plainLine) plainLine = line; 136 | } 137 | 138 | const buffer = workspace.getDocument(bufnr).buffer; 139 | try { 140 | await buffer.setVar('coc_symbol_line', line); 141 | await buffer.setVar('coc_symbol_line_full', fullLine); 142 | 143 | await buffer.setVar('coc_symbol_line_plain', plainLine); 144 | await buffer.setVar('coc_symbol_line_full_plain', plainFullLine); // useless 145 | } catch (e) {} 146 | } 147 | 148 | public async clean() { 149 | Object.keys(this.state).forEach(async (bufnr) => { 150 | const exists = await workspace.nvim.call('bufexists', Number(bufnr)); 151 | if (exists != 1) { 152 | delete this.state[bufnr]; 153 | } 154 | }); 155 | } 156 | 157 | public async click(id: number, mouse: 'l' | 'm' | 'r') { 158 | const items = id 159 | .toString() 160 | .split('989') 161 | .map((v) => Number.parseInt(v)); 162 | 163 | const bufnr = items[0]; 164 | const index = items[1]; 165 | 166 | const { nvim } = workspace; 167 | 168 | const winid = await nvim.call('bufwinid', bufnr); 169 | if (winid == -1) return; 170 | nvim.call('win_gotoid', winid, true); 171 | 172 | const symbol = this.state[bufnr][index]; 173 | 174 | const pos = symbol.selectionRange!.start; 175 | nvim.call('coc#cursor#move_to', [pos.line, pos.character], true); 176 | nvim.command(`normal! zz`, true); 177 | if (mouse == 'l') { 178 | const buf = nvim.createBuffer(bufnr); 179 | buf.highlightRanges('symbol-line-hover', 'CocHoverRange', [symbol.selectionRange!]); 180 | setTimeout(() => { 181 | buf.clearNamespace('symbol-line-hover'); 182 | nvim.command('redraw', true); 183 | }, 300); 184 | nvim.command('redraw', true); 185 | } else { 186 | workspace.selectRange(symbol.range); 187 | } 188 | } 189 | } 190 | 191 | export async function activate(context: ExtensionContext): Promise { 192 | const { nvim } = workspace; 193 | 194 | await registerRuntimepath(context.extensionPath); 195 | await nvim.command('runtime plugin/coc_symbol_line.vim'); 196 | 197 | const symbolLine = new DocumentSymbolLine(); 198 | 199 | events.on( 200 | 'CursorHold', 201 | async (bufnr) => { 202 | await symbolLine.refresh(bufnr); 203 | }, 204 | null, 205 | context.subscriptions 206 | ); 207 | 208 | const timerClean = setInterval(async () => { 209 | await symbolLine.clean(); 210 | }, 10e3); 211 | 212 | const timerRedraw = setInterval(() => { 213 | workspace.nvim.command('redrawtabline', true); 214 | }, 500); 215 | 216 | context.subscriptions.push( 217 | // cleaner 218 | { 219 | dispose() { 220 | clearInterval(timerClean); 221 | clearInterval(timerRedraw); 222 | }, 223 | }, 224 | // command 225 | commands.registerCommand( 226 | 'symbol-line._click', 227 | async (id, mouse) => { 228 | await symbolLine.click(id, mouse); 229 | }, 230 | null, 231 | true 232 | ), 233 | // object 234 | symbolLine 235 | ); 236 | } 237 | -------------------------------------------------------------------------------- /src/util/pos.ts: -------------------------------------------------------------------------------- 1 | import { Range, Position, TextEdit } from 'vscode-languageserver-protocol'; 2 | 3 | export function rangeInRange(r: Range, range: Range): boolean { 4 | return positionInRange(r.start, range) === 0 && positionInRange(r.end, range) === 0; 5 | } 6 | 7 | /** 8 | * Check if two ranges have overlap character. 9 | */ 10 | export function rangeOverlap(r: Range, range: Range): boolean { 11 | const { start, end } = r; 12 | if (comparePosition(end, range.start) <= 0) { 13 | return false; 14 | } 15 | if (comparePosition(start, range.end) >= 0) { 16 | return false; 17 | } 18 | return true; 19 | } 20 | 21 | /** 22 | * Check if two ranges have overlap or nested 23 | */ 24 | export function rangeIntersect(r: Range, range: Range): boolean { 25 | if (positionInRange(r.start, range) == 0) { 26 | return true; 27 | } 28 | if (positionInRange(r.end, range) == 0) { 29 | return true; 30 | } 31 | if (rangeInRange(range, r)) { 32 | return true; 33 | } 34 | return false; 35 | } 36 | 37 | export function lineInRange(line: number, range: Range): boolean { 38 | const { start, end } = range; 39 | return line >= start.line && line <= end.line; 40 | } 41 | 42 | export function emptyRange(range: Range): boolean { 43 | const { start, end } = range; 44 | return start.line == end.line && start.character == end.character; 45 | } 46 | 47 | export function positionInRange(position: Position, range: Range): number { 48 | const { start, end } = range; 49 | if (comparePosition(position, start) < 0) return -1; 50 | if (comparePosition(position, end) > 0) return 1; 51 | return 0; 52 | } 53 | 54 | export function comparePosition(position: Position, other: Position): number { 55 | if (position.line > other.line) return 1; 56 | if (other.line == position.line && position.character > other.character) return 1; 57 | if (other.line == position.line && position.character == other.character) return 0; 58 | return -1; 59 | } 60 | 61 | export function isSingleLine(range: Range): boolean { 62 | return range.start.line == range.end.line; 63 | } 64 | 65 | export function getChangedPosition(start: Position, edit: TextEdit): { line: number; character: number } { 66 | const { range, newText } = edit; 67 | if (comparePosition(range.end, start) <= 0) { 68 | const lines = newText.split('\n'); 69 | const lineCount = lines.length - (range.end.line - range.start.line) - 1; 70 | let characterCount = 0; 71 | if (range.end.line == start.line) { 72 | const single = isSingleLine(range) && lineCount == 0; 73 | const removed = single ? range.end.character - range.start.character : range.end.character; 74 | const added = single ? newText.length : lines[lines.length - 1].length; 75 | characterCount = added - removed; 76 | } 77 | return { line: lineCount, character: characterCount }; 78 | } 79 | return { line: 0, character: 0 }; 80 | } 81 | 82 | export function adjustPosition(pos: Position, edit: TextEdit): Position { 83 | const { range, newText } = edit; 84 | if (comparePosition(range.start, pos) > 1) return pos; 85 | const { start, end } = range; 86 | const newLines = newText.split('\n'); 87 | const delta = end.line - start.line - newLines.length + 1; 88 | const lastLine = newLines[newLines.length - 1]; 89 | const line = pos.line - delta; 90 | if (pos.line != end.line) return { line, character: pos.character }; 91 | const pre = newLines.length == 1 && start.line != end.line ? start.character : 0; 92 | const removed = start.line == end.line && newLines.length == 1 ? end.character - start.character : end.character; 93 | const character = pre + pos.character + lastLine.length - removed; 94 | return { 95 | line, 96 | character, 97 | }; 98 | } 99 | 100 | export function positionToOffset(lines: string[], line: number, character: number): number { 101 | let offset = 0; 102 | for (let i = 0; i <= line; i++) { 103 | if (i == line) { 104 | offset += character; 105 | } else { 106 | offset += lines[i].length + 1; 107 | } 108 | } 109 | return offset; 110 | } 111 | -------------------------------------------------------------------------------- /src/util/symbol.ts: -------------------------------------------------------------------------------- 1 | import { SymbolKind, DocumentSymbol, Range, SymbolInformation } from 'vscode-languageserver-protocol'; 2 | import { comparePosition } from './pos'; 3 | 4 | export interface SymbolInfo { 5 | filepath?: string; 6 | lnum: number; 7 | col: number; 8 | text: string; 9 | kind: string; 10 | level?: number; 11 | containerName?: string; 12 | range: Range; 13 | selectionRange?: Range; 14 | } 15 | 16 | export function getSymbolKind(kind: SymbolKind): string { 17 | switch (kind) { 18 | case SymbolKind.File: 19 | return 'File'; 20 | case SymbolKind.Module: 21 | return 'Module'; 22 | case SymbolKind.Namespace: 23 | return 'Namespace'; 24 | case SymbolKind.Package: 25 | return 'Package'; 26 | case SymbolKind.Class: 27 | return 'Class'; 28 | case SymbolKind.Method: 29 | return 'Method'; 30 | case SymbolKind.Property: 31 | return 'Property'; 32 | case SymbolKind.Field: 33 | return 'Field'; 34 | case SymbolKind.Constructor: 35 | return 'Constructor'; 36 | case SymbolKind.Enum: 37 | return 'Enum'; 38 | case SymbolKind.Interface: 39 | return 'Interface'; 40 | case SymbolKind.Function: 41 | return 'Function'; 42 | case SymbolKind.Variable: 43 | return 'Variable'; 44 | case SymbolKind.Constant: 45 | return 'Constant'; 46 | case SymbolKind.String: 47 | return 'String'; 48 | case SymbolKind.Number: 49 | return 'Number'; 50 | case SymbolKind.Boolean: 51 | return 'Boolean'; 52 | case SymbolKind.Array: 53 | return 'Array'; 54 | case SymbolKind.Object: 55 | return 'Object'; 56 | case SymbolKind.Key: 57 | return 'Key'; 58 | case SymbolKind.Null: 59 | return 'Null'; 60 | case SymbolKind.EnumMember: 61 | return 'EnumMember'; 62 | case SymbolKind.Struct: 63 | return 'Struct'; 64 | case SymbolKind.Event: 65 | return 'Event'; 66 | case SymbolKind.Operator: 67 | return 'Operator'; 68 | case SymbolKind.TypeParameter: 69 | return 'TypeParameter'; 70 | default: 71 | return 'Unknown'; 72 | } 73 | } 74 | 75 | export function isSymbols(symbols: DocumentSymbol[] | SymbolInformation[]): symbols is DocumentSymbol[] { 76 | return !Object.prototype.hasOwnProperty.call(symbols[0], 'location'); 77 | } 78 | 79 | export function convertSymbols(symbols: DocumentSymbol[] | SymbolInformation[]): SymbolInfo[] { 80 | const res: SymbolInfo[] = []; 81 | if (isSymbols(symbols)) { 82 | const arr = symbols.slice(); 83 | arr.sort(sortDocumentSymbols); 84 | arr.forEach((s) => addDocumentSymbol(res, s, 0)); 85 | } else { 86 | const arr = symbols.slice(); 87 | arr.sort(sortSymbols); 88 | arr.forEach((s) => addSymbol(res, s)); 89 | } 90 | return res; 91 | } 92 | 93 | export function sortSymbols(a: SymbolInformation, b: SymbolInformation): number { 94 | const sa = a.location.range.start; 95 | const sb = b.location.range.start; 96 | const d = sa.line - sb.line; 97 | return d == 0 ? sa.character - sb.character : d; 98 | } 99 | 100 | export function addSymbol(res: SymbolInfo[], sym: SymbolInformation) { 101 | res.push({ 102 | col: sym.location.range.start.character + 1, 103 | lnum: sym.location.range.start.line + 1, 104 | text: sym.name, 105 | kind: getSymbolKind(sym.kind), 106 | range: sym.location.range, 107 | selectionRange: sym.location.range, 108 | }); 109 | } 110 | 111 | export function sortDocumentSymbols(a: DocumentSymbol, b: DocumentSymbol): number { 112 | const ra = a.selectionRange; 113 | const rb = b.selectionRange; 114 | return comparePosition(ra.start, rb.start); 115 | } 116 | 117 | export function addDocumentSymbol(res: SymbolInfo[], sym: DocumentSymbol, level: number): void { 118 | const { name, selectionRange, kind, children, range } = sym; 119 | const { start } = selectionRange || range; 120 | res.push({ 121 | col: start.character + 1, 122 | lnum: start.line + 1, 123 | text: name, 124 | level, 125 | kind: getSymbolKind(kind), 126 | range, 127 | selectionRange, 128 | }); 129 | if (children && children.length) { 130 | children.sort(sortDocumentSymbols); 131 | for (const sym of children) { 132 | addDocumentSymbol(res, sym, level + 1); 133 | } 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /src/util/vim.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from 'coc.nvim'; 2 | 3 | export async function registerRuntimepath(extensionPath: string) { 4 | const { nvim } = workspace; 5 | const rtp = (await nvim.getOption('runtimepath')) as string; 6 | const paths = rtp.split(','); 7 | if (!paths.includes(extensionPath)) { 8 | await nvim.command(`execute 'noa set rtp+='.fnameescape('${extensionPath.replace(/'/g, "''")}')`); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /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 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.16.10" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" 20 | integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.3": 27 | version "0.4.3" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 29 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^13.9.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | minimatch "^3.0.4" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@humanwhocodes/config-array@^0.5.0": 42 | version "0.5.0" 43 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 44 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 45 | dependencies: 46 | "@humanwhocodes/object-schema" "^1.2.0" 47 | debug "^4.1.1" 48 | minimatch "^3.0.4" 49 | 50 | "@humanwhocodes/object-schema@^1.2.0": 51 | version "1.2.1" 52 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 53 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 54 | 55 | "@nodelib/fs.scandir@2.1.5": 56 | version "2.1.5" 57 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 58 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 59 | dependencies: 60 | "@nodelib/fs.stat" "2.0.5" 61 | run-parallel "^1.1.9" 62 | 63 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 64 | version "2.0.5" 65 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 66 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 67 | 68 | "@nodelib/fs.walk@^1.2.3": 69 | version "1.2.8" 70 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 71 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 72 | dependencies: 73 | "@nodelib/fs.scandir" "2.1.5" 74 | fastq "^1.6.0" 75 | 76 | "@types/json-schema@^7.0.7": 77 | version "7.0.9" 78 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" 79 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== 80 | 81 | "@types/node@^17.0.19": 82 | version "17.0.19" 83 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.19.tgz#726171367f404bfbe8512ba608a09ebad810c7e6" 84 | integrity sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA== 85 | 86 | "@typescript-eslint/eslint-plugin@^4.8.2": 87 | version "4.33.0" 88 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" 89 | integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== 90 | dependencies: 91 | "@typescript-eslint/experimental-utils" "4.33.0" 92 | "@typescript-eslint/scope-manager" "4.33.0" 93 | debug "^4.3.1" 94 | functional-red-black-tree "^1.0.1" 95 | ignore "^5.1.8" 96 | regexpp "^3.1.0" 97 | semver "^7.3.5" 98 | tsutils "^3.21.0" 99 | 100 | "@typescript-eslint/experimental-utils@4.33.0": 101 | version "4.33.0" 102 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" 103 | integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== 104 | dependencies: 105 | "@types/json-schema" "^7.0.7" 106 | "@typescript-eslint/scope-manager" "4.33.0" 107 | "@typescript-eslint/types" "4.33.0" 108 | "@typescript-eslint/typescript-estree" "4.33.0" 109 | eslint-scope "^5.1.1" 110 | eslint-utils "^3.0.0" 111 | 112 | "@typescript-eslint/parser@^4.8.2": 113 | version "4.33.0" 114 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" 115 | integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== 116 | dependencies: 117 | "@typescript-eslint/scope-manager" "4.33.0" 118 | "@typescript-eslint/types" "4.33.0" 119 | "@typescript-eslint/typescript-estree" "4.33.0" 120 | debug "^4.3.1" 121 | 122 | "@typescript-eslint/scope-manager@4.33.0": 123 | version "4.33.0" 124 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" 125 | integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== 126 | dependencies: 127 | "@typescript-eslint/types" "4.33.0" 128 | "@typescript-eslint/visitor-keys" "4.33.0" 129 | 130 | "@typescript-eslint/types@4.33.0": 131 | version "4.33.0" 132 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" 133 | integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== 134 | 135 | "@typescript-eslint/typescript-estree@4.33.0": 136 | version "4.33.0" 137 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" 138 | integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== 139 | dependencies: 140 | "@typescript-eslint/types" "4.33.0" 141 | "@typescript-eslint/visitor-keys" "4.33.0" 142 | debug "^4.3.1" 143 | globby "^11.0.3" 144 | is-glob "^4.0.1" 145 | semver "^7.3.5" 146 | tsutils "^3.21.0" 147 | 148 | "@typescript-eslint/visitor-keys@4.33.0": 149 | version "4.33.0" 150 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" 151 | integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== 152 | dependencies: 153 | "@typescript-eslint/types" "4.33.0" 154 | eslint-visitor-keys "^2.0.0" 155 | 156 | acorn-jsx@^5.3.1: 157 | version "5.3.2" 158 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 159 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 160 | 161 | acorn@^7.4.0: 162 | version "7.4.1" 163 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 164 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 165 | 166 | ajv@^6.10.0, ajv@^6.12.4: 167 | version "6.12.6" 168 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 169 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 170 | dependencies: 171 | fast-deep-equal "^3.1.1" 172 | fast-json-stable-stringify "^2.0.0" 173 | json-schema-traverse "^0.4.1" 174 | uri-js "^4.2.2" 175 | 176 | ajv@^8.0.1: 177 | version "8.9.0" 178 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" 179 | integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== 180 | dependencies: 181 | fast-deep-equal "^3.1.1" 182 | json-schema-traverse "^1.0.0" 183 | require-from-string "^2.0.2" 184 | uri-js "^4.2.2" 185 | 186 | ansi-colors@^4.1.1: 187 | version "4.1.1" 188 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 189 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 190 | 191 | ansi-regex@^5.0.1: 192 | version "5.0.1" 193 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 194 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 195 | 196 | ansi-styles@^3.2.1: 197 | version "3.2.1" 198 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 199 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 200 | dependencies: 201 | color-convert "^1.9.0" 202 | 203 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 204 | version "4.3.0" 205 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 206 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 207 | dependencies: 208 | color-convert "^2.0.1" 209 | 210 | argparse@^1.0.7: 211 | version "1.0.10" 212 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 213 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 214 | dependencies: 215 | sprintf-js "~1.0.2" 216 | 217 | array-union@^2.1.0: 218 | version "2.1.0" 219 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 220 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 221 | 222 | astral-regex@^2.0.0: 223 | version "2.0.0" 224 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 225 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 226 | 227 | balanced-match@^1.0.0: 228 | version "1.0.2" 229 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 230 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 231 | 232 | brace-expansion@^1.1.7: 233 | version "1.1.11" 234 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 235 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 236 | dependencies: 237 | balanced-match "^1.0.0" 238 | concat-map "0.0.1" 239 | 240 | braces@^3.0.1: 241 | version "3.0.2" 242 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 243 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 244 | dependencies: 245 | fill-range "^7.0.1" 246 | 247 | callsites@^3.0.0: 248 | version "3.1.0" 249 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 250 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 251 | 252 | chalk@^2.0.0: 253 | version "2.4.2" 254 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 255 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 256 | dependencies: 257 | ansi-styles "^3.2.1" 258 | escape-string-regexp "^1.0.5" 259 | supports-color "^5.3.0" 260 | 261 | chalk@^4.0.0: 262 | version "4.1.2" 263 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 264 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 265 | dependencies: 266 | ansi-styles "^4.1.0" 267 | supports-color "^7.1.0" 268 | 269 | coc.nvim@^0.0.80: 270 | version "0.0.80" 271 | resolved "https://registry.yarnpkg.com/coc.nvim/-/coc.nvim-0.0.80.tgz#785145c382660db03f517f9b497900d95cbd0e4f" 272 | integrity sha512-/3vTcnofoAYMrdENrlQmADTzfXX4+PZ0fiM10a39UA37dTR2dpIGi9O469kcIksuunLjToqWG8S45AGx/9wV7g== 273 | 274 | color-convert@^1.9.0: 275 | version "1.9.3" 276 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 277 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 278 | dependencies: 279 | color-name "1.1.3" 280 | 281 | color-convert@^2.0.1: 282 | version "2.0.1" 283 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 284 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 285 | dependencies: 286 | color-name "~1.1.4" 287 | 288 | color-name@1.1.3: 289 | version "1.1.3" 290 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 291 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 292 | 293 | color-name@~1.1.4: 294 | version "1.1.4" 295 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 296 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 297 | 298 | concat-map@0.0.1: 299 | version "0.0.1" 300 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 301 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 302 | 303 | cross-spawn@^7.0.2: 304 | version "7.0.3" 305 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 306 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 307 | dependencies: 308 | path-key "^3.1.0" 309 | shebang-command "^2.0.0" 310 | which "^2.0.1" 311 | 312 | debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: 313 | version "4.3.3" 314 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 315 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 316 | dependencies: 317 | ms "2.1.2" 318 | 319 | deep-is@^0.1.3: 320 | version "0.1.4" 321 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 322 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 323 | 324 | dir-glob@^3.0.1: 325 | version "3.0.1" 326 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 327 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 328 | dependencies: 329 | path-type "^4.0.0" 330 | 331 | doctrine@^3.0.0: 332 | version "3.0.0" 333 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 334 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 335 | dependencies: 336 | esutils "^2.0.2" 337 | 338 | emoji-regex@^8.0.0: 339 | version "8.0.0" 340 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 341 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 342 | 343 | enquirer@^2.3.5: 344 | version "2.3.6" 345 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 346 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 347 | dependencies: 348 | ansi-colors "^4.1.1" 349 | 350 | esbuild@^0.8.42: 351 | version "0.8.57" 352 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.57.tgz#a42d02bc2b57c70bcd0ef897fe244766bb6dd926" 353 | integrity sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA== 354 | 355 | escape-string-regexp@^1.0.5: 356 | version "1.0.5" 357 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 358 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 359 | 360 | escape-string-regexp@^4.0.0: 361 | version "4.0.0" 362 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 363 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 364 | 365 | eslint-config-prettier@^8.1.0: 366 | version "8.3.0" 367 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" 368 | integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== 369 | 370 | eslint-plugin-prettier@^3.1.4: 371 | version "3.4.1" 372 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" 373 | integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== 374 | dependencies: 375 | prettier-linter-helpers "^1.0.0" 376 | 377 | eslint-scope@^5.1.1: 378 | version "5.1.1" 379 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 380 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 381 | dependencies: 382 | esrecurse "^4.3.0" 383 | estraverse "^4.1.1" 384 | 385 | eslint-utils@^2.1.0: 386 | version "2.1.0" 387 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 388 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 389 | dependencies: 390 | eslint-visitor-keys "^1.1.0" 391 | 392 | eslint-utils@^3.0.0: 393 | version "3.0.0" 394 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 395 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 396 | dependencies: 397 | eslint-visitor-keys "^2.0.0" 398 | 399 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 400 | version "1.3.0" 401 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 402 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 403 | 404 | eslint-visitor-keys@^2.0.0: 405 | version "2.1.0" 406 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 407 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 408 | 409 | eslint@^7.14.0: 410 | version "7.32.0" 411 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" 412 | integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== 413 | dependencies: 414 | "@babel/code-frame" "7.12.11" 415 | "@eslint/eslintrc" "^0.4.3" 416 | "@humanwhocodes/config-array" "^0.5.0" 417 | ajv "^6.10.0" 418 | chalk "^4.0.0" 419 | cross-spawn "^7.0.2" 420 | debug "^4.0.1" 421 | doctrine "^3.0.0" 422 | enquirer "^2.3.5" 423 | escape-string-regexp "^4.0.0" 424 | eslint-scope "^5.1.1" 425 | eslint-utils "^2.1.0" 426 | eslint-visitor-keys "^2.0.0" 427 | espree "^7.3.1" 428 | esquery "^1.4.0" 429 | esutils "^2.0.2" 430 | fast-deep-equal "^3.1.3" 431 | file-entry-cache "^6.0.1" 432 | functional-red-black-tree "^1.0.1" 433 | glob-parent "^5.1.2" 434 | globals "^13.6.0" 435 | ignore "^4.0.6" 436 | import-fresh "^3.0.0" 437 | imurmurhash "^0.1.4" 438 | is-glob "^4.0.0" 439 | js-yaml "^3.13.1" 440 | json-stable-stringify-without-jsonify "^1.0.1" 441 | levn "^0.4.1" 442 | lodash.merge "^4.6.2" 443 | minimatch "^3.0.4" 444 | natural-compare "^1.4.0" 445 | optionator "^0.9.1" 446 | progress "^2.0.0" 447 | regexpp "^3.1.0" 448 | semver "^7.2.1" 449 | strip-ansi "^6.0.0" 450 | strip-json-comments "^3.1.0" 451 | table "^6.0.9" 452 | text-table "^0.2.0" 453 | v8-compile-cache "^2.0.3" 454 | 455 | espree@^7.3.0, espree@^7.3.1: 456 | version "7.3.1" 457 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 458 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 459 | dependencies: 460 | acorn "^7.4.0" 461 | acorn-jsx "^5.3.1" 462 | eslint-visitor-keys "^1.3.0" 463 | 464 | esprima@^4.0.0: 465 | version "4.0.1" 466 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 467 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 468 | 469 | esquery@^1.4.0: 470 | version "1.4.0" 471 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 472 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 473 | dependencies: 474 | estraverse "^5.1.0" 475 | 476 | esrecurse@^4.3.0: 477 | version "4.3.0" 478 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 479 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 480 | dependencies: 481 | estraverse "^5.2.0" 482 | 483 | estraverse@^4.1.1: 484 | version "4.3.0" 485 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 486 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 487 | 488 | estraverse@^5.1.0, estraverse@^5.2.0: 489 | version "5.3.0" 490 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 491 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 492 | 493 | esutils@^2.0.2: 494 | version "2.0.3" 495 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 496 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 497 | 498 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 499 | version "3.1.3" 500 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 501 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 502 | 503 | fast-diff@^1.1.2: 504 | version "1.2.0" 505 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 506 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 507 | 508 | fast-glob@^3.2.9: 509 | version "3.2.11" 510 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 511 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 512 | dependencies: 513 | "@nodelib/fs.stat" "^2.0.2" 514 | "@nodelib/fs.walk" "^1.2.3" 515 | glob-parent "^5.1.2" 516 | merge2 "^1.3.0" 517 | micromatch "^4.0.4" 518 | 519 | fast-json-stable-stringify@^2.0.0: 520 | version "2.1.0" 521 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 522 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 523 | 524 | fast-levenshtein@^2.0.6: 525 | version "2.0.6" 526 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 527 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 528 | 529 | fastq@^1.6.0: 530 | version "1.13.0" 531 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 532 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 533 | dependencies: 534 | reusify "^1.0.4" 535 | 536 | file-entry-cache@^6.0.1: 537 | version "6.0.1" 538 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 539 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 540 | dependencies: 541 | flat-cache "^3.0.4" 542 | 543 | fill-range@^7.0.1: 544 | version "7.0.1" 545 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 546 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 547 | dependencies: 548 | to-regex-range "^5.0.1" 549 | 550 | flat-cache@^3.0.4: 551 | version "3.0.4" 552 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 553 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 554 | dependencies: 555 | flatted "^3.1.0" 556 | rimraf "^3.0.2" 557 | 558 | flatted@^3.1.0: 559 | version "3.2.5" 560 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 561 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 562 | 563 | fs.realpath@^1.0.0: 564 | version "1.0.0" 565 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 566 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 567 | 568 | functional-red-black-tree@^1.0.1: 569 | version "1.0.1" 570 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 571 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 572 | 573 | glob-parent@^5.1.2: 574 | version "5.1.2" 575 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 576 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 577 | dependencies: 578 | is-glob "^4.0.1" 579 | 580 | glob@^7.1.3: 581 | version "7.2.0" 582 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 583 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 584 | dependencies: 585 | fs.realpath "^1.0.0" 586 | inflight "^1.0.4" 587 | inherits "2" 588 | minimatch "^3.0.4" 589 | once "^1.3.0" 590 | path-is-absolute "^1.0.0" 591 | 592 | globals@^13.6.0, globals@^13.9.0: 593 | version "13.12.1" 594 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb" 595 | integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== 596 | dependencies: 597 | type-fest "^0.20.2" 598 | 599 | globby@^11.0.3: 600 | version "11.1.0" 601 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 602 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 603 | dependencies: 604 | array-union "^2.1.0" 605 | dir-glob "^3.0.1" 606 | fast-glob "^3.2.9" 607 | ignore "^5.2.0" 608 | merge2 "^1.4.1" 609 | slash "^3.0.0" 610 | 611 | has-flag@^3.0.0: 612 | version "3.0.0" 613 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 614 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 615 | 616 | has-flag@^4.0.0: 617 | version "4.0.0" 618 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 619 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 620 | 621 | ignore@^4.0.6: 622 | version "4.0.6" 623 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 624 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 625 | 626 | ignore@^5.1.8, ignore@^5.2.0: 627 | version "5.2.0" 628 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 629 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 630 | 631 | import-fresh@^3.0.0, import-fresh@^3.2.1: 632 | version "3.3.0" 633 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 634 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 635 | dependencies: 636 | parent-module "^1.0.0" 637 | resolve-from "^4.0.0" 638 | 639 | imurmurhash@^0.1.4: 640 | version "0.1.4" 641 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 642 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 643 | 644 | inflight@^1.0.4: 645 | version "1.0.6" 646 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 647 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 648 | dependencies: 649 | once "^1.3.0" 650 | wrappy "1" 651 | 652 | inherits@2: 653 | version "2.0.4" 654 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 655 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 656 | 657 | is-extglob@^2.1.1: 658 | version "2.1.1" 659 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 660 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 661 | 662 | is-fullwidth-code-point@^3.0.0: 663 | version "3.0.0" 664 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 665 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 666 | 667 | is-glob@^4.0.0, is-glob@^4.0.1: 668 | version "4.0.3" 669 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 670 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 671 | dependencies: 672 | is-extglob "^2.1.1" 673 | 674 | is-number@^7.0.0: 675 | version "7.0.0" 676 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 677 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 678 | 679 | isexe@^2.0.0: 680 | version "2.0.0" 681 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 682 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 683 | 684 | js-tokens@^4.0.0: 685 | version "4.0.0" 686 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 687 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 688 | 689 | js-yaml@^3.13.1: 690 | version "3.14.1" 691 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 692 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 693 | dependencies: 694 | argparse "^1.0.7" 695 | esprima "^4.0.0" 696 | 697 | json-schema-traverse@^0.4.1: 698 | version "0.4.1" 699 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 700 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 701 | 702 | json-schema-traverse@^1.0.0: 703 | version "1.0.0" 704 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 705 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 706 | 707 | json-stable-stringify-without-jsonify@^1.0.1: 708 | version "1.0.1" 709 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 710 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 711 | 712 | levn@^0.4.1: 713 | version "0.4.1" 714 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 715 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 716 | dependencies: 717 | prelude-ls "^1.2.1" 718 | type-check "~0.4.0" 719 | 720 | lodash.merge@^4.6.2: 721 | version "4.6.2" 722 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 723 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 724 | 725 | lodash.truncate@^4.4.2: 726 | version "4.4.2" 727 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 728 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 729 | 730 | lru-cache@^6.0.0: 731 | version "6.0.0" 732 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 733 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 734 | dependencies: 735 | yallist "^4.0.0" 736 | 737 | merge2@^1.3.0, merge2@^1.4.1: 738 | version "1.4.1" 739 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 740 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 741 | 742 | micromatch@^4.0.4: 743 | version "4.0.4" 744 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 745 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 746 | dependencies: 747 | braces "^3.0.1" 748 | picomatch "^2.2.3" 749 | 750 | minimatch@^3.0.4: 751 | version "3.0.4" 752 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 753 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 754 | dependencies: 755 | brace-expansion "^1.1.7" 756 | 757 | ms@2.1.2: 758 | version "2.1.2" 759 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 760 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 761 | 762 | natural-compare@^1.4.0: 763 | version "1.4.0" 764 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 765 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 766 | 767 | once@^1.3.0: 768 | version "1.4.0" 769 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 770 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 771 | dependencies: 772 | wrappy "1" 773 | 774 | optionator@^0.9.1: 775 | version "0.9.1" 776 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 777 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 778 | dependencies: 779 | deep-is "^0.1.3" 780 | fast-levenshtein "^2.0.6" 781 | levn "^0.4.1" 782 | prelude-ls "^1.2.1" 783 | type-check "^0.4.0" 784 | word-wrap "^1.2.3" 785 | 786 | parent-module@^1.0.0: 787 | version "1.0.1" 788 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 789 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 790 | dependencies: 791 | callsites "^3.0.0" 792 | 793 | path-is-absolute@^1.0.0: 794 | version "1.0.1" 795 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 796 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 797 | 798 | path-key@^3.1.0: 799 | version "3.1.1" 800 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 801 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 802 | 803 | path-type@^4.0.0: 804 | version "4.0.0" 805 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 806 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 807 | 808 | picomatch@^2.2.3: 809 | version "2.3.1" 810 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 811 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 812 | 813 | prelude-ls@^1.2.1: 814 | version "1.2.1" 815 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 816 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 817 | 818 | prettier-linter-helpers@^1.0.0: 819 | version "1.0.0" 820 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 821 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 822 | dependencies: 823 | fast-diff "^1.1.2" 824 | 825 | prettier@^2.2.0: 826 | version "2.5.1" 827 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" 828 | integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== 829 | 830 | progress@^2.0.0: 831 | version "2.0.3" 832 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 833 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 834 | 835 | punycode@^2.1.0: 836 | version "2.1.1" 837 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 838 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 839 | 840 | queue-microtask@^1.2.2: 841 | version "1.2.3" 842 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 843 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 844 | 845 | regexpp@^3.1.0: 846 | version "3.2.0" 847 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 848 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 849 | 850 | require-from-string@^2.0.2: 851 | version "2.0.2" 852 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 853 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 854 | 855 | resolve-from@^4.0.0: 856 | version "4.0.0" 857 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 858 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 859 | 860 | reusify@^1.0.4: 861 | version "1.0.4" 862 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 863 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 864 | 865 | rimraf@^3.0.2: 866 | version "3.0.2" 867 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 868 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 869 | dependencies: 870 | glob "^7.1.3" 871 | 872 | run-parallel@^1.1.9: 873 | version "1.2.0" 874 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 875 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 876 | dependencies: 877 | queue-microtask "^1.2.2" 878 | 879 | semver@^7.2.1, semver@^7.3.5: 880 | version "7.3.5" 881 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 882 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 883 | dependencies: 884 | lru-cache "^6.0.0" 885 | 886 | shebang-command@^2.0.0: 887 | version "2.0.0" 888 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 889 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 890 | dependencies: 891 | shebang-regex "^3.0.0" 892 | 893 | shebang-regex@^3.0.0: 894 | version "3.0.0" 895 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 896 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 897 | 898 | slash@^3.0.0: 899 | version "3.0.0" 900 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 901 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 902 | 903 | slice-ansi@^4.0.0: 904 | version "4.0.0" 905 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 906 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 907 | dependencies: 908 | ansi-styles "^4.0.0" 909 | astral-regex "^2.0.0" 910 | is-fullwidth-code-point "^3.0.0" 911 | 912 | sprintf-js@~1.0.2: 913 | version "1.0.3" 914 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 915 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 916 | 917 | string-width@^4.2.3: 918 | version "4.2.3" 919 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 920 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 921 | dependencies: 922 | emoji-regex "^8.0.0" 923 | is-fullwidth-code-point "^3.0.0" 924 | strip-ansi "^6.0.1" 925 | 926 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 927 | version "6.0.1" 928 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 929 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 930 | dependencies: 931 | ansi-regex "^5.0.1" 932 | 933 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 934 | version "3.1.1" 935 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 936 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 937 | 938 | supports-color@^5.3.0: 939 | version "5.5.0" 940 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 941 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 942 | dependencies: 943 | has-flag "^3.0.0" 944 | 945 | supports-color@^7.1.0: 946 | version "7.2.0" 947 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 948 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 949 | dependencies: 950 | has-flag "^4.0.0" 951 | 952 | table@^6.0.9: 953 | version "6.8.0" 954 | resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" 955 | integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== 956 | dependencies: 957 | ajv "^8.0.1" 958 | lodash.truncate "^4.4.2" 959 | slice-ansi "^4.0.0" 960 | string-width "^4.2.3" 961 | strip-ansi "^6.0.1" 962 | 963 | text-table@^0.2.0: 964 | version "0.2.0" 965 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 966 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 967 | 968 | to-regex-range@^5.0.1: 969 | version "5.0.1" 970 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 971 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 972 | dependencies: 973 | is-number "^7.0.0" 974 | 975 | tslib@^1.8.1: 976 | version "1.14.1" 977 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 978 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 979 | 980 | tsutils@^3.21.0: 981 | version "3.21.0" 982 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 983 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 984 | dependencies: 985 | tslib "^1.8.1" 986 | 987 | type-check@^0.4.0, type-check@~0.4.0: 988 | version "0.4.0" 989 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 990 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 991 | dependencies: 992 | prelude-ls "^1.2.1" 993 | 994 | type-fest@^0.20.2: 995 | version "0.20.2" 996 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 997 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 998 | 999 | typescript@^4.1.2: 1000 | version "4.5.5" 1001 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" 1002 | integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== 1003 | 1004 | uri-js@^4.2.2: 1005 | version "4.4.1" 1006 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1007 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1008 | dependencies: 1009 | punycode "^2.1.0" 1010 | 1011 | v8-compile-cache@^2.0.3: 1012 | version "2.3.0" 1013 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1014 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1015 | 1016 | vscode-jsonrpc@6.0.0: 1017 | version "6.0.0" 1018 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" 1019 | integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== 1020 | 1021 | vscode-languageserver-protocol@^3.16.0: 1022 | version "3.16.0" 1023 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" 1024 | integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== 1025 | dependencies: 1026 | vscode-jsonrpc "6.0.0" 1027 | vscode-languageserver-types "3.16.0" 1028 | 1029 | vscode-languageserver-types@3.16.0: 1030 | version "3.16.0" 1031 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" 1032 | integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== 1033 | 1034 | which@^2.0.1: 1035 | version "2.0.2" 1036 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1037 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1038 | dependencies: 1039 | isexe "^2.0.0" 1040 | 1041 | word-wrap@^1.2.3: 1042 | version "1.2.3" 1043 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1044 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1045 | 1046 | wrappy@1: 1047 | version "1.0.2" 1048 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1049 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1050 | 1051 | yallist@^4.0.0: 1052 | version "4.0.0" 1053 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1054 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1055 | --------------------------------------------------------------------------------