├── .eslintrc.js ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── package.json ├── src ├── baseTemplate.ts ├── completionItemBuilder.ts ├── index.ts └── templates │ ├── es │ ├── baseTemplate.ts │ ├── consoleTemplates.ts │ ├── forTemplates.ts │ ├── ifTemplates.ts │ └── varTemplates.ts │ ├── go │ ├── baseTemplate.ts │ ├── forTemplates.ts │ ├── ifTemplates.ts │ ├── lenTemplates.ts │ ├── printTemplate.ts │ └── switchTemplates.ts │ ├── notTemplate.ts │ ├── py │ ├── baseTemplate.ts │ └── ifTemplate.ts │ └── returnTemplate.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'], 7 | rules: { 8 | '@typescript-eslint/ban-ts-ignore': '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 | } 15 | }; 16 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | node-version: [16] 19 | 20 | env: 21 | NODE_ENV: test 22 | 23 | steps: 24 | - uses: actions/checkout@v1 25 | - name: Use Node.js ${{ matrix.node-version }} 26 | uses: actions/setup-node@v1 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | - name: Install yarn 30 | run: | 31 | curl --compressed -o- -L https://yarnpkg.com/install.sh | bash 32 | - name: yarn build 33 | run: | 34 | yarn 35 | - name: yarn lint 36 | run: | 37 | yarn lint 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules 3 | tsconfig.json 4 | *.map 5 | .tags 6 | .DS_Store 7 | .eslintrc.js 8 | webpack.config.js 9 | yarn.lock 10 | yarn-error.log 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Heyward Fann 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-postfix 2 | 3 | [Postfix completion](https://www.jetbrains.com/help/idea/settings-postfix-completion.html) extension for coc.nvim. Only support `TypeScript|JavaScript|Go|Python` by now. 4 | 5 | ![11](https://user-images.githubusercontent.com/345274/71809427-ff3a5880-3067-11ea-9631-77d59f9b2751.gif) 6 | 7 | ## Install 8 | 9 | `:CocInstall coc-postfix` 10 | 11 | ## License 12 | 13 | MIT 14 | 15 | --- 16 | > This extension is built with [create-coc-extension](https://github.com/fannheyward/create-coc-extension) 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coc-postfix", 3 | "version": "0.1.1", 4 | "description": "Postfix completion extension for coc.nvim", 5 | "author": "Heyward Fann ", 6 | "license": "MIT", 7 | "main": "lib/index.js", 8 | "keywords": [ 9 | "coc.nvim" 10 | ], 11 | "engines": { 12 | "coc": "^0.0.70" 13 | }, 14 | "scripts": { 15 | "clean": "rimraf lib", 16 | "lint": "eslint src --ext ts", 17 | "watch": "tsc -p tsconfig.json --watch", 18 | "build": "rimraf lib && tsc -p tsconfig.json" 19 | }, 20 | "dependencies": { 21 | "tiny-glob": "^0.2.6", 22 | "vscode-languageserver-protocol": "3.17.2", 23 | "vscode-languageserver-textdocument": "^1.0.7" 24 | }, 25 | "devDependencies": { 26 | "@types/node": "^18.11.9", 27 | "@typescript-eslint/eslint-plugin": "^5.42.0", 28 | "@typescript-eslint/parser": "^5.42.0", 29 | "coc.nvim": "^0.0.82", 30 | "eslint": "^8.26.0", 31 | "rimraf": "^3.0.2", 32 | "typescript": "^4.8.4" 33 | }, 34 | "prettier": { 35 | "singleQuote": true, 36 | "printWidth": 140, 37 | "semi": true 38 | }, 39 | "contributes": { 40 | "configuration": { 41 | "type": "object", 42 | "title": "coc-postfix configuration", 43 | "properties": { 44 | "postfix.enable": { 45 | "type": "boolean", 46 | "default": true, 47 | "description": "Enable coc-postfix extension" 48 | } 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/baseTemplate.ts: -------------------------------------------------------------------------------- 1 | import { CompletionItem } from 'coc.nvim'; 2 | import { Position } from 'vscode-languageserver-protocol'; 3 | 4 | export abstract class BaseTemplate { 5 | abstract get languages(): string[]; 6 | abstract buildCompletionItem(code: string, position: Position): CompletionItem; 7 | 8 | indentCharacters() { 9 | // TODO 10 | return '\t'; 11 | } 12 | 13 | canUse(language: string): boolean { 14 | if (this.languages.includes(language)) { 15 | return true; 16 | } 17 | 18 | return false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/completionItemBuilder.ts: -------------------------------------------------------------------------------- 1 | import { CompletionItem } from 'coc.nvim'; 2 | import { CompletionItemKind, InsertTextFormat, Position, Range, TextEdit } from 'vscode-languageserver-protocol'; 3 | 4 | const COMPLETION_ITEM_TITLE = 'Postfix templates'; 5 | 6 | export class CompletionItemBuilder { 7 | private item: CompletionItem; 8 | 9 | constructor(private keyword: string, private code: string) { 10 | this.item = { label: this.keyword, kind: CompletionItemKind.Snippet, detail: COMPLETION_ITEM_TITLE }; 11 | } 12 | 13 | public static create = (keyword: string, code: string) => new CompletionItemBuilder(keyword, code); 14 | 15 | public replace = (replacement: string, position: Position, useSnippets?: boolean): CompletionItemBuilder => { 16 | const codeBeforeTheDot = this.code.substr(0, this.code.lastIndexOf('.')); 17 | this.item.filterText = `${codeBeforeTheDot}.${this.keyword}`; 18 | 19 | if (useSnippets) { 20 | this.item.insertTextFormat = InsertTextFormat.Snippet; 21 | const escapedCode = codeBeforeTheDot.replace(/\$/g, '\\$'); 22 | replacement = replacement.replace('{{expr}}', escapedCode); 23 | } else { 24 | replacement = replacement.replace('{{expr}}', codeBeforeTheDot); 25 | } 26 | 27 | const range = Range.create(position.line, Math.max(position.character - codeBeforeTheDot.length - 1, 0), position.line, position.character); 28 | this.item.insertText = replacement; 29 | this.item.additionalTextEdits = [TextEdit.del(range)]; 30 | 31 | return this; 32 | }; 33 | 34 | public description = (description: string): CompletionItemBuilder => { 35 | this.item.documentation = description; 36 | 37 | return this; 38 | }; 39 | 40 | public build = () => this.item; 41 | } 42 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CancellationToken, 3 | CompletionContext, 4 | CompletionItem, 5 | CompletionItemProvider, 6 | ExtensionContext, 7 | languages, 8 | workspace, 9 | } from 'coc.nvim'; 10 | import glob from 'tiny-glob'; 11 | import { Position } from 'vscode-languageserver-protocol'; 12 | import { TextDocument } from 'vscode-languageserver-textdocument'; 13 | import { BaseTemplate } from './baseTemplate'; 14 | 15 | const DOCUMENT_SELECTOR: string[] = ['typescript', 'javascript', 'go', 'python']; 16 | 17 | class PostfixCompletionProvider implements CompletionItemProvider { 18 | private templates: BaseTemplate[] = []; 19 | 20 | constructor() { 21 | glob('templates/**/*.js', { cwd: __dirname }).then((files) => { 22 | files.forEach((path: string) => { 23 | // eslint-disable-next-line @typescript-eslint/no-var-requires 24 | const builder: () => BaseTemplate | BaseTemplate[] = require('./' + path).build; 25 | if (builder) { 26 | const tpls = builder(); 27 | if (Array.isArray(tpls)) { 28 | this.templates.push(...tpls); 29 | } else { 30 | this.templates.push(tpls); 31 | } 32 | } 33 | }); 34 | }); 35 | } 36 | 37 | async provideCompletionItems( 38 | document: TextDocument, 39 | position: Position, 40 | _token: CancellationToken, 41 | context: CompletionContext 42 | ): Promise { 43 | const { option } = context; 44 | if (!option) return null; 45 | 46 | const line = option.line; 47 | let firstNonWhitespaceCharacterIndex = option.line.length; 48 | for (let i = 0, len = line.length; i < len; i++) { 49 | if (!/\s/.test(line.charAt(i))) { 50 | firstNonWhitespaceCharacterIndex = i; 51 | break; 52 | } 53 | } 54 | 55 | const lastDot = line.lastIndexOf('.', position.character); 56 | if (lastDot === -1) { 57 | return null; 58 | } 59 | const last = line.substr(lastDot + 1); 60 | if (last && /[\s|()]/.test(last)) { 61 | return null; 62 | } 63 | 64 | const code = line.substr(firstNonWhitespaceCharacterIndex); 65 | if (!code) { 66 | return null; 67 | } 68 | 69 | const pos = Position.create(position.line, lastDot + 1); 70 | // const prefix = line.substring(firstNonWhitespaceCharacterIndex, dotIdx); 71 | return this.templates.filter((t) => t.canUse(document.languageId)).map((t) => t.buildCompletionItem(code, pos)); 72 | } 73 | } 74 | 75 | export async function activate(context: ExtensionContext): Promise { 76 | const enable = workspace.getConfiguration('postfix').get('enable', true); 77 | if (!enable) { 78 | return; 79 | } 80 | const provider = new PostfixCompletionProvider(); 81 | context.subscriptions.push(languages.registerCompletionItemProvider('Postfix', 'Postfix', DOCUMENT_SELECTOR, provider, ['.'], 10)); 82 | } 83 | -------------------------------------------------------------------------------- /src/templates/es/baseTemplate.ts: -------------------------------------------------------------------------------- 1 | import { BaseTemplate } from '../../baseTemplate'; 2 | 3 | export abstract class ESBaseTemplate extends BaseTemplate { 4 | get languages(): string[] { 5 | return ['typescript', 'javascript']; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/templates/es/consoleTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { ESBaseTemplate } from './baseTemplate'; 4 | 5 | export class ConsoleTemplate extends ESBaseTemplate { 6 | constructor(private level: 'log' | 'warn' | 'error') { 7 | super(); 8 | } 9 | 10 | buildCompletionItem(code: string, position: Position) { 11 | return CompletionItemBuilder.create(this.level, code) 12 | .description(`console.${this.level}(expr)`) 13 | .replace(`console.${this.level}({{expr}})`, position) 14 | .build(); 15 | } 16 | } 17 | 18 | export const build = () => [new ConsoleTemplate('log'), new ConsoleTemplate('warn'), new ConsoleTemplate('error')]; 19 | -------------------------------------------------------------------------------- /src/templates/es/forTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { ESBaseTemplate } from './baseTemplate'; 4 | 5 | class ForTemplate extends ESBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('for', code) 8 | .description('for (let i = 0; i < expr.Length; i++)') 9 | .replace(`for (let \${1:i} = 0; \${1} < \${2:{{expr}}}.length; \${1}++) {\n${this.indentCharacters()}\${0}\n}`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | class ForOfTemplate extends ESBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('forof', code) 17 | .description('for (let item of expr)') 18 | .replace(`for (let \${1:item} of \${2:{{expr}}}) {\n${this.indentCharacters()}\${0}\n}`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | class ForInTemplate extends ESBaseTemplate { 24 | buildCompletionItem(code: string, position: Position) { 25 | return CompletionItemBuilder.create('forin', code) 26 | .description('for (let item in expr)') 27 | .replace(`for (let \${1:key} in \${2:{{expr}}}) {\n${this.indentCharacters()}\${0}\n}`, position, true) 28 | .build(); 29 | } 30 | } 31 | 32 | export const build = () => [new ForTemplate(), new ForOfTemplate(), new ForInTemplate()]; 33 | -------------------------------------------------------------------------------- /src/templates/es/ifTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { ESBaseTemplate } from './baseTemplate'; 4 | 5 | export class IfTemplate extends ESBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('if', code) 8 | .description(`if (expr)`) 9 | .replace(`if ({{expr}}) {\n${this.indentCharacters()}\${0}\n}`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | export class ElseTemplate extends ESBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('else', code) 17 | .description(`if (!expr)`) 18 | .replace(`if (!{{expr}}) {\n${this.indentCharacters()}\${0}\n}`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | export class IfEqualityTemplate extends ESBaseTemplate { 24 | constructor(private keyword: string, private operator: string, private operand: string) { 25 | super(); 26 | } 27 | 28 | buildCompletionItem(code: string, position: Position) { 29 | return CompletionItemBuilder.create(this.keyword, code) 30 | .description(`if (expr ${this.operator} ${this.operand})`) 31 | .replace(`if ({{expr}} ${this.operator} ${this.operand}) {\n${this.indentCharacters()}\${0}\n}`, position, true) 32 | .build(); 33 | } 34 | } 35 | 36 | export const build = () => [ 37 | new IfTemplate(), 38 | new ElseTemplate(), 39 | new IfEqualityTemplate('null', '===', 'null'), 40 | new IfEqualityTemplate('notnull', '!==', 'null'), 41 | new IfEqualityTemplate('undefined', '===', 'undefined'), 42 | new IfEqualityTemplate('notundefined', '!==', 'undefined'), 43 | ]; 44 | -------------------------------------------------------------------------------- /src/templates/es/varTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { ESBaseTemplate } from './baseTemplate'; 4 | 5 | export class VarTemplate extends ESBaseTemplate { 6 | constructor(private keyword: 'var' | 'let' | 'const') { 7 | super(); 8 | } 9 | 10 | buildCompletionItem(code: string, position: Position) { 11 | return CompletionItemBuilder.create(this.keyword, code) 12 | .description(`${this.keyword} name = expr`) 13 | .replace(`${this.keyword} \${1:name} = {{expr}}$0`, position, true) 14 | .build(); 15 | } 16 | } 17 | 18 | export const build = () => [new VarTemplate('var'), new VarTemplate('let'), new VarTemplate('const')]; 19 | -------------------------------------------------------------------------------- /src/templates/go/baseTemplate.ts: -------------------------------------------------------------------------------- 1 | import { BaseTemplate } from '../../baseTemplate'; 2 | 3 | export abstract class GoBaseTemplate extends BaseTemplate { 4 | get languages(): string[] { 5 | return ['go']; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/templates/go/forTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { GoBaseTemplate } from './baseTemplate'; 4 | 5 | export class ForrTemplate extends GoBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('forr', code) 8 | .description('for k, v := range kvs') 9 | .replace(`for \${1:index}, \${2:item} := range {{expr}} {\n${this.indentCharacters()}\${0}\n}`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | export class ForkTemplate extends GoBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('fork', code) 17 | .description('for k := range kvs') 18 | .replace(`for \${1:key} := range {{expr}} {\n${this.indentCharacters()}\${0}\n}`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | export const build = () => [new ForrTemplate(), new ForkTemplate()]; 24 | -------------------------------------------------------------------------------- /src/templates/go/ifTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { GoBaseTemplate } from './baseTemplate'; 4 | 5 | export class IfTemplate extends GoBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('iflen', code) 8 | .description('if len(expr)') 9 | .replace(`if len({{expr}}) $1 {\n${this.indentCharacters()}\${0}\n}`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | export class ElseTemplate extends GoBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('else', code) 17 | .description('if !expr') 18 | .replace(`if !{{expr}} {\n${this.indentCharacters()}\${0}\n}`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | export class IfEqualityTemplate extends GoBaseTemplate { 24 | constructor(private keyword: string, private operator: string, private operand: string) { 25 | super(); 26 | } 27 | 28 | buildCompletionItem(code: string, position: Position) { 29 | return CompletionItemBuilder.create(this.keyword, code) 30 | .description(`if expr ${this.operator} ${this.operand}`) 31 | .replace(`if {{expr}} ${this.operator} ${this.operand} {\n${this.indentCharacters()}\${0}\n}`, position, true) 32 | .build(); 33 | } 34 | } 35 | 36 | export const build = () => [ 37 | new IfTemplate(), 38 | new ElseTemplate(), 39 | new IfEqualityTemplate('nil', '==', 'nil'), 40 | new IfEqualityTemplate('notnil', '!=', 'nil'), 41 | ]; 42 | -------------------------------------------------------------------------------- /src/templates/go/lenTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { GoBaseTemplate } from './baseTemplate'; 4 | 5 | export class LenTemplate extends GoBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('len', code).description('len(expr)').replace(`len({{expr}})`, position, true).build(); 8 | } 9 | } 10 | 11 | export const build = () => [new LenTemplate()]; 12 | -------------------------------------------------------------------------------- /src/templates/go/printTemplate.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { GoBaseTemplate } from './baseTemplate'; 4 | 5 | export class PrintlnTemplate extends GoBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('println', code) 8 | .description(`fmt.Println(expr)`) 9 | .replace(`fmt.Println({{expr}})`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | export class PrintfTemplate extends GoBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('printf', code) 17 | .description(`fmt.Printf(expr)`) 18 | .replace(`fmt.Printf("%+v\\n", \${0:{{expr}}})`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | export const build = () => [new PrintlnTemplate(), new PrintfTemplate()]; 24 | -------------------------------------------------------------------------------- /src/templates/go/switchTemplates.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { GoBaseTemplate } from './baseTemplate'; 4 | 5 | export class SwitchTemplate extends GoBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('switch', code) 8 | .description('switch expr') 9 | .replace(`len({{expr}})`, position, true) 10 | .replace(`switch \${1:{{expr}}} {\n\tcase \${2:condition}:\n\t\${0}\n}`, position, true) 11 | .build(); 12 | } 13 | } 14 | 15 | export const build = () => [new SwitchTemplate()]; 16 | -------------------------------------------------------------------------------- /src/templates/notTemplate.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../completionItemBuilder'; 3 | import { BaseTemplate } from '../baseTemplate'; 4 | 5 | export class NotTemplate extends BaseTemplate { 6 | get languages() { 7 | return ['typescript', 'javascript', 'go']; 8 | } 9 | 10 | buildCompletionItem(code: string, position: Position) { 11 | return CompletionItemBuilder.create('not', code).description('!expr').replace(`!{{expr}}`, position).build(); 12 | } 13 | 14 | canUse(language: string) { 15 | return this.languages.includes(language); 16 | } 17 | } 18 | 19 | export const build = () => new NotTemplate(); 20 | -------------------------------------------------------------------------------- /src/templates/py/baseTemplate.ts: -------------------------------------------------------------------------------- 1 | import { BaseTemplate } from '../../baseTemplate'; 2 | 3 | export abstract class PyBaseTemplate extends BaseTemplate { 4 | get languages(): string[] { 5 | return ['python']; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/templates/py/ifTemplate.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../../completionItemBuilder'; 3 | import { PyBaseTemplate } from './baseTemplate'; 4 | 5 | export class IfTemplate extends PyBaseTemplate { 6 | buildCompletionItem(code: string, position: Position) { 7 | return CompletionItemBuilder.create('if', code) 8 | .description('if expr') 9 | .replace(`if {{expr}}:\n${this.indentCharacters()}\${0}\n`, position, true) 10 | .build(); 11 | } 12 | } 13 | 14 | export class IfNotTemplate extends PyBaseTemplate { 15 | buildCompletionItem(code: string, position: Position) { 16 | return CompletionItemBuilder.create('ifn', code) 17 | .description('if expr is None') 18 | .replace(`if {{expr}} is None:\n${this.indentCharacters()}\${0}\n`, position, true) 19 | .build(); 20 | } 21 | } 22 | 23 | export class IfNotNoneTemplate extends PyBaseTemplate { 24 | buildCompletionItem(code: string, position: Position) { 25 | return CompletionItemBuilder.create('ifnn', code) 26 | .description('if expr is not None') 27 | .replace(`if {{expr}} is not None:\n${this.indentCharacters()}\${0}\n`, position, true) 28 | .build(); 29 | } 30 | } 31 | 32 | export const build = () => [new IfTemplate(), new IfNotTemplate(), new IfNotNoneTemplate()]; 33 | -------------------------------------------------------------------------------- /src/templates/returnTemplate.ts: -------------------------------------------------------------------------------- 1 | import { Position } from 'vscode-languageserver-protocol'; 2 | import { CompletionItemBuilder } from '../completionItemBuilder'; 3 | import { BaseTemplate } from '../baseTemplate'; 4 | 5 | export class ReturnTemplate extends BaseTemplate { 6 | get languages() { 7 | return []; 8 | } 9 | 10 | buildCompletionItem(code: string, position: Position) { 11 | return CompletionItemBuilder.create('return', code).description(`return expr`).replace('return {{expr}}', position).build(); 12 | } 13 | 14 | canUse() { 15 | return true; 16 | } 17 | } 18 | 19 | export const build = () => new ReturnTemplate(); 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": ["es6"], 5 | "module": "commonjs", 6 | "declaration": false, 7 | "sourceMap": false, 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 | "@eslint/eslintrc@^1.3.3": 6 | version "1.3.3" 7 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" 8 | integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== 9 | dependencies: 10 | ajv "^6.12.4" 11 | debug "^4.3.2" 12 | espree "^9.4.0" 13 | globals "^13.15.0" 14 | ignore "^5.2.0" 15 | import-fresh "^3.2.1" 16 | js-yaml "^4.1.0" 17 | minimatch "^3.1.2" 18 | strip-json-comments "^3.1.1" 19 | 20 | "@humanwhocodes/config-array@^0.11.6": 21 | version "0.11.7" 22 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" 23 | integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== 24 | dependencies: 25 | "@humanwhocodes/object-schema" "^1.2.1" 26 | debug "^4.1.1" 27 | minimatch "^3.0.5" 28 | 29 | "@humanwhocodes/module-importer@^1.0.1": 30 | version "1.0.1" 31 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 32 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 33 | 34 | "@humanwhocodes/object-schema@^1.2.1": 35 | version "1.2.1" 36 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 37 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 38 | 39 | "@nodelib/fs.scandir@2.1.5": 40 | version "2.1.5" 41 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 42 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 43 | dependencies: 44 | "@nodelib/fs.stat" "2.0.5" 45 | run-parallel "^1.1.9" 46 | 47 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 48 | version "2.0.5" 49 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 50 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 51 | 52 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 53 | version "1.2.8" 54 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 55 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 56 | dependencies: 57 | "@nodelib/fs.scandir" "2.1.5" 58 | fastq "^1.6.0" 59 | 60 | "@types/json-schema@^7.0.9": 61 | version "7.0.11" 62 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 63 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 64 | 65 | "@types/node@^18.11.9": 66 | version "18.11.9" 67 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" 68 | integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== 69 | 70 | "@types/semver@^7.3.12": 71 | version "7.3.13" 72 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 73 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 74 | 75 | "@typescript-eslint/eslint-plugin@^5.42.0": 76 | version "5.42.0" 77 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.0.tgz#36a8c0c379870127059889a9cc7e05c260d2aaa5" 78 | integrity sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ== 79 | dependencies: 80 | "@typescript-eslint/scope-manager" "5.42.0" 81 | "@typescript-eslint/type-utils" "5.42.0" 82 | "@typescript-eslint/utils" "5.42.0" 83 | debug "^4.3.4" 84 | ignore "^5.2.0" 85 | natural-compare-lite "^1.4.0" 86 | regexpp "^3.2.0" 87 | semver "^7.3.7" 88 | tsutils "^3.21.0" 89 | 90 | "@typescript-eslint/parser@^5.42.0": 91 | version "5.42.0" 92 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.42.0.tgz#be0ffbe279e1320e3d15e2ef0ad19262f59e9240" 93 | integrity sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA== 94 | dependencies: 95 | "@typescript-eslint/scope-manager" "5.42.0" 96 | "@typescript-eslint/types" "5.42.0" 97 | "@typescript-eslint/typescript-estree" "5.42.0" 98 | debug "^4.3.4" 99 | 100 | "@typescript-eslint/scope-manager@5.42.0": 101 | version "5.42.0" 102 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.42.0.tgz#e1f2bb26d3b2a508421ee2e3ceea5396b192f5ef" 103 | integrity sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow== 104 | dependencies: 105 | "@typescript-eslint/types" "5.42.0" 106 | "@typescript-eslint/visitor-keys" "5.42.0" 107 | 108 | "@typescript-eslint/type-utils@5.42.0": 109 | version "5.42.0" 110 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.42.0.tgz#4206d7192d4fe903ddf99d09b41d4ac31b0b7dca" 111 | integrity sha512-HW14TXC45dFVZxnVW8rnUGnvYyRC0E/vxXShFCthcC9VhVTmjqOmtqj6H5rm9Zxv+ORxKA/1aLGD7vmlLsdlOg== 112 | dependencies: 113 | "@typescript-eslint/typescript-estree" "5.42.0" 114 | "@typescript-eslint/utils" "5.42.0" 115 | debug "^4.3.4" 116 | tsutils "^3.21.0" 117 | 118 | "@typescript-eslint/types@5.42.0": 119 | version "5.42.0" 120 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.42.0.tgz#5aeff9b5eced48f27d5b8139339bf1ef805bad7a" 121 | integrity sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw== 122 | 123 | "@typescript-eslint/typescript-estree@5.42.0": 124 | version "5.42.0" 125 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.0.tgz#2592d24bb5f89bf54a63384ff3494870f95b3fd8" 126 | integrity sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg== 127 | dependencies: 128 | "@typescript-eslint/types" "5.42.0" 129 | "@typescript-eslint/visitor-keys" "5.42.0" 130 | debug "^4.3.4" 131 | globby "^11.1.0" 132 | is-glob "^4.0.3" 133 | semver "^7.3.7" 134 | tsutils "^3.21.0" 135 | 136 | "@typescript-eslint/utils@5.42.0": 137 | version "5.42.0" 138 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.42.0.tgz#f06bd43b9a9a06ed8f29600273240e84a53f2f15" 139 | integrity sha512-JZ++3+h1vbeG1NUECXQZE3hg0kias9kOtcQr3+JVQ3whnjvKuMyktJAAIj6743OeNPnGBmjj7KEmiDL7qsdnCQ== 140 | dependencies: 141 | "@types/json-schema" "^7.0.9" 142 | "@types/semver" "^7.3.12" 143 | "@typescript-eslint/scope-manager" "5.42.0" 144 | "@typescript-eslint/types" "5.42.0" 145 | "@typescript-eslint/typescript-estree" "5.42.0" 146 | eslint-scope "^5.1.1" 147 | eslint-utils "^3.0.0" 148 | semver "^7.3.7" 149 | 150 | "@typescript-eslint/visitor-keys@5.42.0": 151 | version "5.42.0" 152 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.0.tgz#ee8d62d486f41cfe646632fab790fbf0c1db5bb0" 153 | integrity sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg== 154 | dependencies: 155 | "@typescript-eslint/types" "5.42.0" 156 | eslint-visitor-keys "^3.3.0" 157 | 158 | acorn-jsx@^5.3.2: 159 | version "5.3.2" 160 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 161 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 162 | 163 | acorn@^8.8.0: 164 | version "8.8.1" 165 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 166 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 167 | 168 | ajv@^6.10.0, ajv@^6.12.4: 169 | version "6.12.6" 170 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 171 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 172 | dependencies: 173 | fast-deep-equal "^3.1.1" 174 | fast-json-stable-stringify "^2.0.0" 175 | json-schema-traverse "^0.4.1" 176 | uri-js "^4.2.2" 177 | 178 | ansi-regex@^5.0.1: 179 | version "5.0.1" 180 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 181 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 182 | 183 | ansi-styles@^4.1.0: 184 | version "4.3.0" 185 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 186 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 187 | dependencies: 188 | color-convert "^2.0.1" 189 | 190 | argparse@^2.0.1: 191 | version "2.0.1" 192 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 193 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 194 | 195 | array-union@^2.1.0: 196 | version "2.1.0" 197 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 198 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 199 | 200 | balanced-match@^1.0.0: 201 | version "1.0.2" 202 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 203 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 204 | 205 | brace-expansion@^1.1.7: 206 | version "1.1.11" 207 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 208 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 209 | dependencies: 210 | balanced-match "^1.0.0" 211 | concat-map "0.0.1" 212 | 213 | braces@^3.0.3: 214 | version "3.0.3" 215 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 216 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 217 | dependencies: 218 | fill-range "^7.1.1" 219 | 220 | callsites@^3.0.0: 221 | version "3.1.0" 222 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 223 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 224 | 225 | chalk@^4.0.0: 226 | version "4.1.2" 227 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 228 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 229 | dependencies: 230 | ansi-styles "^4.1.0" 231 | supports-color "^7.1.0" 232 | 233 | coc.nvim@^0.0.82: 234 | version "0.0.82" 235 | resolved "https://registry.yarnpkg.com/coc.nvim/-/coc.nvim-0.0.82.tgz#5230e2eb17e8499a60a97b46d844f2d08c593b29" 236 | integrity sha512-+70ap6FH8FSdaQ0CPijaasQzg6ue84j4/LkX6ZSpALX7YKBcGGDkCcd6adgaC/86b/ZqT3iTTEbMh3mdaI5qPA== 237 | 238 | color-convert@^2.0.1: 239 | version "2.0.1" 240 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 241 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 242 | dependencies: 243 | color-name "~1.1.4" 244 | 245 | color-name@~1.1.4: 246 | version "1.1.4" 247 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 248 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 249 | 250 | concat-map@0.0.1: 251 | version "0.0.1" 252 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 253 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 254 | 255 | cross-spawn@^7.0.2: 256 | version "7.0.6" 257 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 258 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 259 | dependencies: 260 | path-key "^3.1.0" 261 | shebang-command "^2.0.0" 262 | which "^2.0.1" 263 | 264 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 265 | version "4.3.4" 266 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 267 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 268 | dependencies: 269 | ms "2.1.2" 270 | 271 | deep-is@^0.1.3: 272 | version "0.1.4" 273 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 274 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 275 | 276 | dir-glob@^3.0.1: 277 | version "3.0.1" 278 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 279 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 280 | dependencies: 281 | path-type "^4.0.0" 282 | 283 | doctrine@^3.0.0: 284 | version "3.0.0" 285 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 286 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 287 | dependencies: 288 | esutils "^2.0.2" 289 | 290 | escape-string-regexp@^4.0.0: 291 | version "4.0.0" 292 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 293 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 294 | 295 | eslint-scope@^5.1.1: 296 | version "5.1.1" 297 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 298 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 299 | dependencies: 300 | esrecurse "^4.3.0" 301 | estraverse "^4.1.1" 302 | 303 | eslint-scope@^7.1.1: 304 | version "7.1.1" 305 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 306 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 307 | dependencies: 308 | esrecurse "^4.3.0" 309 | estraverse "^5.2.0" 310 | 311 | eslint-utils@^3.0.0: 312 | version "3.0.0" 313 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 314 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 315 | dependencies: 316 | eslint-visitor-keys "^2.0.0" 317 | 318 | eslint-visitor-keys@^2.0.0: 319 | version "2.1.0" 320 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 321 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 322 | 323 | eslint-visitor-keys@^3.3.0: 324 | version "3.3.0" 325 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 326 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 327 | 328 | eslint@^8.26.0: 329 | version "8.26.0" 330 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" 331 | integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== 332 | dependencies: 333 | "@eslint/eslintrc" "^1.3.3" 334 | "@humanwhocodes/config-array" "^0.11.6" 335 | "@humanwhocodes/module-importer" "^1.0.1" 336 | "@nodelib/fs.walk" "^1.2.8" 337 | ajv "^6.10.0" 338 | chalk "^4.0.0" 339 | cross-spawn "^7.0.2" 340 | debug "^4.3.2" 341 | doctrine "^3.0.0" 342 | escape-string-regexp "^4.0.0" 343 | eslint-scope "^7.1.1" 344 | eslint-utils "^3.0.0" 345 | eslint-visitor-keys "^3.3.0" 346 | espree "^9.4.0" 347 | esquery "^1.4.0" 348 | esutils "^2.0.2" 349 | fast-deep-equal "^3.1.3" 350 | file-entry-cache "^6.0.1" 351 | find-up "^5.0.0" 352 | glob-parent "^6.0.2" 353 | globals "^13.15.0" 354 | grapheme-splitter "^1.0.4" 355 | ignore "^5.2.0" 356 | import-fresh "^3.0.0" 357 | imurmurhash "^0.1.4" 358 | is-glob "^4.0.0" 359 | is-path-inside "^3.0.3" 360 | js-sdsl "^4.1.4" 361 | js-yaml "^4.1.0" 362 | json-stable-stringify-without-jsonify "^1.0.1" 363 | levn "^0.4.1" 364 | lodash.merge "^4.6.2" 365 | minimatch "^3.1.2" 366 | natural-compare "^1.4.0" 367 | optionator "^0.9.1" 368 | regexpp "^3.2.0" 369 | strip-ansi "^6.0.1" 370 | strip-json-comments "^3.1.0" 371 | text-table "^0.2.0" 372 | 373 | espree@^9.4.0: 374 | version "9.4.0" 375 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" 376 | integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== 377 | dependencies: 378 | acorn "^8.8.0" 379 | acorn-jsx "^5.3.2" 380 | eslint-visitor-keys "^3.3.0" 381 | 382 | esquery@^1.4.0: 383 | version "1.4.0" 384 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 385 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 386 | dependencies: 387 | estraverse "^5.1.0" 388 | 389 | esrecurse@^4.3.0: 390 | version "4.3.0" 391 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 392 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 393 | dependencies: 394 | estraverse "^5.2.0" 395 | 396 | estraverse@^4.1.1: 397 | version "4.3.0" 398 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 399 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 400 | 401 | estraverse@^5.1.0, estraverse@^5.2.0: 402 | version "5.3.0" 403 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 404 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 405 | 406 | esutils@^2.0.2: 407 | version "2.0.3" 408 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 409 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 410 | 411 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 412 | version "3.1.3" 413 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 414 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 415 | 416 | fast-glob@^3.2.9: 417 | version "3.2.12" 418 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 419 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 420 | dependencies: 421 | "@nodelib/fs.stat" "^2.0.2" 422 | "@nodelib/fs.walk" "^1.2.3" 423 | glob-parent "^5.1.2" 424 | merge2 "^1.3.0" 425 | micromatch "^4.0.4" 426 | 427 | fast-json-stable-stringify@^2.0.0: 428 | version "2.1.0" 429 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 430 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 431 | 432 | fast-levenshtein@^2.0.6: 433 | version "2.0.6" 434 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 435 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 436 | 437 | fastq@^1.6.0: 438 | version "1.13.0" 439 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 440 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 441 | dependencies: 442 | reusify "^1.0.4" 443 | 444 | file-entry-cache@^6.0.1: 445 | version "6.0.1" 446 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 447 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 448 | dependencies: 449 | flat-cache "^3.0.4" 450 | 451 | fill-range@^7.1.1: 452 | version "7.1.1" 453 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 454 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 455 | dependencies: 456 | to-regex-range "^5.0.1" 457 | 458 | find-up@^5.0.0: 459 | version "5.0.0" 460 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 461 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 462 | dependencies: 463 | locate-path "^6.0.0" 464 | path-exists "^4.0.0" 465 | 466 | flat-cache@^3.0.4: 467 | version "3.0.4" 468 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 469 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 470 | dependencies: 471 | flatted "^3.1.0" 472 | rimraf "^3.0.2" 473 | 474 | flatted@^3.1.0: 475 | version "3.2.7" 476 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 477 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 478 | 479 | fs.realpath@^1.0.0: 480 | version "1.0.0" 481 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 482 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 483 | 484 | glob-parent@^5.1.2: 485 | version "5.1.2" 486 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 487 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 488 | dependencies: 489 | is-glob "^4.0.1" 490 | 491 | glob-parent@^6.0.2: 492 | version "6.0.2" 493 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 494 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 495 | dependencies: 496 | is-glob "^4.0.3" 497 | 498 | glob@^7.1.3: 499 | version "7.2.3" 500 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 501 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 502 | dependencies: 503 | fs.realpath "^1.0.0" 504 | inflight "^1.0.4" 505 | inherits "2" 506 | minimatch "^3.1.1" 507 | once "^1.3.0" 508 | path-is-absolute "^1.0.0" 509 | 510 | globals@^13.15.0: 511 | version "13.17.0" 512 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" 513 | integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== 514 | dependencies: 515 | type-fest "^0.20.2" 516 | 517 | globalyzer@0.1.0: 518 | version "0.1.0" 519 | resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" 520 | integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== 521 | 522 | globby@^11.1.0: 523 | version "11.1.0" 524 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 525 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 526 | dependencies: 527 | array-union "^2.1.0" 528 | dir-glob "^3.0.1" 529 | fast-glob "^3.2.9" 530 | ignore "^5.2.0" 531 | merge2 "^1.4.1" 532 | slash "^3.0.0" 533 | 534 | globrex@^0.1.2: 535 | version "0.1.2" 536 | resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" 537 | integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== 538 | 539 | grapheme-splitter@^1.0.4: 540 | version "1.0.4" 541 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 542 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 543 | 544 | has-flag@^4.0.0: 545 | version "4.0.0" 546 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 547 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 548 | 549 | ignore@^5.2.0: 550 | version "5.2.0" 551 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 552 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 553 | 554 | import-fresh@^3.0.0, import-fresh@^3.2.1: 555 | version "3.3.0" 556 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 557 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 558 | dependencies: 559 | parent-module "^1.0.0" 560 | resolve-from "^4.0.0" 561 | 562 | imurmurhash@^0.1.4: 563 | version "0.1.4" 564 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 565 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 566 | 567 | inflight@^1.0.4: 568 | version "1.0.6" 569 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 570 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 571 | dependencies: 572 | once "^1.3.0" 573 | wrappy "1" 574 | 575 | inherits@2: 576 | version "2.0.4" 577 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 578 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 579 | 580 | is-extglob@^2.1.1: 581 | version "2.1.1" 582 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 583 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 584 | 585 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 586 | version "4.0.3" 587 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 588 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 589 | dependencies: 590 | is-extglob "^2.1.1" 591 | 592 | is-number@^7.0.0: 593 | version "7.0.0" 594 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 595 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 596 | 597 | is-path-inside@^3.0.3: 598 | version "3.0.3" 599 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 600 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 601 | 602 | isexe@^2.0.0: 603 | version "2.0.0" 604 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 605 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 606 | 607 | js-sdsl@^4.1.4: 608 | version "4.1.5" 609 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" 610 | integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== 611 | 612 | js-yaml@^4.1.0: 613 | version "4.1.0" 614 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 615 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 616 | dependencies: 617 | argparse "^2.0.1" 618 | 619 | json-schema-traverse@^0.4.1: 620 | version "0.4.1" 621 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 622 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 623 | 624 | json-stable-stringify-without-jsonify@^1.0.1: 625 | version "1.0.1" 626 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 627 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 628 | 629 | levn@^0.4.1: 630 | version "0.4.1" 631 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 632 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 633 | dependencies: 634 | prelude-ls "^1.2.1" 635 | type-check "~0.4.0" 636 | 637 | locate-path@^6.0.0: 638 | version "6.0.0" 639 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 640 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 641 | dependencies: 642 | p-locate "^5.0.0" 643 | 644 | lodash.merge@^4.6.2: 645 | version "4.6.2" 646 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 647 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 648 | 649 | lru-cache@^6.0.0: 650 | version "6.0.0" 651 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 652 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 653 | dependencies: 654 | yallist "^4.0.0" 655 | 656 | merge2@^1.3.0, merge2@^1.4.1: 657 | version "1.4.1" 658 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 659 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 660 | 661 | micromatch@^4.0.4: 662 | version "4.0.8" 663 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 664 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 665 | dependencies: 666 | braces "^3.0.3" 667 | picomatch "^2.3.1" 668 | 669 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 670 | version "3.1.2" 671 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 672 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 673 | dependencies: 674 | brace-expansion "^1.1.7" 675 | 676 | ms@2.1.2: 677 | version "2.1.2" 678 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 679 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 680 | 681 | natural-compare-lite@^1.4.0: 682 | version "1.4.0" 683 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 684 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 685 | 686 | natural-compare@^1.4.0: 687 | version "1.4.0" 688 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 689 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 690 | 691 | once@^1.3.0: 692 | version "1.4.0" 693 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 694 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 695 | dependencies: 696 | wrappy "1" 697 | 698 | optionator@^0.9.1: 699 | version "0.9.1" 700 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 701 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 702 | dependencies: 703 | deep-is "^0.1.3" 704 | fast-levenshtein "^2.0.6" 705 | levn "^0.4.1" 706 | prelude-ls "^1.2.1" 707 | type-check "^0.4.0" 708 | word-wrap "^1.2.3" 709 | 710 | p-limit@^3.0.2: 711 | version "3.1.0" 712 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 713 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 714 | dependencies: 715 | yocto-queue "^0.1.0" 716 | 717 | p-locate@^5.0.0: 718 | version "5.0.0" 719 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 720 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 721 | dependencies: 722 | p-limit "^3.0.2" 723 | 724 | parent-module@^1.0.0: 725 | version "1.0.1" 726 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 727 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 728 | dependencies: 729 | callsites "^3.0.0" 730 | 731 | path-exists@^4.0.0: 732 | version "4.0.0" 733 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 734 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 735 | 736 | path-is-absolute@^1.0.0: 737 | version "1.0.1" 738 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 739 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 740 | 741 | path-key@^3.1.0: 742 | version "3.1.1" 743 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 744 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 745 | 746 | path-type@^4.0.0: 747 | version "4.0.0" 748 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 749 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 750 | 751 | picomatch@^2.3.1: 752 | version "2.3.1" 753 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 754 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 755 | 756 | prelude-ls@^1.2.1: 757 | version "1.2.1" 758 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 759 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 760 | 761 | punycode@^2.1.0: 762 | version "2.1.1" 763 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 764 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 765 | 766 | queue-microtask@^1.2.2: 767 | version "1.2.3" 768 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 769 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 770 | 771 | regexpp@^3.2.0: 772 | version "3.2.0" 773 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 774 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 775 | 776 | resolve-from@^4.0.0: 777 | version "4.0.0" 778 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 779 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 780 | 781 | reusify@^1.0.4: 782 | version "1.0.4" 783 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 784 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 785 | 786 | rimraf@^3.0.2: 787 | version "3.0.2" 788 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 789 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 790 | dependencies: 791 | glob "^7.1.3" 792 | 793 | run-parallel@^1.1.9: 794 | version "1.2.0" 795 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 796 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 797 | dependencies: 798 | queue-microtask "^1.2.2" 799 | 800 | semver@^7.3.7: 801 | version "7.5.3" 802 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" 803 | integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== 804 | dependencies: 805 | lru-cache "^6.0.0" 806 | 807 | shebang-command@^2.0.0: 808 | version "2.0.0" 809 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 810 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 811 | dependencies: 812 | shebang-regex "^3.0.0" 813 | 814 | shebang-regex@^3.0.0: 815 | version "3.0.0" 816 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 817 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 818 | 819 | slash@^3.0.0: 820 | version "3.0.0" 821 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 822 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 823 | 824 | strip-ansi@^6.0.1: 825 | version "6.0.1" 826 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 827 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 828 | dependencies: 829 | ansi-regex "^5.0.1" 830 | 831 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 832 | version "3.1.1" 833 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 834 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 835 | 836 | supports-color@^7.1.0: 837 | version "7.2.0" 838 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 839 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 840 | dependencies: 841 | has-flag "^4.0.0" 842 | 843 | text-table@^0.2.0: 844 | version "0.2.0" 845 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 846 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 847 | 848 | tiny-glob@^0.2.6: 849 | version "0.2.9" 850 | resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" 851 | integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== 852 | dependencies: 853 | globalyzer "0.1.0" 854 | globrex "^0.1.2" 855 | 856 | to-regex-range@^5.0.1: 857 | version "5.0.1" 858 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 859 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 860 | dependencies: 861 | is-number "^7.0.0" 862 | 863 | tslib@^1.8.1: 864 | version "1.14.1" 865 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 866 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 867 | 868 | tsutils@^3.21.0: 869 | version "3.21.0" 870 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 871 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 872 | dependencies: 873 | tslib "^1.8.1" 874 | 875 | type-check@^0.4.0, type-check@~0.4.0: 876 | version "0.4.0" 877 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 878 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 879 | dependencies: 880 | prelude-ls "^1.2.1" 881 | 882 | type-fest@^0.20.2: 883 | version "0.20.2" 884 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 885 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 886 | 887 | typescript@^4.8.4: 888 | version "4.8.4" 889 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" 890 | integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== 891 | 892 | uri-js@^4.2.2: 893 | version "4.4.1" 894 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 895 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 896 | dependencies: 897 | punycode "^2.1.0" 898 | 899 | vscode-jsonrpc@8.0.2: 900 | version "8.0.2" 901 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" 902 | integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== 903 | 904 | vscode-languageserver-protocol@3.17.2: 905 | version "3.17.2" 906 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" 907 | integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== 908 | dependencies: 909 | vscode-jsonrpc "8.0.2" 910 | vscode-languageserver-types "3.17.2" 911 | 912 | vscode-languageserver-textdocument@^1.0.7: 913 | version "1.0.7" 914 | resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz#16df468d5c2606103c90554ae05f9f3d335b771b" 915 | integrity sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg== 916 | 917 | vscode-languageserver-types@3.17.2: 918 | version "3.17.2" 919 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" 920 | integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== 921 | 922 | which@^2.0.1: 923 | version "2.0.2" 924 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 925 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 926 | dependencies: 927 | isexe "^2.0.0" 928 | 929 | word-wrap@^1.2.3: 930 | version "1.2.4" 931 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" 932 | integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== 933 | 934 | wrappy@1: 935 | version "1.0.2" 936 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 937 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 938 | 939 | yallist@^4.0.0: 940 | version "4.0.0" 941 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 942 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 943 | 944 | yocto-queue@^0.1.0: 945 | version "0.1.0" 946 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 947 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 948 | --------------------------------------------------------------------------------