├── .eslintrc.json ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── LICENSE ├── README.md ├── assets └── helloworld-screenshot.png ├── docs ├── extension-commands.md ├── extension-development-cycle.md ├── extension-structure.md └── icon.png ├── package-lock.json ├── package.json ├── src ├── extension.ts ├── panels │ ├── README.md │ └── TokensPanel.ts └── utilities │ └── getUri.ts ├── tsconfig.json ├── webview-ui ├── .gitignore ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── src │ ├── App.css │ ├── App.tsx │ ├── components │ │ └── swatch.tsx │ ├── index.tsx │ ├── utilities │ │ ├── helpers.ts │ │ └── vscode.ts │ └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json └── vite.config.ts └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": ["@typescript-eslint"], 9 | "rules": { 10 | "@typescript-eslint/naming-convention": "warn", 11 | "@typescript-eslint/semi": "warn", 12 | "curly": "warn", 13 | "eqeqeq": "warn", 14 | "no-throw-literal": "warn", 15 | "semi": "off" 16 | }, 17 | "ignorePatterns": ["webview-ui/**"] 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out 3 | *.vsix -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | /dist 12 | 13 | # misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "quoteProps": "consistent", 8 | "jsxSingleQuote": false, 9 | "trailingComma": "es5", 10 | "bracketSpacing": true, 11 | "jsxBracketSameLine": true, 12 | "arrowParens": "always" 13 | } -------------------------------------------------------------------------------- /.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 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/**/*.js" 17 | ], 18 | "preLaunchTask": "${defaultBuildTask}" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "args": [ 25 | "--extensionDevelopmentPath=${workspaceFolder}", 26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 27 | ], 28 | "outFiles": [ 29 | "${workspaceFolder}/out/test/**/*.js" 30 | ], 31 | "preLaunchTask": "${defaultBuildTask}" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.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 | # This file contains all the files/directories that should 2 | # be ignored (i.e. not included) in the final packaged extension. 3 | 4 | # Ignore extension configs 5 | .vscode/** 6 | 7 | # Ignore test files 8 | .vscode-test/** 9 | out/test/** 10 | 11 | # Ignore source code 12 | src/** 13 | 14 | # Ignore all webview-ui files except the build directory 15 | webview-ui/src/** 16 | webview-ui/public/** 17 | webview-ui/scripts/** 18 | webview-ui/index.html 19 | webview-ui/README.md 20 | webview-ui/package.json 21 | webview-ui/package-lock.json 22 | webview-ui/node_modules/** 23 | 24 | # Ignore Misc 25 | .yarnrc 26 | vsc-extension-quickstart.md 27 | **/.gitignore 28 | **/tsconfig.json 29 | **/vite.config.ts 30 | **/.eslintrc.json 31 | **/*.map 32 | **/*.ts -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 GitHub Next 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 | # Spectrum 2 | 3 | This is a VSCode extension (webview) that helps you find and copy a VSCode theme CSS variable quickly and easily! No more messing around with the Chrome dev tools – fire up this webview and find what you're looking for, fast. 4 | 5 | ![Screen Shot 2022-02-02 at 4 13 15 PM](https://user-images.githubusercontent.com/5148596/152238301-cea849d3-442a-46f6-afd2-838e5a17c321.png) 6 | 7 | ## Usage 8 | Once installed, open the webview by invoking the **Spectrum: Show theme tokens** command from the command palette. 9 | 10 | ![Screen Shot 2022-02-07 at 11 16 35 AM](https://user-images.githubusercontent.com/5148596/152827601-9354c604-d0d8-4c38-977d-9978041bf3e5.png) 11 | 12 | Once the webview is open, filter the grid of swatches via the text field at the top of the screen. To copy a value, click a swatch and the VSCode quickpick UI will pop up. From there you can copy either the: 13 | - Fully qualified CSS variable 14 | - Raw CSS variable name 15 | - Hex/RGB value 16 | 17 | ![Screen Shot 2022-02-02 at 4 21 47 PM](https://user-images.githubusercontent.com/5148596/152239366-5c1d3485-8b8e-4efc-95e9-bda1a55815bb.png) 18 | 19 | 20 | ## Local Development 21 | 22 | ### Dependencies 23 | 24 | ```bash 25 | # Install dependencies for both the extension and webview UI source code 26 | npm run install:all 27 | 28 | # Build webview UI source code 29 | npm run build:webview 30 | 31 | # Open sample in VS Code 32 | code . 33 | ``` 34 | 35 | ### Running the extension 36 | Once the extension is open inside VS Code you can run the extension by doing the following: 37 | 38 | 1. Press `F5` to open a new Extension Development Host window 39 | 2. Inside the host window, open the command palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and type `Spectrum: Show theme tokens` 40 | -------------------------------------------------------------------------------- /assets/helloworld-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubnext/spectrum/021de6ef365faa7dbb8f003dcb2a3674921440c1/assets/helloworld-screenshot.png -------------------------------------------------------------------------------- /docs/extension-commands.md: -------------------------------------------------------------------------------- 1 | # Extension commands 2 | 3 | A quick run down of some of the important commands that can be run when at the root of the project. 4 | 5 | ``` 6 | npm run install:all Install package dependencies for both the extension and React webview source code. 7 | npm run start:webview Runs the React webview source code in development mode. Open http://localhost:3000 to view it in the browser. 8 | npm run build:webview Build React webview source code. Must be executed before compiling or running the extension. 9 | npm run compile Compile VS Code extension 10 | ``` 11 | -------------------------------------------------------------------------------- /docs/extension-development-cycle.md: -------------------------------------------------------------------------------- 1 | # Extension development cycle 2 | 3 | The intended development cycle of this React-based webview extension is slightly different than that of other VS Code extensions. 4 | 5 | Due to the fact that the `webview-ui` directory holds a self-contained React application we get to take advantage of some of the perks that that enables. In particular, 6 | 7 | - UI development and iteration cycles can happen much more quickly by using Vite 8 | - Dependency management and project configuration is hugely simplified 9 | 10 | ## UI development cycle 11 | 12 | Since we can take advantage of the much faster Vite dev server, it is encouraged to begin developing webview UI by running the `npm run start:webview` command and then editing the code in the `webview-ui/src` directory. 13 | 14 | _Tip: Open the command palette and run the `Simple Browser` command and fill in `http://localhost:3000/` when prompted. This will open a simple browser environment right inside VS Code._ 15 | 16 | ### Message passing 17 | If you need to implement message passing between the webview context and extension context via the VS Code API, a helpful utility is provided in the `webview-ui/src/utilities/vscode.ts` file. 18 | 19 | This file contains a utility wrapper around the `acquireVsCodeApi()` function, which enables message passing and state management between the webview and extension contexts. 20 | 21 | This utility also enables webview code to be run in the Vite dev server by using native web browser features that mock the functionality enabled by acquireVsCodeApi. This means you can keep building your webview UI with the Vite dev server even when using the VS Code API. 22 | 23 | ### Move to traditional extension development 24 | Once you're ready to start building other parts of your extension, simply shift to a development model where you run the `npm run build:webview` command as you make changes, press `F5` to compile your extension and open a new Extension Development Host window. Inside the host window, open the command palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and type `Hello World`. 25 | 26 | ## Dependency management and project configuration 27 | 28 | As mentioned above, the `webview-ui` directory holds a self-contained and isolated React application meaning you can (for the most part) treat the development of your webview UI in the same way you would treat the development of a regular React application. 29 | 30 | To install webview-specific dependencies simply navigate (i.e. `cd`) into the `webview-ui` directory and install any packages you need or set up any React specific configurations you want. 31 | -------------------------------------------------------------------------------- /docs/extension-structure.md: -------------------------------------------------------------------------------- 1 | # Extension structure 2 | 3 | This section provides a quick introduction into how this sample extension is organized and structured. 4 | 5 | The two most important directories to take note of are the following: 6 | 7 | - `src`: Contains all of the extension source code 8 | - `webview-ui`: Contains all of the webview UI source code 9 | 10 | ## `src` directory 11 | 12 | The `src` directory contains all of the extension-related source code and can be thought of as containing the "backend" code/logic for the entire extension. Inside of this directory you'll find the: 13 | 14 | - `panels` directory 15 | - `utilities` directory 16 | - `extension.ts` file 17 | 18 | The `panels` directory contains all of the webview-related code that will be executed within the extension context. It can be thought of as the place where all of the "backend" code for each webview panel is contained. 19 | 20 | This directory will typically contain individual TypeScript or JavaScript files that contain a class which manages the state and behavior of a given webview panel. Each class is usually in charge of: 21 | 22 | - Creating and rendering the webview panel 23 | - Properly cleaning up and disposing of webview resources when the panel is closed 24 | - Setting message listeners so data can be passed between the webview and extension 25 | - Setting the initial HTML markdown of the webview panel 26 | - Other custom logic and behavior related to webview panel management 27 | 28 | As the name might suggest, the `utilties` directory contains all of the extension utility functions that make setting up and managing an extension easier. In this case, it contains `getUri.ts` which contains a helper function which will get the webview URI of a given file or resource. 29 | 30 | Finally, `extension.ts` is where all the logic for activating and deactiving the extension usually live. This is also the place where extension commands are registered. 31 | 32 | ## `webview-ui` directory 33 | 34 | The `webview-ui` directory contains all of the React-based webview source code and can be thought of as containing the "frontend" code/logic for the extension webview. 35 | 36 | This directory is special because it contains a full-blown React application which was created using the TypeScript [Vite](https://vitejs.dev/) template. As a result, `webview-ui` contains its own `package.json`, `node_modules`, `tsconfig.json`, and so on––separate from the `hello-world` extension in the root directory. 37 | 38 | This strays a bit from other extension structures, in that you'll usually find the extension and webview dependencies, configurations, and source code more closely integrated or combined with each other. 39 | 40 | However, in this case, there are some unique benefits and reasons for why this sample extension does not follow those patterns such as easier management of conflicting dependencies and configurations, as well as the ability to use the Vite dev server, which drastically improves the speed of developing your webview UI, versus recompiling your extension code every time you make a change to the webview. 41 | -------------------------------------------------------------------------------- /docs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubnext/spectrum/021de6ef365faa7dbb8f003dcb2a3674921440c1/docs/icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spectrum", 3 | "displayName": "Spectrum", 4 | "publisher": "githubocto", 5 | "description": "An extension that helps you quickly find and copy a VSCode theme token or underlying color value.", 6 | "version": "0.3.0", 7 | "engines": { 8 | "vscode": "^1.46.0" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/githubnext/spectrum" 13 | }, 14 | "icon": "docs/icon.png", 15 | "categories": [ 16 | "Other" 17 | ], 18 | "activationEvents": [ 19 | "onCommand:spectrum.showTokens" 20 | ], 21 | "main": "./out/extension.js", 22 | "contributes": { 23 | "commands": [ 24 | { 25 | "command": "spectrum.showTokens", 26 | "title": "Show theme tokens", 27 | "category": "Spectrum", 28 | "icon": "$(paintcan)" 29 | } 30 | ] 31 | }, 32 | "scripts": { 33 | "install:all": "npm install && npm --prefix ./webview-ui install ./webview-ui", 34 | "start:webview": "npm --prefix ./webview-ui run start", 35 | "build:webview": "npm --prefix ./webview-ui run build", 36 | "vscode:prepublish": "npm run compile && npm run build:webview", 37 | "compile": "tsc -p ./", 38 | "watch": "tsc -watch -p ./", 39 | "pretest": "npm run compile && npm run lint", 40 | "lint": "eslint src --ext ts" 41 | }, 42 | "devDependencies": { 43 | "@types/glob": "^7.1.3", 44 | "@types/node": "^12.11.7", 45 | "@types/vscode": "^1.46.0", 46 | "@typescript-eslint/eslint-plugin": "^4.14.1", 47 | "@typescript-eslint/parser": "^4.14.1", 48 | "eslint": "^7.19.0", 49 | "glob": "^7.1.6", 50 | "prettier": "^2.2.1", 51 | "typescript": "^4.1.3", 52 | "vscode-test": "^1.5.0" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import { commands, ExtensionContext, workspace } from "vscode"; 2 | import { TokensPanel } from "./panels/TokensPanel"; 3 | 4 | export function activate(context: ExtensionContext) { 5 | const showTokensCommand = commands.registerCommand("spectrum.showTokens", () => { 6 | TokensPanel.render(context); 7 | }); 8 | 9 | context.subscriptions.push(showTokensCommand); 10 | 11 | const themeChangeHandler = workspace.onDidChangeConfiguration((e) => { 12 | if (e.affectsConfiguration("workbench.colorTheme")) { 13 | TokensPanel.triggerUpdate(); 14 | } 15 | }); 16 | 17 | context.subscriptions.push(themeChangeHandler); 18 | } 19 | -------------------------------------------------------------------------------- /src/panels/README.md: -------------------------------------------------------------------------------- 1 | # `panels` Directory 2 | 3 | This directory contains all of the webview-related code that will be executed within the extension context. It can be thought of as the place where all of the "backend" code of a webview panel is contained. 4 | 5 | Types of content that can be contained here: 6 | 7 | Individual JavaScript / TypeScript files that contain a class which manages the state and behavior of a given webview panel. Each class is usually in charge of: 8 | 9 | - Creating and rendering the webview panel 10 | - Properly cleaning up and disposing of webview resources when the panel is closed 11 | - Setting message listeners so data can be passed between the webview and extension 12 | - Setting the HTML (and by proxy CSS/JavaScript) content of the webview panel 13 | - Other custom logic and behavior related to webview panel management 14 | -------------------------------------------------------------------------------- /src/panels/TokensPanel.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Disposable, 3 | env, 4 | ExtensionContext, 5 | ViewColumn, 6 | Webview, 7 | WebviewPanel, 8 | window, 9 | } from "vscode"; 10 | import { getUri } from "../utilities/getUri"; 11 | 12 | export class TokensPanel { 13 | public static currentPanel: TokensPanel | undefined; 14 | private readonly _panel: WebviewPanel; 15 | private _disposables: Disposable[] = []; 16 | 17 | /** 18 | * The HelloWorldPanel class private constructor (called only from the render method). 19 | * 20 | * @param panel A reference to the webview panel 21 | * @param extensionUri The URI of the directory containing the extension 22 | */ 23 | private constructor(panel: WebviewPanel, context: ExtensionContext) { 24 | this._panel = panel; 25 | 26 | // Set an event listener to listen for when the panel is disposed (i.e. when the user closes 27 | // the panel or when the panel is closed programmatically) 28 | this._panel.onDidDispose(this.dispose, null, this._disposables); 29 | 30 | // Set the HTML content for the webview panel 31 | this._panel.webview.html = this._getWebviewContent(this._panel.webview, context); 32 | 33 | // Set an event listener to listen for messages passed from the webview context 34 | this._setWebviewMessageListener(this._panel.webview); 35 | } 36 | 37 | public static triggerUpdate() { 38 | if (TokensPanel.currentPanel) { 39 | TokensPanel.currentPanel._panel.webview.postMessage({ 40 | command: "updateTheme", 41 | }); 42 | } 43 | } 44 | 45 | /** 46 | * Renders the current webview panel if it exists otherwise a new webview panel 47 | * will be created and displayed. 48 | * 49 | * @param extensionUri The URI of the directory containing the extension. 50 | */ 51 | public static render(context: ExtensionContext) { 52 | if (TokensPanel.currentPanel) { 53 | // If the webview panel already exists reveal it 54 | TokensPanel.currentPanel._panel.reveal(ViewColumn.One); 55 | } else { 56 | // If a webview panel does not already exist create and show a new one 57 | const panel = window.createWebviewPanel( 58 | // Panel view type 59 | "tokensPanel", 60 | // Panel title 61 | "Spectrum 🌈", 62 | // The editor column the panel should be displayed in 63 | ViewColumn.One, 64 | // Extra panel configurations 65 | { 66 | // Enable JavaScript in the webview 67 | enableScripts: true, 68 | } 69 | ); 70 | 71 | TokensPanel.currentPanel = new TokensPanel(panel, context); 72 | } 73 | } 74 | 75 | /** 76 | * Cleans up and disposes of webview resources when the webview panel is closed. 77 | */ 78 | public dispose() { 79 | TokensPanel.currentPanel = undefined; 80 | 81 | // Dispose of the current webview panel 82 | this._panel.dispose(); 83 | 84 | // Dispose of all disposables (i.e. commands) for the current webview panel 85 | while (this._disposables.length) { 86 | const disposable = this._disposables.pop(); 87 | if (disposable) { 88 | disposable.dispose(); 89 | } 90 | } 91 | } 92 | 93 | /** 94 | * Defines and returns the HTML that should be rendered within the webview panel. 95 | * 96 | * @remarks This is also the place where references to the React webview build files 97 | * are created and inserted into the webview HTML. 98 | * 99 | * @param webview A reference to the extension webview 100 | * @param extensionUri The URI of the directory containing the extension 101 | * @returns A template string literal containing the HTML that should be 102 | * rendered within the webview panel 103 | */ 104 | private _getWebviewContent(webview: Webview, context: ExtensionContext) { 105 | const extensionUri = context.extensionUri; 106 | const stylesUri = getUri(webview, extensionUri, ["webview-ui", "build", "assets", "index.css"]); 107 | const scriptUri = getUri(webview, extensionUri, ["webview-ui", "build", "assets", "index.js"]); 108 | 109 | // Tip: Install the es6-string-html VS Code extension to enable code highlighting below 110 | return /*html*/ ` 111 | 112 | 113 | 114 | 115 | 116 | 117 | Theme Tokens 118 | 119 | 120 |
121 | 122 | 123 | 124 | `; 125 | } 126 | 127 | /** 128 | * Sets up an event listener to listen for messages passed from the webview context and 129 | * executes code based on the message that is recieved. 130 | * 131 | * @param webview A reference to the extension webview 132 | * @param context A reference to the extension context 133 | */ 134 | private _setWebviewMessageListener(webview: Webview) { 135 | webview.onDidReceiveMessage( 136 | async (message: any) => { 137 | const command = message.command; 138 | const payload = message.payload; 139 | 140 | switch (command) { 141 | case "copyThemeVariable": 142 | const quickPickOptions = [`var(${payload.name})`, payload.name, payload.value].map( 143 | (option) => `Copy: ${option}` 144 | ); 145 | const result = await window.showQuickPick(quickPickOptions, { 146 | placeHolder: "Select a variable to copy", 147 | }); 148 | if (result) { 149 | const trimmedResult = result.replace("Copy: ", ""); 150 | await env.clipboard.writeText(trimmedResult); 151 | await window.showInformationMessage(`Copied ${trimmedResult} to clipboard.`); 152 | } 153 | break; 154 | } 155 | }, 156 | undefined, 157 | this._disposables 158 | ); 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /src/utilities/getUri.ts: -------------------------------------------------------------------------------- 1 | import { Uri, Webview } from "vscode"; 2 | 3 | /** 4 | * A helper function which will get the webview URI of a given file or resource. 5 | * 6 | * @remarks This URI can be used within a webview's HTML as a link to the 7 | * given file/resource. 8 | * 9 | * @param webview A reference to the extension webview 10 | * @param extensionUri The URI of the directory containing the extension 11 | * @param pathList An array of strings representing the path to a file/resource 12 | * @returns A URI pointing to the file/resource 13 | */ 14 | export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { 15 | return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6", "dom"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true 10 | }, 11 | "exclude": ["node_modules", ".vscode-test", "webview-ui"] 12 | } 13 | -------------------------------------------------------------------------------- /webview-ui/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | build 6 | build-ssr 7 | *.local 8 | -------------------------------------------------------------------------------- /webview-ui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Hello World 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /webview-ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "start": "vite", 6 | "watch": "tsc && vite build --watch", 7 | "build": "tsc && vite build", 8 | "preview": "vite preview" 9 | }, 10 | "dependencies": { 11 | "@react-hook/window-scroll": "^1.3.0", 12 | "@vscode/webview-ui-toolkit": "^0.9.0", 13 | "match-sorter": "^6.3.1", 14 | "react": "^17.0.2", 15 | "react-dom": "^17.0.2" 16 | }, 17 | "devDependencies": { 18 | "@types/react": "^17.0.33", 19 | "@types/react-dom": "^17.0.10", 20 | "@types/vscode-webview": "^1.57.0", 21 | "@vitejs/plugin-react": "^1.0.7", 22 | "autoprefixer": "^10.4.2", 23 | "postcss": "^8.4.6", 24 | "tailwindcss": "^3.0.18", 25 | "typescript": "^4.4.4", 26 | "vite": "^2.7.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /webview-ui/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /webview-ui/src/App.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind utilities; 3 | @tailwind components; 4 | 5 | body { 6 | padding: 0; 7 | } 8 | 9 | .swatch-grid { 10 | grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); 11 | } 12 | 13 | .copy-button-bg { 14 | background: linear-gradient(to left, transparent, var(--vscode-input-background)); 15 | } 16 | -------------------------------------------------------------------------------- /webview-ui/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { matchSorter } from "match-sorter"; 2 | import { useCallback, useEffect, useState } from "react"; 3 | import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"; 4 | import useScrollPosition from "@react-hook/window-scroll"; 5 | 6 | import { vscode } from "./utilities/vscode"; 7 | import "./App.css"; 8 | import { Swatch } from "./components/swatch"; 9 | import { getColorVariables } from "./utilities/helpers"; 10 | 11 | function App() { 12 | const scrollY = useScrollPosition(); 13 | const [activeVar, setActiveVar] = useState(""); 14 | const [search, setSearch] = useState(""); 15 | const [cssVariables, setCssVariables] = useState>(() => { 16 | return getColorVariables(); 17 | }); 18 | 19 | useEffect(() => { 20 | const handleMessage = (event: MessageEvent) => { 21 | const data = event.data; 22 | if (data.command === "updateTheme") { 23 | setCssVariables(getColorVariables()); 24 | } 25 | }; 26 | 27 | window.addEventListener("message", handleMessage); 28 | 29 | return () => { 30 | window.removeEventListener("message", handleMessage); 31 | }; 32 | }, []); 33 | 34 | const filteredKeys = matchSorter(Object.keys(cssVariables), search, {}); 35 | 36 | const handleClick = useCallback( 37 | (varName) => { 38 | setActiveVar(varName); 39 | vscode.postMessage({ 40 | command: "copyThemeVariable", 41 | payload: { 42 | name: varName, 43 | value: cssVariables[varName], 44 | }, 45 | }); 46 | }, 47 | [setActiveVar] 48 | ); 49 | 50 | return ( 51 |
52 |
0 ? "shadow-lg" : ""} 55 | p-4 sticky transition-shadow top-0 bg-[color:var(--vscode-editor-background)] border-b border-[color:var(--vscode-editor-lineHighlightBorder)] z-50 56 | `}> 57 | { 59 | // @ts-ignore 60 | setSearch(e.target?.value); 61 | }} 62 | value={search} 63 | className="w-full" 64 | placeholder="Filter by variable name" 65 | /> 66 |
67 |
68 | {filteredKeys.length === 0 && ( 69 |
70 |

71 | No variables found for query: {search} 72 |

73 |
74 | )} 75 | {filteredKeys.length > 0 && ( 76 |
    77 | {filteredKeys.map((key) => ( 78 |
  • 79 | 85 |
  • 86 | ))} 87 |
88 | )} 89 |
90 |
91 | ); 92 | } 93 | 94 | export default App; 95 | -------------------------------------------------------------------------------- /webview-ui/src/components/swatch.tsx: -------------------------------------------------------------------------------- 1 | interface SwatchProps { 2 | varName: string; 3 | isActive?: boolean; 4 | value: string; 5 | onClick: (varName: string) => void; 6 | } 7 | 8 | export function Swatch(props: SwatchProps) { 9 | const { varName, value, onClick, isActive } = props; 10 | return ( 11 |
12 |
13 | 19 | 25 | 31 | 37 |
38 | 39 |
40 | {varName} 41 |
42 |
43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /webview-ui/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from "./App"; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById("root") 10 | ); 11 | -------------------------------------------------------------------------------- /webview-ui/src/utilities/helpers.ts: -------------------------------------------------------------------------------- 1 | // Function that takes a string and returns true if it is a color, either in hex, rgb, or rgba 2 | export function isColor(value: string) { 3 | return ( 4 | /^#[0-9a-f]{3,6}$/i.test(value) || /^(rgb|rgba)\((\d{1,3},\s?){3,4}\d{1,3}\)$/i.test(value) 5 | ); 6 | } 7 | 8 | export function getColorVariables() { 9 | const [html] = document.getElementsByTagName("html"); 10 | if (!html) return {}; 11 | 12 | const style = html.style; 13 | const cssVarNames = Object.values(style).filter((k) => { 14 | return k.startsWith("--vscode"); 15 | }); 16 | 17 | return cssVarNames.reduce>((acc, varName) => { 18 | const value = getComputedStyle(document.body).getPropertyValue(varName); 19 | if (isColor(value)) { 20 | // first and simplest use case is displaying color variables 21 | acc[varName] = value; 22 | } 23 | 24 | return acc; 25 | }, {}); 26 | } 27 | -------------------------------------------------------------------------------- /webview-ui/src/utilities/vscode.ts: -------------------------------------------------------------------------------- 1 | import type { WebviewApi } from "vscode-webview"; 2 | 3 | /** 4 | * A utility wrapper around the acquireVsCodeApi() function, which enables 5 | * message passing and state management between the webview and extension 6 | * contexts. 7 | * 8 | * This utility also enables webview code to be run in a web browser-based 9 | * dev server by using native web browser features that mock the functionality 10 | * enabled by acquireVsCodeApi. 11 | */ 12 | class VSCodeAPIWrapper { 13 | private readonly vsCodeApi: WebviewApi | undefined; 14 | 15 | constructor() { 16 | // Check if the acquireVsCodeApi function exists in the current development 17 | // context (i.e. VS Code development window or web browser) 18 | if (typeof acquireVsCodeApi === "function") { 19 | this.vsCodeApi = acquireVsCodeApi(); 20 | } 21 | } 22 | 23 | /** 24 | * Post a message (i.e. send arbitrary data) to the owner of the webview. 25 | * 26 | * @remarks When running webview code inside a web browser, postMessage will instead 27 | * log the given message to the console. 28 | * 29 | * @param message Abitrary data (must be JSON serializable) to send to the extension context. 30 | */ 31 | public postMessage(message: unknown) { 32 | if (this.vsCodeApi) { 33 | this.vsCodeApi.postMessage(message); 34 | } else { 35 | console.log(message); 36 | } 37 | } 38 | 39 | /** 40 | * Get the persistent state stored for this webview. 41 | * 42 | * @remarks When running webview source code inside a web browser, getState will retrieve state 43 | * from local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). 44 | * 45 | * @return The current state or `undefined` if no state has been set. 46 | */ 47 | public getState(): unknown | undefined { 48 | if (this.vsCodeApi) { 49 | return this.vsCodeApi.getState(); 50 | } else { 51 | const state = localStorage.getItem("vscodeState"); 52 | return state ? JSON.parse(state) : undefined; 53 | } 54 | } 55 | 56 | /** 57 | * Set the persistent state stored for this webview. 58 | * 59 | * @remarks When running webview source code inside a web browser, setState will set the given 60 | * state using local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). 61 | * 62 | * @param newState New persisted state. This must be a JSON serializable object. Can be retrieved 63 | * using {@link getState}. 64 | * 65 | * @return The new state. 66 | */ 67 | public setState(newState: T): T { 68 | if (this.vsCodeApi) { 69 | return this.vsCodeApi.setState(newState); 70 | } else { 71 | localStorage.setItem("vscodeState", JSON.stringify(newState)); 72 | return newState; 73 | } 74 | } 75 | } 76 | 77 | // Exports class singleton to prevent multiple invocations of acquireVsCodeApi. 78 | export const vscode = new VSCodeAPIWrapper(); 79 | -------------------------------------------------------------------------------- /webview-ui/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /webview-ui/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ["./index.html", "./src/**/*.{ts,tsx}"], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [], 7 | }; 8 | -------------------------------------------------------------------------------- /webview-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "useDefineForClassFields": true, 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["./src"] 20 | } 21 | -------------------------------------------------------------------------------- /webview-ui/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import react from "@vitejs/plugin-react"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | build: { 8 | outDir: "build", 9 | rollupOptions: { 10 | output: { 11 | entryFileNames: `assets/[name].js`, 12 | chunkFileNames: `assets/[name].js`, 13 | assetFileNames: `assets/[name].[ext]`, 14 | }, 15 | }, 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" 7 | "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" 8 | "version" "7.12.11" 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" 14 | "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" 15 | "version" "7.15.7" 16 | 17 | "@babel/highlight@^7.10.4": 18 | "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" 19 | "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" 20 | "version" "7.14.5" 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | "chalk" "^2.0.0" 24 | "js-tokens" "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.3": 27 | "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" 28 | "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" 29 | "version" "0.4.3" 30 | dependencies: 31 | "ajv" "^6.12.4" 32 | "debug" "^4.1.1" 33 | "espree" "^7.3.0" 34 | "globals" "^13.9.0" 35 | "ignore" "^4.0.6" 36 | "import-fresh" "^3.2.1" 37 | "js-yaml" "^3.13.1" 38 | "minimatch" "^3.0.4" 39 | "strip-json-comments" "^3.1.1" 40 | 41 | "@humanwhocodes/config-array@^0.5.0": 42 | "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" 43 | "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" 44 | "version" "0.5.0" 45 | dependencies: 46 | "@humanwhocodes/object-schema" "^1.2.0" 47 | "debug" "^4.1.1" 48 | "minimatch" "^3.0.4" 49 | 50 | "@humanwhocodes/object-schema@^1.2.0": 51 | "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" 52 | "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" 53 | "version" "1.2.0" 54 | 55 | "@nodelib/fs.scandir@2.1.5": 56 | "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" 57 | "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 58 | "version" "2.1.5" 59 | dependencies: 60 | "@nodelib/fs.stat" "2.0.5" 61 | "run-parallel" "^1.1.9" 62 | 63 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 64 | "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 65 | "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 66 | "version" "2.0.5" 67 | 68 | "@nodelib/fs.walk@^1.2.3": 69 | "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" 70 | "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 71 | "version" "1.2.8" 72 | dependencies: 73 | "@nodelib/fs.scandir" "2.1.5" 74 | "fastq" "^1.6.0" 75 | 76 | "@tootallnate/once@1": 77 | "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" 78 | "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" 79 | "version" "1.1.2" 80 | 81 | "@types/glob@^7.1.3": 82 | "integrity" "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==" 83 | "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz" 84 | "version" "7.1.4" 85 | dependencies: 86 | "@types/minimatch" "*" 87 | "@types/node" "*" 88 | 89 | "@types/json-schema@^7.0.7": 90 | "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" 91 | "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" 92 | "version" "7.0.9" 93 | 94 | "@types/minimatch@*": 95 | "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" 96 | "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" 97 | "version" "3.0.5" 98 | 99 | "@types/node@*", "@types/node@^12.11.7": 100 | "integrity" "sha512-qZdePUDSLAZRXXV234bLBEUM0nAQjoxbcSwp1rqSMUe1rZ47mwU6OjciR/JvF1Oo8mc0ys6GE0ks0HGgqAZoGg==" 101 | "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.27.tgz" 102 | "version" "12.20.27" 103 | 104 | "@types/vscode@^1.46.0": 105 | "integrity" "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==" 106 | "resolved" "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz" 107 | "version" "1.60.0" 108 | 109 | "@typescript-eslint/eslint-plugin@^4.14.1": 110 | "integrity" "sha512-+OWTuWRSbWI1KDK8iEyG/6uK2rTm3kpS38wuVifGUTDB6kjEuNrzBI1MUtxnkneuWG/23QehABe2zHHrj+4yuA==" 111 | "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.32.0.tgz" 112 | "version" "4.32.0" 113 | dependencies: 114 | "@typescript-eslint/experimental-utils" "4.32.0" 115 | "@typescript-eslint/scope-manager" "4.32.0" 116 | "debug" "^4.3.1" 117 | "functional-red-black-tree" "^1.0.1" 118 | "ignore" "^5.1.8" 119 | "regexpp" "^3.1.0" 120 | "semver" "^7.3.5" 121 | "tsutils" "^3.21.0" 122 | 123 | "@typescript-eslint/experimental-utils@4.32.0": 124 | "integrity" "sha512-WLoXcc+cQufxRYjTWr4kFt0DyEv6hDgSaFqYhIzQZ05cF+kXfqXdUh+//kgquPJVUBbL3oQGKQxwPbLxHRqm6A==" 125 | "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.32.0.tgz" 126 | "version" "4.32.0" 127 | dependencies: 128 | "@types/json-schema" "^7.0.7" 129 | "@typescript-eslint/scope-manager" "4.32.0" 130 | "@typescript-eslint/types" "4.32.0" 131 | "@typescript-eslint/typescript-estree" "4.32.0" 132 | "eslint-scope" "^5.1.1" 133 | "eslint-utils" "^3.0.0" 134 | 135 | "@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.14.1": 136 | "integrity" "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==" 137 | "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz" 138 | "version" "4.32.0" 139 | dependencies: 140 | "@typescript-eslint/scope-manager" "4.32.0" 141 | "@typescript-eslint/types" "4.32.0" 142 | "@typescript-eslint/typescript-estree" "4.32.0" 143 | "debug" "^4.3.1" 144 | 145 | "@typescript-eslint/scope-manager@4.32.0": 146 | "integrity" "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==" 147 | "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz" 148 | "version" "4.32.0" 149 | dependencies: 150 | "@typescript-eslint/types" "4.32.0" 151 | "@typescript-eslint/visitor-keys" "4.32.0" 152 | 153 | "@typescript-eslint/types@4.32.0": 154 | "integrity" "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==" 155 | "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz" 156 | "version" "4.32.0" 157 | 158 | "@typescript-eslint/typescript-estree@4.32.0": 159 | "integrity" "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==" 160 | "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz" 161 | "version" "4.32.0" 162 | dependencies: 163 | "@typescript-eslint/types" "4.32.0" 164 | "@typescript-eslint/visitor-keys" "4.32.0" 165 | "debug" "^4.3.1" 166 | "globby" "^11.0.3" 167 | "is-glob" "^4.0.1" 168 | "semver" "^7.3.5" 169 | "tsutils" "^3.21.0" 170 | 171 | "@typescript-eslint/visitor-keys@4.32.0": 172 | "integrity" "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==" 173 | "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz" 174 | "version" "4.32.0" 175 | dependencies: 176 | "@typescript-eslint/types" "4.32.0" 177 | "eslint-visitor-keys" "^2.0.0" 178 | 179 | "acorn-jsx@^5.3.1": 180 | "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" 181 | "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 182 | "version" "5.3.2" 183 | 184 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": 185 | "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 186 | "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" 187 | "version" "7.4.1" 188 | 189 | "agent-base@6": 190 | "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" 191 | "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" 192 | "version" "6.0.2" 193 | dependencies: 194 | "debug" "4" 195 | 196 | "ajv@^6.10.0", "ajv@^6.12.4": 197 | "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" 198 | "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 199 | "version" "6.12.6" 200 | dependencies: 201 | "fast-deep-equal" "^3.1.1" 202 | "fast-json-stable-stringify" "^2.0.0" 203 | "json-schema-traverse" "^0.4.1" 204 | "uri-js" "^4.2.2" 205 | 206 | "ajv@^8.0.1": 207 | "integrity" "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==" 208 | "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz" 209 | "version" "8.6.3" 210 | dependencies: 211 | "fast-deep-equal" "^3.1.1" 212 | "json-schema-traverse" "^1.0.0" 213 | "require-from-string" "^2.0.2" 214 | "uri-js" "^4.2.2" 215 | 216 | "ansi-colors@^4.1.1": 217 | "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 218 | "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 219 | "version" "4.1.1" 220 | 221 | "ansi-regex@^5.0.1": 222 | "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 223 | "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 224 | "version" "5.0.1" 225 | 226 | "ansi-styles@^3.2.1": 227 | "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" 228 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 229 | "version" "3.2.1" 230 | dependencies: 231 | "color-convert" "^1.9.0" 232 | 233 | "ansi-styles@^4.0.0", "ansi-styles@^4.1.0": 234 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 235 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 236 | "version" "4.3.0" 237 | dependencies: 238 | "color-convert" "^2.0.1" 239 | 240 | "argparse@^1.0.7": 241 | "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" 242 | "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" 243 | "version" "1.0.10" 244 | dependencies: 245 | "sprintf-js" "~1.0.2" 246 | 247 | "array-union@^2.1.0": 248 | "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" 249 | "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 250 | "version" "2.1.0" 251 | 252 | "astral-regex@^2.0.0": 253 | "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" 254 | "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" 255 | "version" "2.0.0" 256 | 257 | "balanced-match@^1.0.0": 258 | "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 259 | "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 260 | "version" "1.0.2" 261 | 262 | "big-integer@^1.6.17": 263 | "integrity" "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" 264 | "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz" 265 | "version" "1.6.49" 266 | 267 | "binary@~0.3.0": 268 | "integrity" "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=" 269 | "resolved" "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" 270 | "version" "0.3.0" 271 | dependencies: 272 | "buffers" "~0.1.1" 273 | "chainsaw" "~0.1.0" 274 | 275 | "bluebird@~3.4.1": 276 | "integrity" "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" 277 | "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" 278 | "version" "3.4.7" 279 | 280 | "brace-expansion@^1.1.7": 281 | "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" 282 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 283 | "version" "1.1.11" 284 | dependencies: 285 | "balanced-match" "^1.0.0" 286 | "concat-map" "0.0.1" 287 | 288 | "braces@^3.0.1": 289 | "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" 290 | "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 291 | "version" "3.0.2" 292 | dependencies: 293 | "fill-range" "^7.0.1" 294 | 295 | "buffer-indexof-polyfill@~1.0.0": 296 | "integrity" "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" 297 | "resolved" "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" 298 | "version" "1.0.2" 299 | 300 | "buffers@~0.1.1": 301 | "integrity" "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" 302 | "resolved" "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" 303 | "version" "0.1.1" 304 | 305 | "callsites@^3.0.0": 306 | "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 307 | "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 308 | "version" "3.1.0" 309 | 310 | "chainsaw@~0.1.0": 311 | "integrity" "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=" 312 | "resolved" "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" 313 | "version" "0.1.0" 314 | dependencies: 315 | "traverse" ">=0.3.0 <0.4" 316 | 317 | "chalk@^2.0.0": 318 | "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" 319 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 320 | "version" "2.4.2" 321 | dependencies: 322 | "ansi-styles" "^3.2.1" 323 | "escape-string-regexp" "^1.0.5" 324 | "supports-color" "^5.3.0" 325 | 326 | "chalk@^4.0.0": 327 | "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" 328 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 329 | "version" "4.1.2" 330 | dependencies: 331 | "ansi-styles" "^4.1.0" 332 | "supports-color" "^7.1.0" 333 | 334 | "color-convert@^1.9.0": 335 | "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" 336 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 337 | "version" "1.9.3" 338 | dependencies: 339 | "color-name" "1.1.3" 340 | 341 | "color-convert@^2.0.1": 342 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 343 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 344 | "version" "2.0.1" 345 | dependencies: 346 | "color-name" "~1.1.4" 347 | 348 | "color-name@~1.1.4": 349 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 350 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 351 | "version" "1.1.4" 352 | 353 | "color-name@1.1.3": 354 | "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 355 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 356 | "version" "1.1.3" 357 | 358 | "concat-map@0.0.1": 359 | "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 360 | "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 361 | "version" "0.0.1" 362 | 363 | "core-util-is@~1.0.0": 364 | "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 365 | "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" 366 | "version" "1.0.3" 367 | 368 | "cross-spawn@^7.0.2": 369 | "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" 370 | "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 371 | "version" "7.0.3" 372 | dependencies: 373 | "path-key" "^3.1.0" 374 | "shebang-command" "^2.0.0" 375 | "which" "^2.0.1" 376 | 377 | "debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.1", "debug@4": 378 | "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" 379 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" 380 | "version" "4.3.2" 381 | dependencies: 382 | "ms" "2.1.2" 383 | 384 | "deep-is@^0.1.3": 385 | "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" 386 | "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 387 | "version" "0.1.4" 388 | 389 | "dir-glob@^3.0.1": 390 | "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" 391 | "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 392 | "version" "3.0.1" 393 | dependencies: 394 | "path-type" "^4.0.0" 395 | 396 | "doctrine@^3.0.0": 397 | "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" 398 | "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 399 | "version" "3.0.0" 400 | dependencies: 401 | "esutils" "^2.0.2" 402 | 403 | "duplexer2@~0.1.4": 404 | "integrity" "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=" 405 | "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" 406 | "version" "0.1.4" 407 | dependencies: 408 | "readable-stream" "^2.0.2" 409 | 410 | "emoji-regex@^8.0.0": 411 | "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 412 | "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 413 | "version" "8.0.0" 414 | 415 | "enquirer@^2.3.5": 416 | "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" 417 | "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" 418 | "version" "2.3.6" 419 | dependencies: 420 | "ansi-colors" "^4.1.1" 421 | 422 | "escape-string-regexp@^1.0.5": 423 | "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 424 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 425 | "version" "1.0.5" 426 | 427 | "escape-string-regexp@^4.0.0": 428 | "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 429 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 430 | "version" "4.0.0" 431 | 432 | "eslint-scope@^5.1.1": 433 | "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" 434 | "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 435 | "version" "5.1.1" 436 | dependencies: 437 | "esrecurse" "^4.3.0" 438 | "estraverse" "^4.1.1" 439 | 440 | "eslint-utils@^2.1.0": 441 | "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" 442 | "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" 443 | "version" "2.1.0" 444 | dependencies: 445 | "eslint-visitor-keys" "^1.1.0" 446 | 447 | "eslint-utils@^3.0.0": 448 | "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" 449 | "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 450 | "version" "3.0.0" 451 | dependencies: 452 | "eslint-visitor-keys" "^2.0.0" 453 | 454 | "eslint-visitor-keys@^1.1.0": 455 | "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 456 | "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" 457 | "version" "1.3.0" 458 | 459 | "eslint-visitor-keys@^1.3.0": 460 | "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 461 | "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" 462 | "version" "1.3.0" 463 | 464 | "eslint-visitor-keys@^2.0.0": 465 | "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" 466 | "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 467 | "version" "2.1.0" 468 | 469 | "eslint@*", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.19.0", "eslint@>=5": 470 | "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==" 471 | "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" 472 | "version" "7.32.0" 473 | dependencies: 474 | "@babel/code-frame" "7.12.11" 475 | "@eslint/eslintrc" "^0.4.3" 476 | "@humanwhocodes/config-array" "^0.5.0" 477 | "ajv" "^6.10.0" 478 | "chalk" "^4.0.0" 479 | "cross-spawn" "^7.0.2" 480 | "debug" "^4.0.1" 481 | "doctrine" "^3.0.0" 482 | "enquirer" "^2.3.5" 483 | "escape-string-regexp" "^4.0.0" 484 | "eslint-scope" "^5.1.1" 485 | "eslint-utils" "^2.1.0" 486 | "eslint-visitor-keys" "^2.0.0" 487 | "espree" "^7.3.1" 488 | "esquery" "^1.4.0" 489 | "esutils" "^2.0.2" 490 | "fast-deep-equal" "^3.1.3" 491 | "file-entry-cache" "^6.0.1" 492 | "functional-red-black-tree" "^1.0.1" 493 | "glob-parent" "^5.1.2" 494 | "globals" "^13.6.0" 495 | "ignore" "^4.0.6" 496 | "import-fresh" "^3.0.0" 497 | "imurmurhash" "^0.1.4" 498 | "is-glob" "^4.0.0" 499 | "js-yaml" "^3.13.1" 500 | "json-stable-stringify-without-jsonify" "^1.0.1" 501 | "levn" "^0.4.1" 502 | "lodash.merge" "^4.6.2" 503 | "minimatch" "^3.0.4" 504 | "natural-compare" "^1.4.0" 505 | "optionator" "^0.9.1" 506 | "progress" "^2.0.0" 507 | "regexpp" "^3.1.0" 508 | "semver" "^7.2.1" 509 | "strip-ansi" "^6.0.0" 510 | "strip-json-comments" "^3.1.0" 511 | "table" "^6.0.9" 512 | "text-table" "^0.2.0" 513 | "v8-compile-cache" "^2.0.3" 514 | 515 | "espree@^7.3.0", "espree@^7.3.1": 516 | "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" 517 | "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" 518 | "version" "7.3.1" 519 | dependencies: 520 | "acorn" "^7.4.0" 521 | "acorn-jsx" "^5.3.1" 522 | "eslint-visitor-keys" "^1.3.0" 523 | 524 | "esprima@^4.0.0": 525 | "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 526 | "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" 527 | "version" "4.0.1" 528 | 529 | "esquery@^1.4.0": 530 | "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" 531 | "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" 532 | "version" "1.4.0" 533 | dependencies: 534 | "estraverse" "^5.1.0" 535 | 536 | "esrecurse@^4.3.0": 537 | "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" 538 | "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 539 | "version" "4.3.0" 540 | dependencies: 541 | "estraverse" "^5.2.0" 542 | 543 | "estraverse@^4.1.1": 544 | "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 545 | "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 546 | "version" "4.3.0" 547 | 548 | "estraverse@^5.1.0": 549 | "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 550 | "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" 551 | "version" "5.2.0" 552 | 553 | "estraverse@^5.2.0": 554 | "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 555 | "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" 556 | "version" "5.2.0" 557 | 558 | "esutils@^2.0.2": 559 | "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 560 | "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 561 | "version" "2.0.3" 562 | 563 | "fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": 564 | "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 565 | "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 566 | "version" "3.1.3" 567 | 568 | "fast-glob@^3.1.1": 569 | "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" 570 | "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" 571 | "version" "3.2.7" 572 | dependencies: 573 | "@nodelib/fs.stat" "^2.0.2" 574 | "@nodelib/fs.walk" "^1.2.3" 575 | "glob-parent" "^5.1.2" 576 | "merge2" "^1.3.0" 577 | "micromatch" "^4.0.4" 578 | 579 | "fast-json-stable-stringify@^2.0.0": 580 | "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 581 | "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 582 | "version" "2.1.0" 583 | 584 | "fast-levenshtein@^2.0.6": 585 | "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 586 | "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 587 | "version" "2.0.6" 588 | 589 | "fastq@^1.6.0": 590 | "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" 591 | "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 592 | "version" "1.13.0" 593 | dependencies: 594 | "reusify" "^1.0.4" 595 | 596 | "file-entry-cache@^6.0.1": 597 | "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" 598 | "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 599 | "version" "6.0.1" 600 | dependencies: 601 | "flat-cache" "^3.0.4" 602 | 603 | "fill-range@^7.0.1": 604 | "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" 605 | "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 606 | "version" "7.0.1" 607 | dependencies: 608 | "to-regex-range" "^5.0.1" 609 | 610 | "flat-cache@^3.0.4": 611 | "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" 612 | "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 613 | "version" "3.0.4" 614 | dependencies: 615 | "flatted" "^3.1.0" 616 | "rimraf" "^3.0.2" 617 | 618 | "flatted@^3.1.0": 619 | "integrity" "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" 620 | "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" 621 | "version" "3.2.2" 622 | 623 | "fs.realpath@^1.0.0": 624 | "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 625 | "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 626 | "version" "1.0.0" 627 | 628 | "fstream@^1.0.12": 629 | "integrity" "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==" 630 | "resolved" "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" 631 | "version" "1.0.12" 632 | dependencies: 633 | "graceful-fs" "^4.1.2" 634 | "inherits" "~2.0.0" 635 | "mkdirp" ">=0.5 0" 636 | "rimraf" "2" 637 | 638 | "functional-red-black-tree@^1.0.1": 639 | "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" 640 | "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" 641 | "version" "1.0.1" 642 | 643 | "glob-parent@^5.1.2": 644 | "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" 645 | "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 646 | "version" "5.1.2" 647 | dependencies: 648 | "is-glob" "^4.0.1" 649 | 650 | "glob@^7.1.3", "glob@^7.1.6": 651 | "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" 652 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 653 | "version" "7.2.0" 654 | dependencies: 655 | "fs.realpath" "^1.0.0" 656 | "inflight" "^1.0.4" 657 | "inherits" "2" 658 | "minimatch" "^3.0.4" 659 | "once" "^1.3.0" 660 | "path-is-absolute" "^1.0.0" 661 | 662 | "globals@^13.6.0", "globals@^13.9.0": 663 | "integrity" "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==" 664 | "resolved" "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz" 665 | "version" "13.11.0" 666 | dependencies: 667 | "type-fest" "^0.20.2" 668 | 669 | "globby@^11.0.3": 670 | "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" 671 | "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" 672 | "version" "11.0.4" 673 | dependencies: 674 | "array-union" "^2.1.0" 675 | "dir-glob" "^3.0.1" 676 | "fast-glob" "^3.1.1" 677 | "ignore" "^5.1.4" 678 | "merge2" "^1.3.0" 679 | "slash" "^3.0.0" 680 | 681 | "graceful-fs@^4.1.2", "graceful-fs@^4.2.2": 682 | "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 683 | "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" 684 | "version" "4.2.8" 685 | 686 | "has-flag@^3.0.0": 687 | "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 688 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 689 | "version" "3.0.0" 690 | 691 | "has-flag@^4.0.0": 692 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 693 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 694 | "version" "4.0.0" 695 | 696 | "http-proxy-agent@^4.0.1": 697 | "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" 698 | "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" 699 | "version" "4.0.1" 700 | dependencies: 701 | "@tootallnate/once" "1" 702 | "agent-base" "6" 703 | "debug" "4" 704 | 705 | "https-proxy-agent@^5.0.0": 706 | "integrity" "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==" 707 | "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" 708 | "version" "5.0.0" 709 | dependencies: 710 | "agent-base" "6" 711 | "debug" "4" 712 | 713 | "ignore@^4.0.6": 714 | "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" 715 | "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" 716 | "version" "4.0.6" 717 | 718 | "ignore@^5.1.4", "ignore@^5.1.8": 719 | "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" 720 | "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" 721 | "version" "5.1.8" 722 | 723 | "import-fresh@^3.0.0", "import-fresh@^3.2.1": 724 | "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" 725 | "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 726 | "version" "3.3.0" 727 | dependencies: 728 | "parent-module" "^1.0.0" 729 | "resolve-from" "^4.0.0" 730 | 731 | "imurmurhash@^0.1.4": 732 | "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 733 | "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 734 | "version" "0.1.4" 735 | 736 | "inflight@^1.0.4": 737 | "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" 738 | "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 739 | "version" "1.0.6" 740 | dependencies: 741 | "once" "^1.3.0" 742 | "wrappy" "1" 743 | 744 | "inherits@~2.0.0", "inherits@~2.0.3", "inherits@2": 745 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 746 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 747 | "version" "2.0.4" 748 | 749 | "is-extglob@^2.1.1": 750 | "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 751 | "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 752 | "version" "2.1.1" 753 | 754 | "is-fullwidth-code-point@^3.0.0": 755 | "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 756 | "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 757 | "version" "3.0.0" 758 | 759 | "is-glob@^4.0.0", "is-glob@^4.0.1": 760 | "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" 761 | "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 762 | "version" "4.0.3" 763 | dependencies: 764 | "is-extglob" "^2.1.1" 765 | 766 | "is-number@^7.0.0": 767 | "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 768 | "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 769 | "version" "7.0.0" 770 | 771 | "isarray@~1.0.0": 772 | "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 773 | "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" 774 | "version" "1.0.0" 775 | 776 | "isexe@^2.0.0": 777 | "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 778 | "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 779 | "version" "2.0.0" 780 | 781 | "js-tokens@^4.0.0": 782 | "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 783 | "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 784 | "version" "4.0.0" 785 | 786 | "js-yaml@^3.13.1": 787 | "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" 788 | "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" 789 | "version" "3.14.1" 790 | dependencies: 791 | "argparse" "^1.0.7" 792 | "esprima" "^4.0.0" 793 | 794 | "json-schema-traverse@^0.4.1": 795 | "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 796 | "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 797 | "version" "0.4.1" 798 | 799 | "json-schema-traverse@^1.0.0": 800 | "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 801 | "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" 802 | "version" "1.0.0" 803 | 804 | "json-stable-stringify-without-jsonify@^1.0.1": 805 | "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 806 | "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 807 | "version" "1.0.1" 808 | 809 | "levn@^0.4.1": 810 | "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" 811 | "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 812 | "version" "0.4.1" 813 | dependencies: 814 | "prelude-ls" "^1.2.1" 815 | "type-check" "~0.4.0" 816 | 817 | "listenercount@~1.0.1": 818 | "integrity" "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" 819 | "resolved" "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" 820 | "version" "1.0.1" 821 | 822 | "lodash.clonedeep@^4.5.0": 823 | "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 824 | "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" 825 | "version" "4.5.0" 826 | 827 | "lodash.merge@^4.6.2": 828 | "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 829 | "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 830 | "version" "4.6.2" 831 | 832 | "lodash.truncate@^4.4.2": 833 | "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" 834 | "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" 835 | "version" "4.4.2" 836 | 837 | "lru-cache@^6.0.0": 838 | "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" 839 | "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 840 | "version" "6.0.0" 841 | dependencies: 842 | "yallist" "^4.0.0" 843 | 844 | "merge2@^1.3.0": 845 | "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 846 | "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 847 | "version" "1.4.1" 848 | 849 | "micromatch@^4.0.4": 850 | "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" 851 | "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" 852 | "version" "4.0.4" 853 | dependencies: 854 | "braces" "^3.0.1" 855 | "picomatch" "^2.2.3" 856 | 857 | "minimatch@^3.0.4": 858 | "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" 859 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" 860 | "version" "3.0.4" 861 | dependencies: 862 | "brace-expansion" "^1.1.7" 863 | 864 | "minimist@^1.2.5": 865 | "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 866 | "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" 867 | "version" "1.2.5" 868 | 869 | "mkdirp@>=0.5 0": 870 | "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" 871 | "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" 872 | "version" "0.5.5" 873 | dependencies: 874 | "minimist" "^1.2.5" 875 | 876 | "ms@2.1.2": 877 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 878 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 879 | "version" "2.1.2" 880 | 881 | "natural-compare@^1.4.0": 882 | "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" 883 | "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 884 | "version" "1.4.0" 885 | 886 | "once@^1.3.0": 887 | "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" 888 | "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 889 | "version" "1.4.0" 890 | dependencies: 891 | "wrappy" "1" 892 | 893 | "optionator@^0.9.1": 894 | "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" 895 | "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" 896 | "version" "0.9.1" 897 | dependencies: 898 | "deep-is" "^0.1.3" 899 | "fast-levenshtein" "^2.0.6" 900 | "levn" "^0.4.1" 901 | "prelude-ls" "^1.2.1" 902 | "type-check" "^0.4.0" 903 | "word-wrap" "^1.2.3" 904 | 905 | "parent-module@^1.0.0": 906 | "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" 907 | "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 908 | "version" "1.0.1" 909 | dependencies: 910 | "callsites" "^3.0.0" 911 | 912 | "path-is-absolute@^1.0.0": 913 | "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 914 | "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 915 | "version" "1.0.1" 916 | 917 | "path-key@^3.1.0": 918 | "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 919 | "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 920 | "version" "3.1.1" 921 | 922 | "path-type@^4.0.0": 923 | "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" 924 | "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 925 | "version" "4.0.0" 926 | 927 | "picomatch@^2.2.3": 928 | "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" 929 | "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" 930 | "version" "2.3.0" 931 | 932 | "prelude-ls@^1.2.1": 933 | "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" 934 | "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 935 | "version" "1.2.1" 936 | 937 | "prettier@^2.2.1": 938 | "integrity" "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==" 939 | "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz" 940 | "version" "2.4.1" 941 | 942 | "process-nextick-args@~2.0.0": 943 | "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 944 | "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" 945 | "version" "2.0.1" 946 | 947 | "progress@^2.0.0": 948 | "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" 949 | "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" 950 | "version" "2.0.3" 951 | 952 | "punycode@^2.1.0": 953 | "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 954 | "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 955 | "version" "2.1.1" 956 | 957 | "queue-microtask@^1.2.2": 958 | "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 959 | "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 960 | "version" "1.2.3" 961 | 962 | "readable-stream@^2.0.2", "readable-stream@~2.3.6": 963 | "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" 964 | "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" 965 | "version" "2.3.7" 966 | dependencies: 967 | "core-util-is" "~1.0.0" 968 | "inherits" "~2.0.3" 969 | "isarray" "~1.0.0" 970 | "process-nextick-args" "~2.0.0" 971 | "safe-buffer" "~5.1.1" 972 | "string_decoder" "~1.1.1" 973 | "util-deprecate" "~1.0.1" 974 | 975 | "regexpp@^3.1.0": 976 | "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" 977 | "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 978 | "version" "3.2.0" 979 | 980 | "require-from-string@^2.0.2": 981 | "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 982 | "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" 983 | "version" "2.0.2" 984 | 985 | "resolve-from@^4.0.0": 986 | "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" 987 | "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 988 | "version" "4.0.0" 989 | 990 | "reusify@^1.0.4": 991 | "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 992 | "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 993 | "version" "1.0.4" 994 | 995 | "rimraf@^3.0.2": 996 | "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" 997 | "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 998 | "version" "3.0.2" 999 | dependencies: 1000 | "glob" "^7.1.3" 1001 | 1002 | "rimraf@2": 1003 | "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" 1004 | "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" 1005 | "version" "2.7.1" 1006 | dependencies: 1007 | "glob" "^7.1.3" 1008 | 1009 | "run-parallel@^1.1.9": 1010 | "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" 1011 | "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1012 | "version" "1.2.0" 1013 | dependencies: 1014 | "queue-microtask" "^1.2.2" 1015 | 1016 | "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": 1017 | "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1018 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 1019 | "version" "5.1.2" 1020 | 1021 | "semver@^7.2.1", "semver@^7.3.5": 1022 | "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" 1023 | "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" 1024 | "version" "7.3.5" 1025 | dependencies: 1026 | "lru-cache" "^6.0.0" 1027 | 1028 | "setimmediate@~1.0.4": 1029 | "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 1030 | "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" 1031 | "version" "1.0.5" 1032 | 1033 | "shebang-command@^2.0.0": 1034 | "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" 1035 | "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1036 | "version" "2.0.0" 1037 | dependencies: 1038 | "shebang-regex" "^3.0.0" 1039 | 1040 | "shebang-regex@^3.0.0": 1041 | "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 1042 | "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1043 | "version" "3.0.0" 1044 | 1045 | "slash@^3.0.0": 1046 | "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" 1047 | "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1048 | "version" "3.0.0" 1049 | 1050 | "slice-ansi@^4.0.0": 1051 | "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" 1052 | "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" 1053 | "version" "4.0.0" 1054 | dependencies: 1055 | "ansi-styles" "^4.0.0" 1056 | "astral-regex" "^2.0.0" 1057 | "is-fullwidth-code-point" "^3.0.0" 1058 | 1059 | "sprintf-js@~1.0.2": 1060 | "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1061 | "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 1062 | "version" "1.0.3" 1063 | 1064 | "string_decoder@~1.1.1": 1065 | "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" 1066 | "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" 1067 | "version" "1.1.1" 1068 | dependencies: 1069 | "safe-buffer" "~5.1.0" 1070 | 1071 | "string-width@^4.2.3": 1072 | "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" 1073 | "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1074 | "version" "4.2.3" 1075 | dependencies: 1076 | "emoji-regex" "^8.0.0" 1077 | "is-fullwidth-code-point" "^3.0.0" 1078 | "strip-ansi" "^6.0.1" 1079 | 1080 | "strip-ansi@^6.0.0", "strip-ansi@^6.0.1": 1081 | "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" 1082 | "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1083 | "version" "6.0.1" 1084 | dependencies: 1085 | "ansi-regex" "^5.0.1" 1086 | 1087 | "strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": 1088 | "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 1089 | "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1090 | "version" "3.1.1" 1091 | 1092 | "supports-color@^5.3.0": 1093 | "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" 1094 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1095 | "version" "5.5.0" 1096 | dependencies: 1097 | "has-flag" "^3.0.0" 1098 | 1099 | "supports-color@^7.1.0": 1100 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 1101 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1102 | "version" "7.2.0" 1103 | dependencies: 1104 | "has-flag" "^4.0.0" 1105 | 1106 | "table@^6.0.9": 1107 | "integrity" "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==" 1108 | "resolved" "https://registry.npmjs.org/table/-/table-6.7.2.tgz" 1109 | "version" "6.7.2" 1110 | dependencies: 1111 | "ajv" "^8.0.1" 1112 | "lodash.clonedeep" "^4.5.0" 1113 | "lodash.truncate" "^4.4.2" 1114 | "slice-ansi" "^4.0.0" 1115 | "string-width" "^4.2.3" 1116 | "strip-ansi" "^6.0.1" 1117 | 1118 | "text-table@^0.2.0": 1119 | "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" 1120 | "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1121 | "version" "0.2.0" 1122 | 1123 | "to-regex-range@^5.0.1": 1124 | "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" 1125 | "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1126 | "version" "5.0.1" 1127 | dependencies: 1128 | "is-number" "^7.0.0" 1129 | 1130 | "traverse@>=0.3.0 <0.4": 1131 | "integrity" "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" 1132 | "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" 1133 | "version" "0.3.9" 1134 | 1135 | "tslib@^1.8.1": 1136 | "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1137 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 1138 | "version" "1.14.1" 1139 | 1140 | "tsutils@^3.21.0": 1141 | "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" 1142 | "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 1143 | "version" "3.21.0" 1144 | dependencies: 1145 | "tslib" "^1.8.1" 1146 | 1147 | "type-check@^0.4.0", "type-check@~0.4.0": 1148 | "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" 1149 | "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1150 | "version" "0.4.0" 1151 | dependencies: 1152 | "prelude-ls" "^1.2.1" 1153 | 1154 | "type-fest@^0.20.2": 1155 | "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" 1156 | "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1157 | "version" "0.20.2" 1158 | 1159 | "typescript@^4.1.3", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": 1160 | "integrity" "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==" 1161 | "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz" 1162 | "version" "4.4.3" 1163 | 1164 | "unzipper@^0.10.11": 1165 | "integrity" "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==" 1166 | "resolved" "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" 1167 | "version" "0.10.11" 1168 | dependencies: 1169 | "big-integer" "^1.6.17" 1170 | "binary" "~0.3.0" 1171 | "bluebird" "~3.4.1" 1172 | "buffer-indexof-polyfill" "~1.0.0" 1173 | "duplexer2" "~0.1.4" 1174 | "fstream" "^1.0.12" 1175 | "graceful-fs" "^4.2.2" 1176 | "listenercount" "~1.0.1" 1177 | "readable-stream" "~2.3.6" 1178 | "setimmediate" "~1.0.4" 1179 | 1180 | "uri-js@^4.2.2": 1181 | "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" 1182 | "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1183 | "version" "4.4.1" 1184 | dependencies: 1185 | "punycode" "^2.1.0" 1186 | 1187 | "util-deprecate@~1.0.1": 1188 | "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1189 | "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1190 | "version" "1.0.2" 1191 | 1192 | "v8-compile-cache@^2.0.3": 1193 | "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" 1194 | "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" 1195 | "version" "2.3.0" 1196 | 1197 | "vscode-test@^1.5.0": 1198 | "integrity" "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==" 1199 | "resolved" "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz" 1200 | "version" "1.6.1" 1201 | dependencies: 1202 | "http-proxy-agent" "^4.0.1" 1203 | "https-proxy-agent" "^5.0.0" 1204 | "rimraf" "^3.0.2" 1205 | "unzipper" "^0.10.11" 1206 | 1207 | "which@^2.0.1": 1208 | "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" 1209 | "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1210 | "version" "2.0.2" 1211 | dependencies: 1212 | "isexe" "^2.0.0" 1213 | 1214 | "word-wrap@^1.2.3": 1215 | "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 1216 | "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" 1217 | "version" "1.2.3" 1218 | 1219 | "wrappy@1": 1220 | "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1221 | "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1222 | "version" "1.0.2" 1223 | 1224 | "yallist@^4.0.0": 1225 | "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1226 | "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1227 | "version" "4.0.0" 1228 | --------------------------------------------------------------------------------