├── .eslintrc.json ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── build └── node-extension.webpack.config.js ├── images └── icon.png ├── package-lock.json ├── package.json ├── src ├── common │ └── css-class-definition.ts ├── extension.ts ├── fetcher.ts ├── notifier.ts ├── parse-engine-gateway.ts ├── parse-engines │ ├── common │ │ ├── css-class-extractor.ts │ │ ├── parse-engine.ts │ │ └── simple-text-document.ts │ ├── parse-engine-registry.ts │ └── types │ │ ├── css-parse-engine.ts │ │ └── html-parse-engine.ts └── test │ ├── runTest.ts │ └── suite │ ├── extension.test.ts │ └── index.ts ├── tsconfig.json └── vsc-extension-quickstart.md /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | -------------------------------------------------------------------------------- /.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 | "eamodio.tsl-problem-matcher" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | { 6 | "name": "Launch Extension", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], 11 | "stopOnEntry": false, 12 | "sourceMaps": true, 13 | "preLaunchTask": "npm", 14 | "outFiles": [ 15 | "${workspaceFolder}/dist/**/*.js" 16 | ] 17 | }, 18 | { 19 | "name": "Launch Tests", 20 | "type": "extensionHost", 21 | "request": "launch", 22 | "runtimeExecutable": "${execPath}", 23 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/suite/index" ], 24 | "stopOnEntry": false, 25 | "sourceMaps": true, 26 | "outFiles": [ 27 | "${workspaceRoot}/out/test/**/*.js" 28 | ] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /.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": [ 10 | "$ts-webpack-watch", 11 | "$tslint-webpack-watch" 12 | ], 13 | "isBackground": true, 14 | "presentation": { 15 | "reveal": "never" 16 | }, 17 | "group": { 18 | "kind": "build", 19 | "isDefault": true 20 | } 21 | }, 22 | { 23 | "type": "npm", 24 | "script": "test-watch", 25 | "problemMatcher": "$tsc-watch", 26 | "isBackground": true, 27 | "presentation": { 28 | "reveal": "never" 29 | }, 30 | "group": "build" 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/** 4 | src/** 5 | .gitignore 6 | .yarnrc 7 | vsc-extension-quickstart.md 8 | **/tsconfig.json 9 | **/.eslintrc.json 10 | **/*.map 11 | **/*.ts 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 1.20 (Dec 19, 2020) 2 | * Settings to allow users to specify which language modes will have autocompletion; 3 | * Fix interpretation of classes defined inside media queries. 4 | 5 | ### 1.19 (May 18, 2019) 6 | * Fix Emmet completion which was not enabled at startup when the configuration was set. 7 | 8 | ### 1.18 (Jan 25, 2019) 9 | * Added support for Django template (django-html). 10 | 11 | ### 1.17.1 (Fev 18, 2018) 12 | * Added support for "class" in TypeScript React, JavaScript and JavaScript React language modes. Previously only "className" was supported; 13 | * Added support for Emmet. 14 | 15 | ### 1.16.2 (Fev 10, 2018) 16 | * Workaround for a bug in the VS Code API. 17 | 18 | ### 1.16.1 (Jan 15, 2018) 19 | * Fix mistake in production build. 20 | 21 | ### 1.16.0 (Jan 14, 2018) 22 | * Automatic re-caching when the extension's User Settings change. 23 | 24 | ### 1.15.0 (Dec 27, 2017) 25 | * Added User Settings to consider or exclude folders and files from the caching process. 26 | 27 | ### 1.14.0 (Nov 10, 2017) 28 | * Added support for Tailwind CSS's @apply function in CSS, SASS and SCSS. 29 | 30 | ### 1.13.0 (Nov 6, 2017) 31 | * Added support for Laravel (Blade). 32 | 33 | ### 1.12.0 (Out 31, 2017) 34 | * Added the "multi-root ready" keyword, it was a request from the VS Code team. 35 | 36 | ### 1.11.0 (Out 14, 2017) 37 | * Fix error that occurs when you try to get completion and the extension is loading; 38 | * Add limitations to the concurrency in resource-intensive operations; 39 | * Add progress indicator, useful for large projects; 40 | * The `node_modules` will not be ignored. With those changes, it seems that there's no need to ignore it. 41 | 42 | ### 1.10.2 (Out 12, 2017) 43 | * Temporary fix to prevent high CPU usage. The `node_modules` will be ignored in the search for CSS class definitions. [Link to the issue containing detailed information.](https://github.com/Microsoft/vscode/issues/35996); 44 | * Fix possibility to run the caching process multiple times simultaneously. 45 | 46 | ### 1.10.1 (Out 12, 2017) 47 | * Temporary fix to prevent high CPU usage. The `node_modules` will be ignored in the search for CSS class definitions. [Link to the issue containing detailed information.](https://github.com/Microsoft/vscode/issues/35996) 48 | 49 | ### 1.10.0 (Set 9, 2017) 50 | * Added support for EJS. 51 | 52 | ### 1.9.0 (Ago 27, 2017) 53 | * Added support for Handlebars. 54 | 55 | ### 1.8.1 (Ago 20, 2017) 56 | * Small parsing related fix. 57 | 58 | ### 1.8.0 (Jul 22, 2017) 59 | * Added support for Embedded Ruby (.html.erb). 60 | 61 | ### 1.7.0 (Jun 9, 2017) 62 | * Added support for Markdown. 63 | 64 | ### 1.6.0 (Jun 4, 2017) 65 | * Added support for Twig. 66 | 67 | ### 1.5.0 (Jun 4, 2017) 68 | * Added support for external stylesheets referecend through `link` elements in HTML files. 69 | 70 | ### 1.4.0 (Jun 3, 2017) 71 | * Added support for Razor and PHP. 72 | 73 | ### 1.3.0 (Jun 1, 2017) 74 | * Added support for Vue Single File Components. Thanks to github.com/bypatryk. 75 | 76 | ### 1.2.1 (Mai 28, 2017) 77 | * Rolling back a change that was causing node_modules to be ignored. 78 | 79 | ### 1.2.0 (Mai 9, 2017) 80 | * Now completion gets triggered when you open single quotes, double quotes or types a space character". Thanks to github.com/allevaton; 81 | * Internal refactors. Thanks to github.com/allevaton. 82 | 83 | ### 1.1.0 (Apr 14, 2017) 84 | * Added support for React's `className` attribute in JavaScript, JavaScript React (.jsx) and TypeScript React files (.tsx). Thanks to github.com/JanneHarju. 85 | 86 | ### 1.0.3 (Sep 27, 2016) 87 | * Fixed error showing up whenever there were no workspace opened. 88 | 89 | ### 1.0.2 (Sep 17, 2016) 90 | * Refactored to add proper asynchronous parallel parsing of the documents. 91 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | You can request new features and/or contribute to the extension development on its repository on GitHub. Look for an issue you're interested in working on, comment on it to let me know you're working on it and submit your pull request! :D 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Igor H. Vieira 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 | # IntelliSense for CSS class names in HTML 2 | 3 | A Visual Studio Code extension that provides CSS class name completion for the HTML `class` attribute based on the definitions found in your workspace or external files referenced through the `link` element. 4 | 5 | ![](https://i.imgur.com/5crMfTj.gif) 6 | 7 | ## Features 8 | * Gives you autocompletion for CSS class definitions that can be found in your workspace (defined in CSS files or the in the file types listed in the Supported Language Modes section); 9 | * Supports external stylesheets referenced through `link` elements in HTML files; 10 | * Command to manually re-cache the class definitions used in the autocompletion; 11 | * User Settings to override which folders and files should be considered or excluded from the caching process. 12 | 13 | ## Supported Language Modes 14 | * HTML 15 | * Razor 16 | * PHP 17 | * Laravel (Blade) 18 | * JavaScript 19 | * JavaScript React (.jsx) 20 | * TypeScript React (.tsx) 21 | * Vue (.vue) [requires [octref.vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur)] 22 | * Twig 23 | * Markdown (.md) 24 | * Embedded Ruby (.html.erb) [requires [rebornix.Ruby](https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby)] 25 | * Handlebars 26 | * EJS (.ejs) 27 | * Django template (django-html) 28 | 29 | ## Extended Support for Other Language Modes 30 | 31 | It's possible to specify which language modes will have autocompletion. There are three settings for this feature: 32 | * `html-css-class-completion.HTMLLanguages` is for language modes based on HTML, the ones you have the `class` attribute; 33 | * `html-css-class-completion.CSSLanguages` currently is for languages like CSS, Sass and Scss, this one is not very useful right now because it only supports the `@apply` function; 34 | * `html-css-class-completion.JavaScriptLanguages` is for JavaScript based languages supporting the `class` or `className` attribute. 35 | 36 | The language modes listed in the previous section are already defined as default values in these settings, and you can add new ones or remove the already defined ones as necessary. 37 | 38 | ## Specific Support 39 | * "@apply" directive in CSS, SASS and SCSS Files for [Tailwind CSS](https://tailwindcss.com); 40 | * "className" and "class" in TypeScript React, JavaScript and JavaScript React language modes; 41 | * Emmet abbreviations support triggered by typing a "." (comes disabled by default, check the User Settings topic for more information). 42 | 43 | ## Contributions 44 | You can request new features and contribute to the extension development on its [repository on GitHub](https://github.com/Zignd/HTML-CSS-Class-Completion/issues). Look for an issue you're interested in working on, comment on it to let me know you're working on it and submit your pull request! :D 45 | 46 | ## What's new in version 1.20 (Dec 19, 2020) 47 | * Settings to allow users to specify which language modes will have autocompletion; 48 | * Fix interpretation of classes defined inside media queries. 49 | 50 | Check out the [changelog](https://github.com/zignd/HTML-CSS-Class-Completion/blob/master/CHANGELOG.md) for the current and previous updates. 51 | 52 | ## Usage 53 | If there are HTML or JS files on your workspace, the extension automatically starts and looks for CSS class definitions. In case new CSS classes are defined, or new CSS files are added to the workspace, and you also want auto-completion for them, just hit the lightning icon on the status bar. Also, you can execute the command by pressing `Ctrl+Shift+P`(`Cmd+Shift+P` for Mac) and then typing "Cache CSS class definitions." 54 | 55 | ### More User Settings 56 | The extension supports a few user settings, changes to these settings will be automatically recognized and the caching process will be re-executed. 57 | 58 | #### Folders and Files 59 | 60 | You can change the folders and files the extension will consider or exclude during the caching process by setting the following user settings: 61 | 62 | * `"html-css-class-completion.includeGlobPattern"` (default: `"**/*.{css,html}"`) 63 | * `"html-css-class-completion.excludeGlobPattern"` (default: `""`) 64 | 65 | #### Emmet 66 | 67 | Emmet support comes disabled by default, the reason behind this choice is because it the current implementation simply triggers completion when you type a "." (period) and this behavior might be considered a little annoying, but it might change in the future. 68 | 69 | Currently it supports the following languages (those are [language identifier](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers)): "html", "razor", "php", "blade", "vue", "twig", "markdown", "erb", "handlebars", "ejs", "typescriptreact", "javascript", "javascriptreact". 70 | 71 | * `"html-css-class-completion.enableEmmetSupport"` (default: `false`) 72 | 73 | ![](https://i.imgur.com/O7NjEUW.gif) 74 | ![](https://i.imgur.com/uyiXqMb.gif) 75 | -------------------------------------------------------------------------------- /build/node-extension.webpack.config.js: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | 3 | 'use strict'; 4 | 5 | const path = require('path'); 6 | 7 | /**@type {import('webpack').Configuration}*/ 8 | const config = { 9 | target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ 10 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 11 | 12 | entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ 13 | output: { 14 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ 15 | path: path.resolve(__dirname, '..', 'dist'), 16 | filename: 'extension.js', 17 | libraryTarget: 'commonjs2' 18 | }, 19 | devtool: 'nosources-source-map', 20 | externals: { 21 | vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ 22 | }, 23 | resolve: { 24 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader 25 | extensions: ['.ts', '.js'] 26 | }, 27 | module: { 28 | rules: [ 29 | { 30 | test: /\.ts$/, 31 | exclude: /node_modules/, 32 | use: [ 33 | { 34 | loader: 'ts-loader' 35 | } 36 | ] 37 | } 38 | ] 39 | } 40 | }; 41 | module.exports = config; -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zignd/HTML-CSS-Class-Completion/f6bdfa012b5c6f513d7ba29dc2b22c5cdcbc96a1/images/icon.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "html-css-class-completion", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.12.11", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 10 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.12.11", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 19 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.4", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "chalk": { 34 | "version": "2.4.2", 35 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 36 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 37 | "dev": true, 38 | "requires": { 39 | "ansi-styles": "^3.2.1", 40 | "escape-string-regexp": "^1.0.5", 41 | "supports-color": "^5.3.0" 42 | } 43 | } 44 | } 45 | }, 46 | "@eslint/eslintrc": { 47 | "version": "0.2.2", 48 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", 49 | "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", 50 | "dev": true, 51 | "requires": { 52 | "ajv": "^6.12.4", 53 | "debug": "^4.1.1", 54 | "espree": "^7.3.0", 55 | "globals": "^12.1.0", 56 | "ignore": "^4.0.6", 57 | "import-fresh": "^3.2.1", 58 | "js-yaml": "^3.13.1", 59 | "lodash": "^4.17.19", 60 | "minimatch": "^3.0.4", 61 | "strip-json-comments": "^3.1.1" 62 | }, 63 | "dependencies": { 64 | "ignore": { 65 | "version": "4.0.6", 66 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 67 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 68 | "dev": true 69 | } 70 | } 71 | }, 72 | "@nodelib/fs.scandir": { 73 | "version": "2.1.3", 74 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", 75 | "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", 76 | "dev": true, 77 | "requires": { 78 | "@nodelib/fs.stat": "2.0.3", 79 | "run-parallel": "^1.1.9" 80 | } 81 | }, 82 | "@nodelib/fs.stat": { 83 | "version": "2.0.3", 84 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", 85 | "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", 86 | "dev": true 87 | }, 88 | "@nodelib/fs.walk": { 89 | "version": "1.2.4", 90 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", 91 | "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", 92 | "dev": true, 93 | "requires": { 94 | "@nodelib/fs.scandir": "2.1.3", 95 | "fastq": "^1.6.0" 96 | } 97 | }, 98 | "@types/bluebird": { 99 | "version": "3.5.33", 100 | "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.33.tgz", 101 | "integrity": "sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ==", 102 | "dev": true 103 | }, 104 | "@types/caseless": { 105 | "version": "0.12.2", 106 | "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", 107 | "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", 108 | "dev": true 109 | }, 110 | "@types/css": { 111 | "version": "0.0.31", 112 | "resolved": "https://registry.npmjs.org/@types/css/-/css-0.0.31.tgz", 113 | "integrity": "sha512-Xt3xp8o0zueqrdIkAOO5gy5YNs+jYfmIUPeoeKiwrcmCRXuNWkIgR2Ph6vHuVfi1y6c9Tx214EQBWPEkU97djw==", 114 | "dev": true 115 | }, 116 | "@types/domutils": { 117 | "version": "1.7.3", 118 | "resolved": "https://registry.npmjs.org/@types/domutils/-/domutils-1.7.3.tgz", 119 | "integrity": "sha512-EucnS75OnnEdypNt+UpARisSF8eJBq4no+aVOis3Bs5kyABDXm1hEDv6jJxcMJPjR+a2YCrEANaW+BMT2QVG2Q==", 120 | "dev": true, 121 | "requires": { 122 | "domhandler": "^2.4.0" 123 | }, 124 | "dependencies": { 125 | "domelementtype": { 126 | "version": "1.3.1", 127 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 128 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 129 | "dev": true 130 | }, 131 | "domhandler": { 132 | "version": "2.4.2", 133 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 134 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 135 | "dev": true, 136 | "requires": { 137 | "domelementtype": "1" 138 | } 139 | } 140 | } 141 | }, 142 | "@types/eslint": { 143 | "version": "7.2.6", 144 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", 145 | "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", 146 | "dev": true, 147 | "requires": { 148 | "@types/estree": "*", 149 | "@types/json-schema": "*" 150 | } 151 | }, 152 | "@types/eslint-scope": { 153 | "version": "3.7.0", 154 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", 155 | "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", 156 | "dev": true, 157 | "requires": { 158 | "@types/eslint": "*", 159 | "@types/estree": "*" 160 | } 161 | }, 162 | "@types/estree": { 163 | "version": "0.0.45", 164 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", 165 | "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", 166 | "dev": true 167 | }, 168 | "@types/glob": { 169 | "version": "7.1.3", 170 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", 171 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", 172 | "dev": true, 173 | "requires": { 174 | "@types/minimatch": "*", 175 | "@types/node": "*" 176 | } 177 | }, 178 | "@types/htmlparser2": { 179 | "version": "3.10.2", 180 | "resolved": "https://registry.npmjs.org/@types/htmlparser2/-/htmlparser2-3.10.2.tgz", 181 | "integrity": "sha512-81vjuO800UMoHjYbCbqtBmfC3iCsrROKpqndo0acKiN6k/cpW+YOw9FzRP0ghujHeUNCOox2AQPrrMy6+j5UpQ==", 182 | "dev": true, 183 | "requires": { 184 | "@types/domutils": "*", 185 | "@types/node": "*", 186 | "domhandler": "^2.4.0" 187 | }, 188 | "dependencies": { 189 | "domelementtype": { 190 | "version": "1.3.1", 191 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 192 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 193 | "dev": true 194 | }, 195 | "domhandler": { 196 | "version": "2.4.2", 197 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 198 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 199 | "dev": true, 200 | "requires": { 201 | "domelementtype": "1" 202 | } 203 | } 204 | } 205 | }, 206 | "@types/json-schema": { 207 | "version": "7.0.6", 208 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", 209 | "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", 210 | "dev": true 211 | }, 212 | "@types/lodash": { 213 | "version": "4.14.165", 214 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.165.tgz", 215 | "integrity": "sha512-tjSSOTHhI5mCHTy/OOXYIhi2Wt1qcbHmuXD1Ha7q70CgI/I71afO4XtLb/cVexki1oVYchpul/TOuu3Arcdxrg==", 216 | "dev": true 217 | }, 218 | "@types/minimatch": { 219 | "version": "3.0.3", 220 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 221 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 222 | "dev": true 223 | }, 224 | "@types/mocha": { 225 | "version": "8.2.0", 226 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.0.tgz", 227 | "integrity": "sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==", 228 | "dev": true 229 | }, 230 | "@types/node": { 231 | "version": "12.19.9", 232 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.9.tgz", 233 | "integrity": "sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q==", 234 | "dev": true 235 | }, 236 | "@types/request": { 237 | "version": "2.48.5", 238 | "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", 239 | "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", 240 | "dev": true, 241 | "requires": { 242 | "@types/caseless": "*", 243 | "@types/node": "*", 244 | "@types/tough-cookie": "*", 245 | "form-data": "^2.5.0" 246 | }, 247 | "dependencies": { 248 | "form-data": { 249 | "version": "2.5.1", 250 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 251 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 252 | "dev": true, 253 | "requires": { 254 | "asynckit": "^0.4.0", 255 | "combined-stream": "^1.0.6", 256 | "mime-types": "^2.1.12" 257 | } 258 | } 259 | } 260 | }, 261 | "@types/request-promise": { 262 | "version": "4.1.47", 263 | "resolved": "https://registry.npmjs.org/@types/request-promise/-/request-promise-4.1.47.tgz", 264 | "integrity": "sha512-eRSZhAS8SMsrWOM8vbhxFGVZhTbWSJvaRKyufJTdIf4gscUouQvOBlfotPSPHbMR3S7kfkyKbhb1SWPmQdy3KQ==", 265 | "dev": true, 266 | "requires": { 267 | "@types/bluebird": "*", 268 | "@types/request": "*" 269 | } 270 | }, 271 | "@types/tough-cookie": { 272 | "version": "4.0.0", 273 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", 274 | "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", 275 | "dev": true 276 | }, 277 | "@types/verror": { 278 | "version": "1.10.4", 279 | "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.4.tgz", 280 | "integrity": "sha512-OjJdqx6QlbyZw9LShPwRW+Kmiegeg3eWNI41MQQKaG3vjdU2L9SRElntM51HmHBY1cu7izxQJ1lMYioQh3XMBg==", 281 | "dev": true 282 | }, 283 | "@types/vscode": { 284 | "version": "1.52.0", 285 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.52.0.tgz", 286 | "integrity": "sha512-Kt3bvWzAvvF/WH9YEcrCICDp0Z7aHhJGhLJ1BxeyNP6yRjonWqWnAIh35/pXAjswAnWOABrYlF7SwXR9+1nnLA==", 287 | "dev": true 288 | }, 289 | "@typescript-eslint/eslint-plugin": { 290 | "version": "4.10.0", 291 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.10.0.tgz", 292 | "integrity": "sha512-h6/V46o6aXpKRlarP1AiJEXuCJ7cMQdlpfMDrcllIgX3dFkLwEBTXAoNP98ZoOmqd1xvymMVRAI4e7yVvlzWEg==", 293 | "dev": true, 294 | "requires": { 295 | "@typescript-eslint/experimental-utils": "4.10.0", 296 | "@typescript-eslint/scope-manager": "4.10.0", 297 | "debug": "^4.1.1", 298 | "functional-red-black-tree": "^1.0.1", 299 | "regexpp": "^3.0.0", 300 | "semver": "^7.3.2", 301 | "tsutils": "^3.17.1" 302 | } 303 | }, 304 | "@typescript-eslint/experimental-utils": { 305 | "version": "4.10.0", 306 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.10.0.tgz", 307 | "integrity": "sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw==", 308 | "dev": true, 309 | "requires": { 310 | "@types/json-schema": "^7.0.3", 311 | "@typescript-eslint/scope-manager": "4.10.0", 312 | "@typescript-eslint/types": "4.10.0", 313 | "@typescript-eslint/typescript-estree": "4.10.0", 314 | "eslint-scope": "^5.0.0", 315 | "eslint-utils": "^2.0.0" 316 | } 317 | }, 318 | "@typescript-eslint/parser": { 319 | "version": "4.10.0", 320 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.10.0.tgz", 321 | "integrity": "sha512-amBvUUGBMadzCW6c/qaZmfr3t9PyevcSWw7hY2FuevdZVp5QPw/K76VSQ5Sw3BxlgYCHZcK6DjIhSZK0PQNsQg==", 322 | "dev": true, 323 | "requires": { 324 | "@typescript-eslint/scope-manager": "4.10.0", 325 | "@typescript-eslint/types": "4.10.0", 326 | "@typescript-eslint/typescript-estree": "4.10.0", 327 | "debug": "^4.1.1" 328 | } 329 | }, 330 | "@typescript-eslint/scope-manager": { 331 | "version": "4.10.0", 332 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.10.0.tgz", 333 | "integrity": "sha512-WAPVw35P+fcnOa8DEic0tQUhoJJsgt+g6DEcz257G7vHFMwmag58EfowdVbiNcdfcV27EFR0tUBVXkDoIvfisQ==", 334 | "dev": true, 335 | "requires": { 336 | "@typescript-eslint/types": "4.10.0", 337 | "@typescript-eslint/visitor-keys": "4.10.0" 338 | } 339 | }, 340 | "@typescript-eslint/types": { 341 | "version": "4.10.0", 342 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.10.0.tgz", 343 | "integrity": "sha512-+dt5w1+Lqyd7wIPMa4XhJxUuE8+YF+vxQ6zxHyhLGHJjHiunPf0wSV8LtQwkpmAsRi1lEOoOIR30FG5S2HS33g==", 344 | "dev": true 345 | }, 346 | "@typescript-eslint/typescript-estree": { 347 | "version": "4.10.0", 348 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.10.0.tgz", 349 | "integrity": "sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g==", 350 | "dev": true, 351 | "requires": { 352 | "@typescript-eslint/types": "4.10.0", 353 | "@typescript-eslint/visitor-keys": "4.10.0", 354 | "debug": "^4.1.1", 355 | "globby": "^11.0.1", 356 | "is-glob": "^4.0.1", 357 | "lodash": "^4.17.15", 358 | "semver": "^7.3.2", 359 | "tsutils": "^3.17.1" 360 | } 361 | }, 362 | "@typescript-eslint/visitor-keys": { 363 | "version": "4.10.0", 364 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.10.0.tgz", 365 | "integrity": "sha512-hPyz5qmDMuZWFtHZkjcCpkAKHX8vdu1G3YsCLEd25ryZgnJfj6FQuJ5/O7R+dB1ueszilJmAFMtlU4CA6se3Jg==", 366 | "dev": true, 367 | "requires": { 368 | "@typescript-eslint/types": "4.10.0", 369 | "eslint-visitor-keys": "^2.0.0" 370 | } 371 | }, 372 | "@ungap/promise-all-settled": { 373 | "version": "1.1.2", 374 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 375 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 376 | "dev": true 377 | }, 378 | "@webassemblyjs/ast": { 379 | "version": "1.9.1", 380 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz", 381 | "integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==", 382 | "dev": true, 383 | "requires": { 384 | "@webassemblyjs/helper-module-context": "1.9.1", 385 | "@webassemblyjs/helper-wasm-bytecode": "1.9.1", 386 | "@webassemblyjs/wast-parser": "1.9.1" 387 | } 388 | }, 389 | "@webassemblyjs/floating-point-hex-parser": { 390 | "version": "1.9.1", 391 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz", 392 | "integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==", 393 | "dev": true 394 | }, 395 | "@webassemblyjs/helper-api-error": { 396 | "version": "1.9.1", 397 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz", 398 | "integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==", 399 | "dev": true 400 | }, 401 | "@webassemblyjs/helper-buffer": { 402 | "version": "1.9.1", 403 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz", 404 | "integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==", 405 | "dev": true 406 | }, 407 | "@webassemblyjs/helper-code-frame": { 408 | "version": "1.9.1", 409 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz", 410 | "integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==", 411 | "dev": true, 412 | "requires": { 413 | "@webassemblyjs/wast-printer": "1.9.1" 414 | } 415 | }, 416 | "@webassemblyjs/helper-fsm": { 417 | "version": "1.9.1", 418 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz", 419 | "integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==", 420 | "dev": true 421 | }, 422 | "@webassemblyjs/helper-module-context": { 423 | "version": "1.9.1", 424 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz", 425 | "integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==", 426 | "dev": true, 427 | "requires": { 428 | "@webassemblyjs/ast": "1.9.1" 429 | } 430 | }, 431 | "@webassemblyjs/helper-wasm-bytecode": { 432 | "version": "1.9.1", 433 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz", 434 | "integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==", 435 | "dev": true 436 | }, 437 | "@webassemblyjs/helper-wasm-section": { 438 | "version": "1.9.1", 439 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz", 440 | "integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==", 441 | "dev": true, 442 | "requires": { 443 | "@webassemblyjs/ast": "1.9.1", 444 | "@webassemblyjs/helper-buffer": "1.9.1", 445 | "@webassemblyjs/helper-wasm-bytecode": "1.9.1", 446 | "@webassemblyjs/wasm-gen": "1.9.1" 447 | } 448 | }, 449 | "@webassemblyjs/ieee754": { 450 | "version": "1.9.1", 451 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz", 452 | "integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==", 453 | "dev": true, 454 | "requires": { 455 | "@xtuc/ieee754": "^1.2.0" 456 | } 457 | }, 458 | "@webassemblyjs/leb128": { 459 | "version": "1.9.1", 460 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz", 461 | "integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==", 462 | "dev": true, 463 | "requires": { 464 | "@xtuc/long": "4.2.2" 465 | } 466 | }, 467 | "@webassemblyjs/utf8": { 468 | "version": "1.9.1", 469 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz", 470 | "integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==", 471 | "dev": true 472 | }, 473 | "@webassemblyjs/wasm-edit": { 474 | "version": "1.9.1", 475 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz", 476 | "integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==", 477 | "dev": true, 478 | "requires": { 479 | "@webassemblyjs/ast": "1.9.1", 480 | "@webassemblyjs/helper-buffer": "1.9.1", 481 | "@webassemblyjs/helper-wasm-bytecode": "1.9.1", 482 | "@webassemblyjs/helper-wasm-section": "1.9.1", 483 | "@webassemblyjs/wasm-gen": "1.9.1", 484 | "@webassemblyjs/wasm-opt": "1.9.1", 485 | "@webassemblyjs/wasm-parser": "1.9.1", 486 | "@webassemblyjs/wast-printer": "1.9.1" 487 | } 488 | }, 489 | "@webassemblyjs/wasm-gen": { 490 | "version": "1.9.1", 491 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz", 492 | "integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==", 493 | "dev": true, 494 | "requires": { 495 | "@webassemblyjs/ast": "1.9.1", 496 | "@webassemblyjs/helper-wasm-bytecode": "1.9.1", 497 | "@webassemblyjs/ieee754": "1.9.1", 498 | "@webassemblyjs/leb128": "1.9.1", 499 | "@webassemblyjs/utf8": "1.9.1" 500 | } 501 | }, 502 | "@webassemblyjs/wasm-opt": { 503 | "version": "1.9.1", 504 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz", 505 | "integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==", 506 | "dev": true, 507 | "requires": { 508 | "@webassemblyjs/ast": "1.9.1", 509 | "@webassemblyjs/helper-buffer": "1.9.1", 510 | "@webassemblyjs/wasm-gen": "1.9.1", 511 | "@webassemblyjs/wasm-parser": "1.9.1" 512 | } 513 | }, 514 | "@webassemblyjs/wasm-parser": { 515 | "version": "1.9.1", 516 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz", 517 | "integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==", 518 | "dev": true, 519 | "requires": { 520 | "@webassemblyjs/ast": "1.9.1", 521 | "@webassemblyjs/helper-api-error": "1.9.1", 522 | "@webassemblyjs/helper-wasm-bytecode": "1.9.1", 523 | "@webassemblyjs/ieee754": "1.9.1", 524 | "@webassemblyjs/leb128": "1.9.1", 525 | "@webassemblyjs/utf8": "1.9.1" 526 | } 527 | }, 528 | "@webassemblyjs/wast-parser": { 529 | "version": "1.9.1", 530 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz", 531 | "integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==", 532 | "dev": true, 533 | "requires": { 534 | "@webassemblyjs/ast": "1.9.1", 535 | "@webassemblyjs/floating-point-hex-parser": "1.9.1", 536 | "@webassemblyjs/helper-api-error": "1.9.1", 537 | "@webassemblyjs/helper-code-frame": "1.9.1", 538 | "@webassemblyjs/helper-fsm": "1.9.1", 539 | "@xtuc/long": "4.2.2" 540 | } 541 | }, 542 | "@webassemblyjs/wast-printer": { 543 | "version": "1.9.1", 544 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz", 545 | "integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==", 546 | "dev": true, 547 | "requires": { 548 | "@webassemblyjs/ast": "1.9.1", 549 | "@webassemblyjs/wast-parser": "1.9.1", 550 | "@xtuc/long": "4.2.2" 551 | } 552 | }, 553 | "@webpack-cli/info": { 554 | "version": "1.1.0", 555 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", 556 | "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", 557 | "dev": true, 558 | "requires": { 559 | "envinfo": "^7.7.3" 560 | } 561 | }, 562 | "@webpack-cli/serve": { 563 | "version": "1.1.0", 564 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", 565 | "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", 566 | "dev": true 567 | }, 568 | "@xtuc/ieee754": { 569 | "version": "1.2.0", 570 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 571 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 572 | "dev": true 573 | }, 574 | "@xtuc/long": { 575 | "version": "4.2.2", 576 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 577 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 578 | "dev": true 579 | }, 580 | "acorn": { 581 | "version": "7.4.1", 582 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 583 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 584 | "dev": true 585 | }, 586 | "acorn-jsx": { 587 | "version": "5.3.1", 588 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", 589 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", 590 | "dev": true 591 | }, 592 | "agent-base": { 593 | "version": "4.3.0", 594 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 595 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 596 | "dev": true, 597 | "requires": { 598 | "es6-promisify": "^5.0.0" 599 | } 600 | }, 601 | "ajv": { 602 | "version": "6.12.6", 603 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 604 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 605 | "requires": { 606 | "fast-deep-equal": "^3.1.1", 607 | "fast-json-stable-stringify": "^2.0.0", 608 | "json-schema-traverse": "^0.4.1", 609 | "uri-js": "^4.2.2" 610 | } 611 | }, 612 | "ajv-keywords": { 613 | "version": "3.5.2", 614 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 615 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 616 | "dev": true 617 | }, 618 | "ansi-colors": { 619 | "version": "4.1.1", 620 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 621 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 622 | "dev": true 623 | }, 624 | "ansi-regex": { 625 | "version": "5.0.0", 626 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 627 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 628 | "dev": true 629 | }, 630 | "ansi-styles": { 631 | "version": "3.2.1", 632 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 633 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 634 | "dev": true, 635 | "requires": { 636 | "color-convert": "^1.9.0" 637 | } 638 | }, 639 | "anymatch": { 640 | "version": "3.1.1", 641 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 642 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 643 | "dev": true, 644 | "requires": { 645 | "normalize-path": "^3.0.0", 646 | "picomatch": "^2.0.4" 647 | } 648 | }, 649 | "argparse": { 650 | "version": "1.0.10", 651 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 652 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 653 | "dev": true, 654 | "requires": { 655 | "sprintf-js": "~1.0.2" 656 | } 657 | }, 658 | "array-back": { 659 | "version": "4.0.1", 660 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", 661 | "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", 662 | "dev": true 663 | }, 664 | "array-union": { 665 | "version": "2.1.0", 666 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 667 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 668 | "dev": true 669 | }, 670 | "asn1": { 671 | "version": "0.2.4", 672 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 673 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 674 | "requires": { 675 | "safer-buffer": "~2.1.0" 676 | } 677 | }, 678 | "assert-plus": { 679 | "version": "1.0.0", 680 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 681 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 682 | }, 683 | "astral-regex": { 684 | "version": "2.0.0", 685 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 686 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 687 | "dev": true 688 | }, 689 | "asynckit": { 690 | "version": "0.4.0", 691 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 692 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 693 | }, 694 | "atob": { 695 | "version": "2.1.2", 696 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 697 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" 698 | }, 699 | "aws-sign2": { 700 | "version": "0.7.0", 701 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 702 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 703 | }, 704 | "aws4": { 705 | "version": "1.11.0", 706 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 707 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 708 | }, 709 | "balanced-match": { 710 | "version": "1.0.0", 711 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 712 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 713 | "dev": true 714 | }, 715 | "bcrypt-pbkdf": { 716 | "version": "1.0.2", 717 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 718 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 719 | "requires": { 720 | "tweetnacl": "^0.14.3" 721 | } 722 | }, 723 | "big.js": { 724 | "version": "5.2.2", 725 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 726 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 727 | "dev": true 728 | }, 729 | "binary-extensions": { 730 | "version": "2.1.0", 731 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", 732 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", 733 | "dev": true 734 | }, 735 | "bluebird": { 736 | "version": "3.7.2", 737 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 738 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 739 | }, 740 | "brace-expansion": { 741 | "version": "1.1.11", 742 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 743 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 744 | "dev": true, 745 | "requires": { 746 | "balanced-match": "^1.0.0", 747 | "concat-map": "0.0.1" 748 | } 749 | }, 750 | "braces": { 751 | "version": "3.0.2", 752 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 753 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 754 | "dev": true, 755 | "requires": { 756 | "fill-range": "^7.0.1" 757 | } 758 | }, 759 | "browser-stdout": { 760 | "version": "1.3.1", 761 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 762 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 763 | "dev": true 764 | }, 765 | "browserslist": { 766 | "version": "4.16.0", 767 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", 768 | "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", 769 | "dev": true, 770 | "requires": { 771 | "caniuse-lite": "^1.0.30001165", 772 | "colorette": "^1.2.1", 773 | "electron-to-chromium": "^1.3.621", 774 | "escalade": "^3.1.1", 775 | "node-releases": "^1.1.67" 776 | } 777 | }, 778 | "buffer-from": { 779 | "version": "1.1.1", 780 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 781 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 782 | }, 783 | "callsites": { 784 | "version": "3.1.0", 785 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 786 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 787 | "dev": true 788 | }, 789 | "camelcase": { 790 | "version": "5.3.1", 791 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 792 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 793 | "dev": true 794 | }, 795 | "caniuse-lite": { 796 | "version": "1.0.30001168", 797 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001168.tgz", 798 | "integrity": "sha512-P2zmX7swIXKu+GMMR01TWa4csIKELTNnZKc+f1CjebmZJQtTAEXmpQSoKVJVVcvPGAA0TEYTOUp3VehavZSFPQ==", 799 | "dev": true 800 | }, 801 | "caseless": { 802 | "version": "0.12.0", 803 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 804 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 805 | }, 806 | "chalk": { 807 | "version": "4.1.0", 808 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 809 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 810 | "dev": true, 811 | "requires": { 812 | "ansi-styles": "^4.1.0", 813 | "supports-color": "^7.1.0" 814 | }, 815 | "dependencies": { 816 | "ansi-styles": { 817 | "version": "4.3.0", 818 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 819 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 820 | "dev": true, 821 | "requires": { 822 | "color-convert": "^2.0.1" 823 | } 824 | }, 825 | "color-convert": { 826 | "version": "2.0.1", 827 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 828 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 829 | "dev": true, 830 | "requires": { 831 | "color-name": "~1.1.4" 832 | } 833 | }, 834 | "color-name": { 835 | "version": "1.1.4", 836 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 837 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 838 | "dev": true 839 | }, 840 | "has-flag": { 841 | "version": "4.0.0", 842 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 843 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 844 | "dev": true 845 | }, 846 | "supports-color": { 847 | "version": "7.2.0", 848 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 849 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 850 | "dev": true, 851 | "requires": { 852 | "has-flag": "^4.0.0" 853 | } 854 | } 855 | } 856 | }, 857 | "chokidar": { 858 | "version": "3.4.3", 859 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", 860 | "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", 861 | "dev": true, 862 | "requires": { 863 | "anymatch": "~3.1.1", 864 | "braces": "~3.0.2", 865 | "fsevents": "~2.1.2", 866 | "glob-parent": "~5.1.0", 867 | "is-binary-path": "~2.1.0", 868 | "is-glob": "~4.0.1", 869 | "normalize-path": "~3.0.0", 870 | "readdirp": "~3.5.0" 871 | } 872 | }, 873 | "chrome-trace-event": { 874 | "version": "1.0.2", 875 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", 876 | "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", 877 | "dev": true, 878 | "requires": { 879 | "tslib": "^1.9.0" 880 | } 881 | }, 882 | "cliui": { 883 | "version": "5.0.0", 884 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 885 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 886 | "dev": true, 887 | "requires": { 888 | "string-width": "^3.1.0", 889 | "strip-ansi": "^5.2.0", 890 | "wrap-ansi": "^5.1.0" 891 | }, 892 | "dependencies": { 893 | "ansi-regex": { 894 | "version": "4.1.0", 895 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 896 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 897 | "dev": true 898 | }, 899 | "emoji-regex": { 900 | "version": "7.0.3", 901 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 902 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 903 | "dev": true 904 | }, 905 | "is-fullwidth-code-point": { 906 | "version": "2.0.0", 907 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 908 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 909 | "dev": true 910 | }, 911 | "string-width": { 912 | "version": "3.1.0", 913 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 914 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 915 | "dev": true, 916 | "requires": { 917 | "emoji-regex": "^7.0.1", 918 | "is-fullwidth-code-point": "^2.0.0", 919 | "strip-ansi": "^5.1.0" 920 | } 921 | }, 922 | "strip-ansi": { 923 | "version": "5.2.0", 924 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 925 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 926 | "dev": true, 927 | "requires": { 928 | "ansi-regex": "^4.1.0" 929 | } 930 | } 931 | } 932 | }, 933 | "color-convert": { 934 | "version": "1.9.3", 935 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 936 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 937 | "dev": true, 938 | "requires": { 939 | "color-name": "1.1.3" 940 | } 941 | }, 942 | "color-name": { 943 | "version": "1.1.3", 944 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 945 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 946 | "dev": true 947 | }, 948 | "colorette": { 949 | "version": "1.2.1", 950 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", 951 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", 952 | "dev": true 953 | }, 954 | "combined-stream": { 955 | "version": "1.0.8", 956 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 957 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 958 | "requires": { 959 | "delayed-stream": "~1.0.0" 960 | } 961 | }, 962 | "command-line-usage": { 963 | "version": "6.1.1", 964 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", 965 | "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", 966 | "dev": true, 967 | "requires": { 968 | "array-back": "^4.0.1", 969 | "chalk": "^2.4.2", 970 | "table-layout": "^1.0.1", 971 | "typical": "^5.2.0" 972 | }, 973 | "dependencies": { 974 | "chalk": { 975 | "version": "2.4.2", 976 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 977 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 978 | "dev": true, 979 | "requires": { 980 | "ansi-styles": "^3.2.1", 981 | "escape-string-regexp": "^1.0.5", 982 | "supports-color": "^5.3.0" 983 | } 984 | } 985 | } 986 | }, 987 | "commander": { 988 | "version": "2.20.3", 989 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 990 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 991 | "dev": true 992 | }, 993 | "concat-map": { 994 | "version": "0.0.1", 995 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 996 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 997 | "dev": true 998 | }, 999 | "core-util-is": { 1000 | "version": "1.0.2", 1001 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1002 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1003 | }, 1004 | "cross-spawn": { 1005 | "version": "7.0.3", 1006 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1007 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1008 | "dev": true, 1009 | "requires": { 1010 | "path-key": "^3.1.0", 1011 | "shebang-command": "^2.0.0", 1012 | "which": "^2.0.1" 1013 | } 1014 | }, 1015 | "css": { 1016 | "version": "3.0.0", 1017 | "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", 1018 | "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", 1019 | "requires": { 1020 | "inherits": "^2.0.4", 1021 | "source-map": "^0.6.1", 1022 | "source-map-resolve": "^0.6.0" 1023 | } 1024 | }, 1025 | "dashdash": { 1026 | "version": "1.14.1", 1027 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1028 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1029 | "requires": { 1030 | "assert-plus": "^1.0.0" 1031 | } 1032 | }, 1033 | "debug": { 1034 | "version": "4.3.1", 1035 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 1036 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 1037 | "dev": true, 1038 | "requires": { 1039 | "ms": "2.1.2" 1040 | } 1041 | }, 1042 | "decamelize": { 1043 | "version": "1.2.0", 1044 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1045 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 1046 | "dev": true 1047 | }, 1048 | "decode-uri-component": { 1049 | "version": "0.2.0", 1050 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 1051 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 1052 | }, 1053 | "deep-extend": { 1054 | "version": "0.6.0", 1055 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1056 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1057 | "dev": true 1058 | }, 1059 | "deep-is": { 1060 | "version": "0.1.3", 1061 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1062 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1063 | "dev": true 1064 | }, 1065 | "delayed-stream": { 1066 | "version": "1.0.0", 1067 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1068 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1069 | }, 1070 | "diff": { 1071 | "version": "4.0.2", 1072 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 1073 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1074 | "dev": true 1075 | }, 1076 | "dir-glob": { 1077 | "version": "3.0.1", 1078 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1079 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1080 | "dev": true, 1081 | "requires": { 1082 | "path-type": "^4.0.0" 1083 | } 1084 | }, 1085 | "doctrine": { 1086 | "version": "3.0.0", 1087 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1088 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1089 | "dev": true, 1090 | "requires": { 1091 | "esutils": "^2.0.2" 1092 | } 1093 | }, 1094 | "dom-serializer": { 1095 | "version": "1.2.0", 1096 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", 1097 | "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", 1098 | "requires": { 1099 | "domelementtype": "^2.0.1", 1100 | "domhandler": "^4.0.0", 1101 | "entities": "^2.0.0" 1102 | } 1103 | }, 1104 | "domelementtype": { 1105 | "version": "2.1.0", 1106 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", 1107 | "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" 1108 | }, 1109 | "domhandler": { 1110 | "version": "4.0.0", 1111 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", 1112 | "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", 1113 | "requires": { 1114 | "domelementtype": "^2.1.0" 1115 | } 1116 | }, 1117 | "domutils": { 1118 | "version": "2.4.4", 1119 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", 1120 | "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", 1121 | "requires": { 1122 | "dom-serializer": "^1.0.1", 1123 | "domelementtype": "^2.0.1", 1124 | "domhandler": "^4.0.0" 1125 | } 1126 | }, 1127 | "ecc-jsbn": { 1128 | "version": "0.1.2", 1129 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1130 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1131 | "requires": { 1132 | "jsbn": "~0.1.0", 1133 | "safer-buffer": "^2.1.0" 1134 | } 1135 | }, 1136 | "electron-to-chromium": { 1137 | "version": "1.3.629", 1138 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz", 1139 | "integrity": "sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ==", 1140 | "dev": true 1141 | }, 1142 | "emoji-regex": { 1143 | "version": "8.0.0", 1144 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1145 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1146 | "dev": true 1147 | }, 1148 | "emojis-list": { 1149 | "version": "3.0.0", 1150 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", 1151 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", 1152 | "dev": true 1153 | }, 1154 | "end-of-stream": { 1155 | "version": "1.4.4", 1156 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1157 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1158 | "dev": true, 1159 | "requires": { 1160 | "once": "^1.4.0" 1161 | } 1162 | }, 1163 | "enhanced-resolve": { 1164 | "version": "4.3.0", 1165 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", 1166 | "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", 1167 | "dev": true, 1168 | "requires": { 1169 | "graceful-fs": "^4.1.2", 1170 | "memory-fs": "^0.5.0", 1171 | "tapable": "^1.0.0" 1172 | } 1173 | }, 1174 | "enquirer": { 1175 | "version": "2.3.6", 1176 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 1177 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 1178 | "dev": true, 1179 | "requires": { 1180 | "ansi-colors": "^4.1.1" 1181 | } 1182 | }, 1183 | "entities": { 1184 | "version": "2.1.0", 1185 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 1186 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" 1187 | }, 1188 | "envinfo": { 1189 | "version": "7.7.3", 1190 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", 1191 | "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", 1192 | "dev": true 1193 | }, 1194 | "errno": { 1195 | "version": "0.1.8", 1196 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", 1197 | "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", 1198 | "dev": true, 1199 | "requires": { 1200 | "prr": "~1.0.1" 1201 | } 1202 | }, 1203 | "es6-promise": { 1204 | "version": "4.2.8", 1205 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 1206 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 1207 | "dev": true 1208 | }, 1209 | "es6-promisify": { 1210 | "version": "5.0.0", 1211 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 1212 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 1213 | "dev": true, 1214 | "requires": { 1215 | "es6-promise": "^4.0.3" 1216 | } 1217 | }, 1218 | "escalade": { 1219 | "version": "3.1.1", 1220 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1221 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1222 | "dev": true 1223 | }, 1224 | "escape-string-regexp": { 1225 | "version": "1.0.5", 1226 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1227 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1228 | "dev": true 1229 | }, 1230 | "eslint": { 1231 | "version": "7.16.0", 1232 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", 1233 | "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", 1234 | "dev": true, 1235 | "requires": { 1236 | "@babel/code-frame": "^7.0.0", 1237 | "@eslint/eslintrc": "^0.2.2", 1238 | "ajv": "^6.10.0", 1239 | "chalk": "^4.0.0", 1240 | "cross-spawn": "^7.0.2", 1241 | "debug": "^4.0.1", 1242 | "doctrine": "^3.0.0", 1243 | "enquirer": "^2.3.5", 1244 | "eslint-scope": "^5.1.1", 1245 | "eslint-utils": "^2.1.0", 1246 | "eslint-visitor-keys": "^2.0.0", 1247 | "espree": "^7.3.1", 1248 | "esquery": "^1.2.0", 1249 | "esutils": "^2.0.2", 1250 | "file-entry-cache": "^6.0.0", 1251 | "functional-red-black-tree": "^1.0.1", 1252 | "glob-parent": "^5.0.0", 1253 | "globals": "^12.1.0", 1254 | "ignore": "^4.0.6", 1255 | "import-fresh": "^3.0.0", 1256 | "imurmurhash": "^0.1.4", 1257 | "is-glob": "^4.0.0", 1258 | "js-yaml": "^3.13.1", 1259 | "json-stable-stringify-without-jsonify": "^1.0.1", 1260 | "levn": "^0.4.1", 1261 | "lodash": "^4.17.19", 1262 | "minimatch": "^3.0.4", 1263 | "natural-compare": "^1.4.0", 1264 | "optionator": "^0.9.1", 1265 | "progress": "^2.0.0", 1266 | "regexpp": "^3.1.0", 1267 | "semver": "^7.2.1", 1268 | "strip-ansi": "^6.0.0", 1269 | "strip-json-comments": "^3.1.0", 1270 | "table": "^6.0.4", 1271 | "text-table": "^0.2.0", 1272 | "v8-compile-cache": "^2.0.3" 1273 | }, 1274 | "dependencies": { 1275 | "ignore": { 1276 | "version": "4.0.6", 1277 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1278 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1279 | "dev": true 1280 | } 1281 | } 1282 | }, 1283 | "eslint-scope": { 1284 | "version": "5.1.1", 1285 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1286 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1287 | "dev": true, 1288 | "requires": { 1289 | "esrecurse": "^4.3.0", 1290 | "estraverse": "^4.1.1" 1291 | } 1292 | }, 1293 | "eslint-utils": { 1294 | "version": "2.1.0", 1295 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 1296 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 1297 | "dev": true, 1298 | "requires": { 1299 | "eslint-visitor-keys": "^1.1.0" 1300 | }, 1301 | "dependencies": { 1302 | "eslint-visitor-keys": { 1303 | "version": "1.3.0", 1304 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 1305 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 1306 | "dev": true 1307 | } 1308 | } 1309 | }, 1310 | "eslint-visitor-keys": { 1311 | "version": "2.0.0", 1312 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", 1313 | "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", 1314 | "dev": true 1315 | }, 1316 | "espree": { 1317 | "version": "7.3.1", 1318 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 1319 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 1320 | "dev": true, 1321 | "requires": { 1322 | "acorn": "^7.4.0", 1323 | "acorn-jsx": "^5.3.1", 1324 | "eslint-visitor-keys": "^1.3.0" 1325 | }, 1326 | "dependencies": { 1327 | "eslint-visitor-keys": { 1328 | "version": "1.3.0", 1329 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 1330 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 1331 | "dev": true 1332 | } 1333 | } 1334 | }, 1335 | "esprima": { 1336 | "version": "4.0.1", 1337 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1338 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1339 | "dev": true 1340 | }, 1341 | "esquery": { 1342 | "version": "1.3.1", 1343 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 1344 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 1345 | "dev": true, 1346 | "requires": { 1347 | "estraverse": "^5.1.0" 1348 | }, 1349 | "dependencies": { 1350 | "estraverse": { 1351 | "version": "5.2.0", 1352 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1353 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 1354 | "dev": true 1355 | } 1356 | } 1357 | }, 1358 | "esrecurse": { 1359 | "version": "4.3.0", 1360 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1361 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1362 | "dev": true, 1363 | "requires": { 1364 | "estraverse": "^5.2.0" 1365 | }, 1366 | "dependencies": { 1367 | "estraverse": { 1368 | "version": "5.2.0", 1369 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1370 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 1371 | "dev": true 1372 | } 1373 | } 1374 | }, 1375 | "estraverse": { 1376 | "version": "4.3.0", 1377 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1378 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1379 | "dev": true 1380 | }, 1381 | "esutils": { 1382 | "version": "2.0.3", 1383 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1384 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1385 | "dev": true 1386 | }, 1387 | "events": { 1388 | "version": "3.2.0", 1389 | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", 1390 | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", 1391 | "dev": true 1392 | }, 1393 | "execa": { 1394 | "version": "4.1.0", 1395 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", 1396 | "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", 1397 | "dev": true, 1398 | "requires": { 1399 | "cross-spawn": "^7.0.0", 1400 | "get-stream": "^5.0.0", 1401 | "human-signals": "^1.1.1", 1402 | "is-stream": "^2.0.0", 1403 | "merge-stream": "^2.0.0", 1404 | "npm-run-path": "^4.0.0", 1405 | "onetime": "^5.1.0", 1406 | "signal-exit": "^3.0.2", 1407 | "strip-final-newline": "^2.0.0" 1408 | } 1409 | }, 1410 | "extend": { 1411 | "version": "3.0.2", 1412 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1413 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1414 | }, 1415 | "extsprintf": { 1416 | "version": "1.4.0", 1417 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", 1418 | "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=" 1419 | }, 1420 | "fast-deep-equal": { 1421 | "version": "3.1.3", 1422 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1423 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1424 | }, 1425 | "fast-glob": { 1426 | "version": "3.2.4", 1427 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", 1428 | "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", 1429 | "dev": true, 1430 | "requires": { 1431 | "@nodelib/fs.stat": "^2.0.2", 1432 | "@nodelib/fs.walk": "^1.2.3", 1433 | "glob-parent": "^5.1.0", 1434 | "merge2": "^1.3.0", 1435 | "micromatch": "^4.0.2", 1436 | "picomatch": "^2.2.1" 1437 | } 1438 | }, 1439 | "fast-json-stable-stringify": { 1440 | "version": "2.1.0", 1441 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1442 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 1443 | }, 1444 | "fast-levenshtein": { 1445 | "version": "2.0.6", 1446 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1447 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1448 | "dev": true 1449 | }, 1450 | "fastq": { 1451 | "version": "1.9.0", 1452 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", 1453 | "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", 1454 | "dev": true, 1455 | "requires": { 1456 | "reusify": "^1.0.4" 1457 | } 1458 | }, 1459 | "file-entry-cache": { 1460 | "version": "6.0.0", 1461 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", 1462 | "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", 1463 | "dev": true, 1464 | "requires": { 1465 | "flat-cache": "^3.0.4" 1466 | } 1467 | }, 1468 | "fill-range": { 1469 | "version": "7.0.1", 1470 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1471 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1472 | "dev": true, 1473 | "requires": { 1474 | "to-regex-range": "^5.0.1" 1475 | } 1476 | }, 1477 | "find-up": { 1478 | "version": "5.0.0", 1479 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1480 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1481 | "dev": true, 1482 | "requires": { 1483 | "locate-path": "^6.0.0", 1484 | "path-exists": "^4.0.0" 1485 | } 1486 | }, 1487 | "flat": { 1488 | "version": "5.0.2", 1489 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1490 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1491 | "dev": true 1492 | }, 1493 | "flat-cache": { 1494 | "version": "3.0.4", 1495 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1496 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1497 | "dev": true, 1498 | "requires": { 1499 | "flatted": "^3.1.0", 1500 | "rimraf": "^3.0.2" 1501 | } 1502 | }, 1503 | "flatted": { 1504 | "version": "3.1.0", 1505 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", 1506 | "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", 1507 | "dev": true 1508 | }, 1509 | "forever-agent": { 1510 | "version": "0.6.1", 1511 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1512 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1513 | }, 1514 | "form-data": { 1515 | "version": "2.3.3", 1516 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1517 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1518 | "requires": { 1519 | "asynckit": "^0.4.0", 1520 | "combined-stream": "^1.0.6", 1521 | "mime-types": "^2.1.12" 1522 | } 1523 | }, 1524 | "fs.realpath": { 1525 | "version": "1.0.0", 1526 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1527 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1528 | "dev": true 1529 | }, 1530 | "fsevents": { 1531 | "version": "2.1.3", 1532 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 1533 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 1534 | "dev": true, 1535 | "optional": true 1536 | }, 1537 | "function-bind": { 1538 | "version": "1.1.1", 1539 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1540 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1541 | "dev": true 1542 | }, 1543 | "functional-red-black-tree": { 1544 | "version": "1.0.1", 1545 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1546 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1547 | "dev": true 1548 | }, 1549 | "get-caller-file": { 1550 | "version": "2.0.5", 1551 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1552 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1553 | "dev": true 1554 | }, 1555 | "get-stream": { 1556 | "version": "5.2.0", 1557 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1558 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1559 | "dev": true, 1560 | "requires": { 1561 | "pump": "^3.0.0" 1562 | } 1563 | }, 1564 | "getpass": { 1565 | "version": "0.1.7", 1566 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1567 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1568 | "requires": { 1569 | "assert-plus": "^1.0.0" 1570 | } 1571 | }, 1572 | "glob": { 1573 | "version": "7.1.6", 1574 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1575 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1576 | "dev": true, 1577 | "requires": { 1578 | "fs.realpath": "^1.0.0", 1579 | "inflight": "^1.0.4", 1580 | "inherits": "2", 1581 | "minimatch": "^3.0.4", 1582 | "once": "^1.3.0", 1583 | "path-is-absolute": "^1.0.0" 1584 | } 1585 | }, 1586 | "glob-parent": { 1587 | "version": "5.1.1", 1588 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 1589 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 1590 | "dev": true, 1591 | "requires": { 1592 | "is-glob": "^4.0.1" 1593 | } 1594 | }, 1595 | "glob-to-regexp": { 1596 | "version": "0.4.1", 1597 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1598 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1599 | "dev": true 1600 | }, 1601 | "globals": { 1602 | "version": "12.4.0", 1603 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 1604 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 1605 | "dev": true, 1606 | "requires": { 1607 | "type-fest": "^0.8.1" 1608 | } 1609 | }, 1610 | "globby": { 1611 | "version": "11.0.1", 1612 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", 1613 | "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", 1614 | "dev": true, 1615 | "requires": { 1616 | "array-union": "^2.1.0", 1617 | "dir-glob": "^3.0.1", 1618 | "fast-glob": "^3.1.1", 1619 | "ignore": "^5.1.4", 1620 | "merge2": "^1.3.0", 1621 | "slash": "^3.0.0" 1622 | } 1623 | }, 1624 | "graceful-fs": { 1625 | "version": "4.2.4", 1626 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1627 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 1628 | "dev": true 1629 | }, 1630 | "growl": { 1631 | "version": "1.10.5", 1632 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1633 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1634 | "dev": true 1635 | }, 1636 | "har-schema": { 1637 | "version": "2.0.0", 1638 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1639 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1640 | }, 1641 | "har-validator": { 1642 | "version": "5.1.5", 1643 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 1644 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 1645 | "requires": { 1646 | "ajv": "^6.12.3", 1647 | "har-schema": "^2.0.0" 1648 | } 1649 | }, 1650 | "has": { 1651 | "version": "1.0.3", 1652 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1653 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1654 | "dev": true, 1655 | "requires": { 1656 | "function-bind": "^1.1.1" 1657 | } 1658 | }, 1659 | "has-flag": { 1660 | "version": "3.0.0", 1661 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1662 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1663 | "dev": true 1664 | }, 1665 | "he": { 1666 | "version": "1.2.0", 1667 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1668 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1669 | "dev": true 1670 | }, 1671 | "htmlparser2": { 1672 | "version": "6.0.0", 1673 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", 1674 | "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==", 1675 | "requires": { 1676 | "domelementtype": "^2.0.1", 1677 | "domhandler": "^4.0.0", 1678 | "domutils": "^2.4.4", 1679 | "entities": "^2.0.0" 1680 | } 1681 | }, 1682 | "http-proxy-agent": { 1683 | "version": "2.1.0", 1684 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 1685 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 1686 | "dev": true, 1687 | "requires": { 1688 | "agent-base": "4", 1689 | "debug": "3.1.0" 1690 | }, 1691 | "dependencies": { 1692 | "debug": { 1693 | "version": "3.1.0", 1694 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1695 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1696 | "dev": true, 1697 | "requires": { 1698 | "ms": "2.0.0" 1699 | } 1700 | }, 1701 | "ms": { 1702 | "version": "2.0.0", 1703 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1704 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1705 | "dev": true 1706 | } 1707 | } 1708 | }, 1709 | "http-signature": { 1710 | "version": "1.2.0", 1711 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1712 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1713 | "requires": { 1714 | "assert-plus": "^1.0.0", 1715 | "jsprim": "^1.2.2", 1716 | "sshpk": "^1.7.0" 1717 | } 1718 | }, 1719 | "https-proxy-agent": { 1720 | "version": "2.2.4", 1721 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", 1722 | "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", 1723 | "dev": true, 1724 | "requires": { 1725 | "agent-base": "^4.3.0", 1726 | "debug": "^3.1.0" 1727 | }, 1728 | "dependencies": { 1729 | "debug": { 1730 | "version": "3.2.7", 1731 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1732 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1733 | "dev": true, 1734 | "requires": { 1735 | "ms": "^2.1.1" 1736 | } 1737 | } 1738 | } 1739 | }, 1740 | "human-signals": { 1741 | "version": "1.1.1", 1742 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 1743 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 1744 | "dev": true 1745 | }, 1746 | "ignore": { 1747 | "version": "5.1.8", 1748 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1749 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1750 | "dev": true 1751 | }, 1752 | "import-fresh": { 1753 | "version": "3.2.2", 1754 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", 1755 | "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", 1756 | "dev": true, 1757 | "requires": { 1758 | "parent-module": "^1.0.0", 1759 | "resolve-from": "^4.0.0" 1760 | } 1761 | }, 1762 | "import-local": { 1763 | "version": "3.0.2", 1764 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", 1765 | "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", 1766 | "dev": true, 1767 | "requires": { 1768 | "pkg-dir": "^4.2.0", 1769 | "resolve-cwd": "^3.0.0" 1770 | }, 1771 | "dependencies": { 1772 | "find-up": { 1773 | "version": "4.1.0", 1774 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1775 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1776 | "dev": true, 1777 | "requires": { 1778 | "locate-path": "^5.0.0", 1779 | "path-exists": "^4.0.0" 1780 | } 1781 | }, 1782 | "locate-path": { 1783 | "version": "5.0.0", 1784 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1785 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1786 | "dev": true, 1787 | "requires": { 1788 | "p-locate": "^4.1.0" 1789 | } 1790 | }, 1791 | "p-limit": { 1792 | "version": "2.3.0", 1793 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1794 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1795 | "dev": true, 1796 | "requires": { 1797 | "p-try": "^2.0.0" 1798 | } 1799 | }, 1800 | "p-locate": { 1801 | "version": "4.1.0", 1802 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1803 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1804 | "dev": true, 1805 | "requires": { 1806 | "p-limit": "^2.2.0" 1807 | } 1808 | }, 1809 | "pkg-dir": { 1810 | "version": "4.2.0", 1811 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1812 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1813 | "dev": true, 1814 | "requires": { 1815 | "find-up": "^4.0.0" 1816 | } 1817 | } 1818 | } 1819 | }, 1820 | "imurmurhash": { 1821 | "version": "0.1.4", 1822 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1823 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1824 | "dev": true 1825 | }, 1826 | "inflight": { 1827 | "version": "1.0.6", 1828 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1829 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1830 | "dev": true, 1831 | "requires": { 1832 | "once": "^1.3.0", 1833 | "wrappy": "1" 1834 | } 1835 | }, 1836 | "inherits": { 1837 | "version": "2.0.4", 1838 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1839 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1840 | }, 1841 | "interpret": { 1842 | "version": "2.2.0", 1843 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", 1844 | "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", 1845 | "dev": true 1846 | }, 1847 | "is-binary-path": { 1848 | "version": "2.1.0", 1849 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1850 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1851 | "dev": true, 1852 | "requires": { 1853 | "binary-extensions": "^2.0.0" 1854 | } 1855 | }, 1856 | "is-core-module": { 1857 | "version": "2.2.0", 1858 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 1859 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 1860 | "dev": true, 1861 | "requires": { 1862 | "has": "^1.0.3" 1863 | } 1864 | }, 1865 | "is-extglob": { 1866 | "version": "2.1.1", 1867 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1868 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1869 | "dev": true 1870 | }, 1871 | "is-fullwidth-code-point": { 1872 | "version": "3.0.0", 1873 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1874 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1875 | "dev": true 1876 | }, 1877 | "is-glob": { 1878 | "version": "4.0.1", 1879 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1880 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1881 | "dev": true, 1882 | "requires": { 1883 | "is-extglob": "^2.1.1" 1884 | } 1885 | }, 1886 | "is-number": { 1887 | "version": "7.0.0", 1888 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1889 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1890 | "dev": true 1891 | }, 1892 | "is-plain-obj": { 1893 | "version": "2.1.0", 1894 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1895 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1896 | "dev": true 1897 | }, 1898 | "is-stream": { 1899 | "version": "2.0.0", 1900 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 1901 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 1902 | "dev": true 1903 | }, 1904 | "is-typedarray": { 1905 | "version": "1.0.0", 1906 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1907 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1908 | }, 1909 | "isarray": { 1910 | "version": "1.0.0", 1911 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1912 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1913 | "dev": true 1914 | }, 1915 | "isexe": { 1916 | "version": "2.0.0", 1917 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1918 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1919 | "dev": true 1920 | }, 1921 | "isstream": { 1922 | "version": "0.1.2", 1923 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1924 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1925 | }, 1926 | "jest-worker": { 1927 | "version": "26.6.2", 1928 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1929 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1930 | "dev": true, 1931 | "requires": { 1932 | "@types/node": "*", 1933 | "merge-stream": "^2.0.0", 1934 | "supports-color": "^7.0.0" 1935 | }, 1936 | "dependencies": { 1937 | "has-flag": { 1938 | "version": "4.0.0", 1939 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1940 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1941 | "dev": true 1942 | }, 1943 | "supports-color": { 1944 | "version": "7.2.0", 1945 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1946 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1947 | "dev": true, 1948 | "requires": { 1949 | "has-flag": "^4.0.0" 1950 | } 1951 | } 1952 | } 1953 | }, 1954 | "js-tokens": { 1955 | "version": "4.0.0", 1956 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1957 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1958 | "dev": true 1959 | }, 1960 | "js-yaml": { 1961 | "version": "3.14.1", 1962 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1963 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1964 | "dev": true, 1965 | "requires": { 1966 | "argparse": "^1.0.7", 1967 | "esprima": "^4.0.0" 1968 | } 1969 | }, 1970 | "jsbn": { 1971 | "version": "0.1.1", 1972 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1973 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1974 | }, 1975 | "json-parse-better-errors": { 1976 | "version": "1.0.2", 1977 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1978 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 1979 | "dev": true 1980 | }, 1981 | "json-schema": { 1982 | "version": "0.2.3", 1983 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1984 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1985 | }, 1986 | "json-schema-traverse": { 1987 | "version": "0.4.1", 1988 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1989 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 1990 | }, 1991 | "json-stable-stringify-without-jsonify": { 1992 | "version": "1.0.1", 1993 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1994 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1995 | "dev": true 1996 | }, 1997 | "json-stringify-safe": { 1998 | "version": "5.0.1", 1999 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2000 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 2001 | }, 2002 | "json5": { 2003 | "version": "1.0.1", 2004 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 2005 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 2006 | "dev": true, 2007 | "requires": { 2008 | "minimist": "^1.2.0" 2009 | } 2010 | }, 2011 | "jsprim": { 2012 | "version": "1.4.1", 2013 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2014 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2015 | "requires": { 2016 | "assert-plus": "1.0.0", 2017 | "extsprintf": "1.3.0", 2018 | "json-schema": "0.2.3", 2019 | "verror": "1.10.0" 2020 | }, 2021 | "dependencies": { 2022 | "extsprintf": { 2023 | "version": "1.3.0", 2024 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 2025 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 2026 | } 2027 | } 2028 | }, 2029 | "leven": { 2030 | "version": "3.1.0", 2031 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 2032 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 2033 | "dev": true 2034 | }, 2035 | "levn": { 2036 | "version": "0.4.1", 2037 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2038 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2039 | "dev": true, 2040 | "requires": { 2041 | "prelude-ls": "^1.2.1", 2042 | "type-check": "~0.4.0" 2043 | } 2044 | }, 2045 | "loader-runner": { 2046 | "version": "4.1.0", 2047 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", 2048 | "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", 2049 | "dev": true 2050 | }, 2051 | "loader-utils": { 2052 | "version": "1.4.0", 2053 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", 2054 | "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", 2055 | "dev": true, 2056 | "requires": { 2057 | "big.js": "^5.2.2", 2058 | "emojis-list": "^3.0.0", 2059 | "json5": "^1.0.1" 2060 | } 2061 | }, 2062 | "locate-path": { 2063 | "version": "6.0.0", 2064 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2065 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2066 | "dev": true, 2067 | "requires": { 2068 | "p-locate": "^5.0.0" 2069 | } 2070 | }, 2071 | "lodash": { 2072 | "version": "4.17.20", 2073 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 2074 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" 2075 | }, 2076 | "log-symbols": { 2077 | "version": "4.0.0", 2078 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", 2079 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", 2080 | "dev": true, 2081 | "requires": { 2082 | "chalk": "^4.0.0" 2083 | } 2084 | }, 2085 | "lru-cache": { 2086 | "version": "6.0.0", 2087 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2088 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2089 | "dev": true, 2090 | "requires": { 2091 | "yallist": "^4.0.0" 2092 | } 2093 | }, 2094 | "memory-fs": { 2095 | "version": "0.5.0", 2096 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", 2097 | "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", 2098 | "dev": true, 2099 | "requires": { 2100 | "errno": "^0.1.3", 2101 | "readable-stream": "^2.0.1" 2102 | } 2103 | }, 2104 | "merge-stream": { 2105 | "version": "2.0.0", 2106 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2107 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2108 | "dev": true 2109 | }, 2110 | "merge2": { 2111 | "version": "1.4.1", 2112 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2113 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2114 | "dev": true 2115 | }, 2116 | "micromatch": { 2117 | "version": "4.0.2", 2118 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 2119 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 2120 | "dev": true, 2121 | "requires": { 2122 | "braces": "^3.0.1", 2123 | "picomatch": "^2.0.5" 2124 | } 2125 | }, 2126 | "mime-db": { 2127 | "version": "1.44.0", 2128 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 2129 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 2130 | }, 2131 | "mime-types": { 2132 | "version": "2.1.27", 2133 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 2134 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 2135 | "requires": { 2136 | "mime-db": "1.44.0" 2137 | } 2138 | }, 2139 | "mimic-fn": { 2140 | "version": "2.1.0", 2141 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2142 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2143 | "dev": true 2144 | }, 2145 | "minimatch": { 2146 | "version": "3.0.4", 2147 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2148 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2149 | "dev": true, 2150 | "requires": { 2151 | "brace-expansion": "^1.1.7" 2152 | } 2153 | }, 2154 | "minimist": { 2155 | "version": "1.2.5", 2156 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2157 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 2158 | "dev": true 2159 | }, 2160 | "mocha": { 2161 | "version": "8.2.1", 2162 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", 2163 | "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", 2164 | "dev": true, 2165 | "requires": { 2166 | "@ungap/promise-all-settled": "1.1.2", 2167 | "ansi-colors": "4.1.1", 2168 | "browser-stdout": "1.3.1", 2169 | "chokidar": "3.4.3", 2170 | "debug": "4.2.0", 2171 | "diff": "4.0.2", 2172 | "escape-string-regexp": "4.0.0", 2173 | "find-up": "5.0.0", 2174 | "glob": "7.1.6", 2175 | "growl": "1.10.5", 2176 | "he": "1.2.0", 2177 | "js-yaml": "3.14.0", 2178 | "log-symbols": "4.0.0", 2179 | "minimatch": "3.0.4", 2180 | "ms": "2.1.2", 2181 | "nanoid": "3.1.12", 2182 | "serialize-javascript": "5.0.1", 2183 | "strip-json-comments": "3.1.1", 2184 | "supports-color": "7.2.0", 2185 | "which": "2.0.2", 2186 | "wide-align": "1.1.3", 2187 | "workerpool": "6.0.2", 2188 | "yargs": "13.3.2", 2189 | "yargs-parser": "13.1.2", 2190 | "yargs-unparser": "2.0.0" 2191 | }, 2192 | "dependencies": { 2193 | "debug": { 2194 | "version": "4.2.0", 2195 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", 2196 | "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", 2197 | "dev": true, 2198 | "requires": { 2199 | "ms": "2.1.2" 2200 | } 2201 | }, 2202 | "escape-string-regexp": { 2203 | "version": "4.0.0", 2204 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2205 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2206 | "dev": true 2207 | }, 2208 | "has-flag": { 2209 | "version": "4.0.0", 2210 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2211 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2212 | "dev": true 2213 | }, 2214 | "js-yaml": { 2215 | "version": "3.14.0", 2216 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 2217 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 2218 | "dev": true, 2219 | "requires": { 2220 | "argparse": "^1.0.7", 2221 | "esprima": "^4.0.0" 2222 | } 2223 | }, 2224 | "supports-color": { 2225 | "version": "7.2.0", 2226 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2227 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2228 | "dev": true, 2229 | "requires": { 2230 | "has-flag": "^4.0.0" 2231 | } 2232 | } 2233 | } 2234 | }, 2235 | "ms": { 2236 | "version": "2.1.2", 2237 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2238 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2239 | "dev": true 2240 | }, 2241 | "nanoid": { 2242 | "version": "3.1.12", 2243 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", 2244 | "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", 2245 | "dev": true 2246 | }, 2247 | "natural-compare": { 2248 | "version": "1.4.0", 2249 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2250 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2251 | "dev": true 2252 | }, 2253 | "neo-async": { 2254 | "version": "2.6.2", 2255 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 2256 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 2257 | "dev": true 2258 | }, 2259 | "node-releases": { 2260 | "version": "1.1.67", 2261 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", 2262 | "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", 2263 | "dev": true 2264 | }, 2265 | "normalize-path": { 2266 | "version": "3.0.0", 2267 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2268 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2269 | "dev": true 2270 | }, 2271 | "npm-run-path": { 2272 | "version": "4.0.1", 2273 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2274 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2275 | "dev": true, 2276 | "requires": { 2277 | "path-key": "^3.0.0" 2278 | } 2279 | }, 2280 | "oauth-sign": { 2281 | "version": "0.9.0", 2282 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 2283 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 2284 | }, 2285 | "once": { 2286 | "version": "1.4.0", 2287 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2288 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2289 | "dev": true, 2290 | "requires": { 2291 | "wrappy": "1" 2292 | } 2293 | }, 2294 | "onetime": { 2295 | "version": "5.1.2", 2296 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2297 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2298 | "dev": true, 2299 | "requires": { 2300 | "mimic-fn": "^2.1.0" 2301 | } 2302 | }, 2303 | "optionator": { 2304 | "version": "0.9.1", 2305 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2306 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2307 | "dev": true, 2308 | "requires": { 2309 | "deep-is": "^0.1.3", 2310 | "fast-levenshtein": "^2.0.6", 2311 | "levn": "^0.4.1", 2312 | "prelude-ls": "^1.2.1", 2313 | "type-check": "^0.4.0", 2314 | "word-wrap": "^1.2.3" 2315 | } 2316 | }, 2317 | "p-limit": { 2318 | "version": "3.1.0", 2319 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2320 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2321 | "dev": true, 2322 | "requires": { 2323 | "yocto-queue": "^0.1.0" 2324 | } 2325 | }, 2326 | "p-locate": { 2327 | "version": "5.0.0", 2328 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2329 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2330 | "dev": true, 2331 | "requires": { 2332 | "p-limit": "^3.0.2" 2333 | } 2334 | }, 2335 | "p-try": { 2336 | "version": "2.2.0", 2337 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2338 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2339 | "dev": true 2340 | }, 2341 | "parent-module": { 2342 | "version": "1.0.1", 2343 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2344 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2345 | "dev": true, 2346 | "requires": { 2347 | "callsites": "^3.0.0" 2348 | } 2349 | }, 2350 | "path-exists": { 2351 | "version": "4.0.0", 2352 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2353 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2354 | "dev": true 2355 | }, 2356 | "path-is-absolute": { 2357 | "version": "1.0.1", 2358 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2359 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2360 | "dev": true 2361 | }, 2362 | "path-key": { 2363 | "version": "3.1.1", 2364 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2365 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2366 | "dev": true 2367 | }, 2368 | "path-parse": { 2369 | "version": "1.0.6", 2370 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2371 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2372 | "dev": true 2373 | }, 2374 | "path-type": { 2375 | "version": "4.0.0", 2376 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2377 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2378 | "dev": true 2379 | }, 2380 | "performance-now": { 2381 | "version": "2.1.0", 2382 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2383 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 2384 | }, 2385 | "picomatch": { 2386 | "version": "2.2.2", 2387 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2388 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 2389 | "dev": true 2390 | }, 2391 | "pkg-dir": { 2392 | "version": "5.0.0", 2393 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", 2394 | "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", 2395 | "dev": true, 2396 | "requires": { 2397 | "find-up": "^5.0.0" 2398 | } 2399 | }, 2400 | "prelude-ls": { 2401 | "version": "1.2.1", 2402 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2403 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2404 | "dev": true 2405 | }, 2406 | "process-nextick-args": { 2407 | "version": "2.0.1", 2408 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2409 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2410 | "dev": true 2411 | }, 2412 | "progress": { 2413 | "version": "2.0.3", 2414 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2415 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2416 | "dev": true 2417 | }, 2418 | "prr": { 2419 | "version": "1.0.1", 2420 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 2421 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 2422 | "dev": true 2423 | }, 2424 | "psl": { 2425 | "version": "1.8.0", 2426 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 2427 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 2428 | }, 2429 | "pump": { 2430 | "version": "3.0.0", 2431 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2432 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2433 | "dev": true, 2434 | "requires": { 2435 | "end-of-stream": "^1.1.0", 2436 | "once": "^1.3.1" 2437 | } 2438 | }, 2439 | "punycode": { 2440 | "version": "2.1.1", 2441 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2442 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 2443 | }, 2444 | "qs": { 2445 | "version": "6.5.2", 2446 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2447 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 2448 | }, 2449 | "randombytes": { 2450 | "version": "2.1.0", 2451 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2452 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2453 | "dev": true, 2454 | "requires": { 2455 | "safe-buffer": "^5.1.0" 2456 | } 2457 | }, 2458 | "readable-stream": { 2459 | "version": "2.3.7", 2460 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2461 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2462 | "dev": true, 2463 | "requires": { 2464 | "core-util-is": "~1.0.0", 2465 | "inherits": "~2.0.3", 2466 | "isarray": "~1.0.0", 2467 | "process-nextick-args": "~2.0.0", 2468 | "safe-buffer": "~5.1.1", 2469 | "string_decoder": "~1.1.1", 2470 | "util-deprecate": "~1.0.1" 2471 | }, 2472 | "dependencies": { 2473 | "safe-buffer": { 2474 | "version": "5.1.2", 2475 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2476 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2477 | "dev": true 2478 | } 2479 | } 2480 | }, 2481 | "readdirp": { 2482 | "version": "3.5.0", 2483 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 2484 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 2485 | "dev": true, 2486 | "requires": { 2487 | "picomatch": "^2.2.1" 2488 | } 2489 | }, 2490 | "rechoir": { 2491 | "version": "0.7.0", 2492 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", 2493 | "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", 2494 | "dev": true, 2495 | "requires": { 2496 | "resolve": "^1.9.0" 2497 | } 2498 | }, 2499 | "reduce-flatten": { 2500 | "version": "2.0.0", 2501 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", 2502 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", 2503 | "dev": true 2504 | }, 2505 | "regexpp": { 2506 | "version": "3.1.0", 2507 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 2508 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 2509 | "dev": true 2510 | }, 2511 | "request": { 2512 | "version": "2.88.2", 2513 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 2514 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 2515 | "requires": { 2516 | "aws-sign2": "~0.7.0", 2517 | "aws4": "^1.8.0", 2518 | "caseless": "~0.12.0", 2519 | "combined-stream": "~1.0.6", 2520 | "extend": "~3.0.2", 2521 | "forever-agent": "~0.6.1", 2522 | "form-data": "~2.3.2", 2523 | "har-validator": "~5.1.3", 2524 | "http-signature": "~1.2.0", 2525 | "is-typedarray": "~1.0.0", 2526 | "isstream": "~0.1.2", 2527 | "json-stringify-safe": "~5.0.1", 2528 | "mime-types": "~2.1.19", 2529 | "oauth-sign": "~0.9.0", 2530 | "performance-now": "^2.1.0", 2531 | "qs": "~6.5.2", 2532 | "safe-buffer": "^5.1.2", 2533 | "tough-cookie": "~2.5.0", 2534 | "tunnel-agent": "^0.6.0", 2535 | "uuid": "^3.3.2" 2536 | } 2537 | }, 2538 | "request-promise": { 2539 | "version": "4.2.6", 2540 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", 2541 | "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", 2542 | "requires": { 2543 | "bluebird": "^3.5.0", 2544 | "request-promise-core": "1.1.4", 2545 | "stealthy-require": "^1.1.1", 2546 | "tough-cookie": "^2.3.3" 2547 | } 2548 | }, 2549 | "request-promise-core": { 2550 | "version": "1.1.4", 2551 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", 2552 | "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", 2553 | "requires": { 2554 | "lodash": "^4.17.19" 2555 | } 2556 | }, 2557 | "require-directory": { 2558 | "version": "2.1.1", 2559 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2560 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2561 | "dev": true 2562 | }, 2563 | "require-main-filename": { 2564 | "version": "2.0.0", 2565 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2566 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2567 | "dev": true 2568 | }, 2569 | "resolve": { 2570 | "version": "1.19.0", 2571 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 2572 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 2573 | "dev": true, 2574 | "requires": { 2575 | "is-core-module": "^2.1.0", 2576 | "path-parse": "^1.0.6" 2577 | } 2578 | }, 2579 | "resolve-cwd": { 2580 | "version": "3.0.0", 2581 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2582 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2583 | "dev": true, 2584 | "requires": { 2585 | "resolve-from": "^5.0.0" 2586 | }, 2587 | "dependencies": { 2588 | "resolve-from": { 2589 | "version": "5.0.0", 2590 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2591 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2592 | "dev": true 2593 | } 2594 | } 2595 | }, 2596 | "resolve-from": { 2597 | "version": "4.0.0", 2598 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2599 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2600 | "dev": true 2601 | }, 2602 | "reusify": { 2603 | "version": "1.0.4", 2604 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2605 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2606 | "dev": true 2607 | }, 2608 | "rimraf": { 2609 | "version": "3.0.2", 2610 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2611 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2612 | "dev": true, 2613 | "requires": { 2614 | "glob": "^7.1.3" 2615 | } 2616 | }, 2617 | "run-parallel": { 2618 | "version": "1.1.10", 2619 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", 2620 | "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", 2621 | "dev": true 2622 | }, 2623 | "safe-buffer": { 2624 | "version": "5.2.1", 2625 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2626 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2627 | }, 2628 | "safer-buffer": { 2629 | "version": "2.1.2", 2630 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2631 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2632 | }, 2633 | "schema-utils": { 2634 | "version": "3.0.0", 2635 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", 2636 | "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", 2637 | "dev": true, 2638 | "requires": { 2639 | "@types/json-schema": "^7.0.6", 2640 | "ajv": "^6.12.5", 2641 | "ajv-keywords": "^3.5.2" 2642 | } 2643 | }, 2644 | "semver": { 2645 | "version": "7.3.4", 2646 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 2647 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 2648 | "dev": true, 2649 | "requires": { 2650 | "lru-cache": "^6.0.0" 2651 | } 2652 | }, 2653 | "serialize-javascript": { 2654 | "version": "5.0.1", 2655 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 2656 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 2657 | "dev": true, 2658 | "requires": { 2659 | "randombytes": "^2.1.0" 2660 | } 2661 | }, 2662 | "set-blocking": { 2663 | "version": "2.0.0", 2664 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2665 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2666 | "dev": true 2667 | }, 2668 | "shebang-command": { 2669 | "version": "2.0.0", 2670 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2671 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2672 | "dev": true, 2673 | "requires": { 2674 | "shebang-regex": "^3.0.0" 2675 | } 2676 | }, 2677 | "shebang-regex": { 2678 | "version": "3.0.0", 2679 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2680 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2681 | "dev": true 2682 | }, 2683 | "signal-exit": { 2684 | "version": "3.0.3", 2685 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2686 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2687 | "dev": true 2688 | }, 2689 | "slash": { 2690 | "version": "3.0.0", 2691 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2692 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2693 | "dev": true 2694 | }, 2695 | "slice-ansi": { 2696 | "version": "4.0.0", 2697 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 2698 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 2699 | "dev": true, 2700 | "requires": { 2701 | "ansi-styles": "^4.0.0", 2702 | "astral-regex": "^2.0.0", 2703 | "is-fullwidth-code-point": "^3.0.0" 2704 | }, 2705 | "dependencies": { 2706 | "ansi-styles": { 2707 | "version": "4.3.0", 2708 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2709 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2710 | "dev": true, 2711 | "requires": { 2712 | "color-convert": "^2.0.1" 2713 | } 2714 | }, 2715 | "color-convert": { 2716 | "version": "2.0.1", 2717 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2718 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2719 | "dev": true, 2720 | "requires": { 2721 | "color-name": "~1.1.4" 2722 | } 2723 | }, 2724 | "color-name": { 2725 | "version": "1.1.4", 2726 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2727 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2728 | "dev": true 2729 | } 2730 | } 2731 | }, 2732 | "source-list-map": { 2733 | "version": "2.0.1", 2734 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", 2735 | "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", 2736 | "dev": true 2737 | }, 2738 | "source-map": { 2739 | "version": "0.6.1", 2740 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2741 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2742 | }, 2743 | "source-map-resolve": { 2744 | "version": "0.6.0", 2745 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", 2746 | "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", 2747 | "requires": { 2748 | "atob": "^2.1.2", 2749 | "decode-uri-component": "^0.2.0" 2750 | } 2751 | }, 2752 | "source-map-support": { 2753 | "version": "0.5.19", 2754 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 2755 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 2756 | "requires": { 2757 | "buffer-from": "^1.0.0", 2758 | "source-map": "^0.6.0" 2759 | } 2760 | }, 2761 | "sprintf-js": { 2762 | "version": "1.0.3", 2763 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2764 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2765 | "dev": true 2766 | }, 2767 | "sshpk": { 2768 | "version": "1.16.1", 2769 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 2770 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 2771 | "requires": { 2772 | "asn1": "~0.2.3", 2773 | "assert-plus": "^1.0.0", 2774 | "bcrypt-pbkdf": "^1.0.0", 2775 | "dashdash": "^1.12.0", 2776 | "ecc-jsbn": "~0.1.1", 2777 | "getpass": "^0.1.1", 2778 | "jsbn": "~0.1.0", 2779 | "safer-buffer": "^2.0.2", 2780 | "tweetnacl": "~0.14.0" 2781 | } 2782 | }, 2783 | "stealthy-require": { 2784 | "version": "1.1.1", 2785 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 2786 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 2787 | }, 2788 | "string-width": { 2789 | "version": "4.2.0", 2790 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2791 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2792 | "dev": true, 2793 | "requires": { 2794 | "emoji-regex": "^8.0.0", 2795 | "is-fullwidth-code-point": "^3.0.0", 2796 | "strip-ansi": "^6.0.0" 2797 | } 2798 | }, 2799 | "string_decoder": { 2800 | "version": "1.1.1", 2801 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2802 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2803 | "dev": true, 2804 | "requires": { 2805 | "safe-buffer": "~5.1.0" 2806 | }, 2807 | "dependencies": { 2808 | "safe-buffer": { 2809 | "version": "5.1.2", 2810 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2811 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2812 | "dev": true 2813 | } 2814 | } 2815 | }, 2816 | "strip-ansi": { 2817 | "version": "6.0.0", 2818 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2819 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2820 | "dev": true, 2821 | "requires": { 2822 | "ansi-regex": "^5.0.0" 2823 | } 2824 | }, 2825 | "strip-final-newline": { 2826 | "version": "2.0.0", 2827 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2828 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2829 | "dev": true 2830 | }, 2831 | "strip-json-comments": { 2832 | "version": "3.1.1", 2833 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2834 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2835 | "dev": true 2836 | }, 2837 | "supports-color": { 2838 | "version": "5.5.0", 2839 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2840 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2841 | "dev": true, 2842 | "requires": { 2843 | "has-flag": "^3.0.0" 2844 | } 2845 | }, 2846 | "table": { 2847 | "version": "6.0.4", 2848 | "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", 2849 | "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", 2850 | "dev": true, 2851 | "requires": { 2852 | "ajv": "^6.12.4", 2853 | "lodash": "^4.17.20", 2854 | "slice-ansi": "^4.0.0", 2855 | "string-width": "^4.2.0" 2856 | } 2857 | }, 2858 | "table-layout": { 2859 | "version": "1.0.1", 2860 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", 2861 | "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", 2862 | "dev": true, 2863 | "requires": { 2864 | "array-back": "^4.0.1", 2865 | "deep-extend": "~0.6.0", 2866 | "typical": "^5.2.0", 2867 | "wordwrapjs": "^4.0.0" 2868 | } 2869 | }, 2870 | "tapable": { 2871 | "version": "1.1.3", 2872 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", 2873 | "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", 2874 | "dev": true 2875 | }, 2876 | "terser": { 2877 | "version": "5.5.1", 2878 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", 2879 | "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", 2880 | "dev": true, 2881 | "requires": { 2882 | "commander": "^2.20.0", 2883 | "source-map": "~0.7.2", 2884 | "source-map-support": "~0.5.19" 2885 | }, 2886 | "dependencies": { 2887 | "source-map": { 2888 | "version": "0.7.3", 2889 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 2890 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 2891 | "dev": true 2892 | } 2893 | } 2894 | }, 2895 | "terser-webpack-plugin": { 2896 | "version": "5.0.3", 2897 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", 2898 | "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", 2899 | "dev": true, 2900 | "requires": { 2901 | "jest-worker": "^26.6.1", 2902 | "p-limit": "^3.0.2", 2903 | "schema-utils": "^3.0.0", 2904 | "serialize-javascript": "^5.0.1", 2905 | "source-map": "^0.6.1", 2906 | "terser": "^5.3.8" 2907 | } 2908 | }, 2909 | "text-table": { 2910 | "version": "0.2.0", 2911 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2912 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2913 | "dev": true 2914 | }, 2915 | "to-regex-range": { 2916 | "version": "5.0.1", 2917 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2918 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2919 | "dev": true, 2920 | "requires": { 2921 | "is-number": "^7.0.0" 2922 | } 2923 | }, 2924 | "tough-cookie": { 2925 | "version": "2.5.0", 2926 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 2927 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 2928 | "requires": { 2929 | "psl": "^1.1.28", 2930 | "punycode": "^2.1.1" 2931 | } 2932 | }, 2933 | "ts-loader": { 2934 | "version": "8.0.12", 2935 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.12.tgz", 2936 | "integrity": "sha512-UIivVfGVJDdwwjgSrbtcL9Nf10c1BWnL1mxAQUVcnhNIn/P9W3nP5v60Z0aBMtc7ZrE11lMmU6+5jSgAXmGaYw==", 2937 | "dev": true, 2938 | "requires": { 2939 | "chalk": "^2.3.0", 2940 | "enhanced-resolve": "^4.0.0", 2941 | "loader-utils": "^1.0.2", 2942 | "micromatch": "^4.0.0", 2943 | "semver": "^6.0.0" 2944 | }, 2945 | "dependencies": { 2946 | "chalk": { 2947 | "version": "2.4.2", 2948 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 2949 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 2950 | "dev": true, 2951 | "requires": { 2952 | "ansi-styles": "^3.2.1", 2953 | "escape-string-regexp": "^1.0.5", 2954 | "supports-color": "^5.3.0" 2955 | } 2956 | }, 2957 | "semver": { 2958 | "version": "6.3.0", 2959 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2960 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2961 | "dev": true 2962 | } 2963 | } 2964 | }, 2965 | "tslib": { 2966 | "version": "1.14.1", 2967 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2968 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2969 | "dev": true 2970 | }, 2971 | "tsutils": { 2972 | "version": "3.17.1", 2973 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 2974 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 2975 | "dev": true, 2976 | "requires": { 2977 | "tslib": "^1.8.1" 2978 | } 2979 | }, 2980 | "tunnel-agent": { 2981 | "version": "0.6.0", 2982 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2983 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2984 | "requires": { 2985 | "safe-buffer": "^5.0.1" 2986 | } 2987 | }, 2988 | "tweetnacl": { 2989 | "version": "0.14.5", 2990 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2991 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 2992 | }, 2993 | "type-check": { 2994 | "version": "0.4.0", 2995 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2996 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2997 | "dev": true, 2998 | "requires": { 2999 | "prelude-ls": "^1.2.1" 3000 | } 3001 | }, 3002 | "type-fest": { 3003 | "version": "0.8.1", 3004 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 3005 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 3006 | "dev": true 3007 | }, 3008 | "typescript": { 3009 | "version": "4.1.3", 3010 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", 3011 | "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", 3012 | "dev": true 3013 | }, 3014 | "typical": { 3015 | "version": "5.2.0", 3016 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 3017 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 3018 | "dev": true 3019 | }, 3020 | "uri-js": { 3021 | "version": "4.4.0", 3022 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", 3023 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", 3024 | "requires": { 3025 | "punycode": "^2.1.0" 3026 | } 3027 | }, 3028 | "util-deprecate": { 3029 | "version": "1.0.2", 3030 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3031 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3032 | "dev": true 3033 | }, 3034 | "uuid": { 3035 | "version": "3.4.0", 3036 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 3037 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 3038 | }, 3039 | "v8-compile-cache": { 3040 | "version": "2.2.0", 3041 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", 3042 | "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", 3043 | "dev": true 3044 | }, 3045 | "verror": { 3046 | "version": "1.10.0", 3047 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3048 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3049 | "requires": { 3050 | "assert-plus": "^1.0.0", 3051 | "core-util-is": "1.0.2", 3052 | "extsprintf": "^1.2.0" 3053 | } 3054 | }, 3055 | "vscode-test": { 3056 | "version": "1.4.1", 3057 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.1.tgz", 3058 | "integrity": "sha512-Ls7+JyC06cUCuomlTYk4aNJI00Rri09hgtkNl3zfQ1bj6meXglpSPpuzJ/RPNetlUHFMm4eGs0Xr/H5pFPVwfQ==", 3059 | "dev": true, 3060 | "requires": { 3061 | "http-proxy-agent": "^2.1.0", 3062 | "https-proxy-agent": "^2.2.4", 3063 | "rimraf": "^2.6.3" 3064 | }, 3065 | "dependencies": { 3066 | "rimraf": { 3067 | "version": "2.7.1", 3068 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 3069 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 3070 | "dev": true, 3071 | "requires": { 3072 | "glob": "^7.1.3" 3073 | } 3074 | } 3075 | } 3076 | }, 3077 | "watchpack": { 3078 | "version": "2.1.0", 3079 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz", 3080 | "integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==", 3081 | "dev": true, 3082 | "requires": { 3083 | "glob-to-regexp": "^0.4.1", 3084 | "graceful-fs": "^4.1.2" 3085 | } 3086 | }, 3087 | "webpack": { 3088 | "version": "5.11.0", 3089 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.0.tgz", 3090 | "integrity": "sha512-ubWv7iP54RqAC/VjixgpnLLogCFbAfSOREcSWnnOlZEU8GICC5eKmJSu6YEnph2N2amKqY9rvxSwgyHxVqpaRw==", 3091 | "dev": true, 3092 | "requires": { 3093 | "@types/eslint-scope": "^3.7.0", 3094 | "@types/estree": "^0.0.45", 3095 | "@webassemblyjs/ast": "1.9.1", 3096 | "@webassemblyjs/helper-module-context": "1.9.1", 3097 | "@webassemblyjs/wasm-edit": "1.9.1", 3098 | "@webassemblyjs/wasm-parser": "1.9.1", 3099 | "acorn": "^8.0.4", 3100 | "browserslist": "^4.14.5", 3101 | "chrome-trace-event": "^1.0.2", 3102 | "enhanced-resolve": "^5.3.1", 3103 | "eslint-scope": "^5.1.1", 3104 | "events": "^3.2.0", 3105 | "glob-to-regexp": "^0.4.1", 3106 | "graceful-fs": "^4.2.4", 3107 | "json-parse-better-errors": "^1.0.2", 3108 | "loader-runner": "^4.1.0", 3109 | "mime-types": "^2.1.27", 3110 | "neo-async": "^2.6.2", 3111 | "pkg-dir": "^5.0.0", 3112 | "schema-utils": "^3.0.0", 3113 | "tapable": "^2.1.1", 3114 | "terser-webpack-plugin": "^5.0.3", 3115 | "watchpack": "^2.0.0", 3116 | "webpack-sources": "^2.1.1" 3117 | }, 3118 | "dependencies": { 3119 | "acorn": { 3120 | "version": "8.0.4", 3121 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", 3122 | "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", 3123 | "dev": true 3124 | }, 3125 | "enhanced-resolve": { 3126 | "version": "5.4.0", 3127 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.4.0.tgz", 3128 | "integrity": "sha512-ZmqfWURB2lConOBM1JdCVfPyMRv5RdKWktLXO6123p97ovVm2CLBgw9t5MBj3jJWA6eHyOeIws9iJQoGFR4euQ==", 3129 | "dev": true, 3130 | "requires": { 3131 | "graceful-fs": "^4.2.4", 3132 | "tapable": "^2.0.0" 3133 | } 3134 | }, 3135 | "tapable": { 3136 | "version": "2.2.0", 3137 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", 3138 | "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", 3139 | "dev": true 3140 | } 3141 | } 3142 | }, 3143 | "webpack-cli": { 3144 | "version": "4.2.0", 3145 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", 3146 | "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", 3147 | "dev": true, 3148 | "requires": { 3149 | "@webpack-cli/info": "^1.1.0", 3150 | "@webpack-cli/serve": "^1.1.0", 3151 | "colorette": "^1.2.1", 3152 | "command-line-usage": "^6.1.0", 3153 | "commander": "^6.2.0", 3154 | "enquirer": "^2.3.6", 3155 | "execa": "^4.1.0", 3156 | "import-local": "^3.0.2", 3157 | "interpret": "^2.2.0", 3158 | "leven": "^3.1.0", 3159 | "rechoir": "^0.7.0", 3160 | "v8-compile-cache": "^2.2.0", 3161 | "webpack-merge": "^4.2.2" 3162 | }, 3163 | "dependencies": { 3164 | "commander": { 3165 | "version": "6.2.1", 3166 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 3167 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 3168 | "dev": true 3169 | } 3170 | } 3171 | }, 3172 | "webpack-merge": { 3173 | "version": "4.2.2", 3174 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", 3175 | "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", 3176 | "dev": true, 3177 | "requires": { 3178 | "lodash": "^4.17.15" 3179 | } 3180 | }, 3181 | "webpack-sources": { 3182 | "version": "2.2.0", 3183 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", 3184 | "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", 3185 | "dev": true, 3186 | "requires": { 3187 | "source-list-map": "^2.0.1", 3188 | "source-map": "^0.6.1" 3189 | } 3190 | }, 3191 | "which": { 3192 | "version": "2.0.2", 3193 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3194 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3195 | "dev": true, 3196 | "requires": { 3197 | "isexe": "^2.0.0" 3198 | } 3199 | }, 3200 | "which-module": { 3201 | "version": "2.0.0", 3202 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 3203 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 3204 | "dev": true 3205 | }, 3206 | "wide-align": { 3207 | "version": "1.1.3", 3208 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 3209 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 3210 | "dev": true, 3211 | "requires": { 3212 | "string-width": "^1.0.2 || 2" 3213 | }, 3214 | "dependencies": { 3215 | "ansi-regex": { 3216 | "version": "3.0.0", 3217 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 3218 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 3219 | "dev": true 3220 | }, 3221 | "is-fullwidth-code-point": { 3222 | "version": "2.0.0", 3223 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 3224 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 3225 | "dev": true 3226 | }, 3227 | "string-width": { 3228 | "version": "2.1.1", 3229 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 3230 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 3231 | "dev": true, 3232 | "requires": { 3233 | "is-fullwidth-code-point": "^2.0.0", 3234 | "strip-ansi": "^4.0.0" 3235 | } 3236 | }, 3237 | "strip-ansi": { 3238 | "version": "4.0.0", 3239 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 3240 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 3241 | "dev": true, 3242 | "requires": { 3243 | "ansi-regex": "^3.0.0" 3244 | } 3245 | } 3246 | } 3247 | }, 3248 | "word-wrap": { 3249 | "version": "1.2.3", 3250 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 3251 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 3252 | "dev": true 3253 | }, 3254 | "wordwrapjs": { 3255 | "version": "4.0.0", 3256 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", 3257 | "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", 3258 | "dev": true, 3259 | "requires": { 3260 | "reduce-flatten": "^2.0.0", 3261 | "typical": "^5.0.0" 3262 | } 3263 | }, 3264 | "workerpool": { 3265 | "version": "6.0.2", 3266 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", 3267 | "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", 3268 | "dev": true 3269 | }, 3270 | "wrap-ansi": { 3271 | "version": "5.1.0", 3272 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 3273 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 3274 | "dev": true, 3275 | "requires": { 3276 | "ansi-styles": "^3.2.0", 3277 | "string-width": "^3.0.0", 3278 | "strip-ansi": "^5.0.0" 3279 | }, 3280 | "dependencies": { 3281 | "ansi-regex": { 3282 | "version": "4.1.0", 3283 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 3284 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 3285 | "dev": true 3286 | }, 3287 | "emoji-regex": { 3288 | "version": "7.0.3", 3289 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 3290 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 3291 | "dev": true 3292 | }, 3293 | "is-fullwidth-code-point": { 3294 | "version": "2.0.0", 3295 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 3296 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 3297 | "dev": true 3298 | }, 3299 | "string-width": { 3300 | "version": "3.1.0", 3301 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 3302 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 3303 | "dev": true, 3304 | "requires": { 3305 | "emoji-regex": "^7.0.1", 3306 | "is-fullwidth-code-point": "^2.0.0", 3307 | "strip-ansi": "^5.1.0" 3308 | } 3309 | }, 3310 | "strip-ansi": { 3311 | "version": "5.2.0", 3312 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 3313 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 3314 | "dev": true, 3315 | "requires": { 3316 | "ansi-regex": "^4.1.0" 3317 | } 3318 | } 3319 | } 3320 | }, 3321 | "wrappy": { 3322 | "version": "1.0.2", 3323 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3324 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3325 | "dev": true 3326 | }, 3327 | "y18n": { 3328 | "version": "4.0.1", 3329 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 3330 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", 3331 | "dev": true 3332 | }, 3333 | "yallist": { 3334 | "version": "4.0.0", 3335 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3336 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3337 | "dev": true 3338 | }, 3339 | "yargs": { 3340 | "version": "13.3.2", 3341 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 3342 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 3343 | "dev": true, 3344 | "requires": { 3345 | "cliui": "^5.0.0", 3346 | "find-up": "^3.0.0", 3347 | "get-caller-file": "^2.0.1", 3348 | "require-directory": "^2.1.1", 3349 | "require-main-filename": "^2.0.0", 3350 | "set-blocking": "^2.0.0", 3351 | "string-width": "^3.0.0", 3352 | "which-module": "^2.0.0", 3353 | "y18n": "^4.0.0", 3354 | "yargs-parser": "^13.1.2" 3355 | }, 3356 | "dependencies": { 3357 | "ansi-regex": { 3358 | "version": "4.1.0", 3359 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 3360 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 3361 | "dev": true 3362 | }, 3363 | "emoji-regex": { 3364 | "version": "7.0.3", 3365 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 3366 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 3367 | "dev": true 3368 | }, 3369 | "find-up": { 3370 | "version": "3.0.0", 3371 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 3372 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 3373 | "dev": true, 3374 | "requires": { 3375 | "locate-path": "^3.0.0" 3376 | } 3377 | }, 3378 | "is-fullwidth-code-point": { 3379 | "version": "2.0.0", 3380 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 3381 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 3382 | "dev": true 3383 | }, 3384 | "locate-path": { 3385 | "version": "3.0.0", 3386 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 3387 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 3388 | "dev": true, 3389 | "requires": { 3390 | "p-locate": "^3.0.0", 3391 | "path-exists": "^3.0.0" 3392 | } 3393 | }, 3394 | "p-limit": { 3395 | "version": "2.3.0", 3396 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 3397 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 3398 | "dev": true, 3399 | "requires": { 3400 | "p-try": "^2.0.0" 3401 | } 3402 | }, 3403 | "p-locate": { 3404 | "version": "3.0.0", 3405 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 3406 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 3407 | "dev": true, 3408 | "requires": { 3409 | "p-limit": "^2.0.0" 3410 | } 3411 | }, 3412 | "path-exists": { 3413 | "version": "3.0.0", 3414 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 3415 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 3416 | "dev": true 3417 | }, 3418 | "string-width": { 3419 | "version": "3.1.0", 3420 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 3421 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 3422 | "dev": true, 3423 | "requires": { 3424 | "emoji-regex": "^7.0.1", 3425 | "is-fullwidth-code-point": "^2.0.0", 3426 | "strip-ansi": "^5.1.0" 3427 | } 3428 | }, 3429 | "strip-ansi": { 3430 | "version": "5.2.0", 3431 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 3432 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 3433 | "dev": true, 3434 | "requires": { 3435 | "ansi-regex": "^4.1.0" 3436 | } 3437 | } 3438 | } 3439 | }, 3440 | "yargs-parser": { 3441 | "version": "13.1.2", 3442 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 3443 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 3444 | "dev": true, 3445 | "requires": { 3446 | "camelcase": "^5.0.0", 3447 | "decamelize": "^1.2.0" 3448 | } 3449 | }, 3450 | "yargs-unparser": { 3451 | "version": "2.0.0", 3452 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 3453 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 3454 | "dev": true, 3455 | "requires": { 3456 | "camelcase": "^6.0.0", 3457 | "decamelize": "^4.0.0", 3458 | "flat": "^5.0.2", 3459 | "is-plain-obj": "^2.1.0" 3460 | }, 3461 | "dependencies": { 3462 | "camelcase": { 3463 | "version": "6.2.0", 3464 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 3465 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 3466 | "dev": true 3467 | }, 3468 | "decamelize": { 3469 | "version": "4.0.0", 3470 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 3471 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 3472 | "dev": true 3473 | } 3474 | } 3475 | }, 3476 | "yocto-queue": { 3477 | "version": "0.1.0", 3478 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3479 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3480 | "dev": true 3481 | } 3482 | } 3483 | } 3484 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "html-css-class-completion", 3 | "displayName": "IntelliSense for CSS class names in HTML", 4 | "description": "CSS class name completion for the HTML class attribute based on the definitions found in your workspace.", 5 | "version": "1.20.0", 6 | "publisher": "Zignd", 7 | "engines": { 8 | "vscode": "^1.52.0" 9 | }, 10 | "keywords": [ 11 | "html", 12 | "css", 13 | "class", 14 | "autocomplete", 15 | "multi-root ready" 16 | ], 17 | "categories": [ 18 | "Programming Languages", 19 | "Other" 20 | ], 21 | "activationEvents": [ 22 | "*" 23 | ], 24 | "contributes": { 25 | "commands": [ 26 | { 27 | "command": "html-css-class-completion.cache", 28 | "title": "Cache CSS class definitions" 29 | } 30 | ], 31 | "configuration": [ 32 | { 33 | "title": "IntelliSense for CSS class names in HTML", 34 | "properties": { 35 | "html-css-class-completion.includeGlobPattern": { 36 | "type": "string", 37 | "default": "**/*.{css,html}", 38 | "description": "A glob pattern that defines files and folders to search for. The glob pattern will be matched against the paths of resulting matches relative to their workspace." 39 | }, 40 | "html-css-class-completion.excludeGlobPattern": { 41 | "type": "string", 42 | "default": "", 43 | "description": "A glob pattern that defines files and folders to exclude. The glob pattern will be matched against the file paths of resulting matches relative to their workspace." 44 | }, 45 | "html-css-class-completion.enableEmmetSupport": { 46 | "type": "boolean", 47 | "default": false, 48 | "description": "Enables completion when you're writing Emmet abbreviations." 49 | }, 50 | "html-css-class-completion.HTMLLanguages": { 51 | "type": "array", 52 | "description": "A list of HTML based languages where suggestions are enabled.", 53 | "default": [ 54 | "html", 55 | "vue", 56 | "razor", 57 | "blade", 58 | "handlebars", 59 | "twig", 60 | "django-html", 61 | "php", 62 | "markdown", 63 | "erb", 64 | "ejs", 65 | "svelte" 66 | ] 67 | }, 68 | "html-css-class-completion.CSSLanguages": { 69 | "type": "array", 70 | "description": "A list of CSS based languages where suggestions are enabled.", 71 | "default": [ 72 | "css", 73 | "sass", 74 | "scss" 75 | ] 76 | }, 77 | "html-css-class-completion.JavaScriptLanguages": { 78 | "type": "array", 79 | "description": "A list of JavaScript based languages where suggestions are enabled.", 80 | "default": [ 81 | "javascript", 82 | "javascriptreact", 83 | "typescriptreact" 84 | ] 85 | } 86 | } 87 | } 88 | ] 89 | }, 90 | "icon": "images/icon.png", 91 | "repository": { 92 | "url": "https://github.com/Zignd/HTML-CSS-Class-Completion" 93 | }, 94 | "main": "./dist/extension.js", 95 | "scripts": { 96 | "vscode:prepublish": "npm run package", 97 | "compile": "webpack --config ./build/node-extension.webpack.config.js", 98 | "watch": "webpack --watch --config ./build/node-extension.webpack.config.js", 99 | "package": "webpack --mode production --devtool hidden-source-map --config ./build/node-extension.webpack.config.js", 100 | "test-compile": "tsc -p ./", 101 | "test-watch": "tsc -watch -p ./", 102 | "pretest": "npm run test-compile && npm run lint", 103 | "lint": "eslint src --ext ts", 104 | "test": "node ./out/test/runTest.js" 105 | }, 106 | "devDependencies": { 107 | "@types/bluebird": "^3.5.33", 108 | "@types/css": "0.0.31", 109 | "@types/glob": "^7.1.3", 110 | "@types/htmlparser2": "^3.10.2", 111 | "@types/lodash": "^4.14.165", 112 | "@types/mocha": "^8.0.4", 113 | "@types/node": "^12.11.7", 114 | "@types/request": "^2.48.5", 115 | "@types/request-promise": "^4.1.47", 116 | "@types/verror": "^1.10.4", 117 | "@types/vscode": "^1.52.0", 118 | "@typescript-eslint/eslint-plugin": "^4.9.0", 119 | "@typescript-eslint/parser": "^4.9.0", 120 | "eslint": "^7.15.0", 121 | "glob": "^7.1.6", 122 | "mocha": "^8.1.3", 123 | "ts-loader": "^8.0.11", 124 | "typescript": "^4.1.2", 125 | "vscode-test": "^1.4.1", 126 | "webpack": "^5.10.0", 127 | "webpack-cli": "^4.2.0" 128 | }, 129 | "dependencies": { 130 | "bluebird": "^3.7.2", 131 | "css": "^3.0.0", 132 | "htmlparser2": "^6.0.0", 133 | "lodash": "^4.17.20", 134 | "request": "^2.88.2", 135 | "request-promise": "^4.2.6", 136 | "source-map-support": "^0.5.19", 137 | "verror": "^1.10.0" 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/common/css-class-definition.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import * as vscode from "vscode"; 4 | 5 | class CssClassDefinition { 6 | public constructor(public className: string, public location?: vscode.Location) { } 7 | } 8 | 9 | export default CssClassDefinition; 10 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as Bluebird from "bluebird"; 2 | import * as _ from "lodash"; 3 | import "source-map-support/register"; 4 | import * as VError from "verror"; 5 | import { 6 | commands, CompletionItem, CompletionItemKind, Disposable, 7 | ExtensionContext, languages, Position, Range, TextDocument, Uri, window, 8 | workspace, 9 | } from "vscode"; 10 | import CssClassDefinition from "./common/css-class-definition"; 11 | import Fetcher from "./fetcher"; 12 | import Notifier from "./notifier"; 13 | import ParseEngineGateway from "./parse-engine-gateway"; 14 | 15 | enum Command { 16 | Cache = "html-css-class-completion.cache", 17 | } 18 | 19 | enum Configuration { 20 | IncludeGlobPattern = "html-css-class-completion.includeGlobPattern", 21 | ExcludeGlobPattern = "html-css-class-completion.excludeGlobPattern", 22 | EnableEmmetSupport = "html-css-class-completion.enableEmmetSupport", 23 | HTMLLanguages = "html-css-class-completion.HTMLLanguages", 24 | CSSLanguages = "html-css-class-completion.CSSLanguages", 25 | JavaScriptLanguages = "html-css-class-completion.JavaScriptLanguages", 26 | } 27 | 28 | const notifier: Notifier = new Notifier(Command.Cache); 29 | let uniqueDefinitions: CssClassDefinition[] = []; 30 | 31 | const completionTriggerChars = ['"', "'", " ", "."]; 32 | 33 | let caching = false; 34 | 35 | const htmlDisposables: Disposable[] = []; 36 | const cssDisposables: Disposable[] = []; 37 | const javaScriptDisposables: Disposable[] = []; 38 | const emmetDisposables: Disposable[] = []; 39 | 40 | async function cache(): Promise { 41 | try { 42 | notifier.notify("eye", "Looking for CSS classes in the workspace..."); 43 | 44 | console.log("Looking for parseable documents..."); 45 | const uris: Uri[] = await Fetcher.findAllParseableDocuments(); 46 | 47 | if (!uris || uris.length === 0) { 48 | console.log("Found no documents"); 49 | notifier.statusBarItem.hide(); 50 | return; 51 | } 52 | 53 | console.log("Found all parseable documents."); 54 | const definitions: CssClassDefinition[] = []; 55 | 56 | let filesParsed = 0; 57 | let failedLogs = ""; 58 | let failedLogsCount = 0; 59 | 60 | console.log("Parsing documents and looking for CSS class definitions..."); 61 | 62 | try { 63 | await Bluebird.map(uris, async (uri) => { 64 | try { 65 | Array.prototype.push.apply(definitions, await ParseEngineGateway.callParser(uri)); 66 | } catch (error) { 67 | failedLogs += `${uri.path}\n`; 68 | failedLogsCount++; 69 | } 70 | filesParsed++; 71 | const progress = ((filesParsed / uris.length) * 100).toFixed(2); 72 | notifier.notify("eye", "Looking for CSS classes in the workspace... (" + progress + "%)", false); 73 | }, { concurrency: 30 }); 74 | } catch (err) { 75 | notifier.notify("alert", "Failed to cache the CSS classes in the workspace (click for another attempt)"); 76 | throw new VError(err, "Failed to parse the documents"); 77 | } 78 | 79 | uniqueDefinitions = _.uniqBy(definitions, (def) => def.className); 80 | 81 | console.log("Summary:"); 82 | console.log(uris.length, "parseable documents found"); 83 | console.log(definitions.length, "CSS class definitions found"); 84 | console.log(uniqueDefinitions.length, "unique CSS class definitions found"); 85 | console.log(failedLogsCount, "failed attempts to parse. List of the documents:"); 86 | console.log(failedLogs); 87 | 88 | notifier.notify("zap", "CSS classes cached (click to cache again)"); 89 | } catch (err) { 90 | notifier.notify("alert", "Failed to cache the CSS classes in the workspace (click for another attempt)"); 91 | throw new VError(err, 92 | "Failed to cache the class definitions during the iterations over the documents that were found"); 93 | } 94 | } 95 | 96 | const registerCompletionProvider = ( 97 | languageSelector: string, 98 | classMatchRegex: RegExp, 99 | classPrefix = "", 100 | splitChar = " " 101 | ) => languages.registerCompletionItemProvider(languageSelector, { 102 | provideCompletionItems(document: TextDocument, position: Position): CompletionItem[] { 103 | const start: Position = new Position(position.line, 0); 104 | const range: Range = new Range(start, position); 105 | const text: string = document.getText(range); 106 | 107 | // Check if the cursor is on a class attribute and retrieve all the css rules in this class attribute 108 | const rawClasses: RegExpMatchArray | null = text.match(classMatchRegex); 109 | if (!rawClasses || rawClasses.length === 1) { 110 | return []; 111 | } 112 | 113 | // Will store the classes found on the class attribute 114 | const classesOnAttribute = rawClasses[1].split(splitChar); 115 | 116 | // Creates a collection of CompletionItem based on the classes already cached 117 | const completionItems = uniqueDefinitions.map((definition) => { 118 | const completionItem = new CompletionItem(definition.className, CompletionItemKind.Variable); 119 | const completionClassName = `${classPrefix}${definition.className}`; 120 | 121 | completionItem.filterText = completionClassName; 122 | completionItem.insertText = completionClassName; 123 | 124 | return completionItem; 125 | }); 126 | 127 | // Removes from the collection the classes already specified on the class attribute 128 | for (const classOnAttribute of classesOnAttribute) { 129 | for (let j = 0; j < completionItems.length; j++) { 130 | if (completionItems[j].insertText === classOnAttribute) { 131 | completionItems.splice(j, 1); 132 | } 133 | } 134 | } 135 | 136 | return completionItems; 137 | }, 138 | }, ...completionTriggerChars); 139 | 140 | const registerHTMLProviders = (disposables: Disposable[]) => 141 | workspace.getConfiguration() 142 | ?.get(Configuration.HTMLLanguages) 143 | ?.forEach((extension) => { 144 | disposables.push(registerCompletionProvider(extension, /class=["|']([\w- ]*$)/)); 145 | }); 146 | 147 | const registerCSSProviders = (disposables: Disposable[]) => 148 | workspace.getConfiguration() 149 | .get(Configuration.CSSLanguages) 150 | ?.forEach((extension) => { 151 | // The @apply rule was a CSS proposal which has since been abandoned, 152 | // check the proposal for more info: http://tabatkins.github.io/specs/css-apply-rule/ 153 | // Its support should probably be removed 154 | disposables.push(registerCompletionProvider(extension, /@apply ([.\w- ]*$)/, ".")); 155 | }); 156 | 157 | const registerJavaScriptProviders = (disposables: Disposable[]) => 158 | workspace.getConfiguration() 159 | .get(Configuration.JavaScriptLanguages) 160 | ?.forEach((extension) => { 161 | disposables.push(registerCompletionProvider(extension, /className=["|']([\w- ]*$)/)); 162 | disposables.push(registerCompletionProvider(extension, /class=["|']([\w- ]*$)/)); 163 | }); 164 | 165 | function registerEmmetProviders(disposables: Disposable[]) { 166 | const emmetRegex = /(?=\.)([\w-. ]*$)/; 167 | 168 | const registerProviders = (modes: string[]) => { 169 | modes.forEach((language) => { 170 | disposables.push(registerCompletionProvider(language, emmetRegex, "", ".")); 171 | }); 172 | }; 173 | 174 | const htmlLanguages = workspace.getConfiguration().get(Configuration.HTMLLanguages); 175 | if (htmlLanguages) { 176 | registerProviders(htmlLanguages); 177 | } 178 | 179 | const javaScriptLanguages = workspace.getConfiguration().get(Configuration.JavaScriptLanguages); 180 | if (javaScriptLanguages) { 181 | registerProviders(javaScriptLanguages); 182 | } 183 | } 184 | 185 | function unregisterProviders(disposables: Disposable[]) { 186 | disposables.forEach(disposable => disposable.dispose()); 187 | disposables.length = 0; 188 | } 189 | 190 | export async function activate(context: ExtensionContext): Promise { 191 | const disposables: Disposable[] = []; 192 | workspace.onDidChangeConfiguration(async (e) => { 193 | try { 194 | if (e.affectsConfiguration(Configuration.IncludeGlobPattern) || 195 | e.affectsConfiguration(Configuration.ExcludeGlobPattern)) { 196 | await cache(); 197 | } 198 | 199 | if (e.affectsConfiguration(Configuration.EnableEmmetSupport)) { 200 | const isEnabled = workspace.getConfiguration() 201 | .get(Configuration.EnableEmmetSupport); 202 | isEnabled ? registerEmmetProviders(emmetDisposables) : unregisterProviders(emmetDisposables); 203 | } 204 | 205 | if (e.affectsConfiguration(Configuration.HTMLLanguages)) { 206 | unregisterProviders(htmlDisposables); 207 | registerHTMLProviders(htmlDisposables); 208 | } 209 | 210 | if (e.affectsConfiguration(Configuration.CSSLanguages)) { 211 | unregisterProviders(cssDisposables); 212 | registerCSSProviders(cssDisposables); 213 | } 214 | 215 | if (e.affectsConfiguration(Configuration.JavaScriptLanguages)) { 216 | unregisterProviders(javaScriptDisposables); 217 | registerJavaScriptProviders(javaScriptDisposables); 218 | } 219 | } catch (err) { 220 | const newErr = new VError(err, "Failed to automatically reload the extension after the configuration change"); 221 | console.error(newErr); 222 | window.showErrorMessage(newErr.message); 223 | } 224 | }, null, disposables); 225 | context.subscriptions.push(...disposables); 226 | 227 | context.subscriptions.push(commands.registerCommand(Command.Cache, async () => { 228 | if (caching) { 229 | return; 230 | } 231 | 232 | caching = true; 233 | try { 234 | await cache(); 235 | } catch (err) { 236 | const newErr = new VError(err, "Failed to cache the CSS classes in the workspace"); 237 | console.error(newErr); 238 | window.showErrorMessage(newErr.message); 239 | } finally { 240 | caching = false; 241 | } 242 | })); 243 | 244 | if (workspace.getConfiguration().get(Configuration.EnableEmmetSupport)) { 245 | registerEmmetProviders(emmetDisposables); 246 | } 247 | 248 | registerHTMLProviders(htmlDisposables); 249 | registerCSSProviders(cssDisposables); 250 | registerJavaScriptProviders(javaScriptDisposables); 251 | 252 | caching = true; 253 | try { 254 | await cache(); 255 | } catch (err) { 256 | const newErr = new VError(err, "Failed to cache the CSS classes in the workspace for the first time"); 257 | console.error(newErr); 258 | window.showErrorMessage(newErr.message); 259 | } finally { 260 | caching = false; 261 | } 262 | } 263 | 264 | export function deactivate(): void { 265 | unregisterProviders(htmlDisposables); 266 | unregisterProviders(cssDisposables); 267 | unregisterProviders(javaScriptDisposables); 268 | unregisterProviders(emmetDisposables); 269 | } 270 | -------------------------------------------------------------------------------- /src/fetcher.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | 3 | class Fetcher { 4 | public static async findAllParseableDocuments(): Promise { 5 | // There's a bug in the latest version of the API in which calling vscode.workspace.findFiles 6 | // when the extension is not being executed inside a workspace, causes a "Cannot read property 7 | // 'map' of undefined" error. 8 | // More info: https://github.com/zignd/HTML-CSS-Class-Completion/issues/114 9 | if (!vscode.workspace.name) { 10 | return []; 11 | } 12 | 13 | const configuration = vscode.workspace.getConfiguration(); 14 | const includeGlobPattern = configuration.get("html-css-class-completion.includeGlobPattern"); 15 | const excludeGlobPattern = configuration.get("html-css-class-completion.excludeGlobPattern"); 16 | 17 | return await vscode.workspace.findFiles(`${includeGlobPattern}`, `${excludeGlobPattern}`); 18 | } 19 | } 20 | 21 | export default Fetcher; 22 | -------------------------------------------------------------------------------- /src/notifier.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | 3 | class Notifier { 4 | public statusBarItem: vscode.StatusBarItem; 5 | private timeoutId: NodeJS.Timer | null; 6 | 7 | constructor(command?: string, alignment?: vscode.StatusBarAlignment, priority?: number) { 8 | this.statusBarItem = vscode.window.createStatusBarItem(alignment, priority); 9 | this.statusBarItem.command = command; 10 | this.statusBarItem.show(); 11 | this.timeoutId = null; 12 | } 13 | 14 | public notify(icon: string, text: string, autoHide = true): void { 15 | if (this.timeoutId) { 16 | clearTimeout(this.timeoutId); 17 | } 18 | 19 | this.statusBarItem.text = `$(${icon}) ${text}`; 20 | this.statusBarItem.tooltip = undefined; 21 | 22 | if (autoHide) { 23 | this.timeoutId = setTimeout(() => { 24 | this.statusBarItem.text = `$(${icon})`; 25 | this.statusBarItem.tooltip = text; 26 | }, 5000); 27 | } 28 | } 29 | } 30 | 31 | export default Notifier; 32 | -------------------------------------------------------------------------------- /src/parse-engine-gateway.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import VError = require("verror"); 3 | import * as vscode from "vscode"; 4 | 5 | import CssClassDefinition from "./common/css-class-definition"; 6 | import IParseEngine from "./parse-engines/common/parse-engine"; 7 | import ISimpleTextDocument from "./parse-engines/common/simple-text-document"; 8 | import ParseEngineRegistry from "./parse-engines/parse-engine-registry"; 9 | 10 | async function readFile(file: string): Promise { 11 | return new Promise((resolve, reject) => { 12 | fs.readFile(file, (err, data) => { 13 | if (err) { 14 | reject(err); 15 | } 16 | resolve(data.toString()); 17 | }); 18 | }); 19 | } 20 | 21 | async function createSimpleTextDocument(uri: vscode.Uri): Promise { 22 | const text = await readFile(uri.fsPath); 23 | const simpleDocument: ISimpleTextDocument = { 24 | languageId: uri.fsPath.split(".").pop() || "", 25 | getText(): string { 26 | return text; 27 | }, 28 | }; 29 | return simpleDocument; 30 | } 31 | 32 | class ParseEngineGateway { 33 | public static async callParser(uri: vscode.Uri): Promise { 34 | const textDocument = await createSimpleTextDocument(uri); 35 | const parseEngine: IParseEngine = ParseEngineRegistry.getParseEngine(textDocument.languageId); 36 | const cssClassDefinitions: CssClassDefinition[] = await parseEngine.parse(textDocument); 37 | return cssClassDefinitions; 38 | } 39 | } 40 | 41 | export default ParseEngineGateway; 42 | -------------------------------------------------------------------------------- /src/parse-engines/common/css-class-extractor.ts: -------------------------------------------------------------------------------- 1 | import * as css from "css"; 2 | import CssClassDefinition from "../../common/css-class-definition"; 3 | 4 | export default class CssClassExtractor { 5 | /** 6 | * @description Extracts class names from CSS AST 7 | */ 8 | public static extract(ast: css.Stylesheet): CssClassDefinition[] { 9 | const classNameRegex = /[.]([\w-]+)/g; 10 | 11 | const definitions: CssClassDefinition[] = []; 12 | 13 | // go through each of the selectors of the current rule 14 | const addRule = (rule: css.Rule) => { 15 | rule.selectors?.forEach((selector: string) => { 16 | let item: RegExpExecArray | null = classNameRegex.exec(selector); 17 | while (item) { 18 | definitions.push(new CssClassDefinition(item[1])); 19 | item = classNameRegex.exec(selector); 20 | } 21 | }); 22 | }; 23 | 24 | // go through each of the rules or media query... 25 | ast.stylesheet?.rules.forEach((rule: css.Rule & css.Media) => { 26 | // ...of type rule 27 | if (rule.type === "rule") { 28 | addRule(rule); 29 | } 30 | // of type media queries 31 | if (rule.type === "media") { 32 | // go through rules inside media queries 33 | rule.rules?.forEach((rule: css.Rule) => addRule(rule)); 34 | } 35 | }); 36 | return definitions; 37 | } 38 | } -------------------------------------------------------------------------------- /src/parse-engines/common/parse-engine.ts: -------------------------------------------------------------------------------- 1 | import CssClassDefinition from "./../../common/css-class-definition"; 2 | import ISimpleTextDocument from "./simple-text-document"; 3 | 4 | interface IParseEngine { 5 | languageId: string; 6 | extension: string; 7 | parse(textDocument: ISimpleTextDocument): Promise; 8 | } 9 | 10 | export default IParseEngine; 11 | -------------------------------------------------------------------------------- /src/parse-engines/common/simple-text-document.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A minimum standin for vscode.TextDocument that is passed to a `ParseEngine`. 3 | */ 4 | interface ISimpleTextDocument { 5 | languageId: string; 6 | getText(): string; 7 | } 8 | 9 | export default ISimpleTextDocument; 10 | -------------------------------------------------------------------------------- /src/parse-engines/parse-engine-registry.ts: -------------------------------------------------------------------------------- 1 | import IParseEngine from "./common/parse-engine"; 2 | import CssParseEngine from "./types/css-parse-engine"; 3 | import HtmlParseEngine from "./types/html-parse-engine"; 4 | 5 | class ParseEngineRegistry { 6 | public static getParseEngine(languageId: string): IParseEngine { 7 | const foundParseEngine = ParseEngineRegistry.registry.find((value) => value.languageId === languageId); 8 | 9 | if (!foundParseEngine) { 10 | throw new Error(`Could not find a parse engine for the provided language id ("${languageId}").`); 11 | } 12 | 13 | return foundParseEngine; 14 | } 15 | 16 | public static get supportedLanguagesIds(): string[] { 17 | if (!ParseEngineRegistry.languagesIds) { 18 | ParseEngineRegistry.languagesIds = ParseEngineRegistry.registry.map( 19 | (parseEngine) => parseEngine.languageId); 20 | } 21 | 22 | return ParseEngineRegistry.languagesIds; 23 | } 24 | 25 | private static languagesIds: string[]; 26 | private static registry: IParseEngine[] = [ 27 | new CssParseEngine(), 28 | new HtmlParseEngine(), 29 | ]; 30 | } 31 | 32 | export default ParseEngineRegistry; 33 | -------------------------------------------------------------------------------- /src/parse-engines/types/css-parse-engine.ts: -------------------------------------------------------------------------------- 1 | import * as css from "css"; 2 | import CssClassDefinition from "../../common/css-class-definition"; 3 | import CssClassExtractor from "../common/css-class-extractor"; 4 | import IParseEngine from "../common/parse-engine"; 5 | import ISimpleTextDocument from "../common/simple-text-document"; 6 | 7 | class CssParseEngine implements IParseEngine { 8 | public languageId = "css"; 9 | public extension = "css"; 10 | 11 | public async parse(textDocument: ISimpleTextDocument): Promise { 12 | const code: string = textDocument.getText(); 13 | const codeAst: css.Stylesheet = css.parse(code); 14 | 15 | return CssClassExtractor.extract(codeAst); 16 | } 17 | } 18 | 19 | export default CssParseEngine; 20 | -------------------------------------------------------------------------------- /src/parse-engines/types/html-parse-engine.ts: -------------------------------------------------------------------------------- 1 | import * as Bluebird from "bluebird"; 2 | import * as css from "css"; 3 | import * as html from "htmlparser2"; 4 | import * as request from "request-promise"; 5 | import CssClassDefinition from "../../common/css-class-definition"; 6 | import CssClassExtractor from "../common/css-class-extractor"; 7 | import IParseEngine from "../common/parse-engine"; 8 | import ISimpleTextDocument from "../common/simple-text-document"; 9 | 10 | class HtmlParseEngine implements IParseEngine { 11 | public languageId = "html"; 12 | public extension = "html"; 13 | 14 | public async parse(textDocument: ISimpleTextDocument): Promise { 15 | const definitions: CssClassDefinition[] = []; 16 | const urls: string[] = []; 17 | let tag: string; 18 | let isRelStylesheet = false; 19 | let linkHref: string | null; 20 | 21 | const parser = new html.Parser({ 22 | onattribute: (name: string, value: string) => { 23 | if (name === "rel" && value === "stylesheet") { 24 | isRelStylesheet = true; 25 | } 26 | 27 | if (tag === "link" && name === "href" && value.indexOf("http") === 0) { 28 | linkHref = value; 29 | } 30 | }, 31 | onclosetag: () => { 32 | if (tag === "link" && isRelStylesheet && linkHref) { 33 | urls.push(linkHref); 34 | } 35 | 36 | isRelStylesheet = false; 37 | linkHref = null; 38 | }, 39 | onopentagname: (name: string) => { 40 | tag = name; 41 | }, 42 | ontext: (text: string) => { 43 | if (tag === "style") { 44 | definitions.push(...CssClassExtractor.extract(css.parse(text))); 45 | } 46 | }, 47 | }); 48 | 49 | parser.write(textDocument.getText()); 50 | parser.end(); 51 | 52 | await Bluebird.map(urls, async (url) => { 53 | const content = await request.get(url); 54 | definitions.push(...CssClassExtractor.extract(css.parse(content))); 55 | }, { concurrency: 10 }); 56 | 57 | return definitions; 58 | } 59 | } 60 | 61 | export default HtmlParseEngine; 62 | -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from 'vscode-test'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true /* enable all strict type-checking options */ 12 | /* Additional Checks */ 13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | }, 17 | "exclude": [ 18 | "node_modules", 19 | ".vscode-test" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Get up and running straight away 13 | 14 | * Press `F5` to open a new window with your extension loaded. 15 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 16 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 17 | * Find output from your extension in the debug console. 18 | 19 | ## Make changes 20 | 21 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 22 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 23 | 24 | 25 | ## Explore the API 26 | 27 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 28 | 29 | ## Run tests 30 | 31 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 32 | * Press `F5` to run the tests in a new window with your extension loaded. 33 | * See the output of the test result in the debug console. 34 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 35 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 36 | * You can create folders inside the `test` folder to structure your tests any way you want. 37 | 38 | ## Go further 39 | 40 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 41 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 42 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 43 | --------------------------------------------------------------------------------