├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── esbuild.js ├── package.json ├── src ├── client.ts ├── constants.ts ├── downloader.ts └── index.ts ├── tsconfig.json └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | node-version: [14] 19 | 20 | env: 21 | NODE_ENV: test 22 | 23 | steps: 24 | - uses: actions/checkout@v1 25 | - name: Use Node.js ${{ matrix.node-version }} 26 | uses: actions/setup-node@v1 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | - name: Install yarn 30 | run: | 31 | curl --compressed -o- -L https://yarnpkg.com/install.sh | bash 32 | - name: yarn build 33 | run: | 34 | yarn 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | node_modules 3 | tsconfig.json 4 | *.map 5 | .tags 6 | .DS_Store 7 | esbuild.js 8 | webpack.config.js 9 | yarn.lock 10 | yarn-error.log 11 | .eslintrc.js 12 | .github 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Heyward Fann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # coc-texlab 2 | 3 | > fork of [texlab-vscode](https://github.com/latex-lsp/texlab-vscode), provides editing support for LaTeX documents, powered by the [TexLab](https://github.com/latex-lsp/texlab) language server. 4 | 5 | ## Install 6 | 7 | `:CocInstall coc-texlab` 8 | 9 | ## Requirements 10 | 11 | - A [TeX distribution](https://www.latex-project.org/get/#tex-distributions). All distributions that are based on [TeX Live](https://www.tug.org/texlive/) or [MikTeX](https://miktex.org/) are supported. 12 | - On Windows, you will need to install [Microsoft Visual C++ Redistributable for Visual Studio 2015](https://aka.ms/vs/16/release/vc_redist.x64.exe). 13 | 14 | More info in [TexLab Docs](https://texlab.netlify.com/docs) 15 | 16 | ## Configuration 17 | 18 | - `texlab.path`: custom path to `texlab` binary, defaults `""` 19 | - `texlab.rootDirectory`: Path to the root directory, defaults `null` 20 | - `texlab.build.executable`: path to a LaTeX build tool, defaults `latexmk` 21 | - `texlab.build.args`: additional arguments passed to build tool 22 | - `texlab.build.onSave`: build after saving a file, defaults `false` 23 | - `texlab.build.isContinuous`: Set this property to true if the build arguments imply a continuous build (like latexmk -pvc), defaults `false` 24 | - `texlab.build.forwardSearchAfter`: Execute forward search after building, defaults `false` 25 | - `texlab.auxDirectory`: directory containing the build artifacts, defaults `"."` 26 | - `texlab.forwardSearch.executable`: path to a PDF previewer that supports SyncTeX, defaults `null` 27 | - `texlab.forwardSearch.args`: additional arguments passed to the previewer, defaults `[]` 28 | - `texlab.chktex.onOpenAndSave`: lint using chktex after opening and saving a file, defaults `false` 29 | - `texlab.chktex.onEdit`: lint using chktex after changing a file, defaults `false` 30 | - `texlab.bibtexFormatter`: BibTeX formatter to use, defaults `texlab` 31 | - `texlab.formatterLineLength`: maximum amount of characters per line, defaults `80` 32 | - `texlab.latexFormatter`: LaTeX formatter to use, defaults `latexindent` 33 | - `texlab.latexindent.local`: Configures the `--local` flag of latexindent, defaults `null` 34 | - `texlab.latexindent.modifyLineBreaks`: Configures the `--modifylinebreaks` flag of latexindent, defaults `false` 35 | 36 | ## Commands 37 | 38 | - `latex.Build`: build current file 39 | - `latex.ForwardSearch`: performs a forward search from the current file 40 | - `latex.UpdateLanguageServer`: upgrade TexLab Server to latest version 41 | 42 | ## License 43 | 44 | MIT 45 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | async function start() { 3 | await require('esbuild').build({ 4 | entryPoints: ['src/index.ts'], 5 | bundle: true, 6 | minify: process.env.NODE_ENV === 'production', 7 | sourcemap: process.env.NODE_ENV === 'development', 8 | mainFields: ['module', 'main'], 9 | external: ['coc.nvim'], 10 | platform: 'node', 11 | target: 'node10.12', 12 | outfile: 'lib/index.js', 13 | }); 14 | } 15 | 16 | start().catch((e) => { 17 | console.error(e); 18 | }); 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coc-texlab", 3 | "version": "3.3.0", 4 | "description": "TexLab extension for coc.nvim", 5 | "main": "lib/index.js", 6 | "author": "Heyward Fann ", 7 | "license": "MIT", 8 | "scripts": { 9 | "clean": "rimraf lib", 10 | "watch": "node esbuild.js --watch", 11 | "build": "node esbuild.js", 12 | "prepare": "node esbuild.js" 13 | }, 14 | "keywords": [ 15 | "coc.nvim", 16 | "latex", 17 | "texlab" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/fannheyward/coc-texlab.git" 22 | }, 23 | "engines": { 24 | "coc": "^0.0.80" 25 | }, 26 | "devDependencies": { 27 | "@types/node-fetch": "^2.6.3", 28 | "@types/tar": "^6.1.4", 29 | "@types/tunnel": "^0.0.3", 30 | "@types/unzipper": "^0.10.5", 31 | "@types/which": "^2.0.0", 32 | "coc.nvim": "^0.0.83-next.9", 33 | "esbuild": "^0.25.0", 34 | "node-fetch": "^2.6.0", 35 | "rimraf": "^4.4.1", 36 | "tar": "^6.1.13", 37 | "tunnel": "^0.0.6", 38 | "typescript": "^5.0.3", 39 | "unzipper": "^0.10.11", 40 | "which": "^2.0.2" 41 | }, 42 | "dependencies": {}, 43 | "prettier": { 44 | "printWidth": 160, 45 | "singleQuote": true 46 | }, 47 | "activationEvents": [ 48 | "onLanguage:tex", 49 | "onLanguage:latex", 50 | "onLanguage:bibtex", 51 | "onLanguage:plaintex" 52 | ], 53 | "contributes": { 54 | "configuration": { 55 | "type": "object", 56 | "title": "TexLab configuration", 57 | "properties": { 58 | "texlab.path": { 59 | "type": "string", 60 | "default": "", 61 | "description": "Custom texlab binary path" 62 | }, 63 | "texlab.trace.server": { 64 | "type": "string", 65 | "enum": [ 66 | "off", 67 | "messages", 68 | "verbose" 69 | ], 70 | "default": "off", 71 | "description": "Traces the communication between client and language server." 72 | }, 73 | "texlab.rootDirectory": { 74 | "type": [ 75 | "string", 76 | "null" 77 | ], 78 | "default": null, 79 | "description": "Path to the root directory." 80 | }, 81 | "texlab.build.executable": { 82 | "type": "string", 83 | "default": "latexmk", 84 | "description": "Path to a LaTeX build tool." 85 | }, 86 | "texlab.build.args": { 87 | "type": "array", 88 | "default": [ 89 | "-pdf", 90 | "-interaction=nonstopmode", 91 | "-synctex=1", 92 | "%f" 93 | ], 94 | "description": "Additional arguments that are passed to the build tool." 95 | }, 96 | "texlab.build.onSave": { 97 | "type": "boolean", 98 | "default": false, 99 | "description": "Build after saving a file" 100 | }, 101 | "texlab.build.forwardSearchAfter": { 102 | "type": "boolean", 103 | "default": false, 104 | "description": "Execute forward search after building" 105 | }, 106 | "texlab.auxDirectory": { 107 | "type": "string", 108 | "default": ".", 109 | "description": "Directory containing the build artifacts." 110 | }, 111 | "texlab.forwardSearch.executable": { 112 | "type": [ 113 | "string", 114 | "null" 115 | ], 116 | "default": null, 117 | "description": "Path to a PDF previewer that supports SyncTeX." 118 | }, 119 | "texlab.forwardSearch.args": { 120 | "type": "array", 121 | "default": [], 122 | "description": "Additional arguments that are passed to the previewer." 123 | }, 124 | "texlab.chktex.onOpenAndSave": { 125 | "type": "boolean", 126 | "default": false, 127 | "description": "Lint using chktex after opening and saving a file." 128 | }, 129 | "texlab.chktex.onEdit": { 130 | "type": "boolean", 131 | "default": false, 132 | "description": "Lint using chktex after changing a file" 133 | }, 134 | "texlab.bibtexFormatter": { 135 | "type": "string", 136 | "default": "texlab", 137 | "description": "BibTeX formatter to use." 138 | }, 139 | "texlab.formatterLineLength": { 140 | "type": "integer", 141 | "default": 80, 142 | "description": "Maximum amount of characters per line (0 = disable)." 143 | }, 144 | "texlab.latexFormatter": { 145 | "type": "string", 146 | "default": "latexindent", 147 | "description": "LaTeX formatter to use." 148 | }, 149 | "texlab.latexindent.local": { 150 | "type": [ 151 | "string", 152 | "null" 153 | ], 154 | "default": null, 155 | "description": "Configures the --local flag of latexindent." 156 | }, 157 | "texlab.latexindent.modifyLineBreaks": { 158 | "type": "boolean", 159 | "default": false, 160 | "description": "Configures the --modifylinebreaks flag of latexindent." 161 | } 162 | } 163 | }, 164 | "commands": [ 165 | { 166 | "command": "latex.Build", 167 | "title": "Build current LaTeX file", 168 | "category": "TexLab" 169 | }, 170 | { 171 | "command": "latex.ForwardSearch", 172 | "title": "Performs a forward search from the current file, used to preview PDF", 173 | "category": "TexLab" 174 | }, 175 | { 176 | "command": "latex.UpdateLanguageServer", 177 | "title": "Upgrade TexLab Server to latest version", 178 | "category": "TexLab" 179 | } 180 | ] 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import { Document, LanguageClient, LanguageClientOptions, Position, RequestType, ServerOptions, TextDocumentIdentifier, TextDocumentPositionParams } from 'coc.nvim'; 2 | 3 | interface BuildTextDocumentParams { 4 | /** 5 | * The text document to build. 6 | */ 7 | textDocument: TextDocumentIdentifier; 8 | } 9 | 10 | export interface BuildResult { 11 | /** 12 | * The status of the build process. 13 | */ 14 | status: BuildStatus; 15 | } 16 | 17 | export enum BuildStatus { 18 | /** 19 | * The build process terminated without any errors. 20 | */ 21 | Success = 0, 22 | 23 | /** 24 | * The build process terminated with errors. 25 | */ 26 | Error = 1, 27 | 28 | /** 29 | * The build process failed to start or crashed. 30 | */ 31 | Failure = 2, 32 | 33 | /** 34 | * The build process was cancelled. 35 | */ 36 | Cancelled = 3 37 | } 38 | 39 | export enum ForwardSearchStatus { 40 | /** 41 | * The previewer process executed the command without any errors. 42 | */ 43 | Success = 0, 44 | 45 | /** 46 | * The previewer process executed the command with errors. 47 | */ 48 | Error = 1, 49 | 50 | /** 51 | * The previewer process failed to start or crashed. 52 | */ 53 | Failure = 2, 54 | 55 | /** 56 | * The previewer command is not configured. 57 | */ 58 | Unconfigured = 3 59 | } 60 | 61 | export interface ForwardSearchResult { 62 | /** 63 | * The status of the previewer process. 64 | */ 65 | status: ForwardSearchStatus; 66 | } 67 | 68 | namespace BuildTextDocumentRequest { 69 | export const type = new RequestType('textDocument/build'); 70 | } 71 | 72 | namespace ForwardSearchRequest { 73 | export const type = new RequestType('textDocument/forwardSearch'); 74 | } 75 | 76 | export class LatexLanguageClient extends LanguageClient { 77 | constructor(name: string, serverOptions: ServerOptions, clientOptions: LanguageClientOptions) { 78 | super(name, serverOptions, clientOptions); 79 | } 80 | 81 | public async build(doc: Document): Promise { 82 | const params: BuildTextDocumentParams = { 83 | textDocument: { uri: doc.uri } 84 | }; 85 | 86 | return this.sendRequest(BuildTextDocumentRequest.type.method, params); 87 | } 88 | 89 | public async forwardSearch(doc: Document, position: Position): Promise { 90 | const params: TextDocumentPositionParams = { 91 | textDocument: { uri: doc.uri }, 92 | position: position 93 | }; 94 | 95 | return this.sendRequest(ForwardSearchRequest.type.method, params); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const Selectors = [ 2 | { 3 | language: 'tex', 4 | scheme: 'file' 5 | }, 6 | 7 | { 8 | language: 'latex', 9 | scheme: 'file' 10 | }, 11 | 12 | { 13 | language: 'bibtex', 14 | scheme: 'file' 15 | }, 16 | 17 | { 18 | language: 'plaintex', 19 | scheme: 'file' 20 | }, 21 | 22 | { 23 | language: 'tex', 24 | scheme: 'untitled' 25 | }, 26 | 27 | { 28 | language: 'latex', 29 | scheme: 'untitled' 30 | }, 31 | 32 | { 33 | language: 'bibtex', 34 | scheme: 'untitled' 35 | }, 36 | 37 | { 38 | language: 'plaintex', 39 | scheme: 'untitled' 40 | } 41 | ]; 42 | 43 | export namespace Commands { 44 | export const BUILD = 'latex.Build'; 45 | 46 | export const FORWARD_SEARCH = 'latex.ForwardSearch'; 47 | 48 | export const UPDATE_LANGUAGE_SERVER = 'latex.UpdateLanguageServer'; 49 | } 50 | -------------------------------------------------------------------------------- /src/downloader.ts: -------------------------------------------------------------------------------- 1 | import { window, workspace } from 'coc.nvim'; 2 | import { existsSync, mkdirSync, promises as fs } from 'fs'; 3 | import { Agent } from 'http'; 4 | import fetch from 'node-fetch'; 5 | import path from 'path'; 6 | import { pipeline } from 'stream'; 7 | import tar from 'tar'; 8 | import tunnel from 'tunnel'; 9 | import unzipper from 'unzipper'; 10 | import { promisify } from 'util'; 11 | 12 | const streamPipeline = promisify(pipeline); 13 | 14 | function getAgent(): Agent | undefined { 15 | let proxy = workspace.getConfiguration('http').get('proxy', ''); 16 | if (proxy) { 17 | let auth = proxy.includes('@') ? proxy.split('@', 2)[0] : ''; 18 | let parts = auth.length ? proxy.slice(auth.length + 1).split(':') : proxy.split(':'); 19 | if (parts.length > 1) { 20 | let agent = tunnel.httpsOverHttp({ 21 | proxy: { 22 | headers: {}, 23 | host: parts[0], 24 | port: parseInt(parts[1], 10), 25 | proxyAuth: auth 26 | } 27 | }); 28 | return agent; 29 | } 30 | } 31 | } 32 | 33 | async function getLatestRelease(): Promise<{ ver: string; url: string; } | null> { 34 | const apiURL = 'https://api.github.com/repos/latex-lsp/texlab/releases/latest'; 35 | const resp = await fetch(apiURL, { agent: getAgent() }); 36 | if (!resp.ok) return null; 37 | 38 | const ver = (await resp.json()).tag_name || 'v5.9.2'; 39 | const arch = process.arch === 'arm64' ? 'aarch64' : 'x86_64'; 40 | const urls = { 41 | win32: `https://github.com/latex-lsp/texlab/releases/download/${ver}/texlab-${arch}-windows.zip`, 42 | linux: `https://github.com/latex-lsp/texlab/releases/download/${ver}/texlab-${arch}-linux.tar.gz`, 43 | darwin: `https://github.com/latex-lsp/texlab/releases/download/${ver}/texlab-${arch}-macos.tar.gz` 44 | }; 45 | const url = urls[process.platform]; 46 | return url ? { url, ver } : null; 47 | } 48 | 49 | export async function downloadServer(root: string): Promise { 50 | let statusItem = window.createStatusBarItem(0, { progress: true }); 51 | statusItem.text = 'Getting the latest version...'; 52 | statusItem.show(); 53 | 54 | const release = await getLatestRelease(); 55 | if (!release) { 56 | statusItem.hide(); 57 | throw new Error(`Get TexLab release failed`); 58 | } 59 | 60 | const resp = await fetch(release.url, { agent: getAgent() }); 61 | if (!resp.ok) { 62 | statusItem.hide(); 63 | throw new Error('Download failed'); 64 | } 65 | 66 | let cur = 0; 67 | const len = Number(resp.headers.get('content-length')); 68 | resp.body.on('data', (chunk: Buffer) => { 69 | cur += chunk.length; 70 | const p = ((cur / len) * 100).toFixed(2); 71 | statusItem.text = `${p}% Downloading TexLab Server ${release.ver}`; 72 | }); 73 | 74 | const bin = process.platform === 'win32' ? 'texlab.exe' : 'texlab'; 75 | const tempRoot = path.join(root, 'download'); 76 | if (!existsSync(tempRoot)) { 77 | mkdirSync(tempRoot); 78 | } 79 | const extract = process.platform === 'win32' ? () => unzipper.Extract({ path: tempRoot }) : () => tar.x({ C: tempRoot }); 80 | await streamPipeline(resp.body, extract()); 81 | await fs.unlink(path.join(root, bin)).catch((err) => { 82 | if (err.code !== 'ENOENT') throw err; 83 | }); 84 | await fs.rename(path.join(tempRoot, bin), path.join(root, bin)); 85 | statusItem.hide(); 86 | } 87 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, FoldingRange, LanguageClientOptions, ServerOptions, services, window, workspace } from 'coc.nvim'; 2 | import fs from 'fs'; 3 | import os from 'os'; 4 | import path from 'path'; 5 | import which from 'which'; 6 | import { BuildStatus, ForwardSearchStatus, LatexLanguageClient } from './client'; 7 | import { Commands, Selectors } from './constants'; 8 | import { downloadServer } from './downloader'; 9 | 10 | export async function activate(context: ExtensionContext): Promise { 11 | const serverRoot = context.storagePath; 12 | if (!fs.existsSync(serverRoot)) { 13 | fs.mkdirSync(serverRoot); 14 | } 15 | 16 | const bin = os.platform() === 'win32' ? 'texlab.exe' : 'texlab'; 17 | let serverPath = path.join(serverRoot, bin); 18 | 19 | const custom = workspace.getConfiguration('texlab').get('path') as string; 20 | if (custom && fs.existsSync(custom)) { 21 | serverPath = custom; 22 | } 23 | 24 | if (!fs.existsSync(serverPath)) { 25 | const first = which.sync(bin, { nothrow: true }); 26 | if (first) { 27 | serverPath = first; 28 | } else { 29 | const msg = `TexLab Server is not found, download from GitHub?`; 30 | const ret = await window.showQuickpick(['Yes', 'Cancel'], msg); 31 | if (ret > 0) return; 32 | try { 33 | await downloadServer(serverRoot); 34 | } catch (e) { 35 | if (fs.existsSync(serverPath)) fs.unlinkSync(serverPath); 36 | window.showErrorMessage(`Download TexLab Server failed`); 37 | console.error(e); 38 | return; 39 | } 40 | } 41 | } 42 | 43 | const serverOptions = getServerOptions(serverPath); 44 | const clientOptions: LanguageClientOptions = { 45 | documentSelector: Selectors, 46 | middleware: { 47 | provideFoldingRanges: async (document, context, token, next) => { 48 | const ranges = (await next(document, context, token)) as FoldingRange[]; 49 | return ranges.reverse(); 50 | } 51 | } 52 | }; 53 | 54 | const client = new LatexLanguageClient('TexLab', serverOptions, clientOptions); 55 | 56 | context.subscriptions.push(services.registLanguageClient(client)); 57 | context.subscriptions.push( 58 | commands.registerCommand(Commands.BUILD, async () => { 59 | await build(client); 60 | }), 61 | 62 | commands.registerCommand(Commands.FORWARD_SEARCH, async () => { 63 | await forwardSearch(client); 64 | }), 65 | 66 | commands.registerCommand(Commands.UPDATE_LANGUAGE_SERVER, async () => { 67 | await client.stop(); 68 | try { 69 | await downloadServer(serverRoot); 70 | } catch (e) { 71 | if (fs.existsSync(serverPath)) fs.unlinkSync(serverPath); 72 | window.showInformationMessage(`Update TexLab Server failed, please try again`); 73 | console.error(e); 74 | return; 75 | } 76 | client.start(); 77 | }) 78 | ); 79 | 80 | client.onReady().then(() => { 81 | window.showInformationMessage(`TexLab Server Started`); 82 | }); 83 | } 84 | 85 | async function build(client: LatexLanguageClient): Promise { 86 | const doc = await workspace.document; 87 | if (workspace.match(Selectors, doc.textDocument) <= 0) { 88 | return; 89 | } 90 | 91 | window.showInformationMessage(`Build started`); 92 | 93 | const result = await client.build(doc); 94 | if (!result) { 95 | return; 96 | } 97 | 98 | switch (result.status) { 99 | case BuildStatus.Success: 100 | window.showInformationMessage(`Build success`); 101 | break; 102 | case BuildStatus.Cancelled: 103 | window.showInformationMessage(`Build cancelled`); 104 | break; 105 | case BuildStatus.Error: 106 | window.showErrorMessage(`Build failed: build process terminated with errors`); 107 | break; 108 | case BuildStatus.Failure: 109 | window.showErrorMessage(`Build failed: build process failed to start or crashed`); 110 | break; 111 | } 112 | } 113 | 114 | async function forwardSearch(client: LatexLanguageClient): Promise { 115 | const doc = await workspace.document; 116 | if (workspace.match(Selectors, doc.textDocument) <= 0) { 117 | return; 118 | } 119 | 120 | const position = await window.getCursorPosition(); 121 | const result = await client.forwardSearch(doc, position); 122 | switch (result.status) { 123 | case ForwardSearchStatus.Success: 124 | window.showInformationMessage(`Preview success`); 125 | break; 126 | case ForwardSearchStatus.Error: 127 | window.showErrorMessage(`Preview failed: previewer process executed the command with errors`); 128 | break; 129 | case ForwardSearchStatus.Failure: 130 | window.showErrorMessage(`Preview failed: previewer process failed to start or crashed`); 131 | break; 132 | case ForwardSearchStatus.Unconfigured: 133 | window.showWarningMessage(`Preview failed: previewer command is not configured`); 134 | break; 135 | } 136 | } 137 | 138 | function getServerOptions(serverPath: string): ServerOptions { 139 | const { ELECTRON_RUN_AS_NODE, ...env } = process.env; 140 | return { 141 | run: { 142 | command: serverPath, 143 | options: { 144 | env 145 | } 146 | }, 147 | debug: { 148 | command: serverPath, 149 | args: ['-vvvv'], 150 | options: { 151 | env: { 152 | ...env, 153 | RUST_BACKTRACE: '1' 154 | } 155 | } 156 | } 157 | }; 158 | } 159 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": ["es2017", "es2018"], 5 | "module": "commonjs", 6 | "declaration": false, 7 | "sourceMap": true, 8 | "outDir": "lib", 9 | "strict": true, 10 | "moduleResolution": "node", 11 | "noImplicitAny": false, 12 | "esModuleInterop": true 13 | }, 14 | "include": ["src"] 15 | } 16 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/aix-ppc64@0.25.0": 6 | version "0.25.0" 7 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64" 8 | integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ== 9 | 10 | "@esbuild/android-arm64@0.25.0": 11 | version "0.25.0" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f" 13 | integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g== 14 | 15 | "@esbuild/android-arm@0.25.0": 16 | version "0.25.0" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b" 18 | integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g== 19 | 20 | "@esbuild/android-x64@0.25.0": 21 | version "0.25.0" 22 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163" 23 | integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg== 24 | 25 | "@esbuild/darwin-arm64@0.25.0": 26 | version "0.25.0" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c" 28 | integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw== 29 | 30 | "@esbuild/darwin-x64@0.25.0": 31 | version "0.25.0" 32 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a" 33 | integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg== 34 | 35 | "@esbuild/freebsd-arm64@0.25.0": 36 | version "0.25.0" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce" 38 | integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w== 39 | 40 | "@esbuild/freebsd-x64@0.25.0": 41 | version "0.25.0" 42 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7" 43 | integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A== 44 | 45 | "@esbuild/linux-arm64@0.25.0": 46 | version "0.25.0" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73" 48 | integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg== 49 | 50 | "@esbuild/linux-arm@0.25.0": 51 | version "0.25.0" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3" 53 | integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg== 54 | 55 | "@esbuild/linux-ia32@0.25.0": 56 | version "0.25.0" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19" 58 | integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg== 59 | 60 | "@esbuild/linux-loong64@0.25.0": 61 | version "0.25.0" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7" 63 | integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw== 64 | 65 | "@esbuild/linux-mips64el@0.25.0": 66 | version "0.25.0" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1" 68 | integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ== 69 | 70 | "@esbuild/linux-ppc64@0.25.0": 71 | version "0.25.0" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951" 73 | integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw== 74 | 75 | "@esbuild/linux-riscv64@0.25.0": 76 | version "0.25.0" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987" 78 | integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA== 79 | 80 | "@esbuild/linux-s390x@0.25.0": 81 | version "0.25.0" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4" 83 | integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA== 84 | 85 | "@esbuild/linux-x64@0.25.0": 86 | version "0.25.0" 87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz#08fcf60cb400ed2382e9f8e0f5590bac8810469a" 88 | integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw== 89 | 90 | "@esbuild/netbsd-arm64@0.25.0": 91 | version "0.25.0" 92 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b" 93 | integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw== 94 | 95 | "@esbuild/netbsd-x64@0.25.0": 96 | version "0.25.0" 97 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b" 98 | integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA== 99 | 100 | "@esbuild/openbsd-arm64@0.25.0": 101 | version "0.25.0" 102 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7" 103 | integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw== 104 | 105 | "@esbuild/openbsd-x64@0.25.0": 106 | version "0.25.0" 107 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde" 108 | integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg== 109 | 110 | "@esbuild/sunos-x64@0.25.0": 111 | version "0.25.0" 112 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92" 113 | integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg== 114 | 115 | "@esbuild/win32-arm64@0.25.0": 116 | version "0.25.0" 117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c" 118 | integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw== 119 | 120 | "@esbuild/win32-ia32@0.25.0": 121 | version "0.25.0" 122 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079" 123 | integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA== 124 | 125 | "@esbuild/win32-x64@0.25.0": 126 | version "0.25.0" 127 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b" 128 | integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ== 129 | 130 | "@types/node-fetch@^2.6.3": 131 | version "2.6.3" 132 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.3.tgz#175d977f5e24d93ad0f57602693c435c57ad7e80" 133 | integrity sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w== 134 | dependencies: 135 | "@types/node" "*" 136 | form-data "^3.0.0" 137 | 138 | "@types/node@*": 139 | version "14.14.19" 140 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.19.tgz#5135176a8330b88ece4e9ab1fdcfc0a545b4bab4" 141 | integrity sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ== 142 | 143 | "@types/tar@^6.1.4": 144 | version "6.1.4" 145 | resolved "https://registry.yarnpkg.com/@types/tar/-/tar-6.1.4.tgz#cf8497e1ebdc09212fd51625cd2eb5ca18365ad1" 146 | integrity sha512-Cp4oxpfIzWt7mr2pbhHT2OTXGMAL0szYCzuf8lRWyIMCgsx6/Hfc3ubztuhvzXHXgraTQxyOCmmg7TDGIMIJJQ== 147 | dependencies: 148 | "@types/node" "*" 149 | minipass "^4.0.0" 150 | 151 | "@types/tunnel@^0.0.3": 152 | version "0.0.3" 153 | resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9" 154 | integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA== 155 | dependencies: 156 | "@types/node" "*" 157 | 158 | "@types/unzipper@^0.10.5": 159 | version "0.10.5" 160 | resolved "https://registry.yarnpkg.com/@types/unzipper/-/unzipper-0.10.5.tgz#36a963cf025162b4ac31642590cb4192971d633b" 161 | integrity sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA== 162 | dependencies: 163 | "@types/node" "*" 164 | 165 | "@types/which@^2.0.0": 166 | version "2.0.1" 167 | resolved "https://registry.yarnpkg.com/@types/which/-/which-2.0.1.tgz#27ecd67f915b7c3d6ba552135bb1eecd66e63501" 168 | integrity sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ== 169 | 170 | asynckit@^0.4.0: 171 | version "0.4.0" 172 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 173 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 174 | 175 | balanced-match@^1.0.0: 176 | version "1.0.0" 177 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 178 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 179 | 180 | big-integer@^1.6.17: 181 | version "1.6.44" 182 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" 183 | integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== 184 | 185 | binary@~0.3.0: 186 | version "0.3.0" 187 | resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" 188 | integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= 189 | dependencies: 190 | buffers "~0.1.1" 191 | chainsaw "~0.1.0" 192 | 193 | bluebird@~3.4.1: 194 | version "3.4.7" 195 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" 196 | integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= 197 | 198 | brace-expansion@^1.1.7: 199 | version "1.1.11" 200 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 201 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 202 | dependencies: 203 | balanced-match "^1.0.0" 204 | concat-map "0.0.1" 205 | 206 | brace-expansion@^2.0.1: 207 | version "2.0.1" 208 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 209 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 210 | dependencies: 211 | balanced-match "^1.0.0" 212 | 213 | buffer-indexof-polyfill@~1.0.0: 214 | version "1.0.1" 215 | resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" 216 | integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= 217 | 218 | buffers@~0.1.1: 219 | version "0.1.1" 220 | resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" 221 | integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= 222 | 223 | chainsaw@~0.1.0: 224 | version "0.1.0" 225 | resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" 226 | integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= 227 | dependencies: 228 | traverse ">=0.3.0 <0.4" 229 | 230 | chownr@^2.0.0: 231 | version "2.0.0" 232 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 233 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 234 | 235 | coc.nvim@^0.0.83-next.9: 236 | version "0.0.83-next.9" 237 | resolved "https://registry.yarnpkg.com/coc.nvim/-/coc.nvim-0.0.83-next.9.tgz#8f7de8c98fa37019286852d3b7229fb91517ab83" 238 | integrity sha512-ek5+EgA9N92/6Wt07TAYpavmBgXZto4Dmwmm56oyBl/w4wy3Tod7LfpCp4k9M4xCxhxPtrflIcxvhdDUPIeMuw== 239 | 240 | combined-stream@^1.0.8: 241 | version "1.0.8" 242 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 243 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 244 | dependencies: 245 | delayed-stream "~1.0.0" 246 | 247 | concat-map@0.0.1: 248 | version "0.0.1" 249 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 250 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 251 | 252 | core-util-is@~1.0.0: 253 | version "1.0.2" 254 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 255 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 256 | 257 | delayed-stream@~1.0.0: 258 | version "1.0.0" 259 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 260 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 261 | 262 | duplexer2@~0.1.4: 263 | version "0.1.4" 264 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 265 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 266 | dependencies: 267 | readable-stream "^2.0.2" 268 | 269 | esbuild@^0.25.0: 270 | version "0.25.0" 271 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92" 272 | integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw== 273 | optionalDependencies: 274 | "@esbuild/aix-ppc64" "0.25.0" 275 | "@esbuild/android-arm" "0.25.0" 276 | "@esbuild/android-arm64" "0.25.0" 277 | "@esbuild/android-x64" "0.25.0" 278 | "@esbuild/darwin-arm64" "0.25.0" 279 | "@esbuild/darwin-x64" "0.25.0" 280 | "@esbuild/freebsd-arm64" "0.25.0" 281 | "@esbuild/freebsd-x64" "0.25.0" 282 | "@esbuild/linux-arm" "0.25.0" 283 | "@esbuild/linux-arm64" "0.25.0" 284 | "@esbuild/linux-ia32" "0.25.0" 285 | "@esbuild/linux-loong64" "0.25.0" 286 | "@esbuild/linux-mips64el" "0.25.0" 287 | "@esbuild/linux-ppc64" "0.25.0" 288 | "@esbuild/linux-riscv64" "0.25.0" 289 | "@esbuild/linux-s390x" "0.25.0" 290 | "@esbuild/linux-x64" "0.25.0" 291 | "@esbuild/netbsd-arm64" "0.25.0" 292 | "@esbuild/netbsd-x64" "0.25.0" 293 | "@esbuild/openbsd-arm64" "0.25.0" 294 | "@esbuild/openbsd-x64" "0.25.0" 295 | "@esbuild/sunos-x64" "0.25.0" 296 | "@esbuild/win32-arm64" "0.25.0" 297 | "@esbuild/win32-ia32" "0.25.0" 298 | "@esbuild/win32-x64" "0.25.0" 299 | 300 | form-data@^3.0.0: 301 | version "3.0.0" 302 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" 303 | integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== 304 | dependencies: 305 | asynckit "^0.4.0" 306 | combined-stream "^1.0.8" 307 | mime-types "^2.1.12" 308 | 309 | fs-minipass@^2.0.0: 310 | version "2.0.0" 311 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" 312 | integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== 313 | dependencies: 314 | minipass "^3.0.0" 315 | 316 | fs.realpath@^1.0.0: 317 | version "1.0.0" 318 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 319 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 320 | 321 | fstream@^1.0.12: 322 | version "1.0.12" 323 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 324 | integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== 325 | dependencies: 326 | graceful-fs "^4.1.2" 327 | inherits "~2.0.0" 328 | mkdirp ">=0.5 0" 329 | rimraf "2" 330 | 331 | glob@^7.1.3: 332 | version "7.1.6" 333 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 334 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 335 | dependencies: 336 | fs.realpath "^1.0.0" 337 | inflight "^1.0.4" 338 | inherits "2" 339 | minimatch "^3.0.4" 340 | once "^1.3.0" 341 | path-is-absolute "^1.0.0" 342 | 343 | glob@^9.2.0: 344 | version "9.3.4" 345 | resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.4.tgz#e75dee24891a80c25cc7ee1dd327e126b98679af" 346 | integrity sha512-qaSc49hojMOv1EPM4EuyITjDSgSKI0rthoHnvE81tcOi1SCVndHko7auqxdQ14eiQG2NDBJBE86+2xIrbIvrbA== 347 | dependencies: 348 | fs.realpath "^1.0.0" 349 | minimatch "^8.0.2" 350 | minipass "^4.2.4" 351 | path-scurry "^1.6.1" 352 | 353 | graceful-fs@^4.1.2, graceful-fs@^4.2.2: 354 | version "4.2.4" 355 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 356 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 357 | 358 | inflight@^1.0.4: 359 | version "1.0.6" 360 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 361 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 362 | dependencies: 363 | once "^1.3.0" 364 | wrappy "1" 365 | 366 | inherits@2, inherits@~2.0.0, inherits@~2.0.3: 367 | version "2.0.4" 368 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 369 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 370 | 371 | isarray@~1.0.0: 372 | version "1.0.0" 373 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 374 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 375 | 376 | isexe@^2.0.0: 377 | version "2.0.0" 378 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 379 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 380 | 381 | listenercount@~1.0.1: 382 | version "1.0.1" 383 | resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" 384 | integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= 385 | 386 | lru-cache@^7.14.1: 387 | version "7.18.3" 388 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" 389 | integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== 390 | 391 | mime-db@1.44.0: 392 | version "1.44.0" 393 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 394 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 395 | 396 | mime-types@^2.1.12: 397 | version "2.1.27" 398 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 399 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 400 | dependencies: 401 | mime-db "1.44.0" 402 | 403 | minimatch@^3.0.4: 404 | version "3.1.2" 405 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 406 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 407 | dependencies: 408 | brace-expansion "^1.1.7" 409 | 410 | minimatch@^8.0.2: 411 | version "8.0.3" 412 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.3.tgz#0415cb9bb0c1d8ac758c8a673eb1d288e13f5e75" 413 | integrity sha512-tEEvU9TkZgnFDCtpnrEYnPsjT7iUx42aXfs4bzmQ5sMA09/6hZY0jeZcGkXyDagiBOvkUjNo8Viom+Me6+2x7g== 414 | dependencies: 415 | brace-expansion "^2.0.1" 416 | 417 | minimist@^1.2.5: 418 | version "1.2.6" 419 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 420 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 421 | 422 | minipass@^3.0.0: 423 | version "3.0.0" 424 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.0.0.tgz#adb830268348df8b32217ceda3fc48684faff232" 425 | integrity sha512-FKNU4XrAPDX0+ynwns7njVu4RolyG1mUKSlT6n6GwGXLtYSYh2Znc0S83Rl6zEr1zgFfXvAzIBabnmItm+n19g== 426 | dependencies: 427 | yallist "^4.0.0" 428 | 429 | minipass@^4.0.0, minipass@^4.0.2, minipass@^4.2.4: 430 | version "4.2.5" 431 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" 432 | integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== 433 | 434 | minipass@^5.0.0: 435 | version "5.0.0" 436 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" 437 | integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== 438 | 439 | minizlib@^2.1.1: 440 | version "2.1.2" 441 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 442 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 443 | dependencies: 444 | minipass "^3.0.0" 445 | yallist "^4.0.0" 446 | 447 | "mkdirp@>=0.5 0": 448 | version "0.5.4" 449 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" 450 | integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== 451 | dependencies: 452 | minimist "^1.2.5" 453 | 454 | mkdirp@^1.0.3: 455 | version "1.0.3" 456 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" 457 | integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== 458 | 459 | node-fetch@^2.6.0: 460 | version "2.6.7" 461 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 462 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 463 | dependencies: 464 | whatwg-url "^5.0.0" 465 | 466 | once@^1.3.0: 467 | version "1.4.0" 468 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 469 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 470 | dependencies: 471 | wrappy "1" 472 | 473 | path-is-absolute@^1.0.0: 474 | version "1.0.1" 475 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 476 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 477 | 478 | path-scurry@^1.6.1: 479 | version "1.6.3" 480 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.6.3.tgz#4eba7183d64ef88b63c7d330bddc3ba279dc6c40" 481 | integrity sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g== 482 | dependencies: 483 | lru-cache "^7.14.1" 484 | minipass "^4.0.2" 485 | 486 | process-nextick-args@~2.0.0: 487 | version "2.0.1" 488 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 489 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 490 | 491 | readable-stream@^2.0.2, readable-stream@~2.3.6: 492 | version "2.3.7" 493 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 494 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 495 | dependencies: 496 | core-util-is "~1.0.0" 497 | inherits "~2.0.3" 498 | isarray "~1.0.0" 499 | process-nextick-args "~2.0.0" 500 | safe-buffer "~5.1.1" 501 | string_decoder "~1.1.1" 502 | util-deprecate "~1.0.1" 503 | 504 | rimraf@2: 505 | version "2.7.1" 506 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 507 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 508 | dependencies: 509 | glob "^7.1.3" 510 | 511 | rimraf@^4.4.1: 512 | version "4.4.1" 513 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" 514 | integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== 515 | dependencies: 516 | glob "^9.2.0" 517 | 518 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 519 | version "5.1.2" 520 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 521 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 522 | 523 | setimmediate@~1.0.4: 524 | version "1.0.5" 525 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 526 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 527 | 528 | string_decoder@~1.1.1: 529 | version "1.1.1" 530 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 531 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 532 | dependencies: 533 | safe-buffer "~5.1.0" 534 | 535 | tar@^6.1.13: 536 | version "6.2.1" 537 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" 538 | integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== 539 | dependencies: 540 | chownr "^2.0.0" 541 | fs-minipass "^2.0.0" 542 | minipass "^5.0.0" 543 | minizlib "^2.1.1" 544 | mkdirp "^1.0.3" 545 | yallist "^4.0.0" 546 | 547 | tr46@~0.0.3: 548 | version "0.0.3" 549 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 550 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 551 | 552 | "traverse@>=0.3.0 <0.4": 553 | version "0.3.9" 554 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" 555 | integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= 556 | 557 | tunnel@^0.0.6: 558 | version "0.0.6" 559 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" 560 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 561 | 562 | typescript@^5.0.3: 563 | version "5.0.3" 564 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.3.tgz#fe976f0c826a88d0a382007681cbb2da44afdedf" 565 | integrity sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA== 566 | 567 | unzipper@^0.10.11: 568 | version "0.10.11" 569 | resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" 570 | integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== 571 | dependencies: 572 | big-integer "^1.6.17" 573 | binary "~0.3.0" 574 | bluebird "~3.4.1" 575 | buffer-indexof-polyfill "~1.0.0" 576 | duplexer2 "~0.1.4" 577 | fstream "^1.0.12" 578 | graceful-fs "^4.2.2" 579 | listenercount "~1.0.1" 580 | readable-stream "~2.3.6" 581 | setimmediate "~1.0.4" 582 | 583 | util-deprecate@~1.0.1: 584 | version "1.0.2" 585 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 586 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 587 | 588 | webidl-conversions@^3.0.0: 589 | version "3.0.1" 590 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 591 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 592 | 593 | whatwg-url@^5.0.0: 594 | version "5.0.0" 595 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 596 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 597 | dependencies: 598 | tr46 "~0.0.3" 599 | webidl-conversions "^3.0.0" 600 | 601 | which@^2.0.2: 602 | version "2.0.2" 603 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 604 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 605 | dependencies: 606 | isexe "^2.0.0" 607 | 608 | wrappy@1: 609 | version "1.0.2" 610 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 611 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 612 | 613 | yallist@^4.0.0: 614 | version "4.0.0" 615 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 616 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 617 | --------------------------------------------------------------------------------