├── schemas └── README.md ├── .npmignore ├── scripts └── check-schema.mjs ├── src ├── commands │ ├── showOutput.ts │ ├── pcfFix.ts │ ├── pintFix.ts │ ├── pintDownload.ts │ ├── pcfDownload.ts │ ├── pintTest.ts │ └── pcfDryRunDiff.ts ├── statusBar.ts ├── documentFormats │ ├── pcfFix.ts │ └── pintFix.ts ├── actions │ ├── pcfFix.ts │ └── pintFix.ts ├── downloaders │ ├── pintDownloader.ts │ └── pcfDownloader.ts ├── common.ts ├── index.ts └── engines │ ├── pintEngine.ts │ └── pcfEngine.ts ├── tsconfig.json ├── .eslintrc.js ├── .github └── workflows │ └── update-schema-data.yml ├── esbuild.js ├── LICENSE ├── .gitignore ├── README.md ├── package.json └── yarn.lock /schemas/README.md: -------------------------------------------------------------------------------- 1 | # Schemas 2 | 3 | ## pint-schema.json 4 | 5 | - 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules 3 | tsconfig.json 4 | *.map 5 | .tags 6 | .DS_Store 7 | webpack.config.js 8 | esbuild.js 9 | yarn.lock 10 | yarn-error.log 11 | .github 12 | .eslintrc.js 13 | .prettierrc 14 | _ref 15 | -------------------------------------------------------------------------------- /scripts/check-schema.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs'; 2 | 3 | const RESOURCE_FILE_PATH = new URL(`../schemas/pint-schema.json`, import.meta.url).pathname; 4 | 5 | if (fs.readFileSync(RESOURCE_FILE_PATH, { encoding: 'utf8' }).split('\n').length === 1) { 6 | console.log('NG'); 7 | process.exit(1); 8 | } 9 | -------------------------------------------------------------------------------- /src/commands/showOutput.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, OutputChannel } from 'coc.nvim'; 2 | 3 | export function activate(context: ExtensionContext, outputChannel: OutputChannel) { 4 | context.subscriptions.push( 5 | commands.registerCommand('php-cs-fixer.showOutput', () => { 6 | outputChannel.show(); 7 | }) 8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.github/workflows/update-schema-data.yml: -------------------------------------------------------------------------------- 1 | name: update-schema-data 2 | 3 | on: 4 | schedule: 5 | - cron: "0 15 * * *" 6 | workflow_dispatch: 7 | 8 | jobs: 9 | check: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v3 14 | 15 | - name: Setup node 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: 18.16.x 19 | cache: npm 20 | 21 | - name: Check upstream pint schema 22 | run: npm run schema 23 | 24 | - name: Create Pull Request 25 | uses: peter-evans/create-pull-request@v5 26 | with: 27 | title: 'ci(schema): update' 28 | commit-message: 'ci(schema): update' 29 | author: 'GitHub ' 30 | delete-branch: true 31 | -------------------------------------------------------------------------------- /src/commands/pcfFix.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, OutputChannel, TextEdit, workspace } from 'coc.nvim'; 2 | import { fullDocumentRange } from '../common'; 3 | import { doFormat } from '../engines/pcfEngine'; 4 | 5 | export function activate(context: ExtensionContext, outputChannel: OutputChannel) { 6 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.fix', runFixCommand(context, outputChannel))); 7 | } 8 | 9 | function runFixCommand(context: ExtensionContext, outputChannel: OutputChannel) { 10 | return async () => { 11 | const doc = await workspace.document; 12 | 13 | const code = await doFormat(context, outputChannel, doc.textDocument, undefined); 14 | if (!code) return; 15 | 16 | const edits = [TextEdit.replace(fullDocumentRange(doc.textDocument), code)]; 17 | if (edits) { 18 | await doc.applyEdits(edits); 19 | } 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /src/commands/pintFix.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, OutputChannel, TextEdit, workspace } from 'coc.nvim'; 2 | import { fullDocumentRange } from '../common'; 3 | import { doFormat } from '../engines/pintEngine'; 4 | 5 | export function activate(context: ExtensionContext, outputChannel: OutputChannel) { 6 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.pintFix', runFixCommand(context, outputChannel))); 7 | } 8 | 9 | function runFixCommand(context: ExtensionContext, outputChannel: OutputChannel) { 10 | return async () => { 11 | const doc = await workspace.document; 12 | 13 | const code = await doFormat(context, outputChannel, doc.textDocument, undefined); 14 | if (!code) return; 15 | 16 | const edits = [TextEdit.replace(fullDocumentRange(doc.textDocument), code)]; 17 | if (edits) { 18 | await doc.applyEdits(edits); 19 | } 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | async function start(watch) { 3 | await require('esbuild').build({ 4 | entryPoints: ['src/index.ts'], 5 | bundle: true, 6 | watch, 7 | minify: process.env.NODE_ENV === 'production', 8 | sourcemap: process.env.NODE_ENV === 'development', 9 | mainFields: ['module', 'main'], 10 | external: ['coc.nvim'], 11 | platform: 'node', 12 | target: 'node14.14', 13 | outfile: 'lib/index.js', 14 | }); 15 | } 16 | 17 | let watch = false; 18 | if (process.argv.length > 2 && process.argv[2] === '--watch') { 19 | console.log('watching...'); 20 | watch = { 21 | onRebuild(error) { 22 | if (error) { 23 | console.error('watch build failed:', error); 24 | } else { 25 | console.log('watch build succeeded'); 26 | } 27 | }, 28 | }; 29 | } 30 | 31 | start(watch).catch((e) => { 32 | console.error(e); 33 | }); 34 | -------------------------------------------------------------------------------- /src/commands/pintDownload.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, window } from 'coc.nvim'; 2 | import { download } from '../downloaders/pintDownloader'; 3 | 4 | export function activate(context: ExtensionContext) { 5 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.pintDownload', runDownloadCommand(context))); 6 | } 7 | 8 | function runDownloadCommand(context: ExtensionContext) { 9 | return async () => { 10 | await downloadWrapper(context); 11 | }; 12 | } 13 | 14 | async function downloadWrapper(context: ExtensionContext) { 15 | let msg = 'Do you want to download "pint"?'; 16 | const ret = await window.showPrompt(msg); 17 | if (ret) { 18 | try { 19 | await download(context); 20 | commands.executeCommand('editor.action.restart'); 21 | } catch (e) { 22 | console.error(e); 23 | msg = 'Download pint failed, you can get it from https://github.com/laravel/pint/releases'; 24 | window.showErrorMessage(msg); 25 | return; 26 | } 27 | } else { 28 | return; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/statusBar.ts: -------------------------------------------------------------------------------- 1 | import { events, ExtensionContext, window, workspace } from 'coc.nvim'; 2 | 3 | export async function activate(context: ExtensionContext) { 4 | const statusBar = window.createStatusBarItem(99); 5 | 6 | updateStatusBar(); 7 | 8 | events.on( 9 | 'BufEnter', 10 | async () => { 11 | updateStatusBar(); 12 | }, 13 | null, 14 | context.subscriptions 15 | ); 16 | 17 | async function updateStatusBar() { 18 | const { document } = await workspace.getCurrentState(); 19 | if (!workspace.getConfiguration('php-cs-fixer').get('enable')) { 20 | statusBar.hide(); 21 | } else if (['php'].includes(document.languageId)) { 22 | const activateTool = workspace.getConfiguration('php-cs-fixer').get('activateTool', 'php-cs-fixer'); 23 | if (activateTool === 'php-cs-fixer') { 24 | statusBar.text = 'PhpCsFixer'; 25 | statusBar.show(); 26 | } else if (activateTool === 'pint') { 27 | statusBar.text = 'Pint'; 28 | statusBar.show(); 29 | } 30 | } else { 31 | statusBar.hide(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 yaegassy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/commands/pcfDownload.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, window, workspace } from 'coc.nvim'; 2 | import { download } from '../downloaders/pcfDownloader'; 3 | 4 | export function activate(context: ExtensionContext) { 5 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.download', runDownloadCommand(context))); 6 | } 7 | 8 | function runDownloadCommand(context: ExtensionContext) { 9 | return async () => { 10 | const downloadMajorVersion = workspace.getConfiguration('php-cs-fixer').get('downloadMajorVersion', 3); 11 | await downloadWrapper(context, downloadMajorVersion); 12 | }; 13 | } 14 | 15 | async function downloadWrapper(context: ExtensionContext, downloadMajorVersion: number) { 16 | let msg = 'Do you want to download "php-cs-fixer"?'; 17 | const ret = await window.showPrompt(msg); 18 | if (ret) { 19 | try { 20 | await download(context, downloadMajorVersion); 21 | commands.executeCommand('editor.action.restart'); 22 | } catch (e) { 23 | console.error(e); 24 | msg = 'Download php-cs-fixer failed, you can get it from https://github.com/FriendsOfPHP/PHP-CS-Fixer'; 25 | window.showErrorMessage(msg); 26 | return; 27 | } 28 | } else { 29 | return; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/documentFormats/pcfFix.ts: -------------------------------------------------------------------------------- 1 | import { 2 | DocumentFormattingEditProvider, 3 | DocumentSelector, 4 | ExtensionContext, 5 | languages, 6 | OutputChannel, 7 | Range, 8 | TextDocument, 9 | TextEdit, 10 | workspace, 11 | } from 'coc.nvim'; 12 | import { fullDocumentRange } from '../common'; 13 | import { doFormat } from '../engines/pcfEngine'; 14 | 15 | export function activate(context: ExtensionContext, outputChannel: OutputChannel) { 16 | if (workspace.getConfiguration('php-cs-fixer').get('enableFormatProvider', true)) { 17 | const languageSelector: DocumentSelector = [{ language: 'php', scheme: 'file' }]; 18 | const priority = 1; 19 | 20 | context.subscriptions.push( 21 | languages.registerDocumentFormatProvider( 22 | languageSelector, 23 | new PcfFixFormattingEditProvider(context, outputChannel), 24 | priority 25 | ) 26 | ); 27 | } 28 | } 29 | 30 | class PcfFixFormattingEditProvider implements DocumentFormattingEditProvider { 31 | public _context: ExtensionContext; 32 | public _outputChannel: OutputChannel; 33 | 34 | constructor(context: ExtensionContext, outputChannel: OutputChannel) { 35 | this._context = context; 36 | this._outputChannel = outputChannel; 37 | } 38 | 39 | public provideDocumentFormattingEdits(document: TextDocument): Promise { 40 | return this._provideEdits(document, undefined); 41 | } 42 | 43 | private async _provideEdits(document: TextDocument, range?: Range): Promise { 44 | const code = await doFormat(this._context, this._outputChannel, document, range); 45 | if (!code) return []; 46 | if (!range) { 47 | range = fullDocumentRange(document); 48 | } 49 | return [TextEdit.replace(range, code)]; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/documentFormats/pintFix.ts: -------------------------------------------------------------------------------- 1 | import { 2 | DocumentFormattingEditProvider, 3 | DocumentSelector, 4 | ExtensionContext, 5 | languages, 6 | OutputChannel, 7 | Range, 8 | TextDocument, 9 | TextEdit, 10 | workspace, 11 | } from 'coc.nvim'; 12 | import { fullDocumentRange } from '../common'; 13 | import { doFormat } from '../engines/pintEngine'; 14 | 15 | export function activate(context: ExtensionContext, outputChannel: OutputChannel) { 16 | if (workspace.getConfiguration('php-cs-fixer').get('enableFormatProvider', true)) { 17 | const languageSelector: DocumentSelector = [{ language: 'php', scheme: 'file' }]; 18 | const priority = 1; 19 | 20 | context.subscriptions.push( 21 | languages.registerDocumentFormatProvider( 22 | languageSelector, 23 | new PintFixFormattingEditProvider(context, outputChannel), 24 | priority 25 | ) 26 | ); 27 | } 28 | } 29 | 30 | class PintFixFormattingEditProvider implements DocumentFormattingEditProvider { 31 | public _context: ExtensionContext; 32 | public _outputChannel: OutputChannel; 33 | 34 | constructor(context: ExtensionContext, outputChannel: OutputChannel) { 35 | this._context = context; 36 | this._outputChannel = outputChannel; 37 | } 38 | 39 | public provideDocumentFormattingEdits(document: TextDocument): Promise { 40 | return this._provideEdits(document, undefined); 41 | } 42 | 43 | private async _provideEdits(document: TextDocument, range?: Range): Promise { 44 | const code = await doFormat(this._context, this._outputChannel, document, range); 45 | if (!code) return []; 46 | if (!range) { 47 | range = fullDocumentRange(document); 48 | } 49 | return [TextEdit.replace(range, code)]; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/actions/pcfFix.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CodeAction, 3 | CodeActionContext, 4 | CodeActionProvider, 5 | Command, 6 | Document, 7 | DocumentSelector, 8 | ExtensionContext, 9 | languages, 10 | Range, 11 | TextDocument, 12 | workspace, 13 | } from 'coc.nvim'; 14 | 15 | export function activate(context: ExtensionContext) { 16 | const documentSelector: DocumentSelector = [{ language: 'php', scheme: 'file' }]; 17 | 18 | if (workspace.getConfiguration('php-cs-fixer').get('enableActionProvider', true)) { 19 | context.subscriptions.push( 20 | languages.registerCodeActionProvider(documentSelector, new PcfFixCodeActionProvider(), 'php-cs-fixer') 21 | ); 22 | } 23 | } 24 | 25 | export class PcfFixCodeActionProvider implements CodeActionProvider { 26 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 27 | public async provideCodeActions(document: TextDocument, range: Range, context: CodeActionContext) { 28 | const codeActions: CodeAction[] = []; 29 | if (document.languageId !== 'php') return; 30 | const doc = workspace.getDocument(document.uri); 31 | 32 | if (this.wholeRange(doc, range)) { 33 | const title = `Run: php-cs-fixer.fix`; 34 | const command: Command = { 35 | title: '', 36 | command: 'php-cs-fixer.fix', 37 | }; 38 | 39 | const action: CodeAction = { 40 | title, 41 | command, 42 | }; 43 | 44 | codeActions.push(action); 45 | } 46 | 47 | return codeActions; 48 | } 49 | 50 | private wholeRange(doc: Document, range: Range): boolean { 51 | const whole = Range.create(0, 0, doc.lineCount, 0); 52 | return ( 53 | whole.start.line === range.start.line && 54 | whole.start.character === range.start.character && 55 | whole.end.line === range.end.line && 56 | whole.end.character === whole.end.character 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/actions/pintFix.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CodeAction, 3 | CodeActionContext, 4 | CodeActionProvider, 5 | Command, 6 | Document, 7 | DocumentSelector, 8 | ExtensionContext, 9 | languages, 10 | Range, 11 | TextDocument, 12 | workspace, 13 | } from 'coc.nvim'; 14 | 15 | export function activate(context: ExtensionContext) { 16 | const documentSelector: DocumentSelector = [{ language: 'php', scheme: 'file' }]; 17 | 18 | if (workspace.getConfiguration('php-cs-fixer').get('enableActionProvider', true)) { 19 | context.subscriptions.push( 20 | languages.registerCodeActionProvider(documentSelector, new PintFixCodeActionProvider(), 'php-cs-fixer') 21 | ); 22 | } 23 | } 24 | 25 | export class PintFixCodeActionProvider implements CodeActionProvider { 26 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 27 | public async provideCodeActions(document: TextDocument, range: Range, context: CodeActionContext) { 28 | const codeActions: CodeAction[] = []; 29 | if (document.languageId !== 'php') return; 30 | const doc = workspace.getDocument(document.uri); 31 | 32 | if (this.wholeRange(doc, range)) { 33 | const title = `Run: php-cs-fixer.pintFix`; 34 | const command: Command = { 35 | title: '', 36 | command: 'php-cs-fixer.pintFix', 37 | }; 38 | 39 | const action: CodeAction = { 40 | title, 41 | command, 42 | }; 43 | 44 | codeActions.push(action); 45 | } 46 | 47 | return codeActions; 48 | } 49 | 50 | private wholeRange(doc: Document, range: Range): boolean { 51 | const whole = Range.create(0, 0, doc.lineCount, 0); 52 | return ( 53 | whole.start.line === range.start.line && 54 | whole.start.character === range.start.character && 55 | whole.end.line === range.end.line && 56 | whole.end.character === whole.end.character 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/downloaders/pintDownloader.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, window } from 'coc.nvim'; 2 | import { randomBytes } from 'crypto'; 3 | import { createWriteStream, promises as fs } from 'fs'; 4 | import { HttpsProxyAgent } from 'https-proxy-agent'; 5 | import fetch from 'node-fetch'; 6 | import path from 'path'; 7 | import stream from 'stream'; 8 | import util from 'util'; 9 | 10 | const pipeline = util.promisify(stream.pipeline); 11 | const agent = process.env.https_proxy ? new HttpsProxyAgent(process.env.https_proxy as string) : null; 12 | 13 | export async function download(context: ExtensionContext): Promise { 14 | const statusItem = window.createStatusBarItem(0, { progress: true }); 15 | statusItem.text = `Downloading pint`; 16 | statusItem.show(); 17 | 18 | const downloadUrl = 'https://github.com/laravel/pint/releases/latest/download/pint.phar'; 19 | 20 | // @ts-ignore 21 | const resp = await fetch(downloadUrl, { agent }); 22 | if (!resp.ok) { 23 | statusItem.hide(); 24 | throw new Error('Download failed'); 25 | } 26 | 27 | let cur = 0; 28 | const len = Number(resp.headers.get('content-length')); 29 | resp.body.on('data', (chunk: Buffer) => { 30 | cur += chunk.length; 31 | const p = ((cur / len) * 100).toFixed(2); 32 | statusItem.text = `${p}% Downloading pint`; 33 | }); 34 | 35 | const _path = path.join(context.storagePath, 'pint'); 36 | const randomHex = randomBytes(5).toString('hex'); 37 | const tempFile = path.join(context.storagePath, `pint-${randomHex}`); 38 | 39 | const destFileStream = createWriteStream(tempFile, { mode: 0o755 }); 40 | await pipeline(resp.body, destFileStream); 41 | await new Promise((resolve) => { 42 | destFileStream.on('close', resolve); 43 | destFileStream.destroy(); 44 | setTimeout(resolve, 1000); 45 | }); 46 | 47 | await fs.unlink(_path).catch((err) => { 48 | if (err.code !== 'ENOENT') throw err; 49 | }); 50 | await fs.rename(tempFile, _path); 51 | 52 | statusItem.hide(); 53 | } 54 | -------------------------------------------------------------------------------- /src/downloaders/pcfDownloader.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, window } from 'coc.nvim'; 2 | import { randomBytes } from 'crypto'; 3 | import { createWriteStream, promises as fs } from 'fs'; 4 | import { HttpsProxyAgent } from 'https-proxy-agent'; 5 | import fetch from 'node-fetch'; 6 | import path from 'path'; 7 | import stream from 'stream'; 8 | import util from 'util'; 9 | 10 | const pipeline = util.promisify(stream.pipeline); 11 | const agent = process.env.https_proxy ? new HttpsProxyAgent(process.env.https_proxy as string) : null; 12 | 13 | export async function download(context: ExtensionContext, downloadMajorVersion: number): Promise { 14 | const statusItem = window.createStatusBarItem(0, { progress: true }); 15 | statusItem.text = `Downloading php-cs-fixer`; 16 | statusItem.show(); 17 | 18 | let downloadUrl = 'https://cs.symfony.com/download/php-cs-fixer-v3.phar'; 19 | if (typeof downloadMajorVersion === 'number') { 20 | if (downloadMajorVersion === 3) { 21 | downloadUrl = 'https://cs.symfony.com/download/php-cs-fixer-v3.phar'; 22 | } else if (downloadMajorVersion === 2) { 23 | downloadUrl = 'https://cs.symfony.com/download/php-cs-fixer-v2.phar'; 24 | } 25 | } 26 | 27 | // @ts-ignore 28 | const resp = await fetch(downloadUrl, { agent }); 29 | if (!resp.ok) { 30 | statusItem.hide(); 31 | throw new Error('Download failed'); 32 | } 33 | 34 | let cur = 0; 35 | const len = Number(resp.headers.get('content-length')); 36 | resp.body.on('data', (chunk: Buffer) => { 37 | cur += chunk.length; 38 | const p = ((cur / len) * 100).toFixed(2); 39 | statusItem.text = `${p}% Downloading php-cs-fixer`; 40 | }); 41 | 42 | const _path = path.join(context.storagePath, 'php-cs-fixer'); 43 | const randomHex = randomBytes(5).toString('hex'); 44 | const tempFile = path.join(context.storagePath, `php-cs-fixer-${randomHex}`); 45 | 46 | const destFileStream = createWriteStream(tempFile, { mode: 0o755 }); 47 | await pipeline(resp.body, destFileStream); 48 | await new Promise((resolve) => { 49 | destFileStream.on('close', resolve); 50 | destFileStream.destroy(); 51 | setTimeout(resolve, 1000); 52 | }); 53 | 54 | await fs.unlink(_path).catch((err) => { 55 | if (err.code !== 'ENOENT') throw err; 56 | }); 57 | await fs.rename(tempFile, _path); 58 | 59 | statusItem.hide(); 60 | } 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | _ref 3 | 4 | ### https://raw.github.com/github/gitignore/218a941be92679ce67d0484547e3e142b2f5f6f0/Node.gitignore 5 | 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # nyc test coverage 31 | .nyc_output 32 | 33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 34 | .grunt 35 | 36 | # Bower dependency directory (https://bower.io/) 37 | bower_components 38 | 39 | # node-waf configuration 40 | .lock-wscript 41 | 42 | # Compiled binary addons (https://nodejs.org/api/addons.html) 43 | build/Release 44 | 45 | # Dependency directories 46 | node_modules/ 47 | jspm_packages/ 48 | 49 | # Snowpack dependency directory (https://snowpack.dev/) 50 | web_modules/ 51 | 52 | # TypeScript cache 53 | *.tsbuildinfo 54 | 55 | # Optional npm cache directory 56 | .npm 57 | 58 | # Optional eslint cache 59 | .eslintcache 60 | 61 | # Microbundle cache 62 | .rpt2_cache/ 63 | .rts2_cache_cjs/ 64 | .rts2_cache_es/ 65 | .rts2_cache_umd/ 66 | 67 | # Optional REPL history 68 | .node_repl_history 69 | 70 | # Output of 'npm pack' 71 | *.tgz 72 | 73 | # Yarn Integrity file 74 | .yarn-integrity 75 | 76 | # dotenv environment variables file 77 | .env 78 | .env.test 79 | 80 | # parcel-bundler cache (https://parceljs.org/) 81 | .cache 82 | .parcel-cache 83 | 84 | # Next.js build output 85 | .next 86 | out 87 | 88 | # Nuxt.js build / generate output 89 | .nuxt 90 | dist 91 | 92 | # Gatsby files 93 | .cache/ 94 | # Comment in the public line in if your project uses Gatsby and not Next.js 95 | # https://nextjs.org/blog/next-9-1#public-directory-support 96 | # public 97 | 98 | # vuepress build output 99 | .vuepress/dist 100 | 101 | # Serverless directories 102 | .serverless/ 103 | 104 | # FuseBox cache 105 | .fusebox/ 106 | 107 | # DynamoDB Local files 108 | .dynamodb/ 109 | 110 | # TernJS port file 111 | .tern-port 112 | 113 | # Stores VSCode versions used for testing VSCode extensions 114 | .vscode-test 115 | 116 | # yarn v2 117 | .yarn/cache 118 | .yarn/unplugged 119 | .yarn/build-state.yml 120 | .yarn/install-state.gz 121 | .pnp.* 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/commands/pintTest.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, Terminal, Uri, window, workspace } from 'coc.nvim'; 2 | import { getPintPath, resolveConfigPath, isExistsPintConfigFileFromProjectRoot } from '../common'; 3 | 4 | let terminal: Terminal | undefined; 5 | 6 | export function activate(context: ExtensionContext) { 7 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.pintTest', pintTestCommand(context))); 8 | } 9 | 10 | async function runPintTest(context: ExtensionContext, filePath: string) { 11 | const pintBin = getPintPath(context); 12 | 13 | if (pintBin) { 14 | if (terminal) { 15 | if (terminal.bufnr) { 16 | await workspace.nvim.command(`bd! ${terminal.bufnr}`); 17 | } 18 | terminal.dispose(); 19 | terminal = undefined; 20 | } 21 | 22 | const cwd = workspace.root; 23 | terminal = await window.createTerminal({ name: 'pint-test', cwd }); 24 | 25 | const args: string[] = []; 26 | 27 | const extensionConfig = workspace.getConfiguration('php-cs-fixer'); 28 | const extensionPintConfig = extensionConfig.get('pint.config', ''); 29 | const preset = extensionConfig.get('pint.preset', 'laravel'); 30 | 31 | const existsPintConfigFile = isExistsPintConfigFileFromProjectRoot(); 32 | 33 | if (extensionPintConfig) { 34 | const resolvedPintConfig = resolveConfigPath(extensionPintConfig, cwd); 35 | args.push('--config=' + resolvedPintConfig); 36 | } else if (existsPintConfigFile) { 37 | // If the pint.json config file exists for the project root. 38 | // 39 | // ...noop 40 | } else { 41 | if (preset) { 42 | args.push(`--preset=${preset}`); 43 | } 44 | } 45 | 46 | args.push('--test'); 47 | args.push(`${filePath}`); 48 | 49 | terminal.sendText(`${pintBin} ${args.join(' ')}`); 50 | 51 | const enableSplitRight = workspace 52 | .getConfiguration('php-cs-fixer') 53 | .get('terminal.enableSplitRight', false); 54 | 55 | if (enableSplitRight) terminal.hide(); 56 | await workspace.nvim.command('stopinsert'); 57 | if (enableSplitRight) { 58 | await workspace.nvim.command(`vert bel sb ${terminal.bufnr}`); 59 | await workspace.nvim.command(`wincmd p`); 60 | } 61 | } else { 62 | return window.showErrorMessage('pint not found!'); 63 | } 64 | } 65 | 66 | export function pintTestCommand(context: ExtensionContext) { 67 | return async () => { 68 | const { document } = await workspace.getCurrentState(); 69 | const filePath = Uri.parse(document.uri).fsPath; 70 | 71 | if (document.languageId !== 'php') { 72 | return window.showErrorMessage('This file is not a PHP file!'); 73 | } 74 | 75 | runPintTest(context, filePath); 76 | }; 77 | } 78 | -------------------------------------------------------------------------------- /src/common.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, Range, TextDocument, window, workspace } from 'coc.nvim'; 2 | 3 | import fs from 'fs'; 4 | import path from 'path'; 5 | 6 | export function fullDocumentRange(document: TextDocument): Range { 7 | const lastLineId = document.lineCount - 1; 8 | const doc = workspace.getDocument(document.uri); 9 | 10 | return Range.create({ character: 0, line: 0 }, { character: doc.getline(lastLineId).length, line: lastLineId }); 11 | } 12 | 13 | export function getPcfPath(context: ExtensionContext) { 14 | // 1. User setting php-cs-fixer 15 | let toolPath = workspace.getConfiguration('php-cs-fixer').get('toolPath', ''); 16 | if (!toolPath) { 17 | if (fs.existsSync(path.join(workspace.root, 'vendor', 'bin', 'php-cs-fixer'))) { 18 | // 2. vendor/bin/php-cs-fixer 19 | toolPath = path.join(workspace.root, 'vendor', 'bin', 'php-cs-fixer'); 20 | } else if (fs.existsSync(path.join(context.storagePath, 'php-cs-fixer'))) { 21 | // 3. builtin php-cs-fixer 22 | toolPath = path.join(context.storagePath, 'php-cs-fixer'); 23 | } 24 | } 25 | 26 | return toolPath; 27 | } 28 | 29 | export function getPintPath(context: ExtensionContext) { 30 | // 1. User setting pint 31 | let toolPath = workspace.getConfiguration('php-cs-fixer').get('pint.toolPath', ''); 32 | if (!toolPath) { 33 | if (fs.existsSync(path.join(workspace.root, 'vendor', 'bin', 'pint'))) { 34 | // 2. vendor/bin/pint 35 | toolPath = path.join(workspace.root, 'vendor', 'bin', 'pint'); 36 | } else if (fs.existsSync(path.join(context.storagePath, 'pint'))) { 37 | // 3. builtin pint 38 | toolPath = path.join(context.storagePath, 'pint'); 39 | } 40 | } 41 | return toolPath; 42 | } 43 | 44 | export function resolveConfigPath(configPath: string, cwd: string) { 45 | if (!path.isAbsolute(configPath)) { 46 | let currentPath = cwd; 47 | const triedPaths = [currentPath]; 48 | while (!fs.existsSync(currentPath + path.sep + configPath)) { 49 | const lastPath = currentPath; 50 | currentPath = path.dirname(currentPath); 51 | if (lastPath == currentPath) { 52 | window.showErrorMessage(`Unable to find ${configPath} file in ${triedPaths.join(', ')}`); 53 | return ''; 54 | } else { 55 | triedPaths.push(currentPath); 56 | } 57 | } 58 | configPath = currentPath + path.sep + configPath; 59 | } 60 | return configPath; 61 | } 62 | 63 | export function isExistsFixerConfigFileFromProjectRoot() { 64 | return ( 65 | fs.existsSync(path.join(workspace.root, '.php-cs-fixer.php')) || 66 | fs.existsSync(path.join(workspace.root, '.php-cs-fixer.dist.php')) 67 | ); 68 | } 69 | 70 | export function isExistsPintConfigFileFromProjectRoot() { 71 | return fs.existsSync(path.join(workspace.root, 'pint.json')); 72 | } 73 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, window, workspace } from 'coc.nvim'; 2 | 3 | import fs from 'fs'; 4 | 5 | import * as pcfFixCodeActionFeature from './actions/pcfFix'; 6 | import * as pintFixCodeActionFeature from './actions/pintFix'; 7 | import * as pcfDownloadCommandFeature from './commands/pcfDownload'; 8 | import * as pcfDryRunDiffCommandFeature from './commands/pcfDryRunDiff'; 9 | import * as pcfFixCommandFeature from './commands/pcfFix'; 10 | import * as pintDonwloadCommandFeature from './commands/pintDownload'; 11 | import * as pintFixCommandFeature from './commands/pintFix'; 12 | import * as pintTestCommandFeature from './commands/pintTest'; 13 | import * as showOutputCommandFeature from './commands/showOutput'; 14 | import { getPcfPath, getPintPath } from './common'; 15 | import * as pcfFixDocumentFormatFeature from './documentFormats/pcfFix'; 16 | import * as pintFixDocumentFormatFeature from './documentFormats/pintFix'; 17 | import * as statusBarFeature from './statusBar'; 18 | 19 | export async function activate(context: ExtensionContext): Promise { 20 | if (!workspace.getConfiguration('php-cs-fixer').get('enable', true)) return; 21 | 22 | const extensionStoragePath = context.storagePath; 23 | if (!fs.existsSync(extensionStoragePath)) { 24 | fs.mkdirSync(extensionStoragePath); 25 | } 26 | 27 | const outputChannel = window.createOutputChannel('php-cs-fixer'); 28 | showOutputCommandFeature.activate(context, outputChannel); 29 | pcfDownloadCommandFeature.activate(context); 30 | pintDonwloadCommandFeature.activate(context); 31 | 32 | const activateTool = workspace.getConfiguration('php-cs-fixer').get('activateTool', 'php-cs-fixer'); 33 | 34 | let toolPath: string | undefined; 35 | if (activateTool === 'php-cs-fixer') { 36 | toolPath = getPcfPath(context); 37 | if (workspace.getConfiguration('php-cs-fixer').get('downloadCheckOnStartup', true)) { 38 | if (!toolPath) { 39 | commands.executeCommand('php-cs-fixer.download'); 40 | } 41 | } 42 | } else if (activateTool === 'pint') { 43 | toolPath = getPintPath(context); 44 | if (workspace.getConfiguration('php-cs-fixer').get('downloadCheckOnStartup', true)) { 45 | if (!toolPath) { 46 | commands.executeCommand('php-cs-fixer.pintDownload'); 47 | } 48 | } 49 | } 50 | if (!toolPath) return; 51 | 52 | if (activateTool === 'php-cs-fixer') { 53 | pcfFixCommandFeature.activate(context, outputChannel); 54 | pcfDryRunDiffCommandFeature.activate(context); 55 | pcfFixDocumentFormatFeature.activate(context, outputChannel); 56 | pcfFixCodeActionFeature.activate(context); 57 | } else if (activateTool === 'pint') { 58 | pintFixCommandFeature.activate(context, outputChannel); 59 | pintTestCommandFeature.activate(context); 60 | pintFixDocumentFormatFeature.activate(context, outputChannel); 61 | pintFixCodeActionFeature.activate(context); 62 | } 63 | 64 | if (activateTool === 'php-cs-fixer' || activateTool === 'pint') statusBarFeature.activate(context); 65 | } 66 | -------------------------------------------------------------------------------- /src/engines/pintEngine.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, OutputChannel, Range, TextDocument, Uri, window, workspace } from 'coc.nvim'; 2 | 3 | import cp from 'child_process'; 4 | import fs from 'fs'; 5 | import tmp from 'tmp'; 6 | import { getPintPath, isExistsPintConfigFileFromProjectRoot, resolveConfigPath } from '../common'; 7 | 8 | export async function doFormat( 9 | context: ExtensionContext, 10 | outputChannel: OutputChannel, 11 | document: TextDocument, 12 | range?: Range 13 | ): Promise { 14 | if (document.languageId !== 'php') { 15 | window.showErrorMessage(`php-cs-fixer.pint cannot run, not a php file`); 16 | return; 17 | } 18 | 19 | const extensionConfig = workspace.getConfiguration('php-cs-fixer'); 20 | const extensionPintConfig = extensionConfig.get('pint.config', ''); 21 | const preset = extensionConfig.get('pint.preset', 'laravel'); 22 | 23 | const toolPath = getPintPath(context); 24 | if (!toolPath) { 25 | window.showErrorMessage(`Unable to find the pint tool.`); 26 | return; 27 | } 28 | 29 | const text = document.getText(range); 30 | const args: string[] = []; 31 | const cwd = Uri.file(workspace.root).fsPath; 32 | 33 | const opts = { cwd, shell: true }; 34 | 35 | args.push(toolPath); 36 | 37 | const existsPintConfigFile = isExistsPintConfigFileFromProjectRoot(); 38 | 39 | if (extensionPintConfig) { 40 | const resolvedPintConfig = resolveConfigPath(extensionPintConfig, opts.cwd); 41 | args.push('--config=' + resolvedPintConfig); 42 | } else if (existsPintConfigFile) { 43 | // If the pint.json config file exists for the project root. 44 | // 45 | // ...noop 46 | } else { 47 | if (preset) { 48 | args.push(`--preset=${preset}`); 49 | } 50 | } 51 | 52 | const tmpFile = tmp.fileSync(); 53 | fs.writeFileSync(tmpFile.name, text); 54 | 55 | // ---- Output the command to be executed to channel log. ---- 56 | outputChannel.appendLine(`${'#'.repeat(10)} pint\n`); 57 | outputChannel.appendLine(`Run: php ${args.join(' ')} ${tmpFile.name}`); 58 | outputChannel.appendLine(`Opts: ${JSON.stringify(opts)}`); 59 | outputChannel.appendLine(`ResolveExtensionConfig: ${extensionPintConfig ? extensionPintConfig : 'not setting'}`); 60 | outputChannel.appendLine(`PintConfigFile(ProjectRoot): ${existsPintConfigFile ? 'exist' : 'not exist'}\n`); 61 | 62 | return new Promise(function (resolve) { 63 | cp.execFile('php', [...args, tmpFile.name], opts, function (err, stdout, stderr) { 64 | if (err) { 65 | tmpFile.removeCallback(); 66 | 67 | if (err.code === 'ENOENT') { 68 | window.showErrorMessage('Unable to find the pint tool.'); 69 | throw err; 70 | } 71 | 72 | outputChannel.appendLine(`==== Err ====\n`); 73 | outputChannel.appendLine(`Code: ${err.code ? JSON.stringify(err.code) : 'none'}`); 74 | outputChannel.appendLine(`Message: ${JSON.stringify(err.message)}`); 75 | outputChannel.appendLine(`Stdout: ${JSON.stringify(stdout)}`); 76 | outputChannel.appendLine(`Stderr: ${JSON.stringify(stderr)}\n`); 77 | return; 78 | } 79 | 80 | const text = fs.readFileSync(tmpFile.name, 'utf-8'); 81 | tmpFile.removeCallback(); 82 | 83 | resolve(text); 84 | }); 85 | }); 86 | } 87 | -------------------------------------------------------------------------------- /src/commands/pcfDryRunDiff.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, Terminal, Uri, window, workspace } from 'coc.nvim'; 2 | import { getPcfPath, isExistsFixerConfigFileFromProjectRoot, resolveConfigPath } from '../common'; 3 | 4 | interface ProcessEnv { 5 | [key: string]: string | null; 6 | } 7 | 8 | let terminal: Terminal | undefined; 9 | 10 | export function activate(context: ExtensionContext) { 11 | context.subscriptions.push(commands.registerCommand('php-cs-fixer.dryRunDiff', pcfDryRunDiffCommand(context))); 12 | } 13 | 14 | async function runPcfDryRunDiff(context: ExtensionContext, filePath: string) { 15 | const pcfBin = getPcfPath(context); 16 | 17 | if (pcfBin) { 18 | if (terminal) { 19 | if (terminal.bufnr) { 20 | await workspace.nvim.command(`bd! ${terminal.bufnr}`); 21 | } 22 | terminal.dispose(); 23 | terminal = undefined; 24 | } 25 | 26 | const extensionConfig = workspace.getConfiguration('php-cs-fixer'); 27 | const isUseCache = extensionConfig.get('useCache', false); 28 | const isAllowRisky = extensionConfig.get('allowRisky', true); 29 | const extensionFixerConfig = extensionConfig.get('config', ''); 30 | const fixerRules = extensionConfig.get('rules', '@PSR12'); 31 | const enableIgnoreEnv = extensionConfig.get('enableIgnoreEnv', false); 32 | 33 | const existsFixerConfigFile = isExistsFixerConfigFileFromProjectRoot(); 34 | 35 | const cwd = workspace.root; 36 | let env: ProcessEnv | undefined = undefined; 37 | if (enableIgnoreEnv) { 38 | env = { 39 | ...process.env, 40 | PHP_CS_FIXER_IGNORE_ENV: '1', 41 | }; 42 | } 43 | 44 | terminal = await window.createTerminal({ name: 'pcf-dry-run-diff', cwd, env }); 45 | 46 | const args: string[] = []; 47 | 48 | if (extensionFixerConfig) { 49 | const resolvedFixerConfig = resolveConfigPath(extensionFixerConfig, cwd); 50 | args.push('--config=' + resolvedFixerConfig); 51 | } else if (existsFixerConfigFile) { 52 | // If the pint.json config file exists for the project root. 53 | // 54 | // ...noop 55 | } else { 56 | if (!isUseCache) { 57 | args.push('--using-cache=no'); 58 | } 59 | if (isAllowRisky) { 60 | args.push('--allow-risky=yes'); 61 | } 62 | if (fixerRules) { 63 | args.push(`--rules='${fixerRules}'`); 64 | } 65 | } 66 | 67 | args.push('fix'); 68 | args.push(filePath); 69 | args.push('--dry-run'); 70 | args.push('--diff'); 71 | 72 | terminal.sendText(`${pcfBin} ${args.join(' ')}`); 73 | 74 | const enableSplitRight = workspace 75 | .getConfiguration('php-cs-fixer') 76 | .get('terminal.enableSplitRight', false); 77 | 78 | if (enableSplitRight) terminal.hide(); 79 | await workspace.nvim.command('stopinsert'); 80 | if (enableSplitRight) { 81 | await workspace.nvim.command(`vert bel sb ${terminal.bufnr}`); 82 | await workspace.nvim.command(`wincmd p`); 83 | } 84 | } else { 85 | return window.showErrorMessage('php-cs-fixer not found!'); 86 | } 87 | } 88 | 89 | export function pcfDryRunDiffCommand(context: ExtensionContext) { 90 | return async () => { 91 | const { document } = await workspace.getCurrentState(); 92 | const filePath = Uri.parse(document.uri).fsPath; 93 | 94 | if (document.languageId !== 'php') { 95 | return window.showErrorMessage('This file is not a PHP file!'); 96 | } 97 | 98 | runPcfDryRunDiff(context, filePath); 99 | }; 100 | } 101 | -------------------------------------------------------------------------------- /src/engines/pcfEngine.ts: -------------------------------------------------------------------------------- 1 | import { ExtensionContext, OutputChannel, Range, TextDocument, Uri, window, workspace } from 'coc.nvim'; 2 | 3 | import cp from 'child_process'; 4 | import fs from 'fs'; 5 | import path from 'path'; 6 | import tmp from 'tmp'; 7 | import { getPcfPath, isExistsFixerConfigFileFromProjectRoot, resolveConfigPath } from '../common'; 8 | 9 | interface ProcessEnv { 10 | [key: string]: string | undefined; 11 | } 12 | 13 | export async function doFormat( 14 | context: ExtensionContext, 15 | outputChannel: OutputChannel, 16 | document: TextDocument, 17 | range?: Range 18 | ): Promise { 19 | if (document.languageId !== 'php') { 20 | window.showErrorMessage(`php-cs-fixer.fix cannot run, not a php file`); 21 | return; 22 | } 23 | 24 | const filepath = Uri.parse(document.uri).fsPath; 25 | const filename = path.basename(filepath); 26 | 27 | if (filename === '.php-cs-fixer.php' || filename === '.php-cs-fixer.dist.php') { 28 | window.showWarningMessage(`php-cs-fixer config file is excluded from the formatting process.`); 29 | return; 30 | } 31 | 32 | const extensionConfig = workspace.getConfiguration('php-cs-fixer'); 33 | 34 | const isUseCache = extensionConfig.get('useCache', false); 35 | const isAllowRisky = extensionConfig.get('allowRisky', true); 36 | const extensionFixerConfig = extensionConfig.get('config', ''); 37 | const fixerRules = extensionConfig.get('rules', '@PSR12'); 38 | const enableIgnoreEnv = extensionConfig.get('enableIgnoreEnv', false); 39 | 40 | const toolPath = getPcfPath(context); 41 | if (!toolPath) { 42 | window.showErrorMessage(`Unable to find the php-cs-fixer tool.`); 43 | return; 44 | } 45 | 46 | const text = document.getText(range); 47 | const args: string[] = []; 48 | const cwd = Uri.file(workspace.root).fsPath; 49 | 50 | let env: ProcessEnv | undefined = undefined; 51 | if (enableIgnoreEnv) { 52 | env = { 53 | ...process.env, 54 | PHP_CS_FIXER_IGNORE_ENV: '1', 55 | }; 56 | } 57 | const opts = { cwd, shell: true, env }; 58 | 59 | args.push(toolPath); 60 | args.push('fix'); 61 | 62 | const existsFixerConfigFile = isExistsFixerConfigFileFromProjectRoot(); 63 | 64 | if (extensionFixerConfig) { 65 | const resolvedFixerConfig = resolveConfigPath(extensionFixerConfig, opts.cwd); 66 | args.push('--config=' + resolvedFixerConfig); 67 | } else if (existsFixerConfigFile) { 68 | // If the php-cs-fixer config file exists for the project root. 69 | // 70 | // ...noop 71 | } else { 72 | if (!isUseCache) { 73 | args.push('--using-cache=no'); 74 | } 75 | if (isAllowRisky) { 76 | args.push('--allow-risky=yes'); 77 | } 78 | if (fixerRules) { 79 | args.push(`--rules='${fixerRules}'`); 80 | } 81 | } 82 | 83 | const tmpFile = tmp.fileSync(); 84 | fs.writeFileSync(tmpFile.name, text); 85 | 86 | // ---- Output the command to be executed to channel log. ---- 87 | outputChannel.appendLine(`${'#'.repeat(10)} php-cs-fixer\n`); 88 | outputChannel.appendLine(`Run: php ${args.join(' ')} ${tmpFile.name}`); 89 | outputChannel.appendLine(`Opts: ${JSON.stringify(opts)}`); 90 | outputChannel.appendLine(`ResolveExtensionConfig: ${extensionFixerConfig ? extensionFixerConfig : 'not setting'}`); 91 | outputChannel.appendLine(`FixerConfigFile(ProjectRoot): ${existsFixerConfigFile ? 'exist' : 'not exist'}\n`); 92 | 93 | return new Promise(function (resolve) { 94 | cp.execFile('php', [...args, tmpFile.name], opts, function (err, stdout, stderr) { 95 | if (err) { 96 | tmpFile.removeCallback(); 97 | 98 | if (err.code === 'ENOENT') { 99 | window.showErrorMessage('Unable to find the php-cs-fixer tool.'); 100 | throw err; 101 | } 102 | 103 | outputChannel.appendLine(`==== Err ====\n`); 104 | outputChannel.appendLine(`Code: ${err.code ? JSON.stringify(err.code) : 'none'}`); 105 | outputChannel.appendLine(`Message: ${JSON.stringify(err.message)}`); 106 | outputChannel.appendLine(`Stdout: ${JSON.stringify(stdout)}`); 107 | outputChannel.appendLine(`Stderr: ${JSON.stringify(stderr)}\n`); 108 | return; 109 | } 110 | 111 | const text = fs.readFileSync(tmpFile.name, 'utf-8'); 112 | tmpFile.removeCallback(); 113 | 114 | resolve(text); 115 | }); 116 | }); 117 | } 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # coc-php-cs-fixer 2 | 3 | [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PHP Coding Standards Fixer) and [Laravel Pint](https://github.com/laravel/pint) extension for [coc.nvim](https://github.com/neoclide/coc.nvim) 4 | 5 | ## Install 6 | 7 | `:CocInstall coc-php-cs-fixer` 8 | 9 | ## Features 10 | 11 | `php-cs-fixer` and `laravel/pint` are supported. 12 | 13 | - Formatter 14 | - Command 15 | - Code Action 16 | - Status Bar 17 | - `pint.json` Auto Completion and JSON validation 18 | - Downloader 19 | 20 | ## Note 21 | 22 | The formatter tool used is `php-cs-fixer` by default. If you want to use `laravel/pint`, change the `php-cs-fixer.activateTool` setting in `coc-settings.json`. 23 | 24 | ```json 25 | { 26 | "php-cs-fixer.activateTool": "pint" 27 | } 28 | ``` 29 | 30 | - [DEMO](https://github.com/yaegassy/coc-php-cs-fixer/pull/7#issue-1293669659) 31 | 32 | --- 33 | 34 | Detects the `php-cs-fixer` or `pint` tool. They are prioritized in order from the top. 35 | 36 | 1. `php-cs-fixer.toolPath` or `php-cs-fixer.pint.toolPath` 37 | 1. `vendor/bin/php-cs-fixer` or `vendor/bin/pint` 38 | 1. `php-cs-fixer` or `pint` retrieved by the download feature (`:CocCommand php-cs-fixer.download` or `php-cs-fixer.pintDownload`) 39 | - **php-cs-fixer**: 40 | - Mac/Linux: `~/.config/coc/extensions/coc-php-cs-fixer-data/php-cs-fixer` 41 | - Windows: `~/AppData/Local/coc/extensions/coc-php-cs-fixer-data/php-cs-fixer` 42 | - **pint**: 43 | - Mac/Linux: `~/.config/coc/extensions/coc-php-cs-fixer-data/pint` 44 | - Windows: `~/AppData/Local/coc/extensions/coc-php-cs-fixer-data/pint` 45 | 46 | If "1" and "2" above are not detected, the download feature will be executed (The prompt will be displayed) 47 | 48 | ## Usage 49 | 50 | `coc-php-cs-fixer` can be executed in multiple ways. 51 | 52 | ### Auto run when saving a file 53 | 54 | Add the settings to `coc-settings.json`. 55 | 56 | ```jsonc 57 | { 58 | "[php]": { 59 | "coc.preferences.formatOnSave": true 60 | }, 61 | } 62 | ``` 63 | 64 | If the file size is large or the tool (`php-cs-fixer` or `pint`) is slow in your environment, formatting may not work properly when saving. In coc.nvim, time-consuming formatting on save is canceled. 65 | 66 | In that case, please perform the formatting in another way. 67 | 68 | ### Run from CocCommand 69 | 70 | - If the `php-cs-fixer.activateTool` setting is `php-cs-fixer` 71 | - `:CocCommand php-cs-fixer.fix` 72 | - If the `php-cs-fixer.activateTool` setting is `pint` 73 | - `:CocCommand php-cs-fixer.pintFix` 74 | 75 | ### Run formatting from call function 76 | 77 | - `:call CocAction('format')` 78 | 79 | ### Run codeAction from call function 80 | 81 | - `:call CocAction('codeAction')` 82 | - If the `php-cs-fixer.activateTool` setting is `php-cs-fixer` 83 | - Choose action: `"Run: php-cs-fixer.fix"` 84 | - If the `php-cs-fixer.activateTool` setting is `pint` 85 | - Choose action: `"Run: php-cs-fixer.pintFix"` 86 | 87 | ## Precedence of "php-cs-fixer" and "laravel/pint" configuration files and options 88 | 89 | ### php-cs-fixer 90 | 91 | 1. `php-cs-fixer.config` setting for this extension. 92 | 2. `.php-cs-fixer.php` or `.php-cs-fixer.dist.php` config file in the workspace (project) root. 93 | 3. options-reated settings for this extension. e.g. `php-cs-fixer.rules` and more. 94 | 95 | ### pint 96 | 97 | 1. `php-cs-fixer.pint.config` setting for this extension. 98 | 2. `pint.json` config file in the workspace (project) root. 99 | 3. options-reated settings for this extension. `php-cs-fixer.pint.preset`. 100 | 101 | ## Configuration options 102 | 103 | - `php-cs-fixer.enable`: Enable coc-php-cs-fixer extension, default: `true` 104 | - `php-cs-fixer.activateTool`: Formatter tool to be used, valid option `["php-cs-fixer", "pint"]`, default: `"php-cs-fixer"` 105 | - `php-cs-fixer.toolPath`: The path to the php-cs-fixer tool, default: `""` 106 | - `php-cs-fixer.config`: Path to php-cs-fixer config file (--config), default: `""` 107 | - `php-cs-fixer.useCache`: Use a cache file when fixing files (--using-cache), default: `false` 108 | - `php-cs-fixer.allowRisky`: Determines whether risky rules are allowed (--allow-risky), default: `false` 109 | - `php-cs-fixer.rules`: Rules to use when fixing files (--rules), e.g. `"@PSR12,@Symfony"`, default: `"@PSR12"` 110 | - `php-cs-fixer.enableIgnoreEnv`: Add the environment variable `PHP_CS_FIXER_IGNORE_ENV=1` and run php-cs-fixer, default: `false` 111 | - `php-cs-fixer.pint.toolPath`: The path to the pint tool, default: `""` 112 | - `php-cs-fixer.pint.config`: Path to `pint.json` config file (`--config`), default: `""` 113 | - `php-cs-fixer.pint.preset`: Presets define a set of rules that can be used to fix code style issues in your code (`--preset`), valid option `["laravel", "psr12", "symfony"]`, default: `"laravel"` 114 | - `php-cs-fixer.downloadCheckOnStartup`: If `php-cs-fixer` or `pint` is not present at startup, run the built-in download. The tool to be downloaded will follow the `php-cs-fixer.activateTool` configuration, default: `true` 115 | - `php-cs-fixer.downloadMajorVersion`: Specify the major version of php-cs-fixer to download for the extension, valid option `[2, 3]`, default: `3` 116 | - `php-cs-fixer.enableFormatProvider`: Enable format provider, default: `true` 117 | - `php-cs-fixer.enableActionProvider`: Enable codeAction provider, default: `true` 118 | - `php-cs-fixer.terminal.enableSplitRight`: Use vertical belowright for dryRunDiff and pintTest terminal window, default: `false` 119 | 120 | ## Commands 121 | 122 | - `php-cs-fixer.fix`: Run php-cs-fixer fix 123 | - `php-cs-fixer.dryRunDiff`: Run php-cs-fixer fix with `--dry-run` and `--diff` in a terminal window | [DEMO](https://github.com/yaegassy/coc-php-cs-fixer/pull/8) 124 | - `php-cs-fixer.pintFix`: Run pint 125 | - `php-cs-fixer.pintTest`: Run pint with `--test` in a terminal window | [DEMO](https://github.com/yaegassy/coc-php-cs-fixer/pull/9#issue-1295053515) 126 | - `php-cs-fixer.download`: Download php-cs-fixer 127 | - By default, the "v3" series will be downloaded. If you want to download "v2" series, please change the `php-cs-fixer.downloadMajorVersion` setting. 128 | - `php-cs-fixer.pintDownload`: Download pint 129 | - `php-cs-fixer.showOutput`: Show php-cs-fixer output channel 130 | 131 | ## Code Actions 132 | 133 | - `Run: php-cs-fixer.fix` 134 | - `Run: php-cs-fixer.pintFix` 135 | 136 | ## Thanks 137 | 138 | - 139 | - 140 | - 141 | - 142 | 143 | ## License 144 | 145 | MIT 146 | 147 | --- 148 | 149 | > This extension is built with [create-coc-extension](https://github.com/fannheyward/create-coc-extension) 150 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coc-php-cs-fixer", 3 | "version": "0.7.10", 4 | "description": "PHP CS Fixer (PHP Coding Standards Fixer) and Laravel Pint extension for coc.nvim", 5 | "author": "yaegassy ", 6 | "license": "MIT", 7 | "main": "lib/index.js", 8 | "keywords": [ 9 | "coc.nvim", 10 | "php", 11 | "php-cs-fixer", 12 | "pint", 13 | "laravel", 14 | "formatter", 15 | "vim", 16 | "neovim" 17 | ], 18 | "engines": { 19 | "coc": "^0.0.80" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "https://github.com/yaegassy/coc-php-cs-fixer" 24 | }, 25 | "scripts": { 26 | "schema": "curl -o schemas/pint-schema.json https://raw.githubusercontent.com/open-southeners/vscode-laravel-pint/main/pint-schema.json && node scripts/check-schema.mjs", 27 | "lint": "eslint src --ext ts", 28 | "clean": "rimraf lib", 29 | "watch": "node esbuild.js --watch", 30 | "build": "node esbuild.js", 31 | "prepare": "node esbuild.js" 32 | }, 33 | "prettier": { 34 | "singleQuote": true, 35 | "printWidth": 120, 36 | "semi": true 37 | }, 38 | "devDependencies": { 39 | "@types/node": "^18.16.18", 40 | "@types/node-fetch": "^2.6.2", 41 | "@types/tmp": "^0.2.3", 42 | "@typescript-eslint/eslint-plugin": "^5.60.1", 43 | "@typescript-eslint/parser": "^5.60.1", 44 | "coc.nvim": "^0.0.82", 45 | "esbuild": "^0.16.17", 46 | "eslint": "^8.43.0", 47 | "eslint-config-prettier": "^8.8.0", 48 | "eslint-plugin-prettier": "^4.2.1", 49 | "https-proxy-agent": "^5.0.1", 50 | "node-fetch": "^2.6.7", 51 | "prettier": "^2.8.8", 52 | "rimraf": "^3.0.2", 53 | "tmp": "^0.2.1", 54 | "typescript": "~5.0.4" 55 | }, 56 | "activationEvents": [ 57 | "onLanguage:php" 58 | ], 59 | "contributes": { 60 | "jsonValidation": [ 61 | { 62 | "fileMatch": "pint.json", 63 | "url": "./schemas/pint-schema.json" 64 | } 65 | ], 66 | "configuration": { 67 | "type": "object", 68 | "title": "coc-php-cs-fixer configuration", 69 | "rootPatterns": [ 70 | { 71 | "filetype": "php", 72 | "patterns": [ 73 | ".php-cs-fixer.php", 74 | ".php-cs-fixer.dist.php", 75 | "pint.json" 76 | ] 77 | } 78 | ], 79 | "properties": { 80 | "php-cs-fixer.enable": { 81 | "type": "boolean", 82 | "default": true, 83 | "description": "Enable coc-php-cs-fixer extension" 84 | }, 85 | "php-cs-fixer.activateTool": { 86 | "type": "string", 87 | "default": "php-cs-fixer", 88 | "description": "", 89 | "enum": [ 90 | "php-cs-fixer", 91 | "pint" 92 | ] 93 | }, 94 | "php-cs-fixer.toolPath": { 95 | "type": "string", 96 | "default": "", 97 | "description": "The path to the php-cs-fixer tool" 98 | }, 99 | "php-cs-fixer.config": { 100 | "type": "string", 101 | "default": "", 102 | "description": "Path to php-cs-fixer config file (--config)" 103 | }, 104 | "php-cs-fixer.useCache": { 105 | "type": "boolean", 106 | "default": false, 107 | "description": "Use a cache file when fixing files (--using-cache)" 108 | }, 109 | "php-cs-fixer.allowRisky": { 110 | "type": "boolean", 111 | "default": false, 112 | "description": "Are risky fixers allowed (--allow-risky)" 113 | }, 114 | "php-cs-fixer.rules": { 115 | "type": "string", 116 | "default": "@PSR12", 117 | "description": "Rules to use when fixing files (--rules)" 118 | }, 119 | "php-cs-fixer.enableIgnoreEnv": { 120 | "type": "boolean", 121 | "default": false, 122 | "description": "Add the environment variable PHP_CS_FIXER_IGNORE_ENV=1 and run php-cs-fixer" 123 | }, 124 | "php-cs-fixer.downloadCheckOnStartup": { 125 | "type": "boolean", 126 | "default": true, 127 | "description": "If `php-cs-fixer` or `pint` is not present at startup, run the built-in download. The tool to be downloaded will follow the `php-cs-fixer.activateTool` configuration" 128 | }, 129 | "php-cs-fixer.downloadMajorVersion": { 130 | "type": "number", 131 | "enum": [ 132 | 2, 133 | 3 134 | ], 135 | "default": 3, 136 | "description": "Specify the major version of php-cs-fixer to download for the extension", 137 | "scope": "window" 138 | }, 139 | "php-cs-fixer.pint.toolPath": { 140 | "type": "string", 141 | "default": "", 142 | "description": "The path to the pint tool" 143 | }, 144 | "php-cs-fixer.pint.config": { 145 | "type": "string", 146 | "default": "", 147 | "description": "Path to pint.json config file (--config)" 148 | }, 149 | "php-cs-fixer.pint.preset": { 150 | "type": "string", 151 | "default": "laravel", 152 | "description": "Presets define a set of rules that can be used to fix code style issues in your code (--preset)", 153 | "enum": [ 154 | "laravel", 155 | "psr12", 156 | "symfony" 157 | ] 158 | }, 159 | "php-cs-fixer.enableFormatProvider": { 160 | "type": "boolean", 161 | "default": true, 162 | "description": "Enable format provider" 163 | }, 164 | "php-cs-fixer.enableActionProvider": { 165 | "type": "boolean", 166 | "default": true, 167 | "description": "Enable codeAction provider" 168 | }, 169 | "php-cs-fixer.terminal.enableSplitRight": { 170 | "type": "boolean", 171 | "default": false, 172 | "description": "Use vertical belowright for dryRunDiff and pintTest terminal window" 173 | } 174 | } 175 | }, 176 | "commands": [ 177 | { 178 | "command": "php-cs-fixer.fix", 179 | "title": "Run php-cs-fixer fix" 180 | }, 181 | { 182 | "command": "php-cs-fixer.dryRunDiff", 183 | "title": "Run php-cs-fixer fix with --dry-run and --diff in a terminal window" 184 | }, 185 | { 186 | "command": "php-cs-fixer.pintFix", 187 | "title": "Run pint" 188 | }, 189 | { 190 | "command": "php-cs-fixer.pintTest", 191 | "title": "Run pint with --test in a terminal window" 192 | }, 193 | { 194 | "command": "php-cs-fixer.download", 195 | "title": "Download php-cs-fixer" 196 | }, 197 | { 198 | "command": "php-cs-fixer.pintDownload", 199 | "title": "Download pint" 200 | }, 201 | { 202 | "command": "php-cs-fixer.showOutput", 203 | "title": "Show php-cs-fixer output channel" 204 | } 205 | ] 206 | }, 207 | "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" 208 | } 209 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/android-arm64@0.16.17": 6 | version "0.16.17" 7 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" 8 | integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== 9 | 10 | "@esbuild/android-arm@0.16.17": 11 | version "0.16.17" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" 13 | integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== 14 | 15 | "@esbuild/android-x64@0.16.17": 16 | version "0.16.17" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" 18 | integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== 19 | 20 | "@esbuild/darwin-arm64@0.16.17": 21 | version "0.16.17" 22 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" 23 | integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== 24 | 25 | "@esbuild/darwin-x64@0.16.17": 26 | version "0.16.17" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" 28 | integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== 29 | 30 | "@esbuild/freebsd-arm64@0.16.17": 31 | version "0.16.17" 32 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" 33 | integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== 34 | 35 | "@esbuild/freebsd-x64@0.16.17": 36 | version "0.16.17" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" 38 | integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== 39 | 40 | "@esbuild/linux-arm64@0.16.17": 41 | version "0.16.17" 42 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" 43 | integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== 44 | 45 | "@esbuild/linux-arm@0.16.17": 46 | version "0.16.17" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" 48 | integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== 49 | 50 | "@esbuild/linux-ia32@0.16.17": 51 | version "0.16.17" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" 53 | integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== 54 | 55 | "@esbuild/linux-loong64@0.16.17": 56 | version "0.16.17" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" 58 | integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== 59 | 60 | "@esbuild/linux-mips64el@0.16.17": 61 | version "0.16.17" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" 63 | integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== 64 | 65 | "@esbuild/linux-ppc64@0.16.17": 66 | version "0.16.17" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" 68 | integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== 69 | 70 | "@esbuild/linux-riscv64@0.16.17": 71 | version "0.16.17" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" 73 | integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== 74 | 75 | "@esbuild/linux-s390x@0.16.17": 76 | version "0.16.17" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" 78 | integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== 79 | 80 | "@esbuild/linux-x64@0.16.17": 81 | version "0.16.17" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" 83 | integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== 84 | 85 | "@esbuild/netbsd-x64@0.16.17": 86 | version "0.16.17" 87 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" 88 | integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== 89 | 90 | "@esbuild/openbsd-x64@0.16.17": 91 | version "0.16.17" 92 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" 93 | integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== 94 | 95 | "@esbuild/sunos-x64@0.16.17": 96 | version "0.16.17" 97 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" 98 | integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== 99 | 100 | "@esbuild/win32-arm64@0.16.17": 101 | version "0.16.17" 102 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" 103 | integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== 104 | 105 | "@esbuild/win32-ia32@0.16.17": 106 | version "0.16.17" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" 108 | integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== 109 | 110 | "@esbuild/win32-x64@0.16.17": 111 | version "0.16.17" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" 113 | integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== 114 | 115 | "@eslint-community/eslint-utils@^4.2.0": 116 | version "4.4.0" 117 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 118 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 119 | dependencies: 120 | eslint-visitor-keys "^3.3.0" 121 | 122 | "@eslint-community/regexpp@^4.4.0": 123 | version "4.5.1" 124 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 125 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 126 | 127 | "@eslint/eslintrc@^2.0.3": 128 | version "2.0.3" 129 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 130 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 131 | dependencies: 132 | ajv "^6.12.4" 133 | debug "^4.3.2" 134 | espree "^9.5.2" 135 | globals "^13.19.0" 136 | ignore "^5.2.0" 137 | import-fresh "^3.2.1" 138 | js-yaml "^4.1.0" 139 | minimatch "^3.1.2" 140 | strip-json-comments "^3.1.1" 141 | 142 | "@eslint/js@8.43.0": 143 | version "8.43.0" 144 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0" 145 | integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg== 146 | 147 | "@humanwhocodes/config-array@^0.11.10": 148 | version "0.11.10" 149 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 150 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 151 | dependencies: 152 | "@humanwhocodes/object-schema" "^1.2.1" 153 | debug "^4.1.1" 154 | minimatch "^3.0.5" 155 | 156 | "@humanwhocodes/module-importer@^1.0.1": 157 | version "1.0.1" 158 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 159 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 160 | 161 | "@humanwhocodes/object-schema@^1.2.1": 162 | version "1.2.1" 163 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 164 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 165 | 166 | "@nodelib/fs.scandir@2.1.4": 167 | version "2.1.4" 168 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" 169 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== 170 | dependencies: 171 | "@nodelib/fs.stat" "2.0.4" 172 | run-parallel "^1.1.9" 173 | 174 | "@nodelib/fs.scandir@2.1.5": 175 | version "2.1.5" 176 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 177 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 178 | dependencies: 179 | "@nodelib/fs.stat" "2.0.5" 180 | run-parallel "^1.1.9" 181 | 182 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 183 | version "2.0.4" 184 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" 185 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== 186 | 187 | "@nodelib/fs.stat@2.0.5": 188 | version "2.0.5" 189 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 190 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 191 | 192 | "@nodelib/fs.walk@^1.2.3": 193 | version "1.2.6" 194 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" 195 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== 196 | dependencies: 197 | "@nodelib/fs.scandir" "2.1.4" 198 | fastq "^1.6.0" 199 | 200 | "@nodelib/fs.walk@^1.2.8": 201 | version "1.2.8" 202 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 203 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 204 | dependencies: 205 | "@nodelib/fs.scandir" "2.1.5" 206 | fastq "^1.6.0" 207 | 208 | "@types/json-schema@^7.0.9": 209 | version "7.0.11" 210 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 211 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 212 | 213 | "@types/node-fetch@^2.6.2": 214 | version "2.6.2" 215 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" 216 | integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== 217 | dependencies: 218 | "@types/node" "*" 219 | form-data "^3.0.0" 220 | 221 | "@types/node@*": 222 | version "14.14.35" 223 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" 224 | integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== 225 | 226 | "@types/node@^18.16.18": 227 | version "18.16.18" 228 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390" 229 | integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== 230 | 231 | "@types/semver@^7.3.12": 232 | version "7.3.13" 233 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 234 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 235 | 236 | "@types/tmp@^0.2.3": 237 | version "0.2.3" 238 | resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.3.tgz#908bfb113419fd6a42273674c00994d40902c165" 239 | integrity sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA== 240 | 241 | "@typescript-eslint/eslint-plugin@^5.60.1": 242 | version "5.60.1" 243 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" 244 | integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== 245 | dependencies: 246 | "@eslint-community/regexpp" "^4.4.0" 247 | "@typescript-eslint/scope-manager" "5.60.1" 248 | "@typescript-eslint/type-utils" "5.60.1" 249 | "@typescript-eslint/utils" "5.60.1" 250 | debug "^4.3.4" 251 | grapheme-splitter "^1.0.4" 252 | ignore "^5.2.0" 253 | natural-compare-lite "^1.4.0" 254 | semver "^7.3.7" 255 | tsutils "^3.21.0" 256 | 257 | "@typescript-eslint/parser@^5.60.1": 258 | version "5.60.1" 259 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" 260 | integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== 261 | dependencies: 262 | "@typescript-eslint/scope-manager" "5.60.1" 263 | "@typescript-eslint/types" "5.60.1" 264 | "@typescript-eslint/typescript-estree" "5.60.1" 265 | debug "^4.3.4" 266 | 267 | "@typescript-eslint/scope-manager@5.60.1": 268 | version "5.60.1" 269 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" 270 | integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== 271 | dependencies: 272 | "@typescript-eslint/types" "5.60.1" 273 | "@typescript-eslint/visitor-keys" "5.60.1" 274 | 275 | "@typescript-eslint/type-utils@5.60.1": 276 | version "5.60.1" 277 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" 278 | integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== 279 | dependencies: 280 | "@typescript-eslint/typescript-estree" "5.60.1" 281 | "@typescript-eslint/utils" "5.60.1" 282 | debug "^4.3.4" 283 | tsutils "^3.21.0" 284 | 285 | "@typescript-eslint/types@5.60.1": 286 | version "5.60.1" 287 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" 288 | integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== 289 | 290 | "@typescript-eslint/typescript-estree@5.60.1": 291 | version "5.60.1" 292 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" 293 | integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== 294 | dependencies: 295 | "@typescript-eslint/types" "5.60.1" 296 | "@typescript-eslint/visitor-keys" "5.60.1" 297 | debug "^4.3.4" 298 | globby "^11.1.0" 299 | is-glob "^4.0.3" 300 | semver "^7.3.7" 301 | tsutils "^3.21.0" 302 | 303 | "@typescript-eslint/utils@5.60.1": 304 | version "5.60.1" 305 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" 306 | integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== 307 | dependencies: 308 | "@eslint-community/eslint-utils" "^4.2.0" 309 | "@types/json-schema" "^7.0.9" 310 | "@types/semver" "^7.3.12" 311 | "@typescript-eslint/scope-manager" "5.60.1" 312 | "@typescript-eslint/types" "5.60.1" 313 | "@typescript-eslint/typescript-estree" "5.60.1" 314 | eslint-scope "^5.1.1" 315 | semver "^7.3.7" 316 | 317 | "@typescript-eslint/visitor-keys@5.60.1": 318 | version "5.60.1" 319 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" 320 | integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== 321 | dependencies: 322 | "@typescript-eslint/types" "5.60.1" 323 | eslint-visitor-keys "^3.3.0" 324 | 325 | acorn-jsx@^5.3.2: 326 | version "5.3.2" 327 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 328 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 329 | 330 | acorn@^8.8.0: 331 | version "8.8.0" 332 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" 333 | integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== 334 | 335 | agent-base@6: 336 | version "6.0.2" 337 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 338 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 339 | dependencies: 340 | debug "4" 341 | 342 | ajv@^6.10.0, ajv@^6.12.4: 343 | version "6.12.6" 344 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 345 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 346 | dependencies: 347 | fast-deep-equal "^3.1.1" 348 | fast-json-stable-stringify "^2.0.0" 349 | json-schema-traverse "^0.4.1" 350 | uri-js "^4.2.2" 351 | 352 | ansi-regex@^5.0.1: 353 | version "5.0.1" 354 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 355 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 356 | 357 | ansi-styles@^4.1.0: 358 | version "4.3.0" 359 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 360 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 361 | dependencies: 362 | color-convert "^2.0.1" 363 | 364 | argparse@^2.0.1: 365 | version "2.0.1" 366 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 367 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 368 | 369 | array-union@^2.1.0: 370 | version "2.1.0" 371 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 372 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 373 | 374 | asynckit@^0.4.0: 375 | version "0.4.0" 376 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 377 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 378 | 379 | balanced-match@^1.0.0: 380 | version "1.0.0" 381 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 382 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 383 | 384 | brace-expansion@^1.1.7: 385 | version "1.1.11" 386 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 387 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 388 | dependencies: 389 | balanced-match "^1.0.0" 390 | concat-map "0.0.1" 391 | 392 | braces@^3.0.2: 393 | version "3.0.2" 394 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 395 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 396 | dependencies: 397 | fill-range "^7.0.1" 398 | 399 | callsites@^3.0.0: 400 | version "3.1.0" 401 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 402 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 403 | 404 | chalk@^4.0.0: 405 | version "4.1.0" 406 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 407 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 408 | dependencies: 409 | ansi-styles "^4.1.0" 410 | supports-color "^7.1.0" 411 | 412 | coc.nvim@^0.0.82: 413 | version "0.0.82" 414 | resolved "https://registry.yarnpkg.com/coc.nvim/-/coc.nvim-0.0.82.tgz#5230e2eb17e8499a60a97b46d844f2d08c593b29" 415 | integrity sha512-+70ap6FH8FSdaQ0CPijaasQzg6ue84j4/LkX6ZSpALX7YKBcGGDkCcd6adgaC/86b/ZqT3iTTEbMh3mdaI5qPA== 416 | 417 | color-convert@^2.0.1: 418 | version "2.0.1" 419 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 420 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 421 | dependencies: 422 | color-name "~1.1.4" 423 | 424 | color-name@~1.1.4: 425 | version "1.1.4" 426 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 427 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 428 | 429 | combined-stream@^1.0.8: 430 | version "1.0.8" 431 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 432 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 433 | dependencies: 434 | delayed-stream "~1.0.0" 435 | 436 | concat-map@0.0.1: 437 | version "0.0.1" 438 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 439 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 440 | 441 | cross-spawn@^7.0.2: 442 | version "7.0.3" 443 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 444 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 445 | dependencies: 446 | path-key "^3.1.0" 447 | shebang-command "^2.0.0" 448 | which "^2.0.1" 449 | 450 | debug@4, debug@^4.1.1: 451 | version "4.3.1" 452 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 453 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 454 | dependencies: 455 | ms "2.1.2" 456 | 457 | debug@^4.3.2, debug@^4.3.4: 458 | version "4.3.4" 459 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 460 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 461 | dependencies: 462 | ms "2.1.2" 463 | 464 | deep-is@^0.1.3: 465 | version "0.1.3" 466 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 467 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 468 | 469 | delayed-stream@~1.0.0: 470 | version "1.0.0" 471 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 472 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 473 | 474 | dir-glob@^3.0.1: 475 | version "3.0.1" 476 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 477 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 478 | dependencies: 479 | path-type "^4.0.0" 480 | 481 | doctrine@^3.0.0: 482 | version "3.0.0" 483 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 484 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 485 | dependencies: 486 | esutils "^2.0.2" 487 | 488 | esbuild@^0.16.17: 489 | version "0.16.17" 490 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" 491 | integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== 492 | optionalDependencies: 493 | "@esbuild/android-arm" "0.16.17" 494 | "@esbuild/android-arm64" "0.16.17" 495 | "@esbuild/android-x64" "0.16.17" 496 | "@esbuild/darwin-arm64" "0.16.17" 497 | "@esbuild/darwin-x64" "0.16.17" 498 | "@esbuild/freebsd-arm64" "0.16.17" 499 | "@esbuild/freebsd-x64" "0.16.17" 500 | "@esbuild/linux-arm" "0.16.17" 501 | "@esbuild/linux-arm64" "0.16.17" 502 | "@esbuild/linux-ia32" "0.16.17" 503 | "@esbuild/linux-loong64" "0.16.17" 504 | "@esbuild/linux-mips64el" "0.16.17" 505 | "@esbuild/linux-ppc64" "0.16.17" 506 | "@esbuild/linux-riscv64" "0.16.17" 507 | "@esbuild/linux-s390x" "0.16.17" 508 | "@esbuild/linux-x64" "0.16.17" 509 | "@esbuild/netbsd-x64" "0.16.17" 510 | "@esbuild/openbsd-x64" "0.16.17" 511 | "@esbuild/sunos-x64" "0.16.17" 512 | "@esbuild/win32-arm64" "0.16.17" 513 | "@esbuild/win32-ia32" "0.16.17" 514 | "@esbuild/win32-x64" "0.16.17" 515 | 516 | escape-string-regexp@^4.0.0: 517 | version "4.0.0" 518 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 519 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 520 | 521 | eslint-config-prettier@^8.8.0: 522 | version "8.8.0" 523 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" 524 | integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== 525 | 526 | eslint-plugin-prettier@^4.2.1: 527 | version "4.2.1" 528 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" 529 | integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== 530 | dependencies: 531 | prettier-linter-helpers "^1.0.0" 532 | 533 | eslint-scope@^5.1.1: 534 | version "5.1.1" 535 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 536 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 537 | dependencies: 538 | esrecurse "^4.3.0" 539 | estraverse "^4.1.1" 540 | 541 | eslint-scope@^7.2.0: 542 | version "7.2.0" 543 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 544 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 545 | dependencies: 546 | esrecurse "^4.3.0" 547 | estraverse "^5.2.0" 548 | 549 | eslint-visitor-keys@^3.3.0: 550 | version "3.3.0" 551 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 552 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 553 | 554 | eslint-visitor-keys@^3.4.1: 555 | version "3.4.1" 556 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 557 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 558 | 559 | eslint@^8.43.0: 560 | version "8.43.0" 561 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" 562 | integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q== 563 | dependencies: 564 | "@eslint-community/eslint-utils" "^4.2.0" 565 | "@eslint-community/regexpp" "^4.4.0" 566 | "@eslint/eslintrc" "^2.0.3" 567 | "@eslint/js" "8.43.0" 568 | "@humanwhocodes/config-array" "^0.11.10" 569 | "@humanwhocodes/module-importer" "^1.0.1" 570 | "@nodelib/fs.walk" "^1.2.8" 571 | ajv "^6.10.0" 572 | chalk "^4.0.0" 573 | cross-spawn "^7.0.2" 574 | debug "^4.3.2" 575 | doctrine "^3.0.0" 576 | escape-string-regexp "^4.0.0" 577 | eslint-scope "^7.2.0" 578 | eslint-visitor-keys "^3.4.1" 579 | espree "^9.5.2" 580 | esquery "^1.4.2" 581 | esutils "^2.0.2" 582 | fast-deep-equal "^3.1.3" 583 | file-entry-cache "^6.0.1" 584 | find-up "^5.0.0" 585 | glob-parent "^6.0.2" 586 | globals "^13.19.0" 587 | graphemer "^1.4.0" 588 | ignore "^5.2.0" 589 | import-fresh "^3.0.0" 590 | imurmurhash "^0.1.4" 591 | is-glob "^4.0.0" 592 | is-path-inside "^3.0.3" 593 | js-yaml "^4.1.0" 594 | json-stable-stringify-without-jsonify "^1.0.1" 595 | levn "^0.4.1" 596 | lodash.merge "^4.6.2" 597 | minimatch "^3.1.2" 598 | natural-compare "^1.4.0" 599 | optionator "^0.9.1" 600 | strip-ansi "^6.0.1" 601 | strip-json-comments "^3.1.0" 602 | text-table "^0.2.0" 603 | 604 | espree@^9.5.2: 605 | version "9.5.2" 606 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 607 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 608 | dependencies: 609 | acorn "^8.8.0" 610 | acorn-jsx "^5.3.2" 611 | eslint-visitor-keys "^3.4.1" 612 | 613 | esquery@^1.4.2: 614 | version "1.5.0" 615 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 616 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 617 | dependencies: 618 | estraverse "^5.1.0" 619 | 620 | esrecurse@^4.3.0: 621 | version "4.3.0" 622 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 623 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 624 | dependencies: 625 | estraverse "^5.2.0" 626 | 627 | estraverse@^4.1.1: 628 | version "4.3.0" 629 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 630 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 631 | 632 | estraverse@^5.1.0, estraverse@^5.2.0: 633 | version "5.2.0" 634 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 635 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 636 | 637 | esutils@^2.0.2: 638 | version "2.0.3" 639 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 640 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 641 | 642 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 643 | version "3.1.3" 644 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 645 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 646 | 647 | fast-diff@^1.1.2: 648 | version "1.2.0" 649 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 650 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 651 | 652 | fast-glob@^3.2.9: 653 | version "3.2.11" 654 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 655 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 656 | dependencies: 657 | "@nodelib/fs.stat" "^2.0.2" 658 | "@nodelib/fs.walk" "^1.2.3" 659 | glob-parent "^5.1.2" 660 | merge2 "^1.3.0" 661 | micromatch "^4.0.4" 662 | 663 | fast-json-stable-stringify@^2.0.0: 664 | version "2.1.0" 665 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 666 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 667 | 668 | fast-levenshtein@^2.0.6: 669 | version "2.0.6" 670 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 671 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 672 | 673 | fastq@^1.6.0: 674 | version "1.11.0" 675 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 676 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 677 | dependencies: 678 | reusify "^1.0.4" 679 | 680 | file-entry-cache@^6.0.1: 681 | version "6.0.1" 682 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 683 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 684 | dependencies: 685 | flat-cache "^3.0.4" 686 | 687 | fill-range@^7.0.1: 688 | version "7.0.1" 689 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 690 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 691 | dependencies: 692 | to-regex-range "^5.0.1" 693 | 694 | find-up@^5.0.0: 695 | version "5.0.0" 696 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 697 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 698 | dependencies: 699 | locate-path "^6.0.0" 700 | path-exists "^4.0.0" 701 | 702 | flat-cache@^3.0.4: 703 | version "3.0.4" 704 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 705 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 706 | dependencies: 707 | flatted "^3.1.0" 708 | rimraf "^3.0.2" 709 | 710 | flatted@^3.1.0: 711 | version "3.1.1" 712 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 713 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 714 | 715 | form-data@^3.0.0: 716 | version "3.0.1" 717 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 718 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 719 | dependencies: 720 | asynckit "^0.4.0" 721 | combined-stream "^1.0.8" 722 | mime-types "^2.1.12" 723 | 724 | fs.realpath@^1.0.0: 725 | version "1.0.0" 726 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 727 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 728 | 729 | glob-parent@^5.1.2: 730 | version "5.1.2" 731 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 732 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 733 | dependencies: 734 | is-glob "^4.0.1" 735 | 736 | glob-parent@^6.0.2: 737 | version "6.0.2" 738 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 739 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 740 | dependencies: 741 | is-glob "^4.0.3" 742 | 743 | glob@^7.1.3: 744 | version "7.1.6" 745 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 746 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 747 | dependencies: 748 | fs.realpath "^1.0.0" 749 | inflight "^1.0.4" 750 | inherits "2" 751 | minimatch "^3.0.4" 752 | once "^1.3.0" 753 | path-is-absolute "^1.0.0" 754 | 755 | globals@^13.19.0: 756 | version "13.20.0" 757 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 758 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 759 | dependencies: 760 | type-fest "^0.20.2" 761 | 762 | globby@^11.1.0: 763 | version "11.1.0" 764 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 765 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 766 | dependencies: 767 | array-union "^2.1.0" 768 | dir-glob "^3.0.1" 769 | fast-glob "^3.2.9" 770 | ignore "^5.2.0" 771 | merge2 "^1.4.1" 772 | slash "^3.0.0" 773 | 774 | grapheme-splitter@^1.0.4: 775 | version "1.0.4" 776 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 777 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 778 | 779 | graphemer@^1.4.0: 780 | version "1.4.0" 781 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 782 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 783 | 784 | has-flag@^4.0.0: 785 | version "4.0.0" 786 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 787 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 788 | 789 | https-proxy-agent@^5.0.1: 790 | version "5.0.1" 791 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 792 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 793 | dependencies: 794 | agent-base "6" 795 | debug "4" 796 | 797 | ignore@^5.2.0: 798 | version "5.2.0" 799 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 800 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 801 | 802 | import-fresh@^3.0.0, import-fresh@^3.2.1: 803 | version "3.3.0" 804 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 805 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 806 | dependencies: 807 | parent-module "^1.0.0" 808 | resolve-from "^4.0.0" 809 | 810 | imurmurhash@^0.1.4: 811 | version "0.1.4" 812 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 813 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 814 | 815 | inflight@^1.0.4: 816 | version "1.0.6" 817 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 818 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 819 | dependencies: 820 | once "^1.3.0" 821 | wrappy "1" 822 | 823 | inherits@2: 824 | version "2.0.4" 825 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 826 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 827 | 828 | is-extglob@^2.1.1: 829 | version "2.1.1" 830 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 831 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 832 | 833 | is-glob@^4.0.0, is-glob@^4.0.1: 834 | version "4.0.1" 835 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 836 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 837 | dependencies: 838 | is-extglob "^2.1.1" 839 | 840 | is-glob@^4.0.3: 841 | version "4.0.3" 842 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 843 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 844 | dependencies: 845 | is-extglob "^2.1.1" 846 | 847 | is-number@^7.0.0: 848 | version "7.0.0" 849 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 850 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 851 | 852 | is-path-inside@^3.0.3: 853 | version "3.0.3" 854 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 855 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 856 | 857 | isexe@^2.0.0: 858 | version "2.0.0" 859 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 860 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 861 | 862 | js-yaml@^4.1.0: 863 | version "4.1.0" 864 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 865 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 866 | dependencies: 867 | argparse "^2.0.1" 868 | 869 | json-schema-traverse@^0.4.1: 870 | version "0.4.1" 871 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 872 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 873 | 874 | json-stable-stringify-without-jsonify@^1.0.1: 875 | version "1.0.1" 876 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 877 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 878 | 879 | levn@^0.4.1: 880 | version "0.4.1" 881 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 882 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 883 | dependencies: 884 | prelude-ls "^1.2.1" 885 | type-check "~0.4.0" 886 | 887 | locate-path@^6.0.0: 888 | version "6.0.0" 889 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 890 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 891 | dependencies: 892 | p-locate "^5.0.0" 893 | 894 | lodash.merge@^4.6.2: 895 | version "4.6.2" 896 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 897 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 898 | 899 | lru-cache@^6.0.0: 900 | version "6.0.0" 901 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 902 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 903 | dependencies: 904 | yallist "^4.0.0" 905 | 906 | merge2@^1.3.0, merge2@^1.4.1: 907 | version "1.4.1" 908 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 909 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 910 | 911 | micromatch@^4.0.4: 912 | version "4.0.5" 913 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 914 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 915 | dependencies: 916 | braces "^3.0.2" 917 | picomatch "^2.3.1" 918 | 919 | mime-db@1.46.0: 920 | version "1.46.0" 921 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" 922 | integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== 923 | 924 | mime-types@^2.1.12: 925 | version "2.1.29" 926 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" 927 | integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== 928 | dependencies: 929 | mime-db "1.46.0" 930 | 931 | minimatch@^3.0.4: 932 | version "3.0.4" 933 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 934 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 935 | dependencies: 936 | brace-expansion "^1.1.7" 937 | 938 | minimatch@^3.0.5, minimatch@^3.1.2: 939 | version "3.1.2" 940 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 941 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 942 | dependencies: 943 | brace-expansion "^1.1.7" 944 | 945 | ms@2.1.2: 946 | version "2.1.2" 947 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 948 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 949 | 950 | natural-compare-lite@^1.4.0: 951 | version "1.4.0" 952 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 953 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 954 | 955 | natural-compare@^1.4.0: 956 | version "1.4.0" 957 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 958 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 959 | 960 | node-fetch@^2.6.7: 961 | version "2.6.7" 962 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 963 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 964 | dependencies: 965 | whatwg-url "^5.0.0" 966 | 967 | once@^1.3.0: 968 | version "1.4.0" 969 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 970 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 971 | dependencies: 972 | wrappy "1" 973 | 974 | optionator@^0.9.1: 975 | version "0.9.1" 976 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 977 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 978 | dependencies: 979 | deep-is "^0.1.3" 980 | fast-levenshtein "^2.0.6" 981 | levn "^0.4.1" 982 | prelude-ls "^1.2.1" 983 | type-check "^0.4.0" 984 | word-wrap "^1.2.3" 985 | 986 | p-limit@^3.0.2: 987 | version "3.1.0" 988 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 989 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 990 | dependencies: 991 | yocto-queue "^0.1.0" 992 | 993 | p-locate@^5.0.0: 994 | version "5.0.0" 995 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 996 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 997 | dependencies: 998 | p-limit "^3.0.2" 999 | 1000 | parent-module@^1.0.0: 1001 | version "1.0.1" 1002 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1003 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1004 | dependencies: 1005 | callsites "^3.0.0" 1006 | 1007 | path-exists@^4.0.0: 1008 | version "4.0.0" 1009 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1010 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1011 | 1012 | path-is-absolute@^1.0.0: 1013 | version "1.0.1" 1014 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1015 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1016 | 1017 | path-key@^3.1.0: 1018 | version "3.1.1" 1019 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1020 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1021 | 1022 | path-type@^4.0.0: 1023 | version "4.0.0" 1024 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1025 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1026 | 1027 | picomatch@^2.3.1: 1028 | version "2.3.1" 1029 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1030 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1031 | 1032 | prelude-ls@^1.2.1: 1033 | version "1.2.1" 1034 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1035 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1036 | 1037 | prettier-linter-helpers@^1.0.0: 1038 | version "1.0.0" 1039 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1040 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1041 | dependencies: 1042 | fast-diff "^1.1.2" 1043 | 1044 | prettier@^2.8.8: 1045 | version "2.8.8" 1046 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1047 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1048 | 1049 | punycode@^2.1.0: 1050 | version "2.1.1" 1051 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1052 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1053 | 1054 | queue-microtask@^1.2.2: 1055 | version "1.2.2" 1056 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" 1057 | integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== 1058 | 1059 | resolve-from@^4.0.0: 1060 | version "4.0.0" 1061 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1062 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1063 | 1064 | reusify@^1.0.4: 1065 | version "1.0.4" 1066 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1067 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1068 | 1069 | rimraf@^3.0.0, rimraf@^3.0.2: 1070 | version "3.0.2" 1071 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1072 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1073 | dependencies: 1074 | glob "^7.1.3" 1075 | 1076 | run-parallel@^1.1.9: 1077 | version "1.2.0" 1078 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1079 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1080 | dependencies: 1081 | queue-microtask "^1.2.2" 1082 | 1083 | semver@^7.3.7: 1084 | version "7.3.7" 1085 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1086 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1087 | dependencies: 1088 | lru-cache "^6.0.0" 1089 | 1090 | shebang-command@^2.0.0: 1091 | version "2.0.0" 1092 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1093 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1094 | dependencies: 1095 | shebang-regex "^3.0.0" 1096 | 1097 | shebang-regex@^3.0.0: 1098 | version "3.0.0" 1099 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1100 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1101 | 1102 | slash@^3.0.0: 1103 | version "3.0.0" 1104 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1105 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1106 | 1107 | strip-ansi@^6.0.1: 1108 | version "6.0.1" 1109 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1110 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1111 | dependencies: 1112 | ansi-regex "^5.0.1" 1113 | 1114 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1115 | version "3.1.1" 1116 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1117 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1118 | 1119 | supports-color@^7.1.0: 1120 | version "7.2.0" 1121 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1122 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1123 | dependencies: 1124 | has-flag "^4.0.0" 1125 | 1126 | text-table@^0.2.0: 1127 | version "0.2.0" 1128 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1129 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1130 | 1131 | tmp@^0.2.1: 1132 | version "0.2.1" 1133 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1134 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1135 | dependencies: 1136 | rimraf "^3.0.0" 1137 | 1138 | to-regex-range@^5.0.1: 1139 | version "5.0.1" 1140 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1141 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1142 | dependencies: 1143 | is-number "^7.0.0" 1144 | 1145 | tr46@~0.0.3: 1146 | version "0.0.3" 1147 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1148 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1149 | 1150 | tslib@^1.8.1: 1151 | version "1.14.1" 1152 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1153 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1154 | 1155 | tsutils@^3.21.0: 1156 | version "3.21.0" 1157 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1158 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1159 | dependencies: 1160 | tslib "^1.8.1" 1161 | 1162 | type-check@^0.4.0, type-check@~0.4.0: 1163 | version "0.4.0" 1164 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1165 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1166 | dependencies: 1167 | prelude-ls "^1.2.1" 1168 | 1169 | type-fest@^0.20.2: 1170 | version "0.20.2" 1171 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1172 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1173 | 1174 | typescript@~5.0.4: 1175 | version "5.0.4" 1176 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 1177 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 1178 | 1179 | uri-js@^4.2.2: 1180 | version "4.4.1" 1181 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1182 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1183 | dependencies: 1184 | punycode "^2.1.0" 1185 | 1186 | webidl-conversions@^3.0.0: 1187 | version "3.0.1" 1188 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1189 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1190 | 1191 | whatwg-url@^5.0.0: 1192 | version "5.0.0" 1193 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1194 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1195 | dependencies: 1196 | tr46 "~0.0.3" 1197 | webidl-conversions "^3.0.0" 1198 | 1199 | which@^2.0.1: 1200 | version "2.0.2" 1201 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1202 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1203 | dependencies: 1204 | isexe "^2.0.0" 1205 | 1206 | word-wrap@^1.2.3: 1207 | version "1.2.3" 1208 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1209 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1210 | 1211 | wrappy@1: 1212 | version "1.0.2" 1213 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1214 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1215 | 1216 | yallist@^4.0.0: 1217 | version "4.0.0" 1218 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1219 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1220 | 1221 | yocto-queue@^0.1.0: 1222 | version "0.1.0" 1223 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1224 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1225 | --------------------------------------------------------------------------------