├── .eslintrc.json ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── images └── debugging-in-nodebook.gif ├── package.json ├── samplenotebooks └── sample.nodebook ├── src ├── extension.ts ├── nodeKernel.ts ├── nodebook.ts ├── nodebookProvider.ts └── types │ ├── vscode.d.ts │ └── vscode.proposed.d.ts ├── tsconfig.json ├── vsc-extension-quickstart.md └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/class-name-casing": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | .vscode-test/ 4 | *.vsix 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}", 14 | "--enable-proposed-api", "undefined_publisher.vscode-nodebook", 15 | "${workspaceFolder}/samplenotebooks" 16 | ], 17 | "outFiles": [ 18 | "${workspaceFolder}/out/**/*.js" 19 | ], 20 | "preLaunchTask": "${defaultBuildTask}" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | src/** 5 | .gitignore 6 | vsc-extension-quickstart.md 7 | **/tsconfig.json 8 | **/.eslintrc.json 9 | **/*.map 10 | **/*.ts 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "vscode-nodebook" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [Unreleased] 8 | 9 | - Initial release -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 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 | # Debugging in a JavaScript Notebook 2 | 3 | A sample Javascript notebook that supports debugging. 4 | 5 | The main focus of this sample is to show how to implement notebook debugging functionality based on existing VS Code debugger extensions. 6 | 7 | In detail the sample shows how to: 8 | - run (evaluate) notebook cells without debugging, 9 | - intercept DAP messages in order to map back and forth between VS Code's notebook cells and the cell representation used by the underlying Node.js runtime. 10 | 11 | 12 | ## Running the sample 13 | 14 | We assume that you have already cloned this repository, ran `yarn` and opened the project in VS Code. 15 | 16 | Pressing **F5** opens another VS Code window with a project folder containing a sample notebook. 17 | 18 | In order to debug cells you can enable debug mode by pressing the "bug" action in the editor's toolbar. 19 | This makes the breakpoint gutter available where you can set breakpoints. 20 | When you now evaluate cells, breakpoints will be hit and you can inspect variables in VS Code's usual debugger views and panes. 21 | 22 | ![Running and evaluating notebook cells](images/debugging-in-nodebook.gif) 23 | 24 | 25 | ## Implementation Notes 26 | 27 | These notes cover only the debugging functionality of the notebook implementation which lives mostly in the source file [`nodeKernel.ts`](https://github.com/microsoft/vscode-nodebook/blob/master/src/nodeKernel.ts). 28 | 29 | A notebook is a structured document and the individual cells are not directly available for typical debuggers because they expect the code in files on disk or as interactive input when in REPL ([Read–eval–print loop](https://en.wikipedia.org/wiki/Read–eval–print_loop)) mode. 30 | 31 | In this sample we are using a Node.js runtime in REPL mode as the notebook's kernel. The following snippet from `nodeKernel.ts` shows how Node.js is started with debugging turned on in REPL mode (where it expects to receive input via stdin): 32 | 33 | ```ts 34 | this.nodeRuntime = cp.spawn('node', [ 35 | `--inspect=${this.debugPort}`, 36 | `-e`, `require('repl').start({ prompt: '', ignoreUndefined: true })` 37 | ]) 38 | ``` 39 | 40 | Sending the cell contents to the Node.js REPL for evaluation has one problem: the REPL expects single lines whereas notebooks cell have multiple lines. Not only does this result in syntax errors but it is also difficult to get reliable breakpoints with this approach. 41 | 42 | We work around this problem by using the REPL's `.load ` directive which loads the code from the given file and then executes it. But this approach requires that we have to dump the cell's content into a temporary file before we can run the `.load ` directive: 43 | 44 | ```ts 45 | public async eval(cell: vscode.NotebookCell): Promise { 46 | 47 | const cellPath = this.dumpCell(cell.uri.toString()); 48 | this.nodeRuntime.stdin.write(`.load ${cellPath}\n`); 49 | 50 | // collect output from node.js runtime 51 | 52 | return output; 53 | } 54 | ``` 55 | 56 | The `NodeKernel.dumpCell` utility checks via the scheme whether the URI denotes a notebook cell and then stores the cell's content in a temporary file. In addition the association between this file and the notebook cell is kept in a dictionary (`pathToCell`): 57 | 58 | ```ts 59 | private pathToCell: Map = new Map(); 60 | 61 | private dumpCell(uri: string): string | undefined { 62 | try { 63 | const cellUri = vscode.Uri.parse(uri, true); 64 | if (cellUri.scheme === 'vscode-notebook-cell') { 65 | // find cell in document by matching its URI 66 | const cell = this.document.cells.find(c => c.uri.toString() === uri); 67 | if (cell) { 68 | const cellPath = `${this.tmpDirectory}/nodebook_cell_${cellUri.fragment}.js`; 69 | this.pathToCell.set(cellPath, cell); 70 | 71 | let data = cell.document.getText(); 72 | data += `\n//@ sourceURL=${cellPath}`; // trick to make node.js report the eval's source under this path 73 | fs.writeFileSync(cellPath, data); 74 | 75 | return cellPath; 76 | } 77 | } 78 | } catch(e) { 79 | } 80 | return undefined; 81 | } 82 | ``` 83 | 84 | With these preliminaries it is possible to evaluate cells, but source breakpoints will not yet work. Here is why: 85 | VS Code manages (source) breakpoints autonomously from debuggers by keeping the source document's URI and line and column information. When a debug session starts, VS Code registers breakpoints by sending this data to the debug extension. When a breakpoint is hit the debug extension is expected to send the actual location back to VS Code as document URIs and line and column information. 86 | 87 | The same holds for notebooks where each cell has its own document with its own cell URI. So notebook cell breakpoints are just like regular breakpoints. 88 | 89 | Because we store the cell contents in temporary files before the debugger sees them, we need to replace the cell URI of a breakpoint by the path of the corresponding temporary file when talking to the debugger. And when a breakpoint is hit, we need to replace the file paths in the location information by the original cell URIs. 90 | 91 | These transformations can be easily achieved by use of the [`vscode.DebugAdapterTracker`](https://github.com/microsoft/vscode/blob/3f43f45303c9433cf2a6422a6e61215e0631919d/src/vs/vscode.d.ts#L10843-L10871) which has full access to the DAP based communication between VS Code and the debug adapter. The tracker's `onWillReceiveMessage` is called for all DAP messages from VS Code to the debug adapter, and `onDidSendMessage` is called for all DAP messages from the debug adapter back to VS Code. 92 | A `DebugAdapterTracker` can be created and installed for a debug session by means of a factory object which is registered for a specific debug type. 93 | 94 | In the Nodebook sample the factory is registered on extension activation for all JavaScript/Node debugger types in [nodebookProvider.ts](https://github.com/microsoft/vscode-nodebook/blob/master/src/nodebookProvider.ts) with code that tries to find the corresponding NodeKernel for the debug session and then delegates the creation of the tracker to it: 95 | 96 | ```ts 97 | vscode.debug.registerDebugAdapterTrackerFactory('node', { 98 | createDebugAdapterTracker: (session: vscode.DebugSession): vscode.ProviderResult => { 99 | const kernel: NodeKernel = ... 100 | if (kernel) { 101 | return kernel.createTracker(); 102 | } 103 | return undefined; 104 | } 105 | }); 106 | ``` 107 | 108 | For the actual tranformation we have to find all places in the DAP protocol where file paths or URIs are used. These places are all represented by the `DebugProtocol.Source` interface and the visitor function `visitSources` can be used to "visit" those places and perform the mapping. Since the `visitSources` function depends heavily on the DAP specification, it should really live in the corresponding DAP npm module, but for now this sample just contains a copy (that might get out of date over time). 109 | 110 | Here is the Nodebook sample tracker that converts cell URIs to tmp file paths and vice versa: 111 | ```ts 112 | public createTracker(): vscode.DebugAdapterTracker { 113 | 114 | return { 115 | 116 | onWillReceiveMessage: (m: DebugProtocol.ProtocolMessage) => { 117 | // VS Code -> Debug Adapter 118 | visitSources(m, source => { 119 | if (source.path) { 120 | const cellPath = this.dumpCell(source.path); 121 | if (cellPath) { 122 | source.path = cellPath; 123 | } 124 | } 125 | }); 126 | }, 127 | 128 | onDidSendMessage: (m: DebugProtocol.ProtocolMessage) => { 129 | // Debug Adapter -> VS Code 130 | visitSources(m, source => { 131 | if (source.path) { 132 | let cell = this.pathToCell.get(source.path); 133 | if (cell) { 134 | source.path = cell.uri.toString(); 135 | source.name = PATH.basename(cell.uri.fsPath); 136 | // append cell index to name 137 | const cellIndex = this.document.cells.indexOf(cell); 138 | if (cellIndex >= 0) { 139 | source.name += `, Cell ${cellIndex + 1}`; 140 | } 141 | } 142 | } 143 | }); 144 | } 145 | } 146 | } 147 | ``` 148 | 149 | In the direction from VS Code to the debug adapter (`onWillReceiveMessage`) we use the `dumpCell` method again because it will ensure that the cell's content is dumped to a temporary file before the path to this file is used to patch the source object. 150 | 151 | In the other direction (`onDidSendMessage`) the dictionary is used to find the notebook cell for a given file path. If successfull, the source object is patched with the cell's URI and the display name of the source is set to the notebook's base name followed by the cell's index within the notebook. 152 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /images/debugging-in-nodebook.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/vscode-nodebook/354b0618e2ab0fcdd5a97367c9eff7517704d193/images/debugging-in-nodebook.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-nodebook", 3 | "displayName": "Nodebook", 4 | "description": "Node.js Notebook for VS Code", 5 | "version": "1.0.0", 6 | "enableProposedApi": true, 7 | "engines": { 8 | "vscode": "^1.49.0" 9 | }, 10 | "categories": [ 11 | "Other" 12 | ], 13 | "activationEvents": [ 14 | "onNotebookEditor:nodebook", 15 | "onNotebook:nodebook", 16 | "onDebugDynamicConfigurations:node" 17 | ], 18 | "main": "./out/extension.js", 19 | "contributes": { 20 | "languages": [ 21 | { 22 | "id": "nodebook", 23 | "aliases": [ 24 | "Node.js Notebook" 25 | ] 26 | } 27 | ], 28 | "notebookProvider": [ 29 | { 30 | "viewType": "nodebook", 31 | "displayName": "Node.js Notebook", 32 | "selector": [ 33 | { 34 | "filenamePattern": "*.nodebook" 35 | } 36 | ] 37 | } 38 | ], 39 | "commands": [ 40 | { 41 | "title": "Toggle Debugging", 42 | "command": "nodebook.toggleDebugging", 43 | "icon": "$(bug)" 44 | }, 45 | { 46 | "title": "Restart Kernel", 47 | "command": "nodebook.restartKernel", 48 | "icon": "$(refresh)" 49 | } 50 | ], 51 | "menus": { 52 | "editor/title": [ 53 | { 54 | "command": "nodebook.toggleDebugging", 55 | "when": "notebookEditorFocused", 56 | "group": "navigation@1" 57 | }, 58 | { 59 | "command": "nodebook.restartKernel", 60 | "when": "notebookEditorFocused", 61 | "group": "navigation@2" 62 | } 63 | ] 64 | } 65 | }, 66 | "scripts": { 67 | "vscode:prepublish": "yarn run compile", 68 | "compile": "tsc -p ./", 69 | "lint": "eslint src --ext ts", 70 | "watch": "tsc -watch -p ./", 71 | "pretest": "yarn run compile && yarn run lint", 72 | "test": "node ./out/test/runTest.js", 73 | "updatetypes": "cd src/types && vscode-dts dev && vscode-dts master" 74 | }, 75 | "devDependencies": { 76 | "@types/glob": "^7.1.3", 77 | "@types/mocha": "^8.0.3", 78 | "@types/node": "^13.11.0", 79 | "@typescript-eslint/eslint-plugin": "^4.1.1", 80 | "@typescript-eslint/parser": "^4.1.1", 81 | "eslint": "^7.9.0", 82 | "eslint-plugin-header": "^3.1.0", 83 | "glob": "^7.1.6", 84 | "mocha": "^8.1.3", 85 | "typescript": "^4.0.2", 86 | "vscode-test": "^1.4.0", 87 | "vscode-dts": "^0.3.1" 88 | }, 89 | "dependencies": { 90 | "vscode-debugprotocol": "1.41.0", 91 | "rimraf": "^3.0.2", 92 | "get-port": "^5.1.1" 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /samplenotebooks/sample.nodebook: -------------------------------------------------------------------------------- 1 | [{"kind":2,"language":"javascript","value":"let a = 1;\nlet b = \"abc\";\nlet c = 3.14;\n\nfunction print(x) {\n console.log(\"hello: \" + x);\n}\n\nconsole.log('end of 1st cell');"},{"kind":1,"language":"markdown","value":"A cell that calls a function in the first cell"},{"kind":2,"language":"javascript","value":"console.log('start of third cell');\nprint(`a: ${a}`);\nprint(`b: ${b}`);\nprint(`c: ${c}`);\nconsole.log('end of third cell');"}] -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | import * as vscode from 'vscode'; 7 | import { NodebookContentProvider } from './nodebookProvider'; 8 | 9 | export function activate(context: vscode.ExtensionContext) { 10 | 11 | const nodebookContentProvider = new NodebookContentProvider(); 12 | 13 | context.subscriptions.push( 14 | 15 | vscode.notebook.registerNotebookContentProvider('nodebook', nodebookContentProvider), 16 | 17 | vscode.commands.registerCommand('nodebook.toggleDebugging', () => { 18 | if (vscode.window.activeNotebookEditor) { 19 | const { document } = vscode.window.activeNotebookEditor; 20 | const nodebook = nodebookContentProvider.lookupNodebook(document.uri); 21 | if (nodebook) { 22 | nodebook.toggleDebugging(document); 23 | } 24 | } 25 | }), 26 | 27 | vscode.commands.registerCommand('nodebook.restartKernel', () => { 28 | if (vscode.window.activeNotebookEditor) { 29 | const { document } = vscode.window.activeNotebookEditor; 30 | const nodebook = nodebookContentProvider.lookupNodebook(document.uri); 31 | if (nodebook) { 32 | nodebook.restartKernel(); 33 | } 34 | } 35 | }) 36 | ); 37 | } 38 | 39 | export function deactivate() { 40 | } 41 | -------------------------------------------------------------------------------- /src/nodeKernel.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | import * as vscode from 'vscode'; 7 | import * as cp from 'child_process'; 8 | import * as fs from 'fs'; 9 | import * as PATH from 'path'; 10 | import * as os from 'os'; 11 | import { DebugProtocol } from 'vscode-debugprotocol'; 12 | const rmdir = require('rimraf'); 13 | const getPort = require('get-port'); 14 | 15 | 16 | export class NodeKernel { 17 | 18 | private nodeRuntime: cp.ChildProcess | undefined; 19 | private outputBuffer = ''; // collect output here 20 | private pathToCell: Map = new Map(); 21 | private tmpDirectory?: string; 22 | private debugPort?: number; 23 | 24 | constructor(private document: vscode.NotebookDocument) { 25 | } 26 | 27 | public async start() { 28 | if (!this.nodeRuntime) { 29 | 30 | this.debugPort = await getPort(); 31 | this.nodeRuntime = cp.spawn('node', [ 32 | `--inspect=${this.debugPort}`, 33 | `-e`, `require('repl').start({ prompt: '', ignoreUndefined: true })` 34 | ]); 35 | if (this.nodeRuntime.stdout) { 36 | this.nodeRuntime.stdout.on('data', (data: Buffer) => { 37 | this.outputBuffer += data.toString(); 38 | }); 39 | } 40 | if (this.nodeRuntime.stderr) { 41 | this.nodeRuntime.stderr.on('data', data => { 42 | console.log(`stderr: ${data}`); 43 | }); 44 | } 45 | } 46 | } 47 | 48 | public getLaunchConfig() { 49 | return { 50 | __notebookID: this.document.uri.toString(), 51 | name: 'nodebook', 52 | request: 'attach', 53 | type: 'node2', // doesn't work with 'pwa-node' 54 | port: this.debugPort, 55 | timeout: 100000, 56 | outputCapture: 'std', 57 | internalConsoleOptions: 'neverOpen' 58 | }; 59 | } 60 | 61 | public async restart() { 62 | this.stop(); 63 | await this.start(); 64 | } 65 | 66 | public stop() { 67 | 68 | if (this.nodeRuntime) { 69 | this.nodeRuntime.kill(); 70 | this.nodeRuntime = undefined; 71 | } 72 | 73 | if (this.tmpDirectory) { 74 | const t = this.tmpDirectory; 75 | this.tmpDirectory = undefined; 76 | rmdir(t, { glob: false }, (err: Error | undefined) => { 77 | if (err) { 78 | console.log(err); 79 | } 80 | }); 81 | } 82 | } 83 | 84 | public async eval(cell: vscode.NotebookCell): Promise { 85 | 86 | const cellPath = this.dumpCell(cell.uri.toString()); 87 | if (cellPath && this.nodeRuntime && this.nodeRuntime.stdin) { 88 | 89 | this.outputBuffer = ''; 90 | 91 | this.nodeRuntime.stdin.write(`.load ${cellPath}\n`); 92 | 93 | await new Promise(res => setTimeout(res, 500)); // wait a bit to collect all output that is associated with this eval 94 | return Promise.resolve(this.outputBuffer); 95 | } 96 | throw new Error('Evaluation failed'); 97 | } 98 | 99 | public createTracker(): vscode.DebugAdapterTracker { 100 | 101 | return { 102 | 103 | onWillReceiveMessage: (m: DebugProtocol.ProtocolMessage) => { 104 | // VS Code -> Debug Adapter 105 | visitSources(m, source => { 106 | if (source.path) { 107 | const cellPath = this.dumpCell(source.path); 108 | if (cellPath) { 109 | source.path = cellPath; 110 | } 111 | } 112 | }); 113 | }, 114 | 115 | onDidSendMessage: (m: DebugProtocol.ProtocolMessage) => { 116 | // Debug Adapter -> VS Code 117 | visitSources(m, source => { 118 | if (source.path) { 119 | let cell = this.pathToCell.get(source.path); 120 | if (cell) { 121 | source.path = cell.uri.toString(); 122 | source.name = PATH.basename(cell.uri.fsPath); 123 | // append cell index to name 124 | const cellIndex = this.document.cells.indexOf(cell); 125 | if (cellIndex >= 0) { 126 | source.name += `, Cell ${cellIndex + 1}`; 127 | } 128 | } 129 | } 130 | }); 131 | } 132 | } 133 | } 134 | 135 | /** 136 | * Store cell in temporary file and return its path or undefined if uri does not denote a cell. 137 | */ 138 | private dumpCell(uri: string): string | undefined { 139 | try { 140 | const cellUri = vscode.Uri.parse(uri, true); 141 | if (cellUri.scheme === 'vscode-notebook-cell') { 142 | // find cell in document by matching its URI 143 | const cell = this.document.cells.find(c => c.uri.toString() === uri); 144 | if (cell) { 145 | if (!this.tmpDirectory) { 146 | this.tmpDirectory = fs.mkdtempSync(PATH.join(os.tmpdir(), 'vscode-nodebook-')); 147 | } 148 | const cellPath = `${this.tmpDirectory}/nodebook_cell_${cellUri.fragment}.js`; 149 | this.pathToCell.set(cellPath, cell); 150 | 151 | let data = cell.document.getText(); 152 | data += `\n//@ sourceURL=${cellPath}`; // trick to make node.js report the eval's source under this path 153 | fs.writeFileSync(cellPath, data); 154 | 155 | return cellPath; 156 | } 157 | } 158 | } catch(e) { 159 | } 160 | return undefined; 161 | } 162 | } 163 | 164 | // this vistor could be moved into the DAP npm module (it must be kept in sync with the DAP spec) 165 | function visitSources(msg: DebugProtocol.ProtocolMessage, visitor: (source: DebugProtocol.Source) => void): void { 166 | 167 | const sourceHook = (source: DebugProtocol.Source | undefined) => { 168 | if (source) { 169 | visitor(source); 170 | } 171 | } 172 | 173 | switch (msg.type) { 174 | case 'event': 175 | const event = msg; 176 | switch (event.event) { 177 | case 'output': 178 | sourceHook((event).body.source); 179 | break; 180 | case 'loadedSource': 181 | sourceHook((event).body.source); 182 | break; 183 | case 'breakpoint': 184 | sourceHook((event).body.breakpoint.source); 185 | break; 186 | default: 187 | break; 188 | } 189 | break; 190 | case 'request': 191 | const request = msg; 192 | switch (request.command) { 193 | case 'setBreakpoints': 194 | sourceHook((request.arguments).source); 195 | break; 196 | case 'breakpointLocations': 197 | sourceHook((request.arguments).source); 198 | break; 199 | case 'source': 200 | sourceHook((request.arguments).source); 201 | break; 202 | case 'gotoTargets': 203 | sourceHook((request.arguments).source); 204 | break; 205 | case 'launchVSCode': 206 | //request.arguments.args.forEach(arg => fixSourcePath(arg)); 207 | break; 208 | default: 209 | break; 210 | } 211 | break; 212 | case 'response': 213 | const response = msg; 214 | if (response.success && response.body) { 215 | switch (response.command) { 216 | case 'stackTrace': 217 | (response).body.stackFrames.forEach(frame => sourceHook(frame.source)); 218 | break; 219 | case 'loadedSources': 220 | (response).body.sources.forEach(source => sourceHook(source)); 221 | break; 222 | case 'scopes': 223 | (response).body.scopes.forEach(scope => sourceHook(scope.source)); 224 | break; 225 | case 'setFunctionBreakpoints': 226 | (response).body.breakpoints.forEach(bp => sourceHook(bp.source)); 227 | break; 228 | case 'setBreakpoints': 229 | (response).body.breakpoints.forEach(bp => sourceHook(bp.source)); 230 | break; 231 | default: 232 | break; 233 | } 234 | } 235 | break; 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /src/nodebook.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | import * as vscode from 'vscode'; 7 | import { NodeKernel } from './nodeKernel'; 8 | 9 | export class Nodebook implements vscode.Disposable { 10 | 11 | private nodeKernel: NodeKernel; 12 | private debugging = false; 13 | private disposables: vscode.Disposable[] = []; 14 | private activeDebugSession: vscode.DebugSession | undefined; 15 | 16 | constructor(doc: vscode.NotebookDocument) { 17 | this.nodeKernel = new NodeKernel(doc); 18 | } 19 | 20 | async dispose() { 21 | await this.stopDebugger(); 22 | this.nodeKernel.stop(); 23 | } 24 | 25 | public async restartKernel() { 26 | await this.stopDebugger(); 27 | await vscode.commands.executeCommand('notebook.clearAllCellsOutputs'); 28 | await this.nodeKernel.restart(); 29 | if (this.debugging) { 30 | await this.startDebugger(); 31 | } 32 | } 33 | 34 | public async toggleDebugging(document: vscode.NotebookDocument) { 35 | 36 | if (this.debugging) { 37 | this.stopDebugger(); 38 | } 39 | 40 | this.debugging = !this.debugging; 41 | 42 | for (let cell of document.cells) { 43 | if (cell.cellKind === vscode.CellKind.Code) { 44 | cell.metadata.breakpointMargin = this.debugging; 45 | } 46 | } 47 | } 48 | 49 | public async eval(cell: vscode.NotebookCell): Promise { 50 | await this.nodeKernel.start(); 51 | if (this.debugging) { 52 | await this.startDebugger(); 53 | } 54 | return this.nodeKernel.eval(cell); 55 | } 56 | 57 | public addDebugSession(session: vscode.DebugSession) { 58 | if (this.activeDebugSession) { 59 | console.log(`error: there is already a debug session`); 60 | return; 61 | } 62 | this.activeDebugSession = session; 63 | } 64 | 65 | public removeDebugSession(session: vscode.DebugSession) { 66 | if (this.activeDebugSession !== session) { 67 | console.log(`error: removed session doesn't match active session`); 68 | return; 69 | } 70 | this.activeDebugSession = undefined; 71 | } 72 | 73 | public createTracker(): vscode.DebugAdapterTracker { 74 | return this.nodeKernel.createTracker(); 75 | } 76 | 77 | private async startDebugger() { 78 | if (!this.activeDebugSession) { 79 | try { 80 | await vscode.debug.startDebugging(undefined, this.nodeKernel.getLaunchConfig()); 81 | } catch(err) { 82 | console.log(`error: ${err}`); 83 | } 84 | } 85 | } 86 | 87 | private async stopDebugger() { 88 | if (this.activeDebugSession) { 89 | await vscode.commands.executeCommand('workbench.action.debug.stop'); 90 | this.disposables.forEach(d => d.dispose()); 91 | this.disposables = []; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/nodebookProvider.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | import * as vscode from 'vscode'; 7 | import { Nodebook } from './nodebook'; 8 | import { NotebookDocumentEditEvent } from 'vscode'; 9 | 10 | interface RawNotebookCell { 11 | language: string; 12 | value: string; 13 | kind: vscode.CellKind; 14 | editable?: boolean; 15 | } 16 | 17 | interface ProjectAssociation { 18 | (key: string): boolean; 19 | } 20 | 21 | const debugTypes = ['node', 'node2', 'pwa-node', 'pwa-chrome']; 22 | 23 | export class NodebookContentProvider implements vscode.NotebookContentProvider, vscode.NotebookKernel { 24 | 25 | readonly id = 'nodebookKernel'; 26 | public label = 'Node.js Kernel'; 27 | 28 | private _localDisposables: vscode.Disposable[] = []; 29 | private readonly _associations = new Map(); 30 | 31 | 32 | onDidChangeNotebook: vscode.Event = new vscode.EventEmitter().event; 33 | 34 | constructor() { 35 | 36 | this._localDisposables.push( 37 | 38 | vscode.notebook.onDidOpenNotebookDocument(document => { 39 | const docKey = document.uri.toString(); 40 | if (!this.lookupNodebook(docKey)) { 41 | const project = new Nodebook(document); 42 | this.register( 43 | docKey, 44 | project, 45 | key => document.cells.some(cell => cell.uri.toString() === key) || (key === docKey), 46 | ); 47 | } 48 | }), 49 | 50 | vscode.notebook.onDidCloseNotebookDocument(document => { 51 | const project = this.unregister(document.uri.toString()); 52 | if (project) { 53 | project.dispose(); 54 | } 55 | }), 56 | 57 | vscode.debug.onDidStartDebugSession(session => { 58 | if (session.configuration.__notebookID) { 59 | const project = this.lookupNodebook(session.configuration.__notebookID); 60 | if (project) { 61 | project.addDebugSession(session); 62 | } 63 | } 64 | }), 65 | 66 | vscode.debug.onDidTerminateDebugSession(session => { 67 | if (session.configuration.__notebookID) { 68 | const project = this.lookupNodebook(session.configuration.__notebookID); 69 | if (project) { 70 | project.removeDebugSession(session); 71 | } 72 | } 73 | }), 74 | 75 | // hook Source path conversion 76 | ...debugTypes.map(dt => vscode.debug.registerDebugAdapterTrackerFactory(dt, { 77 | createDebugAdapterTracker: (session: vscode.DebugSession): vscode.ProviderResult => { 78 | if (session.configuration.__notebookID) { 79 | const notebook = this.lookupNodebook(session.configuration.__notebookID); 80 | if (notebook) { 81 | return notebook.createTracker(); 82 | } 83 | } 84 | return undefined; // no tracker 85 | } 86 | })) 87 | ); 88 | 89 | vscode.notebook.registerNotebookKernelProvider({ 90 | viewType: 'nodebook', 91 | }, { 92 | provideKernels: () => { 93 | return [this]; 94 | } 95 | }); 96 | } 97 | 98 | public lookupNodebook(keyOrUri: string | vscode.Uri | undefined): Nodebook | undefined { 99 | if (keyOrUri) { 100 | let key: string; 101 | if (typeof keyOrUri === 'string') { 102 | key = keyOrUri; 103 | } else { 104 | key = keyOrUri.toString(); 105 | } 106 | for (let [association, value] of this._associations.values()) { 107 | if (association(key)) { 108 | return value; 109 | } 110 | } 111 | } 112 | return undefined; 113 | } 114 | 115 | async openNotebook(uri: vscode.Uri): Promise { 116 | 117 | let contents = ''; 118 | try { 119 | contents = Buffer.from(await vscode.workspace.fs.readFile(uri)).toString('utf8'); 120 | } catch { 121 | } 122 | 123 | let raw: RawNotebookCell[]; 124 | try { 125 | raw = JSON.parse(contents); 126 | } catch { 127 | raw = []; 128 | } 129 | 130 | const notebookData: vscode.NotebookData = { 131 | languages: ['javascript'], 132 | metadata: { cellRunnable: true }, 133 | cells: raw.map(item => ({ 134 | source: item.value, 135 | language: item.language, 136 | cellKind: item.kind, 137 | outputs: [], 138 | metadata: { 139 | editable: true, 140 | runnable: true, 141 | breakpointMargin: false 142 | } 143 | })) 144 | }; 145 | 146 | return notebookData; 147 | } 148 | 149 | public saveNotebook(document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise { 150 | return this._save(document, document.uri); 151 | } 152 | 153 | public saveNotebookAs(targetResource: vscode.Uri, document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise { 154 | return this._save(document, targetResource); 155 | } 156 | 157 | async resolveNotebook(_document: vscode.NotebookDocument, _webview: vscode.NotebookCommunication): Promise { 158 | // nothing 159 | } 160 | 161 | async backupNotebook(document: vscode.NotebookDocument, context: vscode.NotebookDocumentBackupContext, _cancellation: vscode.CancellationToken): Promise { 162 | await this._save(document, context.destination); 163 | return { 164 | id: context.destination.toString(), 165 | delete: () => vscode.workspace.fs.delete(context.destination) 166 | }; 167 | } 168 | 169 | 170 | 171 | public async executeCell(_document: vscode.NotebookDocument, cell: vscode.NotebookCell): Promise { 172 | 173 | let output = ''; 174 | let error: Error | undefined; 175 | const nodebook = this.lookupNodebook(cell.uri); 176 | if (nodebook) { 177 | try { 178 | output = await nodebook.eval(cell); 179 | } catch(e) { 180 | error = e; 181 | } 182 | } 183 | if (error) { 184 | cell.outputs = [{ 185 | outputKind: vscode.CellOutputKind.Error, 186 | evalue: error.toString(), 187 | ename: '', 188 | traceback: [] 189 | }]; 190 | } else { 191 | cell.outputs = [{ 192 | outputKind: vscode.CellOutputKind.Text, 193 | text: output 194 | }]; 195 | } 196 | } 197 | 198 | public cancelCellExecution(_document: vscode.NotebookDocument, _cell: vscode.NotebookCell): void { 199 | // not yet supported 200 | } 201 | 202 | public async executeAllCells(document: vscode.NotebookDocument): Promise { 203 | for (const cell of document.cells) { 204 | await this.executeCell(document, cell); 205 | } 206 | } 207 | 208 | cancelAllCellsExecution(_document: vscode.NotebookDocument): void { 209 | // not yet supported 210 | } 211 | 212 | public dispose() { 213 | this._localDisposables.forEach(d => d.dispose()); 214 | } 215 | 216 | // ---- private ---- 217 | 218 | private async _save(document: vscode.NotebookDocument, targetResource: vscode.Uri): Promise { 219 | let contents: RawNotebookCell[] = []; 220 | for (let cell of document.cells) { 221 | contents.push({ 222 | kind: cell.cellKind, 223 | language: cell.language, 224 | value: cell.document.getText(), 225 | }); 226 | } 227 | await vscode.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents))); 228 | } 229 | 230 | private register(key: string, project: Nodebook, association: ProjectAssociation) { 231 | this._associations.set(key, [association, project]); 232 | } 233 | 234 | private unregister(key: string): Nodebook | undefined { 235 | const project = this.lookupNodebook(key); 236 | if (project) { 237 | this._associations.delete(key); 238 | } 239 | return project; 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /src/types/vscode.proposed.d.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | /** 7 | * This is the place for API experiments and proposals. 8 | * These API are NOT stable and subject to change. They are only available in the Insiders 9 | * distribution and CANNOT be used in published extensions. 10 | * 11 | * To test these API in local environment: 12 | * - Use Insiders release of VS Code. 13 | * - Add `"enableProposedApi": true` to your package.json. 14 | * - Copy this file to your project. 15 | */ 16 | 17 | declare module 'vscode' { 18 | 19 | // #region auth provider: https://github.com/microsoft/vscode/issues/88309 20 | 21 | /** 22 | * An [event](#Event) which fires when an [AuthenticationProvider](#AuthenticationProvider) is added or removed. 23 | */ 24 | export interface AuthenticationProvidersChangeEvent { 25 | /** 26 | * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been added. 27 | */ 28 | readonly added: ReadonlyArray; 29 | 30 | /** 31 | * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been removed. 32 | */ 33 | readonly removed: ReadonlyArray; 34 | } 35 | 36 | /** 37 | * An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed. 38 | */ 39 | export interface AuthenticationProviderAuthenticationSessionsChangeEvent { 40 | /** 41 | * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been added. 42 | */ 43 | readonly added: ReadonlyArray; 44 | 45 | /** 46 | * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been removed. 47 | */ 48 | readonly removed: ReadonlyArray; 49 | 50 | /** 51 | * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been changed. 52 | */ 53 | readonly changed: ReadonlyArray; 54 | } 55 | 56 | /** 57 | * **WARNING** When writing an AuthenticationProvider, `id` should be treated as part of your extension's 58 | * API, changing it is a breaking change for all extensions relying on the provider. The id is 59 | * treated case-sensitively. 60 | */ 61 | export interface AuthenticationProvider { 62 | /** 63 | * Used as an identifier for extensions trying to work with a particular 64 | * provider: 'microsoft', 'github', etc. id must be unique, registering 65 | * another provider with the same id will fail. 66 | */ 67 | readonly id: string; 68 | 69 | /** 70 | * The human-readable name of the provider. 71 | */ 72 | readonly label: string; 73 | 74 | /** 75 | * Whether it is possible to be signed into multiple accounts at once with this provider 76 | */ 77 | readonly supportsMultipleAccounts: boolean; 78 | 79 | /** 80 | * An [event](#Event) which fires when the array of sessions has changed, or data 81 | * within a session has changed. 82 | */ 83 | readonly onDidChangeSessions: Event; 84 | 85 | /** 86 | * Returns an array of current sessions. 87 | */ 88 | getSessions(): Thenable>; 89 | 90 | /** 91 | * Prompts a user to login. 92 | */ 93 | login(scopes: string[]): Thenable; 94 | 95 | /** 96 | * Removes the session corresponding to session id. 97 | * @param sessionId The session id to log out of 98 | */ 99 | logout(sessionId: string): Thenable; 100 | } 101 | 102 | export namespace authentication { 103 | /** 104 | * Register an authentication provider. 105 | * 106 | * There can only be one provider per id and an error is being thrown when an id 107 | * has already been used by another provider. 108 | * 109 | * @param provider The authentication provider provider. 110 | * @return A [disposable](#Disposable) that unregisters this provider when being disposed. 111 | */ 112 | export function registerAuthenticationProvider(provider: AuthenticationProvider): Disposable; 113 | 114 | /** 115 | * @deprecated - getSession should now trigger extension activation. 116 | * Fires with the provider id that was registered or unregistered. 117 | */ 118 | export const onDidChangeAuthenticationProviders: Event; 119 | 120 | /** 121 | * @deprecated 122 | * The ids of the currently registered authentication providers. 123 | * @returns An array of the ids of authentication providers that are currently registered. 124 | */ 125 | export function getProviderIds(): Thenable>; 126 | 127 | /** 128 | * @deprecated 129 | * An array of the ids of authentication providers that are currently registered. 130 | */ 131 | export const providerIds: ReadonlyArray; 132 | 133 | /** 134 | * An array of the information of authentication providers that are currently registered. 135 | */ 136 | export const providers: ReadonlyArray; 137 | 138 | /** 139 | * @deprecated 140 | * Logout of a specific session. 141 | * @param providerId The id of the provider to use 142 | * @param sessionId The session id to remove 143 | * provider 144 | */ 145 | export function logout(providerId: string, sessionId: string): Thenable; 146 | 147 | /** 148 | * Retrieve a password that was stored with key. Returns undefined if there 149 | * is no password matching that key. 150 | * @param key The key the password was stored under. 151 | */ 152 | export function getPassword(key: string): Thenable; 153 | 154 | /** 155 | * Store a password under a given key. 156 | * @param key The key to store the password under 157 | * @param value The password 158 | */ 159 | export function setPassword(key: string, value: string): Thenable; 160 | 161 | /** 162 | * Remove a password from storage. 163 | * @param key The key the password was stored under. 164 | */ 165 | export function deletePassword(key: string): Thenable; 166 | 167 | /** 168 | * Fires when a password is set or deleted. 169 | */ 170 | export const onDidChangePassword: Event; 171 | } 172 | 173 | //#endregion 174 | 175 | //#region @alexdima - resolvers 176 | 177 | export interface RemoteAuthorityResolverContext { 178 | resolveAttempt: number; 179 | } 180 | 181 | export class ResolvedAuthority { 182 | readonly host: string; 183 | readonly port: number; 184 | readonly connectionToken: string | undefined; 185 | 186 | constructor(host: string, port: number, connectionToken?: string); 187 | } 188 | 189 | export interface ResolvedOptions { 190 | extensionHostEnv?: { [key: string]: string | null; }; 191 | } 192 | 193 | export interface TunnelOptions { 194 | remoteAddress: { port: number, host: string; }; 195 | // The desired local port. If this port can't be used, then another will be chosen. 196 | localAddressPort?: number; 197 | label?: string; 198 | } 199 | 200 | export interface TunnelDescription { 201 | remoteAddress: { port: number, host: string; }; 202 | //The complete local address(ex. localhost:1234) 203 | localAddress: { port: number, host: string; } | string; 204 | } 205 | 206 | export interface Tunnel extends TunnelDescription { 207 | // Implementers of Tunnel should fire onDidDispose when dispose is called. 208 | onDidDispose: Event; 209 | dispose(): void; 210 | } 211 | 212 | /** 213 | * Used as part of the ResolverResult if the extension has any candidate, 214 | * published, or forwarded ports. 215 | */ 216 | export interface TunnelInformation { 217 | /** 218 | * Tunnels that are detected by the extension. The remotePort is used for display purposes. 219 | * The localAddress should be the complete local address (ex. localhost:1234) for connecting to the port. Tunnels provided through 220 | * detected are read-only from the forwarded ports UI. 221 | */ 222 | environmentTunnels?: TunnelDescription[]; 223 | 224 | } 225 | 226 | export type ResolverResult = ResolvedAuthority & ResolvedOptions & TunnelInformation; 227 | 228 | export class RemoteAuthorityResolverError extends Error { 229 | static NotAvailable(message?: string, handled?: boolean): RemoteAuthorityResolverError; 230 | static TemporarilyNotAvailable(message?: string): RemoteAuthorityResolverError; 231 | 232 | constructor(message?: string); 233 | } 234 | 235 | export interface RemoteAuthorityResolver { 236 | resolve(authority: string, context: RemoteAuthorityResolverContext): ResolverResult | Thenable; 237 | /** 238 | * Can be optionally implemented if the extension can forward ports better than the core. 239 | * When not implemented, the core will use its default forwarding logic. 240 | * When implemented, the core will use this to forward ports. 241 | */ 242 | tunnelFactory?: (tunnelOptions: TunnelOptions, elevate?: boolean) => Thenable | undefined; 243 | 244 | /** 245 | * Provides filtering for candidate ports. 246 | */ 247 | showCandidatePort?: (host: string, port: number, detail: string) => Thenable; 248 | } 249 | 250 | export namespace workspace { 251 | /** 252 | * Forwards a port. If the current resolver implements RemoteAuthorityResolver:forwardPort then that will be used to make the tunnel. 253 | * By default, openTunnel only support localhost; however, RemoteAuthorityResolver:tunnelFactory can be used to support other ips. 254 | * 255 | * @throws When run in an environment without a remote. 256 | * 257 | * @param tunnelOptions The `localPort` is a suggestion only. If that port is not available another will be chosen. 258 | */ 259 | export function openTunnel(tunnelOptions: TunnelOptions): Thenable; 260 | 261 | /** 262 | * Gets an array of the currently available tunnels. This does not include environment tunnels, only tunnels that have been created by the user. 263 | * Note that these are of type TunnelDescription and cannot be disposed. 264 | */ 265 | export let tunnels: Thenable; 266 | 267 | /** 268 | * Fired when the list of tunnels has changed. 269 | */ 270 | export const onDidChangeTunnels: Event; 271 | } 272 | 273 | export interface ResourceLabelFormatter { 274 | scheme: string; 275 | authority?: string; 276 | formatting: ResourceLabelFormatting; 277 | } 278 | 279 | export interface ResourceLabelFormatting { 280 | label: string; // myLabel:/${path} 281 | // For historic reasons we use an or string here. Once we finalize this API we should start using enums instead and adopt it in extensions. 282 | // eslint-disable-next-line vscode-dts-literal-or-types 283 | separator: '/' | '\\' | ''; 284 | tildify?: boolean; 285 | normalizeDriveLetter?: boolean; 286 | workspaceSuffix?: string; 287 | authorityPrefix?: string; 288 | stripPathStartingSeparator?: boolean; 289 | } 290 | 291 | export namespace workspace { 292 | export function registerRemoteAuthorityResolver(authorityPrefix: string, resolver: RemoteAuthorityResolver): Disposable; 293 | export function registerResourceLabelFormatter(formatter: ResourceLabelFormatter): Disposable; 294 | } 295 | 296 | //#endregion 297 | 298 | //#region editor insets: https://github.com/microsoft/vscode/issues/85682 299 | 300 | export interface WebviewEditorInset { 301 | readonly editor: TextEditor; 302 | readonly line: number; 303 | readonly height: number; 304 | readonly webview: Webview; 305 | readonly onDidDispose: Event; 306 | dispose(): void; 307 | } 308 | 309 | export namespace window { 310 | export function createWebviewTextEditorInset(editor: TextEditor, line: number, height: number, options?: WebviewOptions): WebviewEditorInset; 311 | } 312 | 313 | //#endregion 314 | 315 | //#region read/write in chunks: https://github.com/microsoft/vscode/issues/84515 316 | 317 | export interface FileSystemProvider { 318 | open?(resource: Uri, options: { create: boolean; }): number | Thenable; 319 | close?(fd: number): void | Thenable; 320 | read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable; 321 | write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable; 322 | } 323 | 324 | //#endregion 325 | 326 | //#region TextSearchProvider: https://github.com/microsoft/vscode/issues/59921 327 | 328 | /** 329 | * The parameters of a query for text search. 330 | */ 331 | export interface TextSearchQuery { 332 | /** 333 | * The text pattern to search for. 334 | */ 335 | pattern: string; 336 | 337 | /** 338 | * Whether or not `pattern` should match multiple lines of text. 339 | */ 340 | isMultiline?: boolean; 341 | 342 | /** 343 | * Whether or not `pattern` should be interpreted as a regular expression. 344 | */ 345 | isRegExp?: boolean; 346 | 347 | /** 348 | * Whether or not the search should be case-sensitive. 349 | */ 350 | isCaseSensitive?: boolean; 351 | 352 | /** 353 | * Whether or not to search for whole word matches only. 354 | */ 355 | isWordMatch?: boolean; 356 | } 357 | 358 | /** 359 | * A file glob pattern to match file paths against. 360 | * TODO@roblourens merge this with the GlobPattern docs/definition in vscode.d.ts. 361 | * @see [GlobPattern](#GlobPattern) 362 | */ 363 | export type GlobString = string; 364 | 365 | /** 366 | * Options common to file and text search 367 | */ 368 | export interface SearchOptions { 369 | /** 370 | * The root folder to search within. 371 | */ 372 | folder: Uri; 373 | 374 | /** 375 | * Files that match an `includes` glob pattern should be included in the search. 376 | */ 377 | includes: GlobString[]; 378 | 379 | /** 380 | * Files that match an `excludes` glob pattern should be excluded from the search. 381 | */ 382 | excludes: GlobString[]; 383 | 384 | /** 385 | * Whether external files that exclude files, like .gitignore, should be respected. 386 | * See the vscode setting `"search.useIgnoreFiles"`. 387 | */ 388 | useIgnoreFiles: boolean; 389 | 390 | /** 391 | * Whether symlinks should be followed while searching. 392 | * See the vscode setting `"search.followSymlinks"`. 393 | */ 394 | followSymlinks: boolean; 395 | 396 | /** 397 | * Whether global files that exclude files, like .gitignore, should be respected. 398 | * See the vscode setting `"search.useGlobalIgnoreFiles"`. 399 | */ 400 | useGlobalIgnoreFiles: boolean; 401 | } 402 | 403 | /** 404 | * Options to specify the size of the result text preview. 405 | * These options don't affect the size of the match itself, just the amount of preview text. 406 | */ 407 | export interface TextSearchPreviewOptions { 408 | /** 409 | * The maximum number of lines in the preview. 410 | * Only search providers that support multiline search will ever return more than one line in the match. 411 | */ 412 | matchLines: number; 413 | 414 | /** 415 | * The maximum number of characters included per line. 416 | */ 417 | charsPerLine: number; 418 | } 419 | 420 | /** 421 | * Options that apply to text search. 422 | */ 423 | export interface TextSearchOptions extends SearchOptions { 424 | /** 425 | * The maximum number of results to be returned. 426 | */ 427 | maxResults: number; 428 | 429 | /** 430 | * Options to specify the size of the result text preview. 431 | */ 432 | previewOptions?: TextSearchPreviewOptions; 433 | 434 | /** 435 | * Exclude files larger than `maxFileSize` in bytes. 436 | */ 437 | maxFileSize?: number; 438 | 439 | /** 440 | * Interpret files using this encoding. 441 | * See the vscode setting `"files.encoding"` 442 | */ 443 | encoding?: string; 444 | 445 | /** 446 | * Number of lines of context to include before each match. 447 | */ 448 | beforeContext?: number; 449 | 450 | /** 451 | * Number of lines of context to include after each match. 452 | */ 453 | afterContext?: number; 454 | } 455 | 456 | /** 457 | * Information collected when text search is complete. 458 | */ 459 | export interface TextSearchComplete { 460 | /** 461 | * Whether the search hit the limit on the maximum number of search results. 462 | * `maxResults` on [`TextSearchOptions`](#TextSearchOptions) specifies the max number of results. 463 | * - If exactly that number of matches exist, this should be false. 464 | * - If `maxResults` matches are returned and more exist, this should be true. 465 | * - If search hits an internal limit which is less than `maxResults`, this should be true. 466 | */ 467 | limitHit?: boolean; 468 | } 469 | 470 | /** 471 | * A preview of the text result. 472 | */ 473 | export interface TextSearchMatchPreview { 474 | /** 475 | * The matching lines of text, or a portion of the matching line that contains the match. 476 | */ 477 | text: string; 478 | 479 | /** 480 | * The Range within `text` corresponding to the text of the match. 481 | * The number of matches must match the TextSearchMatch's range property. 482 | */ 483 | matches: Range | Range[]; 484 | } 485 | 486 | /** 487 | * A match from a text search 488 | */ 489 | export interface TextSearchMatch { 490 | /** 491 | * The uri for the matching document. 492 | */ 493 | uri: Uri; 494 | 495 | /** 496 | * The range of the match within the document, or multiple ranges for multiple matches. 497 | */ 498 | ranges: Range | Range[]; 499 | 500 | /** 501 | * A preview of the text match. 502 | */ 503 | preview: TextSearchMatchPreview; 504 | } 505 | 506 | /** 507 | * A line of context surrounding a TextSearchMatch. 508 | */ 509 | export interface TextSearchContext { 510 | /** 511 | * The uri for the matching document. 512 | */ 513 | uri: Uri; 514 | 515 | /** 516 | * One line of text. 517 | * previewOptions.charsPerLine applies to this 518 | */ 519 | text: string; 520 | 521 | /** 522 | * The line number of this line of context. 523 | */ 524 | lineNumber: number; 525 | } 526 | 527 | export type TextSearchResult = TextSearchMatch | TextSearchContext; 528 | 529 | /** 530 | * A TextSearchProvider provides search results for text results inside files in the workspace. 531 | */ 532 | export interface TextSearchProvider { 533 | /** 534 | * Provide results that match the given text pattern. 535 | * @param query The parameters for this query. 536 | * @param options A set of options to consider while searching. 537 | * @param progress A progress callback that must be invoked for all results. 538 | * @param token A cancellation token. 539 | */ 540 | provideTextSearchResults(query: TextSearchQuery, options: TextSearchOptions, progress: Progress, token: CancellationToken): ProviderResult; 541 | } 542 | 543 | //#endregion 544 | 545 | //#region FileSearchProvider: https://github.com/microsoft/vscode/issues/73524 546 | 547 | /** 548 | * The parameters of a query for file search. 549 | */ 550 | export interface FileSearchQuery { 551 | /** 552 | * The search pattern to match against file paths. 553 | */ 554 | pattern: string; 555 | } 556 | 557 | /** 558 | * Options that apply to file search. 559 | */ 560 | export interface FileSearchOptions extends SearchOptions { 561 | /** 562 | * The maximum number of results to be returned. 563 | */ 564 | maxResults?: number; 565 | 566 | /** 567 | * A CancellationToken that represents the session for this search query. If the provider chooses to, this object can be used as the key for a cache, 568 | * and searches with the same session object can search the same cache. When the token is cancelled, the session is complete and the cache can be cleared. 569 | */ 570 | session?: CancellationToken; 571 | } 572 | 573 | /** 574 | * A FileSearchProvider provides search results for files in the given folder that match a query string. It can be invoked by quickopen or other extensions. 575 | * 576 | * A FileSearchProvider is the more powerful of two ways to implement file search in VS Code. Use a FileSearchProvider if you wish to search within a folder for 577 | * all files that match the user's query. 578 | * 579 | * The FileSearchProvider will be invoked on every keypress in quickopen. When `workspace.findFiles` is called, it will be invoked with an empty query string, 580 | * and in that case, every file in the folder should be returned. 581 | */ 582 | export interface FileSearchProvider { 583 | /** 584 | * Provide the set of files that match a certain file path pattern. 585 | * @param query The parameters for this query. 586 | * @param options A set of options to consider while searching files. 587 | * @param token A cancellation token. 588 | */ 589 | provideFileSearchResults(query: FileSearchQuery, options: FileSearchOptions, token: CancellationToken): ProviderResult; 590 | } 591 | 592 | export namespace workspace { 593 | /** 594 | * Register a search provider. 595 | * 596 | * Only one provider can be registered per scheme. 597 | * 598 | * @param scheme The provider will be invoked for workspace folders that have this file scheme. 599 | * @param provider The provider. 600 | * @return A [disposable](#Disposable) that unregisters this provider when being disposed. 601 | */ 602 | export function registerFileSearchProvider(scheme: string, provider: FileSearchProvider): Disposable; 603 | 604 | /** 605 | * Register a text search provider. 606 | * 607 | * Only one provider can be registered per scheme. 608 | * 609 | * @param scheme The provider will be invoked for workspace folders that have this file scheme. 610 | * @param provider The provider. 611 | * @return A [disposable](#Disposable) that unregisters this provider when being disposed. 612 | */ 613 | export function registerTextSearchProvider(scheme: string, provider: TextSearchProvider): Disposable; 614 | } 615 | 616 | //#endregion 617 | 618 | //#region findTextInFiles: https://github.com/microsoft/vscode/issues/59924 619 | 620 | /** 621 | * Options that can be set on a findTextInFiles search. 622 | */ 623 | export interface FindTextInFilesOptions { 624 | /** 625 | * A [glob pattern](#GlobPattern) that defines the files to search for. The glob pattern 626 | * will be matched against the file paths of files relative to their workspace. Use a [relative pattern](#RelativePattern) 627 | * to restrict the search results to a [workspace folder](#WorkspaceFolder). 628 | */ 629 | include?: GlobPattern; 630 | 631 | /** 632 | * A [glob pattern](#GlobPattern) that defines files and folders to exclude. The glob pattern 633 | * will be matched against the file paths of resulting matches relative to their workspace. When `undefined`, default excludes will 634 | * apply. 635 | */ 636 | exclude?: GlobPattern; 637 | 638 | /** 639 | * Whether to use the default and user-configured excludes. Defaults to true. 640 | */ 641 | useDefaultExcludes?: boolean; 642 | 643 | /** 644 | * The maximum number of results to search for 645 | */ 646 | maxResults?: number; 647 | 648 | /** 649 | * Whether external files that exclude files, like .gitignore, should be respected. 650 | * See the vscode setting `"search.useIgnoreFiles"`. 651 | */ 652 | useIgnoreFiles?: boolean; 653 | 654 | /** 655 | * Whether global files that exclude files, like .gitignore, should be respected. 656 | * See the vscode setting `"search.useGlobalIgnoreFiles"`. 657 | */ 658 | useGlobalIgnoreFiles?: boolean; 659 | 660 | /** 661 | * Whether symlinks should be followed while searching. 662 | * See the vscode setting `"search.followSymlinks"`. 663 | */ 664 | followSymlinks?: boolean; 665 | 666 | /** 667 | * Interpret files using this encoding. 668 | * See the vscode setting `"files.encoding"` 669 | */ 670 | encoding?: string; 671 | 672 | /** 673 | * Options to specify the size of the result text preview. 674 | */ 675 | previewOptions?: TextSearchPreviewOptions; 676 | 677 | /** 678 | * Number of lines of context to include before each match. 679 | */ 680 | beforeContext?: number; 681 | 682 | /** 683 | * Number of lines of context to include after each match. 684 | */ 685 | afterContext?: number; 686 | } 687 | 688 | export namespace workspace { 689 | /** 690 | * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace. 691 | * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words. 692 | * @param callback A callback, called for each result 693 | * @param token A token that can be used to signal cancellation to the underlying search engine. 694 | * @return A thenable that resolves when the search is complete. 695 | */ 696 | export function findTextInFiles(query: TextSearchQuery, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable; 697 | 698 | /** 699 | * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace. 700 | * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words. 701 | * @param options An optional set of query options. Include and exclude patterns, maxResults, etc. 702 | * @param callback A callback, called for each result 703 | * @param token A token that can be used to signal cancellation to the underlying search engine. 704 | * @return A thenable that resolves when the search is complete. 705 | */ 706 | export function findTextInFiles(query: TextSearchQuery, options: FindTextInFilesOptions, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable; 707 | } 708 | 709 | //#endregion 710 | 711 | //#region diff command: https://github.com/microsoft/vscode/issues/84899 712 | 713 | /** 714 | * The contiguous set of modified lines in a diff. 715 | */ 716 | export interface LineChange { 717 | readonly originalStartLineNumber: number; 718 | readonly originalEndLineNumber: number; 719 | readonly modifiedStartLineNumber: number; 720 | readonly modifiedEndLineNumber: number; 721 | } 722 | 723 | export namespace commands { 724 | 725 | /** 726 | * Registers a diff information command that can be invoked via a keyboard shortcut, 727 | * a menu item, an action, or directly. 728 | * 729 | * Diff information commands are different from ordinary [commands](#commands.registerCommand) as 730 | * they only execute when there is an active diff editor when the command is called, and the diff 731 | * information has been computed. Also, the command handler of an editor command has access to 732 | * the diff information. 733 | * 734 | * @param command A unique identifier for the command. 735 | * @param callback A command handler function with access to the [diff information](#LineChange). 736 | * @param thisArg The `this` context used when invoking the handler function. 737 | * @return Disposable which unregisters this command on disposal. 738 | */ 739 | export function registerDiffInformationCommand(command: string, callback: (diff: LineChange[], ...args: any[]) => any, thisArg?: any): Disposable; 740 | } 741 | 742 | //#endregion 743 | 744 | //#region file-decorations: https://github.com/microsoft/vscode/issues/54938 745 | 746 | 747 | export class FileDecoration { 748 | 749 | /** 750 | * A very short string that represents this decoration. 751 | */ 752 | badge?: string; 753 | 754 | /** 755 | * A human-readable tooltip for this decoration. 756 | */ 757 | tooltip?: string; 758 | 759 | /** 760 | * The color of this decoration. 761 | */ 762 | color?: ThemeColor; 763 | 764 | /** 765 | * A flag expressing that this decoration should be 766 | * propagated to its parents. 767 | */ 768 | propagate?: boolean; 769 | 770 | /** 771 | * Creates a new decoration. 772 | * 773 | * @param badge A letter that represents the decoration. 774 | * @param tooltip The tooltip of the decoration. 775 | * @param color The color of the decoration. 776 | */ 777 | constructor(badge?: string, tooltip?: string, color?: ThemeColor); 778 | } 779 | 780 | /** 781 | * The decoration provider interfaces defines the contract between extensions and 782 | * file decorations. 783 | */ 784 | export interface FileDecorationProvider { 785 | 786 | /** 787 | * An event to signal decorations for one or many files have changed. 788 | * 789 | * @see [EventEmitter](#EventEmitter 790 | */ 791 | onDidChange: Event; 792 | 793 | /** 794 | * Provide decorations for a given uri. 795 | * 796 | * @param uri The uri of the file to provide a decoration for. 797 | * @param token A cancellation token. 798 | * @returns A decoration or a thenable that resolves to such. 799 | */ 800 | provideFileDecoration(uri: Uri, token: CancellationToken): ProviderResult; 801 | } 802 | 803 | export namespace window { 804 | export function registerDecorationProvider(provider: FileDecorationProvider): Disposable; 805 | } 806 | 807 | //#endregion 808 | 809 | //#region debug 810 | 811 | /** 812 | * A DebugProtocolVariableContainer is an opaque stand-in type for the intersection of the Scope and Variable types defined in the Debug Adapter Protocol. 813 | * See https://microsoft.github.io/debug-adapter-protocol/specification#Types_Scope and https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable. 814 | */ 815 | export interface DebugProtocolVariableContainer { 816 | // Properties: the intersection of DAP's Scope and Variable types. 817 | } 818 | 819 | /** 820 | * A DebugProtocolVariable is an opaque stand-in type for the Variable type defined in the Debug Adapter Protocol. 821 | * See https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable. 822 | */ 823 | export interface DebugProtocolVariable { 824 | // Properties: see details [here](https://microsoft.github.io/debug-adapter-protocol/specification#Base_Protocol_Variable). 825 | } 826 | 827 | //#endregion 828 | 829 | //#region LogLevel: https://github.com/microsoft/vscode/issues/85992 830 | 831 | /** 832 | * @deprecated DO NOT USE, will be removed 833 | */ 834 | export enum LogLevel { 835 | Trace = 1, 836 | Debug = 2, 837 | Info = 3, 838 | Warning = 4, 839 | Error = 5, 840 | Critical = 6, 841 | Off = 7 842 | } 843 | 844 | export namespace env { 845 | /** 846 | * @deprecated DO NOT USE, will be removed 847 | */ 848 | export const logLevel: LogLevel; 849 | 850 | /** 851 | * @deprecated DO NOT USE, will be removed 852 | */ 853 | export const onDidChangeLogLevel: Event; 854 | } 855 | 856 | //#endregion 857 | 858 | //#region @joaomoreno: SCM validation 859 | 860 | /** 861 | * Represents the validation type of the Source Control input. 862 | */ 863 | export enum SourceControlInputBoxValidationType { 864 | 865 | /** 866 | * Something not allowed by the rules of a language or other means. 867 | */ 868 | Error = 0, 869 | 870 | /** 871 | * Something suspicious but allowed. 872 | */ 873 | Warning = 1, 874 | 875 | /** 876 | * Something to inform about but not a problem. 877 | */ 878 | Information = 2 879 | } 880 | 881 | export interface SourceControlInputBoxValidation { 882 | 883 | /** 884 | * The validation message to display. 885 | */ 886 | readonly message: string; 887 | 888 | /** 889 | * The validation type. 890 | */ 891 | readonly type: SourceControlInputBoxValidationType; 892 | } 893 | 894 | /** 895 | * Represents the input box in the Source Control viewlet. 896 | */ 897 | export interface SourceControlInputBox { 898 | 899 | /** 900 | * A validation function for the input box. It's possible to change 901 | * the validation provider simply by setting this property to a different function. 902 | */ 903 | validateInput?(value: string, cursorPosition: number): ProviderResult; 904 | } 905 | 906 | //#endregion 907 | 908 | //#region @joaomoreno: SCM selected provider 909 | 910 | export interface SourceControl { 911 | 912 | /** 913 | * Whether the source control is selected. 914 | */ 915 | readonly selected: boolean; 916 | 917 | /** 918 | * An event signaling when the selection state changes. 919 | */ 920 | readonly onDidChangeSelection: Event; 921 | } 922 | 923 | //#endregion 924 | 925 | //#region Terminal data write event https://github.com/microsoft/vscode/issues/78502 926 | 927 | export interface TerminalDataWriteEvent { 928 | /** 929 | * The [terminal](#Terminal) for which the data was written. 930 | */ 931 | readonly terminal: Terminal; 932 | /** 933 | * The data being written. 934 | */ 935 | readonly data: string; 936 | } 937 | 938 | namespace window { 939 | /** 940 | * An event which fires when the terminal's child pseudo-device is written to (the shell). 941 | * In other words, this provides access to the raw data stream from the process running 942 | * within the terminal, including VT sequences. 943 | */ 944 | export const onDidWriteTerminalData: Event; 945 | } 946 | 947 | //#endregion 948 | 949 | //#region Terminal dimensions property and change event https://github.com/microsoft/vscode/issues/55718 950 | 951 | /** 952 | * An [event](#Event) which fires when a [Terminal](#Terminal)'s dimensions change. 953 | */ 954 | export interface TerminalDimensionsChangeEvent { 955 | /** 956 | * The [terminal](#Terminal) for which the dimensions have changed. 957 | */ 958 | readonly terminal: Terminal; 959 | /** 960 | * The new value for the [terminal's dimensions](#Terminal.dimensions). 961 | */ 962 | readonly dimensions: TerminalDimensions; 963 | } 964 | 965 | export namespace window { 966 | /** 967 | * An event which fires when the [dimensions](#Terminal.dimensions) of the terminal change. 968 | */ 969 | export const onDidChangeTerminalDimensions: Event; 970 | } 971 | 972 | export interface Terminal { 973 | /** 974 | * The current dimensions of the terminal. This will be `undefined` immediately after the 975 | * terminal is created as the dimensions are not known until shortly after the terminal is 976 | * created. 977 | */ 978 | readonly dimensions: TerminalDimensions | undefined; 979 | } 980 | 981 | //#endregion 982 | 983 | //#region @jrieken -> exclusive document filters 984 | 985 | export interface DocumentFilter { 986 | readonly exclusive?: boolean; 987 | } 988 | 989 | //#endregion 990 | 991 | //#region @alexdima - OnEnter enhancement 992 | export interface OnEnterRule { 993 | /** 994 | * This rule will only execute if the text above the this line matches this regular expression. 995 | */ 996 | oneLineAboveText?: RegExp; 997 | } 998 | //#endregion 999 | 1000 | //#region Tree View: https://github.com/microsoft/vscode/issues/61313 1001 | 1002 | // https://github.com/microsoft/vscode/issues/100741 1003 | export interface TreeDataProvider { 1004 | /** 1005 | * Called only on hover to resolve the TreeItem2#tooltip property if it is undefined. 1006 | * Only properties that were undefined can be resolved in `resolveTreeItem`. 1007 | * Will only ever be called once per TreeItem. 1008 | * Functionality may be expanded later to include being called to resolve other missing 1009 | * properties on selection and/or on open. 1010 | * 1011 | * @param element 1012 | * @param item Undefined properties of `item` should be set then `item` should be returned. 1013 | */ 1014 | resolveTreeItem?(element: T, item: TreeItem2): TreeItem2 | Thenable; 1015 | } 1016 | 1017 | export class TreeItem2 extends TreeItem { 1018 | /** 1019 | * Content to be shown when you hover over the tree item. 1020 | */ 1021 | tooltip?: string | MarkdownString | /* for compilation */ any; 1022 | } 1023 | 1024 | export interface TreeView extends Disposable { 1025 | reveal(element: T | undefined, options?: { select?: boolean, focus?: boolean, expand?: boolean | number }): Thenable; 1026 | } 1027 | //#endregion 1028 | 1029 | //#region Task presentation group: https://github.com/microsoft/vscode/issues/47265 1030 | export interface TaskPresentationOptions { 1031 | /** 1032 | * Controls whether the task is executed in a specific terminal group using split panes. 1033 | */ 1034 | group?: string; 1035 | } 1036 | //#endregion 1037 | 1038 | //#region Status bar item with ID and Name: https://github.com/microsoft/vscode/issues/74972 1039 | 1040 | export namespace window { 1041 | 1042 | /** 1043 | * Options to configure the status bar item. 1044 | */ 1045 | export interface StatusBarItemOptions { 1046 | 1047 | /** 1048 | * A unique identifier of the status bar item. The identifier 1049 | * is for example used to allow a user to show or hide the 1050 | * status bar item in the UI. 1051 | */ 1052 | id: string; 1053 | 1054 | /** 1055 | * A human readable name of the status bar item. The name is 1056 | * for example used as a label in the UI to show or hide the 1057 | * status bar item. 1058 | */ 1059 | name: string; 1060 | 1061 | /** 1062 | * Accessibility information used when screen reader interacts with this status bar item. 1063 | */ 1064 | accessibilityInformation?: AccessibilityInformation; 1065 | 1066 | /** 1067 | * The alignment of the status bar item. 1068 | */ 1069 | alignment?: StatusBarAlignment; 1070 | 1071 | /** 1072 | * The priority of the status bar item. Higher value means the item should 1073 | * be shown more to the left. 1074 | */ 1075 | priority?: number; 1076 | } 1077 | 1078 | /** 1079 | * Creates a status bar [item](#StatusBarItem). 1080 | * 1081 | * @param options The options of the item. If not provided, some default values 1082 | * will be assumed. For example, the `StatusBarItemOptions.id` will be the id 1083 | * of the extension and the `StatusBarItemOptions.name` will be the extension name. 1084 | * @return A new status bar item. 1085 | */ 1086 | export function createStatusBarItem(options?: StatusBarItemOptions): StatusBarItem; 1087 | } 1088 | 1089 | //#endregion 1090 | 1091 | //#region OnTypeRename: https://github.com/microsoft/vscode/issues/109923 @aeschli 1092 | 1093 | /** 1094 | * The 'on type' rename range provider interface defines the contract between extensions and 1095 | * the 'on type' rename feature. 1096 | */ 1097 | export interface OnTypeRenameRangeProvider { 1098 | /** 1099 | * For a given position in a document, returns the range of the symbol at the position and all ranges 1100 | * that have the same content and can be renamed together. Optionally a word pattern can be returned 1101 | * to describe valid contents. A rename to one of the ranges can be applied to all other ranges if the new content 1102 | * is valid. 1103 | * If no result-specific word pattern is provided, the word pattern from the language configuration is used. 1104 | * 1105 | * @param document The document in which the provider was invoked. 1106 | * @param position The position at which the provider was invoked. 1107 | * @param token A cancellation token. 1108 | * @return A list of ranges that can be renamed together 1109 | */ 1110 | provideOnTypeRenameRanges(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; 1111 | } 1112 | 1113 | namespace languages { 1114 | /** 1115 | * Register a 'on type' rename range provider. 1116 | * 1117 | * Multiple providers can be registered for a language. In that case providers are sorted 1118 | * by their [score](#languages.match) and the best-matching provider that has a result is used. Failure 1119 | * of the selected provider will cause a failure of the whole operation. 1120 | * 1121 | * @param selector A selector that defines the documents this provider is applicable to. 1122 | * @param provider An 'on type' rename range provider. 1123 | * @return A [disposable](#Disposable) that unregisters this provider when being disposed. 1124 | */ 1125 | export function registerOnTypeRenameRangeProvider(selector: DocumentSelector, provider: OnTypeRenameRangeProvider): Disposable; 1126 | } 1127 | 1128 | /** 1129 | * Represents a list of ranges that can be renamed together along with a word pattern to describe valid range contents. 1130 | */ 1131 | export class OnTypeRenameRanges { 1132 | constructor(ranges: Range[], wordPattern?: RegExp); 1133 | 1134 | /** 1135 | * A list of ranges that can be renamed together. The ranges must have 1136 | * identical length and contain identical text content. The ranges cannot overlap. 1137 | */ 1138 | readonly ranges: Range[]; 1139 | 1140 | /** 1141 | * An optional word pattern that describes valid contents for the given ranges. 1142 | * If no pattern is provided, the language configuration's word pattern will be used. 1143 | */ 1144 | readonly wordPattern?: RegExp; 1145 | } 1146 | 1147 | //#endregion 1148 | 1149 | //#region Custom editor move https://github.com/microsoft/vscode/issues/86146 1150 | 1151 | // TODO: Also for custom editor 1152 | 1153 | export interface CustomTextEditorProvider { 1154 | 1155 | /** 1156 | * Handle when the underlying resource for a custom editor is renamed. 1157 | * 1158 | * This allows the webview for the editor be preserved throughout the rename. If this method is not implemented, 1159 | * VS Code will destory the previous custom editor and create a replacement one. 1160 | * 1161 | * @param newDocument New text document to use for the custom editor. 1162 | * @param existingWebviewPanel Webview panel for the custom editor. 1163 | * @param token A cancellation token that indicates the result is no longer needed. 1164 | * 1165 | * @return Thenable indicating that the webview editor has been moved. 1166 | */ 1167 | moveCustomTextEditor?(newDocument: TextDocument, existingWebviewPanel: WebviewPanel, token: CancellationToken): Thenable; 1168 | } 1169 | 1170 | //#endregion 1171 | 1172 | //#region allow QuickPicks to skip sorting: https://github.com/microsoft/vscode/issues/73904 1173 | 1174 | export interface QuickPick extends QuickInput { 1175 | /** 1176 | * An optional flag to sort the final results by index of first query match in label. Defaults to true. 1177 | */ 1178 | sortByLabel: boolean; 1179 | } 1180 | 1181 | //#endregion 1182 | 1183 | //#region @rebornix: Notebook 1184 | 1185 | export enum CellKind { 1186 | Markdown = 1, 1187 | Code = 2 1188 | } 1189 | 1190 | export enum CellOutputKind { 1191 | Text = 1, 1192 | Error = 2, 1193 | Rich = 3 1194 | } 1195 | 1196 | export interface CellStreamOutput { 1197 | outputKind: CellOutputKind.Text; 1198 | text: string; 1199 | } 1200 | 1201 | export interface CellErrorOutput { 1202 | outputKind: CellOutputKind.Error; 1203 | /** 1204 | * Exception Name 1205 | */ 1206 | ename: string; 1207 | /** 1208 | * Exception Value 1209 | */ 1210 | evalue: string; 1211 | /** 1212 | * Exception call stack 1213 | */ 1214 | traceback: string[]; 1215 | } 1216 | 1217 | export interface NotebookCellOutputMetadata { 1218 | /** 1219 | * Additional attributes of a cell metadata. 1220 | */ 1221 | custom?: { [key: string]: any }; 1222 | } 1223 | 1224 | export interface CellDisplayOutput { 1225 | outputKind: CellOutputKind.Rich; 1226 | /** 1227 | * { mime_type: value } 1228 | * 1229 | * Example: 1230 | * ```json 1231 | * { 1232 | * "outputKind": vscode.CellOutputKind.Rich, 1233 | * "data": { 1234 | * "text/html": [ 1235 | * "

Hello

" 1236 | * ], 1237 | * "text/plain": [ 1238 | * "" 1239 | * ] 1240 | * } 1241 | * } 1242 | */ 1243 | data: { [key: string]: any; }; 1244 | 1245 | readonly metadata?: NotebookCellOutputMetadata; 1246 | } 1247 | 1248 | export type CellOutput = CellStreamOutput | CellErrorOutput | CellDisplayOutput; 1249 | 1250 | export class NotebookCellOutputItem { 1251 | 1252 | readonly mime: string; 1253 | readonly value: unknown; 1254 | readonly metadata?: Record; 1255 | 1256 | constructor(mime: string, value: unknown, metadata?: Record); 1257 | } 1258 | 1259 | //TODO@jrieken add id? 1260 | export class NotebookCellOutput { 1261 | 1262 | readonly outputs: NotebookCellOutputItem[]; 1263 | readonly metadata?: Record; 1264 | 1265 | constructor(outputs: NotebookCellOutputItem[], metadata?: Record); 1266 | 1267 | //TODO@jrieken HACK to workaround dependency issues... 1268 | toJSON(): any; 1269 | } 1270 | 1271 | export enum NotebookCellRunState { 1272 | Running = 1, 1273 | Idle = 2, 1274 | Success = 3, 1275 | Error = 4 1276 | } 1277 | 1278 | export enum NotebookRunState { 1279 | Running = 1, 1280 | Idle = 2 1281 | } 1282 | 1283 | export interface NotebookCellMetadata { 1284 | /** 1285 | * Controls whether a cell's editor is editable/readonly. 1286 | */ 1287 | editable?: boolean; 1288 | 1289 | /** 1290 | * Controls if the cell is executable. 1291 | * This metadata is ignored for markdown cell. 1292 | */ 1293 | runnable?: boolean; 1294 | 1295 | /** 1296 | * Controls if the cell has a margin to support the breakpoint UI. 1297 | * This metadata is ignored for markdown cell. 1298 | */ 1299 | breakpointMargin?: boolean; 1300 | 1301 | /** 1302 | * Whether the [execution order](#NotebookCellMetadata.executionOrder) indicator will be displayed. 1303 | * Defaults to true. 1304 | */ 1305 | hasExecutionOrder?: boolean; 1306 | 1307 | /** 1308 | * The order in which this cell was executed. 1309 | */ 1310 | executionOrder?: number; 1311 | 1312 | /** 1313 | * A status message to be shown in the cell's status bar 1314 | */ 1315 | statusMessage?: string; 1316 | 1317 | /** 1318 | * The cell's current run state 1319 | */ 1320 | runState?: NotebookCellRunState; 1321 | 1322 | /** 1323 | * If the cell is running, the time at which the cell started running 1324 | */ 1325 | runStartTime?: number; 1326 | 1327 | /** 1328 | * The total duration of the cell's last run 1329 | */ 1330 | lastRunDuration?: number; 1331 | 1332 | /** 1333 | * Whether a code cell's editor is collapsed 1334 | */ 1335 | inputCollapsed?: boolean; 1336 | 1337 | /** 1338 | * Whether a code cell's outputs are collapsed 1339 | */ 1340 | outputCollapsed?: boolean; 1341 | 1342 | /** 1343 | * Additional attributes of a cell metadata. 1344 | */ 1345 | custom?: { [key: string]: any }; 1346 | } 1347 | 1348 | export interface NotebookCell { 1349 | readonly index: number; 1350 | readonly notebook: NotebookDocument; 1351 | readonly uri: Uri; 1352 | readonly cellKind: CellKind; 1353 | readonly document: TextDocument; 1354 | readonly language: string; 1355 | outputs: CellOutput[]; 1356 | metadata: NotebookCellMetadata; 1357 | } 1358 | 1359 | export interface NotebookDocumentMetadata { 1360 | /** 1361 | * Controls if users can add or delete cells 1362 | * Defaults to true 1363 | */ 1364 | editable?: boolean; 1365 | 1366 | /** 1367 | * Controls whether the full notebook can be run at once. 1368 | * Defaults to true 1369 | */ 1370 | runnable?: boolean; 1371 | 1372 | /** 1373 | * Default value for [cell editable metadata](#NotebookCellMetadata.editable). 1374 | * Defaults to true. 1375 | */ 1376 | cellEditable?: boolean; 1377 | 1378 | /** 1379 | * Default value for [cell runnable metadata](#NotebookCellMetadata.runnable). 1380 | * Defaults to true. 1381 | */ 1382 | cellRunnable?: boolean; 1383 | 1384 | /** 1385 | * Default value for [cell hasExecutionOrder metadata](#NotebookCellMetadata.hasExecutionOrder). 1386 | * Defaults to true. 1387 | */ 1388 | cellHasExecutionOrder?: boolean; 1389 | 1390 | displayOrder?: GlobPattern[]; 1391 | 1392 | /** 1393 | * Additional attributes of the document metadata. 1394 | */ 1395 | custom?: { [key: string]: any }; 1396 | 1397 | /** 1398 | * The document's current run state 1399 | */ 1400 | runState?: NotebookRunState; 1401 | } 1402 | 1403 | export interface NotebookDocumentContentOptions { 1404 | /** 1405 | * Controls if outputs change will trigger notebook document content change and if it will be used in the diff editor 1406 | * Default to false. If the content provider doesn't persisit the outputs in the file document, this should be set to true. 1407 | */ 1408 | transientOutputs: boolean; 1409 | 1410 | /** 1411 | * Controls if a meetadata property change will trigger notebook document content change and if it will be used in the diff editor 1412 | * Default to false. If the content provider doesn't persisit a metadata property in the file document, it should be set to true. 1413 | */ 1414 | transientMetadata: { [K in keyof NotebookCellMetadata]?: boolean }; 1415 | } 1416 | 1417 | export interface NotebookDocument { 1418 | readonly uri: Uri; 1419 | readonly version: number; 1420 | readonly fileName: string; 1421 | readonly viewType: string; 1422 | readonly isDirty: boolean; 1423 | readonly isUntitled: boolean; 1424 | readonly cells: ReadonlyArray; 1425 | readonly contentOptions: NotebookDocumentContentOptions; 1426 | languages: string[]; 1427 | metadata: NotebookDocumentMetadata; 1428 | } 1429 | 1430 | export interface NotebookConcatTextDocument { 1431 | uri: Uri; 1432 | isClosed: boolean; 1433 | dispose(): void; 1434 | onDidChange: Event; 1435 | version: number; 1436 | getText(): string; 1437 | getText(range: Range): string; 1438 | 1439 | offsetAt(position: Position): number; 1440 | positionAt(offset: number): Position; 1441 | validateRange(range: Range): Range; 1442 | validatePosition(position: Position): Position; 1443 | 1444 | locationAt(positionOrRange: Position | Range): Location; 1445 | positionAt(location: Location): Position; 1446 | contains(uri: Uri): boolean 1447 | } 1448 | 1449 | export interface WorkspaceEdit { 1450 | replaceNotebookMetadata(uri: Uri, value: NotebookDocumentMetadata): void; 1451 | replaceNotebookCells(uri: Uri, start: number, end: number, cells: NotebookCellData[], metadata?: WorkspaceEditEntryMetadata): void; 1452 | replaceNotebookCellOutput(uri: Uri, index: number, outputs: (NotebookCellOutput | CellOutput)[], metadata?: WorkspaceEditEntryMetadata): void; 1453 | replaceNotebookCellMetadata(uri: Uri, index: number, cellMetadata: NotebookCellMetadata, metadata?: WorkspaceEditEntryMetadata): void; 1454 | } 1455 | 1456 | export interface NotebookEditorEdit { 1457 | replaceMetadata(value: NotebookDocumentMetadata): void; 1458 | replaceCells(start: number, end: number, cells: NotebookCellData[]): void; 1459 | replaceCellOutput(index: number, outputs: (NotebookCellOutput | CellOutput)[]): void; 1460 | replaceCellMetadata(index: number, metadata: NotebookCellMetadata): void; 1461 | } 1462 | 1463 | export interface NotebookCellRange { 1464 | readonly start: number; 1465 | /** 1466 | * exclusive 1467 | */ 1468 | readonly end: number; 1469 | } 1470 | 1471 | export enum NotebookEditorRevealType { 1472 | /** 1473 | * The range will be revealed with as little scrolling as possible. 1474 | */ 1475 | Default = 0, 1476 | /** 1477 | * The range will always be revealed in the center of the viewport. 1478 | */ 1479 | InCenter = 1, 1480 | /** 1481 | * If the range is outside the viewport, it will be revealed in the center of the viewport. 1482 | * Otherwise, it will be revealed with as little scrolling as possible. 1483 | */ 1484 | InCenterIfOutsideViewport = 2, 1485 | } 1486 | 1487 | export interface NotebookEditor { 1488 | /** 1489 | * The document associated with this notebook editor. 1490 | */ 1491 | readonly document: NotebookDocument; 1492 | 1493 | /** 1494 | * The primary selected cell on this notebook editor. 1495 | */ 1496 | readonly selection?: NotebookCell; 1497 | 1498 | 1499 | /** 1500 | * The current visible ranges in the editor (vertically). 1501 | */ 1502 | readonly visibleRanges: NotebookCellRange[]; 1503 | 1504 | /** 1505 | * The column in which this editor shows. 1506 | */ 1507 | readonly viewColumn?: ViewColumn; 1508 | 1509 | /** 1510 | * Fired when the panel is disposed. 1511 | */ 1512 | readonly onDidDispose: Event; 1513 | 1514 | /** 1515 | * Active kernel used in the editor 1516 | */ 1517 | readonly kernel?: NotebookKernel; 1518 | 1519 | /** 1520 | * Fired when the output hosting webview posts a message. 1521 | */ 1522 | readonly onDidReceiveMessage: Event; 1523 | /** 1524 | * Post a message to the output hosting webview. 1525 | * 1526 | * Messages are only delivered if the editor is live. 1527 | * 1528 | * @param message Body of the message. This must be a string or other json serializable object. 1529 | */ 1530 | postMessage(message: any): Thenable; 1531 | 1532 | /** 1533 | * Convert a uri for the local file system to one that can be used inside outputs webview. 1534 | */ 1535 | asWebviewUri(localResource: Uri): Uri; 1536 | 1537 | /** 1538 | * Perform an edit on the notebook associated with this notebook editor. 1539 | * 1540 | * The given callback-function is invoked with an [edit-builder](#NotebookEditorEdit) which must 1541 | * be used to make edits. Note that the edit-builder is only valid while the 1542 | * callback executes. 1543 | * 1544 | * @param callback A function which can create edits using an [edit-builder](#NotebookEditorEdit). 1545 | * @return A promise that resolves with a value indicating if the edits could be applied. 1546 | */ 1547 | edit(callback: (editBuilder: NotebookEditorEdit) => void): Thenable; 1548 | 1549 | setDecorations(decorationType: NotebookEditorDecorationType, range: NotebookCellRange): void; 1550 | 1551 | revealRange(range: NotebookCellRange, revealType?: NotebookEditorRevealType): void; 1552 | } 1553 | 1554 | export interface NotebookOutputSelector { 1555 | mimeTypes?: string[]; 1556 | } 1557 | 1558 | export interface NotebookRenderRequest { 1559 | output: CellDisplayOutput; 1560 | mimeType: string; 1561 | outputId: string; 1562 | } 1563 | 1564 | export interface NotebookDocumentMetadataChangeEvent { 1565 | readonly document: NotebookDocument; 1566 | } 1567 | 1568 | export interface NotebookCellsChangeData { 1569 | readonly start: number; 1570 | readonly deletedCount: number; 1571 | readonly deletedItems: NotebookCell[]; 1572 | readonly items: NotebookCell[]; 1573 | } 1574 | 1575 | export interface NotebookCellsChangeEvent { 1576 | 1577 | /** 1578 | * The affected document. 1579 | */ 1580 | readonly document: NotebookDocument; 1581 | readonly changes: ReadonlyArray; 1582 | } 1583 | 1584 | export interface NotebookCellMoveEvent { 1585 | 1586 | /** 1587 | * The affected document. 1588 | */ 1589 | readonly document: NotebookDocument; 1590 | readonly index: number; 1591 | readonly newIndex: number; 1592 | } 1593 | 1594 | export interface NotebookCellOutputsChangeEvent { 1595 | 1596 | /** 1597 | * The affected document. 1598 | */ 1599 | readonly document: NotebookDocument; 1600 | readonly cells: NotebookCell[]; 1601 | } 1602 | 1603 | export interface NotebookCellLanguageChangeEvent { 1604 | 1605 | /** 1606 | * The affected document. 1607 | */ 1608 | readonly document: NotebookDocument; 1609 | readonly cell: NotebookCell; 1610 | readonly language: string; 1611 | } 1612 | 1613 | export interface NotebookCellMetadataChangeEvent { 1614 | readonly document: NotebookDocument; 1615 | readonly cell: NotebookCell; 1616 | } 1617 | 1618 | export interface NotebookEditorSelectionChangeEvent { 1619 | readonly notebookEditor: NotebookEditor; 1620 | readonly selection?: NotebookCell; 1621 | } 1622 | 1623 | export interface NotebookEditorVisibleRangesChangeEvent { 1624 | readonly notebookEditor: NotebookEditor; 1625 | readonly visibleRanges: ReadonlyArray; 1626 | } 1627 | 1628 | export interface NotebookCellData { 1629 | readonly cellKind: CellKind; 1630 | readonly source: string; 1631 | readonly language: string; 1632 | readonly outputs: CellOutput[]; 1633 | readonly metadata: NotebookCellMetadata | undefined; 1634 | } 1635 | 1636 | export interface NotebookData { 1637 | readonly cells: NotebookCellData[]; 1638 | readonly languages: string[]; 1639 | readonly metadata: NotebookDocumentMetadata; 1640 | } 1641 | 1642 | interface NotebookDocumentContentChangeEvent { 1643 | 1644 | /** 1645 | * The document that the edit is for. 1646 | */ 1647 | readonly document: NotebookDocument; 1648 | } 1649 | 1650 | interface NotebookDocumentEditEvent { 1651 | 1652 | /** 1653 | * The document that the edit is for. 1654 | */ 1655 | readonly document: NotebookDocument; 1656 | 1657 | /** 1658 | * Undo the edit operation. 1659 | * 1660 | * This is invoked by VS Code when the user undoes this edit. To implement `undo`, your 1661 | * extension should restore the document and editor to the state they were in just before this 1662 | * edit was added to VS Code's internal edit stack by `onDidChangeCustomDocument`. 1663 | */ 1664 | undo(): Thenable | void; 1665 | 1666 | /** 1667 | * Redo the edit operation. 1668 | * 1669 | * This is invoked by VS Code when the user redoes this edit. To implement `redo`, your 1670 | * extension should restore the document and editor to the state they were in just after this 1671 | * edit was added to VS Code's internal edit stack by `onDidChangeCustomDocument`. 1672 | */ 1673 | redo(): Thenable | void; 1674 | 1675 | /** 1676 | * Display name describing the edit. 1677 | * 1678 | * This will be shown to users in the UI for undo/redo operations. 1679 | */ 1680 | readonly label?: string; 1681 | } 1682 | 1683 | interface NotebookDocumentBackup { 1684 | /** 1685 | * Unique identifier for the backup. 1686 | * 1687 | * This id is passed back to your extension in `openNotebook` when opening a notebook editor from a backup. 1688 | */ 1689 | readonly id: string; 1690 | 1691 | /** 1692 | * Delete the current backup. 1693 | * 1694 | * This is called by VS Code when it is clear the current backup is no longer needed, such as when a new backup 1695 | * is made or when the file is saved. 1696 | */ 1697 | delete(): void; 1698 | } 1699 | 1700 | interface NotebookDocumentBackupContext { 1701 | readonly destination: Uri; 1702 | } 1703 | 1704 | interface NotebookDocumentOpenContext { 1705 | readonly backupId?: string; 1706 | } 1707 | 1708 | /** 1709 | * Communication object passed to the {@link NotebookContentProvider} and 1710 | * {@link NotebookOutputRenderer} to communicate with the webview. 1711 | */ 1712 | export interface NotebookCommunication { 1713 | /** 1714 | * ID of the editor this object communicates with. A single notebook 1715 | * document can have multiple attached webviews and editors, when the 1716 | * notebook is split for instance. The editor ID lets you differentiate 1717 | * between them. 1718 | */ 1719 | readonly editorId: string; 1720 | 1721 | /** 1722 | * Fired when the output hosting webview posts a message. 1723 | */ 1724 | readonly onDidReceiveMessage: Event; 1725 | /** 1726 | * Post a message to the output hosting webview. 1727 | * 1728 | * Messages are only delivered if the editor is live. 1729 | * 1730 | * @param message Body of the message. This must be a string or other json serializable object. 1731 | */ 1732 | postMessage(message: any): Thenable; 1733 | 1734 | /** 1735 | * Convert a uri for the local file system to one that can be used inside outputs webview. 1736 | */ 1737 | asWebviewUri(localResource: Uri): Uri; 1738 | } 1739 | 1740 | export interface NotebookContentProvider { 1741 | readonly options?: NotebookDocumentContentOptions; 1742 | readonly onDidChangeNotebookContentOptions?: Event; 1743 | readonly onDidChangeNotebook: Event; 1744 | 1745 | /** 1746 | * Content providers should always use [file system providers](#FileSystemProvider) to 1747 | * resolve the raw content for `uri` as the resouce is not necessarily a file on disk. 1748 | */ 1749 | openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext): NotebookData | Promise; 1750 | resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Promise; 1751 | saveNotebook(document: NotebookDocument, cancellation: CancellationToken): Promise; 1752 | saveNotebookAs(targetResource: Uri, document: NotebookDocument, cancellation: CancellationToken): Promise; 1753 | backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, cancellation: CancellationToken): Promise; 1754 | } 1755 | 1756 | export interface NotebookKernel { 1757 | readonly id?: string; 1758 | label: string; 1759 | description?: string; 1760 | detail?: string; 1761 | isPreferred?: boolean; 1762 | preloads?: Uri[]; 1763 | executeCell(document: NotebookDocument, cell: NotebookCell): void; 1764 | cancelCellExecution(document: NotebookDocument, cell: NotebookCell): void; 1765 | executeAllCells(document: NotebookDocument): void; 1766 | cancelAllCellsExecution(document: NotebookDocument): void; 1767 | } 1768 | 1769 | export type NotebookFilenamePattern = GlobPattern | { include: GlobPattern; exclude: GlobPattern }; 1770 | 1771 | export interface NotebookDocumentFilter { 1772 | viewType?: string | string[]; 1773 | filenamePattern?: NotebookFilenamePattern; 1774 | } 1775 | 1776 | export interface NotebookKernelProvider { 1777 | onDidChangeKernels?: Event; 1778 | provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult; 1779 | resolveKernel?(kernel: T, document: NotebookDocument, webview: NotebookCommunication, token: CancellationToken): ProviderResult; 1780 | } 1781 | 1782 | /** 1783 | * Represents the alignment of status bar items. 1784 | */ 1785 | export enum NotebookCellStatusBarAlignment { 1786 | 1787 | /** 1788 | * Aligned to the left side. 1789 | */ 1790 | Left = 1, 1791 | 1792 | /** 1793 | * Aligned to the right side. 1794 | */ 1795 | Right = 2 1796 | } 1797 | 1798 | export interface NotebookCellStatusBarItem { 1799 | readonly cell: NotebookCell; 1800 | readonly alignment: NotebookCellStatusBarAlignment; 1801 | readonly priority?: number; 1802 | text: string; 1803 | tooltip: string | undefined; 1804 | command: string | Command | undefined; 1805 | accessibilityInformation?: AccessibilityInformation; 1806 | show(): void; 1807 | hide(): void; 1808 | dispose(): void; 1809 | } 1810 | 1811 | export interface NotebookDecorationRenderOptions { 1812 | backgroundColor?: string | ThemeColor; 1813 | borderColor?: string | ThemeColor; 1814 | top: ThemableDecorationAttachmentRenderOptions; 1815 | } 1816 | 1817 | export interface NotebookEditorDecorationType { 1818 | readonly key: string; 1819 | dispose(): void; 1820 | } 1821 | 1822 | 1823 | export namespace notebook { 1824 | export function registerNotebookContentProvider( 1825 | notebookType: string, 1826 | provider: NotebookContentProvider, 1827 | options?: NotebookDocumentContentOptions & { 1828 | /** 1829 | * Not ready for production or development use yet. 1830 | */ 1831 | viewOptions?: { 1832 | displayName: string; 1833 | filenamePattern: NotebookFilenamePattern[]; 1834 | exclusive?: boolean; 1835 | }; 1836 | } 1837 | ): Disposable; 1838 | 1839 | export function registerNotebookKernelProvider( 1840 | selector: NotebookDocumentFilter, 1841 | provider: NotebookKernelProvider 1842 | ): Disposable; 1843 | 1844 | export function createNotebookEditorDecorationType(options: NotebookDecorationRenderOptions): NotebookEditorDecorationType; 1845 | export function openNotebookDocument(uri: Uri, viewType?: string): Promise; 1846 | export const onDidOpenNotebookDocument: Event; 1847 | export const onDidCloseNotebookDocument: Event; 1848 | export const onDidSaveNotebookDocument: Event; 1849 | 1850 | /** 1851 | * All currently known notebook documents. 1852 | */ 1853 | export const notebookDocuments: ReadonlyArray; 1854 | export const onDidChangeNotebookDocumentMetadata: Event; 1855 | export const onDidChangeNotebookCells: Event; 1856 | export const onDidChangeCellOutputs: Event; 1857 | export const onDidChangeCellLanguage: Event; 1858 | export const onDidChangeCellMetadata: Event; 1859 | /** 1860 | * Create a document that is the concatenation of all notebook cells. By default all code-cells are included 1861 | * but a selector can be provided to narrow to down the set of cells. 1862 | * 1863 | * @param notebook 1864 | * @param selector 1865 | */ 1866 | export function createConcatTextDocument(notebook: NotebookDocument, selector?: DocumentSelector): NotebookConcatTextDocument; 1867 | 1868 | export const onDidChangeActiveNotebookKernel: Event<{ document: NotebookDocument, kernel: NotebookKernel | undefined }>; 1869 | 1870 | /** 1871 | * Creates a notebook cell status bar [item](#NotebookCellStatusBarItem). 1872 | * It will be disposed automatically when the notebook document is closed or the cell is deleted. 1873 | * 1874 | * @param cell The cell on which this item should be shown. 1875 | * @param alignment The alignment of the item. 1876 | * @param priority The priority of the item. Higher values mean the item should be shown more to the left. 1877 | * @return A new status bar item. 1878 | */ 1879 | export function createCellStatusBarItem(cell: NotebookCell, alignment?: NotebookCellStatusBarAlignment, priority?: number): NotebookCellStatusBarItem; 1880 | } 1881 | 1882 | export namespace window { 1883 | export const visibleNotebookEditors: NotebookEditor[]; 1884 | export const onDidChangeVisibleNotebookEditors: Event; 1885 | export const activeNotebookEditor: NotebookEditor | undefined; 1886 | export const onDidChangeActiveNotebookEditor: Event; 1887 | export const onDidChangeNotebookEditorSelection: Event; 1888 | export const onDidChangeNotebookEditorVisibleRanges: Event; 1889 | } 1890 | 1891 | //#endregion 1892 | 1893 | //#region https://github.com/microsoft/vscode/issues/39441 1894 | 1895 | export interface CompletionItem { 1896 | /** 1897 | * Will be merged into CompletionItem#label 1898 | */ 1899 | label2?: CompletionItemLabel; 1900 | } 1901 | 1902 | export interface CompletionItemLabel { 1903 | /** 1904 | * The function or variable. Rendered leftmost. 1905 | */ 1906 | name: string; 1907 | 1908 | /** 1909 | * The parameters without the return type. Render after `name`. 1910 | */ 1911 | parameters?: string; 1912 | 1913 | /** 1914 | * The fully qualified name, like package name or file path. Rendered after `signature`. 1915 | */ 1916 | qualifier?: string; 1917 | 1918 | /** 1919 | * The return-type of a function or type of a property/variable. Rendered rightmost. 1920 | */ 1921 | type?: string; 1922 | } 1923 | 1924 | //#endregion 1925 | 1926 | //#region @eamodio - timeline: https://github.com/microsoft/vscode/issues/84297 1927 | 1928 | export class TimelineItem { 1929 | /** 1930 | * A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred. 1931 | */ 1932 | timestamp: number; 1933 | 1934 | /** 1935 | * A human-readable string describing the timeline item. 1936 | */ 1937 | label: string; 1938 | 1939 | /** 1940 | * Optional id for the timeline item. It must be unique across all the timeline items provided by this source. 1941 | * 1942 | * If not provided, an id is generated using the timeline item's timestamp. 1943 | */ 1944 | id?: string; 1945 | 1946 | /** 1947 | * The icon path or [ThemeIcon](#ThemeIcon) for the timeline item. 1948 | */ 1949 | iconPath?: Uri | { light: Uri; dark: Uri; } | ThemeIcon; 1950 | 1951 | /** 1952 | * A human readable string describing less prominent details of the timeline item. 1953 | */ 1954 | description?: string; 1955 | 1956 | /** 1957 | * The tooltip text when you hover over the timeline item. 1958 | */ 1959 | detail?: string; 1960 | 1961 | /** 1962 | * The [command](#Command) that should be executed when the timeline item is selected. 1963 | */ 1964 | command?: Command; 1965 | 1966 | /** 1967 | * Context value of the timeline item. This can be used to contribute specific actions to the item. 1968 | * For example, a timeline item is given a context value as `commit`. When contributing actions to `timeline/item/context` 1969 | * using `menus` extension point, you can specify context value for key `timelineItem` in `when` expression like `timelineItem == commit`. 1970 | * ``` 1971 | * "contributes": { 1972 | * "menus": { 1973 | * "timeline/item/context": [ 1974 | * { 1975 | * "command": "extension.copyCommitId", 1976 | * "when": "timelineItem == commit" 1977 | * } 1978 | * ] 1979 | * } 1980 | * } 1981 | * ``` 1982 | * This will show the `extension.copyCommitId` action only for items where `contextValue` is `commit`. 1983 | */ 1984 | contextValue?: string; 1985 | 1986 | /** 1987 | * Accessibility information used when screen reader interacts with this timeline item. 1988 | */ 1989 | accessibilityInformation?: AccessibilityInformation; 1990 | 1991 | /** 1992 | * @param label A human-readable string describing the timeline item 1993 | * @param timestamp A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred 1994 | */ 1995 | constructor(label: string, timestamp: number); 1996 | } 1997 | 1998 | export interface TimelineChangeEvent { 1999 | /** 2000 | * The [uri](#Uri) of the resource for which the timeline changed. 2001 | */ 2002 | uri: Uri; 2003 | 2004 | /** 2005 | * A flag which indicates whether the entire timeline should be reset. 2006 | */ 2007 | reset?: boolean; 2008 | } 2009 | 2010 | export interface Timeline { 2011 | readonly paging?: { 2012 | /** 2013 | * A provider-defined cursor specifying the starting point of timeline items which are after the ones returned. 2014 | * Use `undefined` to signal that there are no more items to be returned. 2015 | */ 2016 | readonly cursor: string | undefined; 2017 | }; 2018 | 2019 | /** 2020 | * An array of [timeline items](#TimelineItem). 2021 | */ 2022 | readonly items: readonly TimelineItem[]; 2023 | } 2024 | 2025 | export interface TimelineOptions { 2026 | /** 2027 | * A provider-defined cursor specifying the starting point of the timeline items that should be returned. 2028 | */ 2029 | cursor?: string; 2030 | 2031 | /** 2032 | * An optional maximum number timeline items or the all timeline items newer (inclusive) than the timestamp or id that should be returned. 2033 | * If `undefined` all timeline items should be returned. 2034 | */ 2035 | limit?: number | { timestamp: number; id?: string; }; 2036 | } 2037 | 2038 | export interface TimelineProvider { 2039 | /** 2040 | * An optional event to signal that the timeline for a source has changed. 2041 | * To signal that the timeline for all resources (uris) has changed, do not pass any argument or pass `undefined`. 2042 | */ 2043 | onDidChange?: Event; 2044 | 2045 | /** 2046 | * An identifier of the source of the timeline items. This can be used to filter sources. 2047 | */ 2048 | readonly id: string; 2049 | 2050 | /** 2051 | * A human-readable string describing the source of the timeline items. This can be used as the display label when filtering sources. 2052 | */ 2053 | readonly label: string; 2054 | 2055 | /** 2056 | * Provide [timeline items](#TimelineItem) for a [Uri](#Uri). 2057 | * 2058 | * @param uri The [uri](#Uri) of the file to provide the timeline for. 2059 | * @param options A set of options to determine how results should be returned. 2060 | * @param token A cancellation token. 2061 | * @return The [timeline result](#TimelineResult) or a thenable that resolves to such. The lack of a result 2062 | * can be signaled by returning `undefined`, `null`, or an empty array. 2063 | */ 2064 | provideTimeline(uri: Uri, options: TimelineOptions, token: CancellationToken): ProviderResult; 2065 | } 2066 | 2067 | export namespace workspace { 2068 | /** 2069 | * Register a timeline provider. 2070 | * 2071 | * Multiple providers can be registered. In that case, providers are asked in 2072 | * parallel and the results are merged. A failing provider (rejected promise or exception) will 2073 | * not cause a failure of the whole operation. 2074 | * 2075 | * @param scheme A scheme or schemes that defines which documents this provider is applicable to. Can be `*` to target all documents. 2076 | * @param provider A timeline provider. 2077 | * @return A [disposable](#Disposable) that unregisters this provider when being disposed. 2078 | */ 2079 | export function registerTimelineProvider(scheme: string | string[], provider: TimelineProvider): Disposable; 2080 | } 2081 | 2082 | //#endregion 2083 | 2084 | //#region https://github.com/microsoft/vscode/issues/91555 2085 | 2086 | export enum StandardTokenType { 2087 | Other = 0, 2088 | Comment = 1, 2089 | String = 2, 2090 | RegEx = 4 2091 | } 2092 | 2093 | export interface TokenInformation { 2094 | type: StandardTokenType; 2095 | range: Range; 2096 | } 2097 | 2098 | export namespace languages { 2099 | export function getTokenInformationAtPosition(document: TextDocument, position: Position): Promise; 2100 | } 2101 | 2102 | //#endregion 2103 | 2104 | //#region https://github.com/microsoft/vscode/issues/104436 2105 | 2106 | export enum ExtensionRuntime { 2107 | /** 2108 | * The extension is running in a NodeJS extension host. Runtime access to NodeJS APIs is available. 2109 | */ 2110 | Node = 1, 2111 | /** 2112 | * The extension is running in a Webworker extension host. Runtime access is limited to Webworker APIs. 2113 | */ 2114 | Webworker = 2 2115 | } 2116 | 2117 | export interface ExtensionContext { 2118 | readonly extensionRuntime: ExtensionRuntime; 2119 | } 2120 | 2121 | //#endregion 2122 | 2123 | 2124 | //#region https://github.com/microsoft/vscode/issues/102091 2125 | 2126 | export interface TextDocument { 2127 | 2128 | /** 2129 | * The [notebook](#NotebookDocument) that contains this document as a notebook cell or `undefined` when 2130 | * the document is not contained by a notebook (this should be the more frequent case). 2131 | */ 2132 | notebook: NotebookDocument | undefined; 2133 | } 2134 | //#endregion 2135 | } 2136 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true, 12 | "noUnusedParameters": true, 13 | "forceConsistentCasingInFileNames": true 14 | }, 15 | "exclude": [ 16 | "node_modules", 17 | ".vscode-test" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Get up and running straight away 13 | 14 | * Press `F5` to open a new window with your extension loaded. 15 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 16 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 17 | * Find output from your extension in the debug console. 18 | 19 | ## Make changes 20 | 21 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 22 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 23 | 24 | 25 | ## Explore the API 26 | 27 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 28 | 29 | ## Run tests 30 | 31 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 32 | * Press `F5` to run the tests in a new window with your extension loaded. 33 | * See the output of the test result in the debug console. 34 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 35 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 36 | * You can create folders inside the `test` folder to structure your tests any way you want. 37 | 38 | ## Go further 39 | 40 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 41 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 42 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 43 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.8.3" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" 8 | integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== 9 | dependencies: 10 | "@babel/highlight" "^7.8.3" 11 | 12 | "@babel/helper-validator-identifier@^7.9.0": 13 | version "7.9.5" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" 15 | integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== 16 | 17 | "@babel/highlight@^7.8.3": 18 | version "7.9.0" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" 20 | integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.9.0" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.1.3": 27 | version "0.1.3" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" 29 | integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^12.1.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | lodash "^4.17.19" 39 | minimatch "^3.0.4" 40 | strip-json-comments "^3.1.1" 41 | 42 | "@nodelib/fs.scandir@2.1.3": 43 | version "2.1.3" 44 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" 45 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 46 | dependencies: 47 | "@nodelib/fs.stat" "2.0.3" 48 | run-parallel "^1.1.9" 49 | 50 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": 51 | version "2.0.3" 52 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" 53 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 54 | 55 | "@nodelib/fs.walk@^1.2.3": 56 | version "1.2.4" 57 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" 58 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 59 | dependencies: 60 | "@nodelib/fs.scandir" "2.1.3" 61 | fastq "^1.6.0" 62 | 63 | "@types/color-name@^1.1.1": 64 | version "1.1.1" 65 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 66 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 67 | 68 | "@types/glob@^7.1.3": 69 | version "7.1.3" 70 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" 71 | integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== 72 | dependencies: 73 | "@types/minimatch" "*" 74 | "@types/node" "*" 75 | 76 | "@types/json-schema@^7.0.3": 77 | version "7.0.4" 78 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" 79 | integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== 80 | 81 | "@types/minimatch@*": 82 | version "3.0.3" 83 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 84 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 85 | 86 | "@types/mocha@^8.0.3": 87 | version "8.0.3" 88 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.0.3.tgz#51b21b6acb6d1b923bbdc7725c38f9f455166402" 89 | integrity sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg== 90 | 91 | "@types/node@*", "@types/node@^13.11.0": 92 | version "13.13.4" 93 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" 94 | integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== 95 | 96 | "@typescript-eslint/eslint-plugin@^4.1.1": 97 | version "4.1.1" 98 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.1.1.tgz#78d5b18e259b13c2f4ec41dd9105af269a161a75" 99 | integrity sha512-Hoxyt99EA9LMmqo/5PuWWPeWeB3mKyvibfJ1Hy5SfiUpjE8Nqp+5QNd9fOkzL66+fqvIWSIE+Ett16LGMzCGnQ== 100 | dependencies: 101 | "@typescript-eslint/experimental-utils" "4.1.1" 102 | "@typescript-eslint/scope-manager" "4.1.1" 103 | debug "^4.1.1" 104 | functional-red-black-tree "^1.0.1" 105 | regexpp "^3.0.0" 106 | semver "^7.3.2" 107 | tsutils "^3.17.1" 108 | 109 | "@typescript-eslint/experimental-utils@4.1.1": 110 | version "4.1.1" 111 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.1.1.tgz#52ff4e37c93113eb96385a4e6d075abece1ea72d" 112 | integrity sha512-jzYsNciHoa4Z3c1URtmeT/bamYm8Dwfw6vuN3WHIE/BXb1iC4KveAnXDErTAZtPVxTYBaYn3n2gbt6F6D2rm1A== 113 | dependencies: 114 | "@types/json-schema" "^7.0.3" 115 | "@typescript-eslint/scope-manager" "4.1.1" 116 | "@typescript-eslint/types" "4.1.1" 117 | "@typescript-eslint/typescript-estree" "4.1.1" 118 | eslint-scope "^5.0.0" 119 | eslint-utils "^2.0.0" 120 | 121 | "@typescript-eslint/parser@^4.1.1": 122 | version "4.1.1" 123 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.1.1.tgz#324b4b35e314075adbc92bd8330cf3ef0c88cf3e" 124 | integrity sha512-NLIhmicpKGfJbdXyQBz9j48PA6hq6e+SDOoXy7Ak6bq1ebGqbgG+fR1UIDAuay6OjQdot69c/URu2uLlsP8GQQ== 125 | dependencies: 126 | "@typescript-eslint/scope-manager" "4.1.1" 127 | "@typescript-eslint/types" "4.1.1" 128 | "@typescript-eslint/typescript-estree" "4.1.1" 129 | debug "^4.1.1" 130 | 131 | "@typescript-eslint/scope-manager@4.1.1": 132 | version "4.1.1" 133 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.1.1.tgz#bdb8526e82435f32b4ccd9dd4cec01af97b48850" 134 | integrity sha512-0W8TTobCvIIQ2FsrYTffyZGAAFUyIbEHq5EYJb1m7Rpd005jrnOvKOo8ywCLhs/Bm17C+KsrUboBvBAARQVvyA== 135 | dependencies: 136 | "@typescript-eslint/types" "4.1.1" 137 | "@typescript-eslint/visitor-keys" "4.1.1" 138 | 139 | "@typescript-eslint/types@4.1.1": 140 | version "4.1.1" 141 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.1.1.tgz#57500c4a86b28cb47094c1a62f1177ea279a09cb" 142 | integrity sha512-zrBiqOKYerMTllKcn+BP+i1b7LW/EbMMYytroXMxUTvFPn1smkCu0D7lSAx29fTUO4jnwV0ljSvYQtn2vNrNxA== 143 | 144 | "@typescript-eslint/typescript-estree@4.1.1": 145 | version "4.1.1" 146 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.1.1.tgz#2015a84d71303ecdb6f46efd807ac19a51aab490" 147 | integrity sha512-2AUg5v0liVBsqbGxBphbJ0QbGqSRVaF5qPoTPWcxop+66vMdU1h4CCvHxTC47+Qb+Pr4l2RhXDd41JNpwcQEKw== 148 | dependencies: 149 | "@typescript-eslint/types" "4.1.1" 150 | "@typescript-eslint/visitor-keys" "4.1.1" 151 | debug "^4.1.1" 152 | globby "^11.0.1" 153 | is-glob "^4.0.1" 154 | lodash "^4.17.15" 155 | semver "^7.3.2" 156 | tsutils "^3.17.1" 157 | 158 | "@typescript-eslint/visitor-keys@4.1.1": 159 | version "4.1.1" 160 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.1.1.tgz#bb05664bf4bea28dc120d1da94f3027d42ab0f6f" 161 | integrity sha512-/EOOXbA2ferGLG6RmCHEQ0lTTLkOlXYDgblCmQk3tIU7mTPLm4gKhFMeeUSe+bcchTUsKeCk8xcpbop5Zr/8Rw== 162 | dependencies: 163 | "@typescript-eslint/types" "4.1.1" 164 | eslint-visitor-keys "^2.0.0" 165 | 166 | acorn-jsx@^5.2.0: 167 | version "5.2.0" 168 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" 169 | integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== 170 | 171 | acorn@^7.4.0: 172 | version "7.4.0" 173 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" 174 | integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== 175 | 176 | agent-base@4, agent-base@^4.3.0: 177 | version "4.3.0" 178 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" 179 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== 180 | dependencies: 181 | es6-promisify "^5.0.0" 182 | 183 | ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: 184 | version "6.12.6" 185 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 186 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 187 | dependencies: 188 | fast-deep-equal "^3.1.1" 189 | fast-json-stable-stringify "^2.0.0" 190 | json-schema-traverse "^0.4.1" 191 | uri-js "^4.2.2" 192 | 193 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 194 | version "4.1.1" 195 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 196 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 197 | 198 | ansi-regex@^3.0.0: 199 | version "3.0.1" 200 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 201 | integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== 202 | 203 | ansi-regex@^4.1.0: 204 | version "4.1.1" 205 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" 206 | integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== 207 | 208 | ansi-regex@^5.0.0: 209 | version "5.0.1" 210 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 211 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 212 | 213 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 214 | version "3.2.1" 215 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 216 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 217 | dependencies: 218 | color-convert "^1.9.0" 219 | 220 | ansi-styles@^4.1.0: 221 | version "4.2.1" 222 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 223 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 224 | dependencies: 225 | "@types/color-name" "^1.1.1" 226 | color-convert "^2.0.1" 227 | 228 | anymatch@~3.1.1: 229 | version "3.1.1" 230 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 231 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 232 | dependencies: 233 | normalize-path "^3.0.0" 234 | picomatch "^2.0.4" 235 | 236 | argparse@^1.0.7: 237 | version "1.0.10" 238 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 239 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 240 | dependencies: 241 | sprintf-js "~1.0.2" 242 | 243 | array-union@^2.1.0: 244 | version "2.1.0" 245 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 246 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 247 | 248 | array.prototype.map@^1.0.1: 249 | version "1.0.2" 250 | resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" 251 | integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== 252 | dependencies: 253 | define-properties "^1.1.3" 254 | es-abstract "^1.17.0-next.1" 255 | es-array-method-boxes-properly "^1.0.0" 256 | is-string "^1.0.4" 257 | 258 | astral-regex@^1.0.0: 259 | version "1.0.0" 260 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 261 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 262 | 263 | balanced-match@^1.0.0: 264 | version "1.0.0" 265 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 266 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 267 | 268 | binary-extensions@^2.0.0: 269 | version "2.0.0" 270 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" 271 | integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== 272 | 273 | brace-expansion@^1.1.7: 274 | version "1.1.11" 275 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 276 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 277 | dependencies: 278 | balanced-match "^1.0.0" 279 | concat-map "0.0.1" 280 | 281 | braces@^3.0.1, braces@~3.0.2: 282 | version "3.0.3" 283 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 284 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 285 | dependencies: 286 | fill-range "^7.1.1" 287 | 288 | browser-stdout@1.3.1: 289 | version "1.3.1" 290 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 291 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 292 | 293 | callsites@^3.0.0: 294 | version "3.1.0" 295 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 296 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 297 | 298 | camelcase@^5.0.0, camelcase@^5.3.1: 299 | version "5.3.1" 300 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 301 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 302 | 303 | chalk@^2.0.0: 304 | version "2.4.2" 305 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 306 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 307 | dependencies: 308 | ansi-styles "^3.2.1" 309 | escape-string-regexp "^1.0.5" 310 | supports-color "^5.3.0" 311 | 312 | chalk@^4.0.0: 313 | version "4.1.0" 314 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 315 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 316 | dependencies: 317 | ansi-styles "^4.1.0" 318 | supports-color "^7.1.0" 319 | 320 | chokidar@3.4.2: 321 | version "3.4.2" 322 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" 323 | integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== 324 | dependencies: 325 | anymatch "~3.1.1" 326 | braces "~3.0.2" 327 | glob-parent "~5.1.0" 328 | is-binary-path "~2.1.0" 329 | is-glob "~4.0.1" 330 | normalize-path "~3.0.0" 331 | readdirp "~3.4.0" 332 | optionalDependencies: 333 | fsevents "~2.1.2" 334 | 335 | cliui@^5.0.0: 336 | version "5.0.0" 337 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 338 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 339 | dependencies: 340 | string-width "^3.1.0" 341 | strip-ansi "^5.2.0" 342 | wrap-ansi "^5.1.0" 343 | 344 | color-convert@^1.9.0: 345 | version "1.9.3" 346 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 347 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 348 | dependencies: 349 | color-name "1.1.3" 350 | 351 | color-convert@^2.0.1: 352 | version "2.0.1" 353 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 354 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 355 | dependencies: 356 | color-name "~1.1.4" 357 | 358 | color-name@1.1.3: 359 | version "1.1.3" 360 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 361 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 362 | 363 | color-name@~1.1.4: 364 | version "1.1.4" 365 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 366 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 367 | 368 | concat-map@0.0.1: 369 | version "0.0.1" 370 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 371 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 372 | 373 | cross-spawn@^7.0.2: 374 | version "7.0.3" 375 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 376 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 377 | dependencies: 378 | path-key "^3.1.0" 379 | shebang-command "^2.0.0" 380 | which "^2.0.1" 381 | 382 | debug@3.1.0: 383 | version "3.1.0" 384 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 385 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 386 | dependencies: 387 | ms "2.0.0" 388 | 389 | debug@4.1.1, debug@^4.0.1, debug@^4.1.1: 390 | version "4.1.1" 391 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 392 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 393 | dependencies: 394 | ms "^2.1.1" 395 | 396 | debug@^3.1.0: 397 | version "3.2.6" 398 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 399 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 400 | dependencies: 401 | ms "^2.1.1" 402 | 403 | decamelize@^1.2.0: 404 | version "1.2.0" 405 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 406 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 407 | 408 | deep-is@^0.1.3: 409 | version "0.1.3" 410 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 411 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 412 | 413 | define-properties@^1.1.2, define-properties@^1.1.3: 414 | version "1.1.3" 415 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 416 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 417 | dependencies: 418 | object-keys "^1.0.12" 419 | 420 | diff@4.0.2: 421 | version "4.0.2" 422 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 423 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 424 | 425 | dir-glob@^3.0.1: 426 | version "3.0.1" 427 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 428 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 429 | dependencies: 430 | path-type "^4.0.0" 431 | 432 | doctrine@^3.0.0: 433 | version "3.0.0" 434 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 435 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 436 | dependencies: 437 | esutils "^2.0.2" 438 | 439 | emoji-regex@^7.0.1: 440 | version "7.0.3" 441 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 442 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 443 | 444 | enquirer@^2.3.5: 445 | version "2.3.6" 446 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 447 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 448 | dependencies: 449 | ansi-colors "^4.1.1" 450 | 451 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 452 | version "1.17.5" 453 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" 454 | integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== 455 | dependencies: 456 | es-to-primitive "^1.2.1" 457 | function-bind "^1.1.1" 458 | has "^1.0.3" 459 | has-symbols "^1.0.1" 460 | is-callable "^1.1.5" 461 | is-regex "^1.0.5" 462 | object-inspect "^1.7.0" 463 | object-keys "^1.1.1" 464 | object.assign "^4.1.0" 465 | string.prototype.trimleft "^2.1.1" 466 | string.prototype.trimright "^2.1.1" 467 | 468 | es-abstract@^1.17.4: 469 | version "1.17.6" 470 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" 471 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== 472 | dependencies: 473 | es-to-primitive "^1.2.1" 474 | function-bind "^1.1.1" 475 | has "^1.0.3" 476 | has-symbols "^1.0.1" 477 | is-callable "^1.2.0" 478 | is-regex "^1.1.0" 479 | object-inspect "^1.7.0" 480 | object-keys "^1.1.1" 481 | object.assign "^4.1.0" 482 | string.prototype.trimend "^1.0.1" 483 | string.prototype.trimstart "^1.0.1" 484 | 485 | es-array-method-boxes-properly@^1.0.0: 486 | version "1.0.0" 487 | resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" 488 | integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== 489 | 490 | es-get-iterator@^1.0.2: 491 | version "1.1.0" 492 | resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" 493 | integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== 494 | dependencies: 495 | es-abstract "^1.17.4" 496 | has-symbols "^1.0.1" 497 | is-arguments "^1.0.4" 498 | is-map "^2.0.1" 499 | is-set "^2.0.1" 500 | is-string "^1.0.5" 501 | isarray "^2.0.5" 502 | 503 | es-to-primitive@^1.2.1: 504 | version "1.2.1" 505 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 506 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 507 | dependencies: 508 | is-callable "^1.1.4" 509 | is-date-object "^1.0.1" 510 | is-symbol "^1.0.2" 511 | 512 | es6-promise@^4.0.3: 513 | version "4.2.8" 514 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 515 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 516 | 517 | es6-promisify@^5.0.0: 518 | version "5.0.0" 519 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 520 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 521 | dependencies: 522 | es6-promise "^4.0.3" 523 | 524 | escape-string-regexp@4.0.0: 525 | version "4.0.0" 526 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 527 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 528 | 529 | escape-string-regexp@^1.0.5: 530 | version "1.0.5" 531 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 532 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 533 | 534 | eslint-plugin-header@^3.1.0: 535 | version "3.1.0" 536 | resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.0.tgz#5e6819489a7722ae0c5c237387f78350d755c1d5" 537 | integrity sha512-jKKcwMsB0/ftBv3UVmuQir1f8AmXzTS9rdzPkileW8/Nz9ivdea8vOU1ZrMbX+WH6CpwnHEo3403baSHk40Mag== 538 | 539 | eslint-scope@^5.0.0: 540 | version "5.0.0" 541 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" 542 | integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== 543 | dependencies: 544 | esrecurse "^4.1.0" 545 | estraverse "^4.1.1" 546 | 547 | eslint-scope@^5.1.0: 548 | version "5.1.1" 549 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 550 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 551 | dependencies: 552 | esrecurse "^4.3.0" 553 | estraverse "^4.1.1" 554 | 555 | eslint-utils@^2.0.0: 556 | version "2.0.0" 557 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" 558 | integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== 559 | dependencies: 560 | eslint-visitor-keys "^1.1.0" 561 | 562 | eslint-utils@^2.1.0: 563 | version "2.1.0" 564 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 565 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 566 | dependencies: 567 | eslint-visitor-keys "^1.1.0" 568 | 569 | eslint-visitor-keys@^1.1.0: 570 | version "1.1.0" 571 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" 572 | integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== 573 | 574 | eslint-visitor-keys@^1.3.0: 575 | version "1.3.0" 576 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 577 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 578 | 579 | eslint-visitor-keys@^2.0.0: 580 | version "2.0.0" 581 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 582 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 583 | 584 | eslint@^7.9.0: 585 | version "7.9.0" 586 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.9.0.tgz#522aeccc5c3a19017cf0cb46ebfd660a79acf337" 587 | integrity sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA== 588 | dependencies: 589 | "@babel/code-frame" "^7.0.0" 590 | "@eslint/eslintrc" "^0.1.3" 591 | ajv "^6.10.0" 592 | chalk "^4.0.0" 593 | cross-spawn "^7.0.2" 594 | debug "^4.0.1" 595 | doctrine "^3.0.0" 596 | enquirer "^2.3.5" 597 | eslint-scope "^5.1.0" 598 | eslint-utils "^2.1.0" 599 | eslint-visitor-keys "^1.3.0" 600 | espree "^7.3.0" 601 | esquery "^1.2.0" 602 | esutils "^2.0.2" 603 | file-entry-cache "^5.0.1" 604 | functional-red-black-tree "^1.0.1" 605 | glob-parent "^5.0.0" 606 | globals "^12.1.0" 607 | ignore "^4.0.6" 608 | import-fresh "^3.0.0" 609 | imurmurhash "^0.1.4" 610 | is-glob "^4.0.0" 611 | js-yaml "^3.13.1" 612 | json-stable-stringify-without-jsonify "^1.0.1" 613 | levn "^0.4.1" 614 | lodash "^4.17.19" 615 | minimatch "^3.0.4" 616 | natural-compare "^1.4.0" 617 | optionator "^0.9.1" 618 | progress "^2.0.0" 619 | regexpp "^3.1.0" 620 | semver "^7.2.1" 621 | strip-ansi "^6.0.0" 622 | strip-json-comments "^3.1.0" 623 | table "^5.2.3" 624 | text-table "^0.2.0" 625 | v8-compile-cache "^2.0.3" 626 | 627 | espree@^7.3.0: 628 | version "7.3.0" 629 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" 630 | integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== 631 | dependencies: 632 | acorn "^7.4.0" 633 | acorn-jsx "^5.2.0" 634 | eslint-visitor-keys "^1.3.0" 635 | 636 | esprima@^4.0.0: 637 | version "4.0.1" 638 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 639 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 640 | 641 | esquery@^1.2.0: 642 | version "1.3.1" 643 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 644 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 645 | dependencies: 646 | estraverse "^5.1.0" 647 | 648 | esrecurse@^4.1.0: 649 | version "4.2.1" 650 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 651 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 652 | dependencies: 653 | estraverse "^4.1.0" 654 | 655 | esrecurse@^4.3.0: 656 | version "4.3.0" 657 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 658 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 659 | dependencies: 660 | estraverse "^5.2.0" 661 | 662 | estraverse@^4.1.0, estraverse@^4.1.1: 663 | version "4.3.0" 664 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 665 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 666 | 667 | estraverse@^5.1.0: 668 | version "5.1.0" 669 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" 670 | integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== 671 | 672 | estraverse@^5.2.0: 673 | version "5.2.0" 674 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 675 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 676 | 677 | esutils@^2.0.2: 678 | version "2.0.3" 679 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 680 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 681 | 682 | fast-deep-equal@^3.1.1: 683 | version "3.1.1" 684 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" 685 | integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== 686 | 687 | fast-glob@^3.1.1: 688 | version "3.2.4" 689 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" 690 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== 691 | dependencies: 692 | "@nodelib/fs.stat" "^2.0.2" 693 | "@nodelib/fs.walk" "^1.2.3" 694 | glob-parent "^5.1.0" 695 | merge2 "^1.3.0" 696 | micromatch "^4.0.2" 697 | picomatch "^2.2.1" 698 | 699 | fast-json-stable-stringify@^2.0.0: 700 | version "2.1.0" 701 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 702 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 703 | 704 | fast-levenshtein@^2.0.6: 705 | version "2.0.6" 706 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 707 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 708 | 709 | fastq@^1.6.0: 710 | version "1.8.0" 711 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" 712 | integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== 713 | dependencies: 714 | reusify "^1.0.4" 715 | 716 | file-entry-cache@^5.0.1: 717 | version "5.0.1" 718 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 719 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 720 | dependencies: 721 | flat-cache "^2.0.1" 722 | 723 | fill-range@^7.1.1: 724 | version "7.1.1" 725 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 726 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 727 | dependencies: 728 | to-regex-range "^5.0.1" 729 | 730 | find-up@5.0.0: 731 | version "5.0.0" 732 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 733 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 734 | dependencies: 735 | locate-path "^6.0.0" 736 | path-exists "^4.0.0" 737 | 738 | find-up@^3.0.0: 739 | version "3.0.0" 740 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 741 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 742 | dependencies: 743 | locate-path "^3.0.0" 744 | 745 | flat-cache@^2.0.1: 746 | version "2.0.1" 747 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 748 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 749 | dependencies: 750 | flatted "^2.0.0" 751 | rimraf "2.6.3" 752 | write "1.0.3" 753 | 754 | flat@^4.1.0: 755 | version "4.1.0" 756 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 757 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 758 | dependencies: 759 | is-buffer "~2.0.3" 760 | 761 | flatted@^2.0.0: 762 | version "2.0.2" 763 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 764 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 765 | 766 | fs.realpath@^1.0.0: 767 | version "1.0.0" 768 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 769 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 770 | 771 | fsevents@~2.1.2: 772 | version "2.1.3" 773 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 774 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 775 | 776 | function-bind@^1.1.1: 777 | version "1.1.1" 778 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 779 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 780 | 781 | functional-red-black-tree@^1.0.1: 782 | version "1.0.1" 783 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 784 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 785 | 786 | get-caller-file@^2.0.1: 787 | version "2.0.5" 788 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 789 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 790 | 791 | get-port@^5.1.1: 792 | version "5.1.1" 793 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" 794 | integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== 795 | 796 | glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: 797 | version "5.1.2" 798 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 799 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 800 | dependencies: 801 | is-glob "^4.0.1" 802 | 803 | glob@7.1.6, glob@^7.1.3, glob@^7.1.6: 804 | version "7.1.6" 805 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 806 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 807 | dependencies: 808 | fs.realpath "^1.0.0" 809 | inflight "^1.0.4" 810 | inherits "2" 811 | minimatch "^3.0.4" 812 | once "^1.3.0" 813 | path-is-absolute "^1.0.0" 814 | 815 | globals@^12.1.0: 816 | version "12.4.0" 817 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 818 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 819 | dependencies: 820 | type-fest "^0.8.1" 821 | 822 | globby@^11.0.1: 823 | version "11.0.1" 824 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" 825 | integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== 826 | dependencies: 827 | array-union "^2.1.0" 828 | dir-glob "^3.0.1" 829 | fast-glob "^3.1.1" 830 | ignore "^5.1.4" 831 | merge2 "^1.3.0" 832 | slash "^3.0.0" 833 | 834 | growl@1.10.5: 835 | version "1.10.5" 836 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 837 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 838 | 839 | has-flag@^3.0.0: 840 | version "3.0.0" 841 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 842 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 843 | 844 | has-flag@^4.0.0: 845 | version "4.0.0" 846 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 847 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 848 | 849 | has-symbols@^1.0.0, has-symbols@^1.0.1: 850 | version "1.0.1" 851 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 852 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 853 | 854 | has@^1.0.3: 855 | version "1.0.3" 856 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 857 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 858 | dependencies: 859 | function-bind "^1.1.1" 860 | 861 | he@1.2.0: 862 | version "1.2.0" 863 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 864 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 865 | 866 | http-proxy-agent@^2.1.0: 867 | version "2.1.0" 868 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" 869 | integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== 870 | dependencies: 871 | agent-base "4" 872 | debug "3.1.0" 873 | 874 | https-proxy-agent@^2.2.4: 875 | version "2.2.4" 876 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" 877 | integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== 878 | dependencies: 879 | agent-base "^4.3.0" 880 | debug "^3.1.0" 881 | 882 | ignore@^4.0.6: 883 | version "4.0.6" 884 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 885 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 886 | 887 | ignore@^5.1.4: 888 | version "5.1.8" 889 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 890 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 891 | 892 | import-fresh@^3.0.0, import-fresh@^3.2.1: 893 | version "3.2.1" 894 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 895 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 896 | dependencies: 897 | parent-module "^1.0.0" 898 | resolve-from "^4.0.0" 899 | 900 | imurmurhash@^0.1.4: 901 | version "0.1.4" 902 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 903 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 904 | 905 | inflight@^1.0.4: 906 | version "1.0.6" 907 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 908 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 909 | dependencies: 910 | once "^1.3.0" 911 | wrappy "1" 912 | 913 | inherits@2: 914 | version "2.0.4" 915 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 916 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 917 | 918 | is-arguments@^1.0.4: 919 | version "1.0.4" 920 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" 921 | integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== 922 | 923 | is-binary-path@~2.1.0: 924 | version "2.1.0" 925 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 926 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 927 | dependencies: 928 | binary-extensions "^2.0.0" 929 | 930 | is-buffer@~2.0.3: 931 | version "2.0.4" 932 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 933 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 934 | 935 | is-callable@^1.1.4, is-callable@^1.1.5: 936 | version "1.1.5" 937 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 938 | integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== 939 | 940 | is-callable@^1.2.0: 941 | version "1.2.1" 942 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" 943 | integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== 944 | 945 | is-date-object@^1.0.1: 946 | version "1.0.2" 947 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 948 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 949 | 950 | is-extglob@^2.1.1: 951 | version "2.1.1" 952 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 953 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 954 | 955 | is-fullwidth-code-point@^2.0.0: 956 | version "2.0.0" 957 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 958 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 959 | 960 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 961 | version "4.0.1" 962 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 963 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 964 | dependencies: 965 | is-extglob "^2.1.1" 966 | 967 | is-map@^2.0.1: 968 | version "2.0.1" 969 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" 970 | integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== 971 | 972 | is-number@^7.0.0: 973 | version "7.0.0" 974 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 975 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 976 | 977 | is-plain-obj@^1.1.0: 978 | version "1.1.0" 979 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 980 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 981 | 982 | is-regex@^1.0.5: 983 | version "1.0.5" 984 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 985 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 986 | dependencies: 987 | has "^1.0.3" 988 | 989 | is-regex@^1.1.0: 990 | version "1.1.1" 991 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" 992 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 993 | dependencies: 994 | has-symbols "^1.0.1" 995 | 996 | is-set@^2.0.1: 997 | version "2.0.1" 998 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" 999 | integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== 1000 | 1001 | is-string@^1.0.4, is-string@^1.0.5: 1002 | version "1.0.5" 1003 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" 1004 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 1005 | 1006 | is-symbol@^1.0.2: 1007 | version "1.0.3" 1008 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1009 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1010 | dependencies: 1011 | has-symbols "^1.0.1" 1012 | 1013 | isarray@^2.0.5: 1014 | version "2.0.5" 1015 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" 1016 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1017 | 1018 | isexe@^2.0.0: 1019 | version "2.0.0" 1020 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1021 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1022 | 1023 | iterate-iterator@^1.0.1: 1024 | version "1.0.1" 1025 | resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" 1026 | integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== 1027 | 1028 | iterate-value@^1.0.0: 1029 | version "1.0.2" 1030 | resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" 1031 | integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== 1032 | dependencies: 1033 | es-get-iterator "^1.0.2" 1034 | iterate-iterator "^1.0.1" 1035 | 1036 | js-tokens@^4.0.0: 1037 | version "4.0.0" 1038 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1039 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1040 | 1041 | js-yaml@3.14.0: 1042 | version "3.14.0" 1043 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1044 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1045 | dependencies: 1046 | argparse "^1.0.7" 1047 | esprima "^4.0.0" 1048 | 1049 | js-yaml@^3.13.1: 1050 | version "3.13.1" 1051 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1052 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1053 | dependencies: 1054 | argparse "^1.0.7" 1055 | esprima "^4.0.0" 1056 | 1057 | json-schema-traverse@^0.4.1: 1058 | version "0.4.1" 1059 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1060 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1061 | 1062 | json-stable-stringify-without-jsonify@^1.0.1: 1063 | version "1.0.1" 1064 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1065 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1066 | 1067 | kleur@^3.0.3: 1068 | version "3.0.3" 1069 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1070 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1071 | 1072 | levn@^0.4.1: 1073 | version "0.4.1" 1074 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1075 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1076 | dependencies: 1077 | prelude-ls "^1.2.1" 1078 | type-check "~0.4.0" 1079 | 1080 | locate-path@^3.0.0: 1081 | version "3.0.0" 1082 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1083 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1084 | dependencies: 1085 | p-locate "^3.0.0" 1086 | path-exists "^3.0.0" 1087 | 1088 | locate-path@^6.0.0: 1089 | version "6.0.0" 1090 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1091 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1092 | dependencies: 1093 | p-locate "^5.0.0" 1094 | 1095 | lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: 1096 | version "4.17.21" 1097 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1098 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1099 | 1100 | log-symbols@4.0.0: 1101 | version "4.0.0" 1102 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" 1103 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 1104 | dependencies: 1105 | chalk "^4.0.0" 1106 | 1107 | lru-cache@^6.0.0: 1108 | version "6.0.0" 1109 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1110 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1111 | dependencies: 1112 | yallist "^4.0.0" 1113 | 1114 | merge2@^1.3.0: 1115 | version "1.4.1" 1116 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1117 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1118 | 1119 | micromatch@^4.0.2: 1120 | version "4.0.2" 1121 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1122 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1123 | dependencies: 1124 | braces "^3.0.1" 1125 | picomatch "^2.0.5" 1126 | 1127 | minimatch@3.0.4, minimatch@^3.0.4: 1128 | version "3.0.4" 1129 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1130 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1131 | dependencies: 1132 | brace-expansion "^1.1.7" 1133 | 1134 | minimist@^1.2.0, minimist@^1.2.5: 1135 | version "1.2.8" 1136 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1137 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1138 | 1139 | mkdirp@^0.5.1: 1140 | version "0.5.5" 1141 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1142 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1143 | dependencies: 1144 | minimist "^1.2.5" 1145 | 1146 | mocha@^8.1.3: 1147 | version "8.1.3" 1148 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.3.tgz#5e93f873e35dfdd69617ea75f9c68c2ca61c2ac5" 1149 | integrity sha512-ZbaYib4hT4PpF4bdSO2DohooKXIn4lDeiYqB+vTmCdr6l2woW0b6H3pf5x4sM5nwQMru9RvjjHYWVGltR50ZBw== 1150 | dependencies: 1151 | ansi-colors "4.1.1" 1152 | browser-stdout "1.3.1" 1153 | chokidar "3.4.2" 1154 | debug "4.1.1" 1155 | diff "4.0.2" 1156 | escape-string-regexp "4.0.0" 1157 | find-up "5.0.0" 1158 | glob "7.1.6" 1159 | growl "1.10.5" 1160 | he "1.2.0" 1161 | js-yaml "3.14.0" 1162 | log-symbols "4.0.0" 1163 | minimatch "3.0.4" 1164 | ms "2.1.2" 1165 | object.assign "4.1.0" 1166 | promise.allsettled "1.0.2" 1167 | serialize-javascript "4.0.0" 1168 | strip-json-comments "3.0.1" 1169 | supports-color "7.1.0" 1170 | which "2.0.2" 1171 | wide-align "1.1.3" 1172 | workerpool "6.0.0" 1173 | yargs "13.3.2" 1174 | yargs-parser "13.1.2" 1175 | yargs-unparser "1.6.1" 1176 | 1177 | ms@2.0.0: 1178 | version "2.0.0" 1179 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1180 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1181 | 1182 | ms@2.1.2, ms@^2.1.1: 1183 | version "2.1.2" 1184 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1185 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1186 | 1187 | natural-compare@^1.4.0: 1188 | version "1.4.0" 1189 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1190 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1191 | 1192 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1193 | version "3.0.0" 1194 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1195 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1196 | 1197 | object-inspect@^1.7.0: 1198 | version "1.7.0" 1199 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 1200 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 1201 | 1202 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 1203 | version "1.1.1" 1204 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1205 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1206 | 1207 | object.assign@4.1.0, object.assign@^4.1.0: 1208 | version "4.1.0" 1209 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1210 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1211 | dependencies: 1212 | define-properties "^1.1.2" 1213 | function-bind "^1.1.1" 1214 | has-symbols "^1.0.0" 1215 | object-keys "^1.0.11" 1216 | 1217 | once@^1.3.0: 1218 | version "1.4.0" 1219 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1220 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1221 | dependencies: 1222 | wrappy "1" 1223 | 1224 | optionator@^0.9.1: 1225 | version "0.9.1" 1226 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1227 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1228 | dependencies: 1229 | deep-is "^0.1.3" 1230 | fast-levenshtein "^2.0.6" 1231 | levn "^0.4.1" 1232 | prelude-ls "^1.2.1" 1233 | type-check "^0.4.0" 1234 | word-wrap "^1.2.3" 1235 | 1236 | p-limit@^2.0.0: 1237 | version "2.3.0" 1238 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1239 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1240 | dependencies: 1241 | p-try "^2.0.0" 1242 | 1243 | p-limit@^3.0.2: 1244 | version "3.0.2" 1245 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" 1246 | integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== 1247 | dependencies: 1248 | p-try "^2.0.0" 1249 | 1250 | p-locate@^3.0.0: 1251 | version "3.0.0" 1252 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1253 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1254 | dependencies: 1255 | p-limit "^2.0.0" 1256 | 1257 | p-locate@^5.0.0: 1258 | version "5.0.0" 1259 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1260 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1261 | dependencies: 1262 | p-limit "^3.0.2" 1263 | 1264 | p-try@^2.0.0: 1265 | version "2.2.0" 1266 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1267 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1268 | 1269 | parent-module@^1.0.0: 1270 | version "1.0.1" 1271 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1272 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1273 | dependencies: 1274 | callsites "^3.0.0" 1275 | 1276 | path-exists@^3.0.0: 1277 | version "3.0.0" 1278 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1279 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1280 | 1281 | path-exists@^4.0.0: 1282 | version "4.0.0" 1283 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1284 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1285 | 1286 | path-is-absolute@^1.0.0: 1287 | version "1.0.1" 1288 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1289 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1290 | 1291 | path-key@^3.1.0: 1292 | version "3.1.1" 1293 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1294 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1295 | 1296 | path-type@^4.0.0: 1297 | version "4.0.0" 1298 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1299 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1300 | 1301 | picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: 1302 | version "2.2.2" 1303 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1304 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1305 | 1306 | prelude-ls@^1.2.1: 1307 | version "1.2.1" 1308 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1309 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1310 | 1311 | progress@^2.0.0: 1312 | version "2.0.3" 1313 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1314 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1315 | 1316 | promise.allsettled@1.0.2: 1317 | version "1.0.2" 1318 | resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" 1319 | integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== 1320 | dependencies: 1321 | array.prototype.map "^1.0.1" 1322 | define-properties "^1.1.3" 1323 | es-abstract "^1.17.0-next.1" 1324 | function-bind "^1.1.1" 1325 | iterate-value "^1.0.0" 1326 | 1327 | prompts@^2.1.0: 1328 | version "2.3.2" 1329 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" 1330 | integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== 1331 | dependencies: 1332 | kleur "^3.0.3" 1333 | sisteransi "^1.0.4" 1334 | 1335 | punycode@^2.1.0: 1336 | version "2.1.1" 1337 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1338 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1339 | 1340 | randombytes@^2.1.0: 1341 | version "2.1.0" 1342 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1343 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1344 | dependencies: 1345 | safe-buffer "^5.1.0" 1346 | 1347 | readdirp@~3.4.0: 1348 | version "3.4.0" 1349 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" 1350 | integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== 1351 | dependencies: 1352 | picomatch "^2.2.1" 1353 | 1354 | regexpp@^3.0.0, regexpp@^3.1.0: 1355 | version "3.1.0" 1356 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1357 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1358 | 1359 | require-directory@^2.1.1: 1360 | version "2.1.1" 1361 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1362 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1363 | 1364 | require-main-filename@^2.0.0: 1365 | version "2.0.0" 1366 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1367 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1368 | 1369 | resolve-from@^4.0.0: 1370 | version "4.0.0" 1371 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1372 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1373 | 1374 | reusify@^1.0.4: 1375 | version "1.0.4" 1376 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1377 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1378 | 1379 | rimraf@2.6.3: 1380 | version "2.6.3" 1381 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1382 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1383 | dependencies: 1384 | glob "^7.1.3" 1385 | 1386 | rimraf@^2.6.3: 1387 | version "2.7.1" 1388 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1389 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1390 | dependencies: 1391 | glob "^7.1.3" 1392 | 1393 | rimraf@^3.0.0, rimraf@^3.0.2: 1394 | version "3.0.2" 1395 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1396 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1397 | dependencies: 1398 | glob "^7.1.3" 1399 | 1400 | run-parallel@^1.1.9: 1401 | version "1.1.9" 1402 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 1403 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 1404 | 1405 | safe-buffer@^5.1.0: 1406 | version "5.2.1" 1407 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1408 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1409 | 1410 | semver@^7.2.1, semver@^7.3.2: 1411 | version "7.5.4" 1412 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1413 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1414 | dependencies: 1415 | lru-cache "^6.0.0" 1416 | 1417 | serialize-javascript@4.0.0: 1418 | version "4.0.0" 1419 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 1420 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 1421 | dependencies: 1422 | randombytes "^2.1.0" 1423 | 1424 | set-blocking@^2.0.0: 1425 | version "2.0.0" 1426 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1427 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1428 | 1429 | shebang-command@^2.0.0: 1430 | version "2.0.0" 1431 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1432 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1433 | dependencies: 1434 | shebang-regex "^3.0.0" 1435 | 1436 | shebang-regex@^3.0.0: 1437 | version "3.0.0" 1438 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1439 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1440 | 1441 | sisteransi@^1.0.4: 1442 | version "1.0.5" 1443 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 1444 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 1445 | 1446 | slash@^3.0.0: 1447 | version "3.0.0" 1448 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1449 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1450 | 1451 | slice-ansi@^2.1.0: 1452 | version "2.1.0" 1453 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1454 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1455 | dependencies: 1456 | ansi-styles "^3.2.0" 1457 | astral-regex "^1.0.0" 1458 | is-fullwidth-code-point "^2.0.0" 1459 | 1460 | sprintf-js@~1.0.2: 1461 | version "1.0.3" 1462 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1463 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1464 | 1465 | "string-width@^1.0.2 || 2": 1466 | version "2.1.1" 1467 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1468 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1469 | dependencies: 1470 | is-fullwidth-code-point "^2.0.0" 1471 | strip-ansi "^4.0.0" 1472 | 1473 | string-width@^3.0.0, string-width@^3.1.0: 1474 | version "3.1.0" 1475 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1476 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1477 | dependencies: 1478 | emoji-regex "^7.0.1" 1479 | is-fullwidth-code-point "^2.0.0" 1480 | strip-ansi "^5.1.0" 1481 | 1482 | string.prototype.trimend@^1.0.0, string.prototype.trimend@^1.0.1: 1483 | version "1.0.1" 1484 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 1485 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== 1486 | dependencies: 1487 | define-properties "^1.1.3" 1488 | es-abstract "^1.17.5" 1489 | 1490 | string.prototype.trimleft@^2.1.1: 1491 | version "2.1.2" 1492 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" 1493 | integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== 1494 | dependencies: 1495 | define-properties "^1.1.3" 1496 | es-abstract "^1.17.5" 1497 | string.prototype.trimstart "^1.0.0" 1498 | 1499 | string.prototype.trimright@^2.1.1: 1500 | version "2.1.2" 1501 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" 1502 | integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== 1503 | dependencies: 1504 | define-properties "^1.1.3" 1505 | es-abstract "^1.17.5" 1506 | string.prototype.trimend "^1.0.0" 1507 | 1508 | string.prototype.trimstart@^1.0.0, string.prototype.trimstart@^1.0.1: 1509 | version "1.0.1" 1510 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 1511 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== 1512 | dependencies: 1513 | define-properties "^1.1.3" 1514 | es-abstract "^1.17.5" 1515 | 1516 | strip-ansi@^4.0.0: 1517 | version "4.0.0" 1518 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1519 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1520 | dependencies: 1521 | ansi-regex "^3.0.0" 1522 | 1523 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1524 | version "5.2.0" 1525 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1526 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1527 | dependencies: 1528 | ansi-regex "^4.1.0" 1529 | 1530 | strip-ansi@^6.0.0: 1531 | version "6.0.0" 1532 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1533 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1534 | dependencies: 1535 | ansi-regex "^5.0.0" 1536 | 1537 | strip-json-comments@3.0.1: 1538 | version "3.0.1" 1539 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" 1540 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== 1541 | 1542 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1543 | version "3.1.1" 1544 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1545 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1546 | 1547 | supports-color@7.1.0, supports-color@^7.1.0: 1548 | version "7.1.0" 1549 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 1550 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 1551 | dependencies: 1552 | has-flag "^4.0.0" 1553 | 1554 | supports-color@^5.3.0: 1555 | version "5.5.0" 1556 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1557 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1558 | dependencies: 1559 | has-flag "^3.0.0" 1560 | 1561 | table@^5.2.3: 1562 | version "5.4.6" 1563 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 1564 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 1565 | dependencies: 1566 | ajv "^6.10.2" 1567 | lodash "^4.17.14" 1568 | slice-ansi "^2.1.0" 1569 | string-width "^3.0.0" 1570 | 1571 | text-table@^0.2.0: 1572 | version "0.2.0" 1573 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1574 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1575 | 1576 | to-regex-range@^5.0.1: 1577 | version "5.0.1" 1578 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1579 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1580 | dependencies: 1581 | is-number "^7.0.0" 1582 | 1583 | tslib@^1.8.1: 1584 | version "1.11.1" 1585 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" 1586 | integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== 1587 | 1588 | tsutils@^3.17.1: 1589 | version "3.17.1" 1590 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" 1591 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 1592 | dependencies: 1593 | tslib "^1.8.1" 1594 | 1595 | type-check@^0.4.0, type-check@~0.4.0: 1596 | version "0.4.0" 1597 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1598 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1599 | dependencies: 1600 | prelude-ls "^1.2.1" 1601 | 1602 | type-fest@^0.8.1: 1603 | version "0.8.1" 1604 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1605 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1606 | 1607 | typescript@^4.0.2: 1608 | version "4.0.2" 1609 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" 1610 | integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== 1611 | 1612 | uri-js@^4.2.2: 1613 | version "4.2.2" 1614 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1615 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1616 | dependencies: 1617 | punycode "^2.1.0" 1618 | 1619 | v8-compile-cache@^2.0.3: 1620 | version "2.1.0" 1621 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" 1622 | integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== 1623 | 1624 | vscode-debugprotocol@1.41.0: 1625 | version "1.41.0" 1626 | resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.41.0.tgz#fc99b01dee26e9f25cbb5708318fc0081002808c" 1627 | integrity sha512-Sxp7kDDuhpEZiDaIfhM0jLF3RtMqvc6CpoESANE77t351uezsd/oDoqALLcOnmmsDzTgQ3W0sCvM4gErnjDFpA== 1628 | 1629 | vscode-dts@^0.3.1: 1630 | version "0.3.1" 1631 | resolved "https://registry.yarnpkg.com/vscode-dts/-/vscode-dts-0.3.1.tgz#070554a7fc9aaf5e85466a0519bf32067308cdf4" 1632 | integrity sha512-8XZ+M7IQV5MnPXEhHLemGOk5FRBfT7HCBEughfDhn2i6wwPXlpv4OuQQdhs6XZVmF3GFdKqt+fXOgfsNBKP+fw== 1633 | dependencies: 1634 | minimist "^1.2.0" 1635 | prompts "^2.1.0" 1636 | rimraf "^3.0.0" 1637 | 1638 | vscode-test@^1.4.0: 1639 | version "1.4.0" 1640 | resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-1.4.0.tgz#a56f73c1667b4d37ba6baa6765f233a19d4ffbfe" 1641 | integrity sha512-Jt7HNGvSE0+++Tvtq5wc4hiXLIr2OjDShz/gbAfM/mahQpy4rKBnmOK33D+MR67ATWviQhl+vpmU3p/qwSH/Pg== 1642 | dependencies: 1643 | http-proxy-agent "^2.1.0" 1644 | https-proxy-agent "^2.2.4" 1645 | rimraf "^2.6.3" 1646 | 1647 | which-module@^2.0.0: 1648 | version "2.0.0" 1649 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1650 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1651 | 1652 | which@2.0.2, which@^2.0.1: 1653 | version "2.0.2" 1654 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1655 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1656 | dependencies: 1657 | isexe "^2.0.0" 1658 | 1659 | wide-align@1.1.3: 1660 | version "1.1.3" 1661 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1662 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1663 | dependencies: 1664 | string-width "^1.0.2 || 2" 1665 | 1666 | word-wrap@^1.2.3: 1667 | version "1.2.4" 1668 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" 1669 | integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== 1670 | 1671 | workerpool@6.0.0: 1672 | version "6.0.0" 1673 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" 1674 | integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== 1675 | 1676 | wrap-ansi@^5.1.0: 1677 | version "5.1.0" 1678 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1679 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1680 | dependencies: 1681 | ansi-styles "^3.2.0" 1682 | string-width "^3.0.0" 1683 | strip-ansi "^5.0.0" 1684 | 1685 | wrappy@1: 1686 | version "1.0.2" 1687 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1688 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1689 | 1690 | write@1.0.3: 1691 | version "1.0.3" 1692 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1693 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1694 | dependencies: 1695 | mkdirp "^0.5.1" 1696 | 1697 | y18n@^4.0.0: 1698 | version "4.0.1" 1699 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 1700 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== 1701 | 1702 | yallist@^4.0.0: 1703 | version "4.0.0" 1704 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1705 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1706 | 1707 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 1708 | version "13.1.2" 1709 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 1710 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 1711 | dependencies: 1712 | camelcase "^5.0.0" 1713 | decamelize "^1.2.0" 1714 | 1715 | yargs-parser@^15.0.1: 1716 | version "15.0.1" 1717 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" 1718 | integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== 1719 | dependencies: 1720 | camelcase "^5.0.0" 1721 | decamelize "^1.2.0" 1722 | 1723 | yargs-unparser@1.6.1: 1724 | version "1.6.1" 1725 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f" 1726 | integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA== 1727 | dependencies: 1728 | camelcase "^5.3.1" 1729 | decamelize "^1.2.0" 1730 | flat "^4.1.0" 1731 | is-plain-obj "^1.1.0" 1732 | yargs "^14.2.3" 1733 | 1734 | yargs@13.3.2: 1735 | version "13.3.2" 1736 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 1737 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 1738 | dependencies: 1739 | cliui "^5.0.0" 1740 | find-up "^3.0.0" 1741 | get-caller-file "^2.0.1" 1742 | require-directory "^2.1.1" 1743 | require-main-filename "^2.0.0" 1744 | set-blocking "^2.0.0" 1745 | string-width "^3.0.0" 1746 | which-module "^2.0.0" 1747 | y18n "^4.0.0" 1748 | yargs-parser "^13.1.2" 1749 | 1750 | yargs@^14.2.3: 1751 | version "14.2.3" 1752 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" 1753 | integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== 1754 | dependencies: 1755 | cliui "^5.0.0" 1756 | decamelize "^1.2.0" 1757 | find-up "^3.0.0" 1758 | get-caller-file "^2.0.1" 1759 | require-directory "^2.1.1" 1760 | require-main-filename "^2.0.0" 1761 | set-blocking "^2.0.0" 1762 | string-width "^3.0.0" 1763 | which-module "^2.0.0" 1764 | y18n "^4.0.0" 1765 | yargs-parser "^15.0.1" 1766 | --------------------------------------------------------------------------------