├── .eslintrc.json ├── .gitignore ├── .jshintrc ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .vscodeignore ├── .yarnrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── ReplacePhysicalWithLogical.js ├── extension.js ├── images ├── action.gif ├── command-pallet.png ├── context-menu.png ├── icon.png ├── keybindings.png ├── languages-add-json.png ├── languages-add-list.png ├── languages.png ├── logical.png ├── problems.png ├── properties-add-json.png ├── properties-add-list.png ├── properties.png ├── quick-fix.png └── warning.png ├── jsconfig.json ├── package.json ├── test ├── runTest.js └── suite │ ├── extension.test.js │ ├── index.js │ └── test.css ├── vsc-extension-quickstart.md └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": false, 4 | "commonjs": true, 5 | "es6": true, 6 | "node": true, 7 | "mocha": true 8 | }, 9 | "parserOptions": { 10 | "ecmaVersion": 2020, 11 | "ecmaFeatures": { 12 | "jsx": true 13 | }, 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-const-assign": "warn", 18 | "no-this-before-super": "warn", 19 | "no-undef": "warn", 20 | "no-unreachable": "warn", 21 | "no-unused-vars": "warn", 22 | "constructor-super": "warn", 23 | "valid-typeof": "warn" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode-test/ 3 | *.vsix 4 | .DS_Store -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 11 3 | } 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "useTabs": true 5 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the extensions.json format 4 | "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] 5 | } 6 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"] 13 | }, 14 | { 15 | "name": "Extension Tests", 16 | "type": "extensionHost", 17 | "request": "launch", 18 | "args": [ 19 | "--extensionDevelopmentPath=${workspaceFolder}", 20 | "--extensionTestsPath=${workspaceFolder}/test/suite/index" 21 | ] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "[javascript]": { 4 | "editor.defaultFormatter": "esbenp.prettier-vscode" 5 | }, 6 | "[json]": { 7 | "editor.defaultFormatter": "esbenp.prettier-vscode" 8 | }, 9 | "[jsonc]": { 10 | "editor.defaultFormatter": "esbenp.prettier-vscode" 11 | }, 12 | "workbench.colorCustomizations": { 13 | "sash.hoverBorder": "#3c096c", 14 | "titleBar.activeBackground": "#3c096c", 15 | "titleBar.activeForeground": "#e7e7e7", 16 | "titleBar.inactiveBackground": "#3c096c99", 17 | "titleBar.inactiveForeground": "#e7e7e799" 18 | }, 19 | "peacock.color": "#3C096C" 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | test/** 4 | .gitignore 5 | .yarnrc 6 | vsc-extension-quickstart.md 7 | **/jsconfig.json 8 | **/*.map 9 | **/.eslintrc.json 10 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | --ignore-engines true -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## 0.1.15 4 | 5 | - Added a way to ignore specific files using the file language identifier through the `logicalProperties.ignoreLanguageIds` setting. 6 | - See: https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers 7 | - Renamed `logicalProperties.ignoreList` to `logicalProperties.ignoreProperties`. `logicalProperties.ignoreList` is now depricated and will be removed from a future version. 8 | 9 | ## 0.1.14 10 | 11 | - Fixed the extension to no longer check for or update values within media queries. 12 | - Logical properties aren't supported in media queries. 13 | - Note that the check is very simple and checks for `@media` to determine if a replacement should be made. This could lead to false positives or false negatives. 14 | - See [#4](https://github.com/coderfin/logical-properties/issues/4) 15 | - Ignore specific CSS properties 16 | - Added a way to ignore specific properties through the `logicalProperties.ignoreList` setting (depricated). 17 | - See [#14](https://github.com/coderfin/logical-properties/issues/14) 18 | 19 | ## 0.1.12 20 | 21 | - Fixed `border-top-right-radius` --> `border-start-end-radius` 22 | - Fixed `border-bottom-left-radius` --> `border-end-start-radius` 23 | - See [#7](https://github.com/coderfin/logical-properties/issues/7) 24 | - See [#8](https://github.com/coderfin/logical-properties/issues/8) 25 | - See [#9](https://github.com/coderfin/logical-properties/issues/9) 26 | 27 | ## 0.1.11 28 | 29 | Fix an issue related to regex matching indices not currently supported in node.js 30 | 31 | - VSCode uses Electron 32 | - Electron uses node.js for local apis 33 | - node.js does not currently support regex matching indices (`d` flag, `hasIndices`) 34 | - Using a polyfill 35 | - See [#2](https://github.com/coderfin/logical-properties/issues/2) 36 | 37 | ## 0.1.10 38 | 39 | Fixed which files diagnostics are shown for: 40 | 41 | - Previously `.git` files were showing diagnostics 42 | - Files that were closed were still showing in `Problems` 43 | 44 | ## 0.1.9 45 | 46 | Fixed activation 47 | 48 | - Fixes a bug where the extension would not work on the first time it was installed. 49 | - See [#1](https://github.com/coderfin/logical-properties/issues/1) 50 | 51 | ## 0.1.0 52 | 53 | Initial release 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2021 coderfin 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🧠 Logical Properties 2 | 3 | Identify and replace CSS 💪 physical properties with 🧠 logical properties. 4 | 5 | ![Logical Properties](images/action.gif) 6 | 7 | ## Please leave a rating and review 8 | 9 | 10 | 11 | ## Features 12 | 13 | This extension contributes the following: 14 | 15 | - Command pallet - `Replace all 💪 physical properties with 🧠 logical properties.` 16 | - Replaces all of the detected physical properties with logical properties in the current file. 17 | - Command pallet 18 | - keybindings: `ctrl+shift+L`/`cmd+shift+L` 19 | - Replaces all of the detected physical properties with logical properties in the current file. 20 | - Keybindings 21 | - Editor Context Menu: `Replace all 💪 physical properties with 🧠 logical properties.` 22 | - Replaces all of the detected physical properties with logical properties in the current file. 23 | - Editor Context Menu 24 | - Problems 25 | - Shows any warning(s) if an open file contains physical properties. 26 | - Problems 27 | - Quick Fix/Light Bulb 28 | - Quickly change a single physical property to its equivalent logical property. 29 | - Quick Fix 30 | - Status Bar 31 | - Shows the number of physical properties detected in the current file. 32 | - Warning 33 | - Indicates if no physical properties were detected in the current file. 34 | - Logical 35 | - Click to replace all of the detected physical properties with logical properties in the current file. 36 | - Ignore Properties 37 | - The `logicalProperties.ignoreProperties` configuration setting can be used to ignore specific css properties. 38 | - Use, for example, `"logicalProperties.ignoreProperties": ["min-width", "max-width"]` to ignore `min-width` and `max-width`. 39 | - properties 40 | - properties-add-list 41 | - properties-add-json 42 | - Ignore Language IDs 43 | - The `logicalProperties.ignoreLanguageIds` configuration setting can be used to ignore specific files. 44 | - Use, for example, `"logicalProperties.ignoreLanguageIds": ["typescript"]` to ignore `Typescript` or `.ts` files. 45 | - languages 46 | - languages-add-list 47 | - languages-add-json 48 | - Supported Languages 49 | - Testing has only been done on `.css`, `.html`, and `.jsx` files. 50 | - In theory the following languages are supported: 51 | - coffeescript 52 | - css 53 | - html 54 | - javascript 55 | - javascriptreact 56 | - less 57 | - markdown 58 | - php 59 | - plaintext 60 | - sass 61 | - scss 62 | - stylus 63 | - typescript 64 | - typescriptreact 65 | - vue 66 | - vue-html 67 | - xml 68 | - xsl 69 | 70 | ## Gotchas 71 | 72 | A few things to be aware of when using this extension: 73 | 74 | - False positives/negatives are possible. 75 | - For example, in an HTML file if you use an `image` tag with the `height` attribute, 76 | the extension will currently detect the `height` attribute as a physical property. 77 | - Double check your file after using the `replace all` feature. 78 | - Changing a physical property to a logical property may or may not have an effect on styles that override styles from other files and third-party files. 79 | 80 | ## Known Issues 81 | 82 | Limited testing of this extension has been done. 83 | 84 | ## Release Notes 85 | 86 | ## 0.1.15 87 | 88 | - Ignore specific files 89 | - Added a way to ignore specific files through `ignoreLanguageIds`. 90 | - See: https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers 91 | - Renamed `ignoreList` to `ignoreProperties`. 92 | - `ignoreList` is now depricated and will be removed from a future version. 93 | 94 | ## 0.1.14 95 | 96 | - Fixed the extension to no longer check for or update values within media queries. 97 | - Logical properties aren't supported in media queries. 98 | - See [#4](https://github.com/coderfin/logical-properties/issues/4) 99 | - Note that the check is very simple and checks for parenthesis to determine if a replacement should be made. This could lead to false positives or false negatives. 100 | - Ignore specific CSS properties 101 | - Added a way to ignore specific properties through `ignoreList` (**depricated**, see: v0.1.15) 102 | - See [#14](https://github.com/coderfin/logical-properties/issues/14) 103 | 104 | ## 0.1.12 105 | 106 | - Fixed `border-top-right-radius` --> `border-start-end-radius` and Fixed `border-bottom-left-radius` --> `border-end-start-radius` 107 | - See [#7](https://github.com/coderfin/logical-properties/issues/7) 108 | - See [#8](https://github.com/coderfin/logical-properties/issues/8) 109 | - See [#9](https://github.com/coderfin/logical-properties/issues/9) 110 | 111 | ## 0.1.11 112 | 113 | Fix an issue related to regex matching indices not currently supported in node.js 114 | 115 | - VSCode uses Electron 116 | - Electron uses node.js for local apis 117 | - node.js does not currently support regex matching indices (`d` flag, `hasIndices`) 118 | - Using a polyfill 119 | - See [#2](https://github.com/coderfin/logical-properties/issues/2) 120 | 121 | ### 0.1.10 122 | 123 | Fixed which files diagnostics are shown for 124 | 125 | - Previously `.git` files were showing diagnostics 126 | - Files that were closed were still showing in `Problems` 127 | 128 | ### 0.1.9 129 | 130 | Fixed activation 131 | 132 | - Fixes a bug where the extension would not work on the first time it was installed. 133 | - See [#1](https://github.com/coderfin/logical-properties/issues/1) 134 | 135 | ### 0.1.0 136 | 137 | Initial release 138 | 139 | --- 140 | 141 | #### TODO 142 | 143 | - Update additional checks and logic for logical properties that do not map to physical properties 144 | - Write Tests 145 | - Link to or document basic info about logical properties 146 | -------------------------------------------------------------------------------- /ReplacePhysicalWithLogical.js: -------------------------------------------------------------------------------- 1 | const vscode = require('vscode'); 2 | 3 | /** 4 | * @typedef Diagnostic 5 | * @type {object} 6 | * @property {vscode.Range} range - the range. 7 | * @property {string} message - the message. 8 | * @property {string} code - the code. 9 | * @property {string} source - the source. 10 | * @property {object} term - the term. 11 | * @property {string} term.search - the search term. 12 | * @property {string} term.replacement - the replacement term. 13 | */ 14 | 15 | class ReplacePhysicalWithLogical { 16 | constructor(context, updateStatusBarItem) { 17 | const commandQuickFix = vscode.commands.registerCommand( 18 | 'logical-properties.replacePhysicalWithLogicalQuickFix', 19 | async (range, replacement) => { 20 | const editor = vscode.window.activeTextEditor; 21 | 22 | await new Promise((resolve) => 23 | editor 24 | .edit((editBuilder) => editBuilder.replace(range, replacement)) 25 | .then(resolve) 26 | ); 27 | 28 | updateStatusBarItem(); 29 | } 30 | ); 31 | 32 | const replaceAsync = async (diagnostic) => { 33 | return new Promise((resolve) => { 34 | vscode.commands 35 | .executeCommand( 36 | 'logical-properties.replacePhysicalWithLogicalQuickFix', 37 | diagnostic.range, 38 | diagnostic.term.replacement 39 | ) 40 | .then(resolve); 41 | }); 42 | }; 43 | 44 | const commandReplaceAll = vscode.commands.registerCommand( 45 | 'logical-properties.replacePhysicalWithLogicalReplaceAll', 46 | async () => { 47 | const currentDocument = vscode.window.activeTextEditor?.document; 48 | if (!currentDocument) { 49 | return; 50 | } 51 | 52 | const diagnosticsResponses = vscode.languages.getDiagnostics(); 53 | 54 | for (let diagnosticsResponse of diagnosticsResponses.reverse()) { 55 | const [documentUri, diagnostics] = 56 | /** @type {[vscode.Uri, Diagnostic[]]} */ ( 57 | /** @type {unknown} */ (diagnosticsResponse) 58 | ); 59 | 60 | if (documentUri === currentDocument.uri && diagnostics?.length) { 61 | diagnostics.reverse().sort((diagnosticA, diagnosticB) => { 62 | if (diagnosticB.range.start.line > diagnosticA.range.start.line) { 63 | return -1; 64 | } 65 | if (diagnosticB.range.start.line < diagnosticA.range.start.line) { 66 | return 1; 67 | } 68 | 69 | if ( 70 | diagnosticB.range.start.character > 71 | diagnosticA.range.start.character 72 | ) { 73 | return 1; 74 | } 75 | if ( 76 | diagnosticB.range.start.character < 77 | diagnosticA.range.start.character 78 | ) { 79 | return -1; 80 | } 81 | }); 82 | 83 | for (let diagnostic of diagnostics) { 84 | if (diagnostic.code === 'physical-property-detected') { 85 | await replaceAsync(diagnostic); 86 | } 87 | } 88 | } 89 | } 90 | 91 | updateStatusBarItem(); 92 | } 93 | ); 94 | 95 | context.subscriptions.push(commandReplaceAll); 96 | context.subscriptions.push(commandQuickFix); 97 | } 98 | 99 | provideCodeActions(document, range, context) { 100 | // for each diagnostic entry that has the matching `code`, create a code action command 101 | return context.diagnostics 102 | .filter((diagnostic) => diagnostic.code === 'physical-property-detected') 103 | .map((diagnostic) => this.createCommandCodeActionQuickFix(diagnostic)); 104 | } 105 | 106 | createCommandCodeActionQuickFix(diagnostic) { 107 | const action = new vscode.CodeAction( 108 | `Replace "${diagnostic.term.search}" with "${diagnostic.term.replacement}".`, 109 | vscode.CodeActionKind.QuickFix 110 | ); 111 | 112 | action.diagnostics = [diagnostic]; 113 | action.isPreferred = true; 114 | action.command = { 115 | command: 'logical-properties.replacePhysicalWithLogicalQuickFix', 116 | title: 'Use logical property', 117 | tooltip: 'Replace physical property with logical property.', 118 | arguments: [diagnostic.range, diagnostic.term.replacement], 119 | }; 120 | 121 | return action; 122 | } 123 | } 124 | 125 | module.exports = ReplacePhysicalWithLogical; 126 | -------------------------------------------------------------------------------- /extension.js: -------------------------------------------------------------------------------- 1 | const vscode = require('vscode'); 2 | const ReplacePhysicalWithLogical = require('./ReplacePhysicalWithLogical'); 3 | const execWithIndices = require('regexp-match-indices'); 4 | 5 | /** 6 | * @typedef Diagnostic 7 | * @type {object} 8 | * @property {vscode.Range} range - the range. 9 | * @property {string} message - the message. 10 | * @property {string} code - the code. 11 | * @property {string} source - the source. 12 | * @property {object} term - the term. 13 | * @property {string} term.search - the search term. 14 | * @property {string} term.replacement - the replacement term. 15 | */ 16 | 17 | const TERMS = [ 18 | // FLOAT 19 | { 20 | search: '(?:[^-]|^)(float:(\\s*)(left)(\\s!important)?)(?:;|$|\\s|"|})', 21 | replacement: 'float:$2inline-start$4', 22 | isStatic: true, 23 | ignorePropertiesNames: ['float', 'float-left'], 24 | }, 25 | { 26 | search: '(?:[^-]|^)(float:(\\s*)(right)(\\s!important)?)(?:;|$|\\s|"|})', 27 | replacement: 'float:$2inline-end$4', 28 | isStatic: true, 29 | ignorePropertiesNames: ['float', 'float-right'], 30 | }, 31 | { 32 | search: '(?:[^-]|^)(clear:(\\s*)(left)(\\s!important)?)(?:;|$|\\s|"|})', 33 | replacement: 'clear:$2inline-start$4', 34 | isStatic: true, 35 | ignorePropertiesNames: ['clear', 'clear-left'], 36 | }, 37 | { 38 | search: '(?:[^-]|^)(clear:(\\s*)(right)(\\s!important)?)(?:;|$|\\s|"|})', 39 | replacement: 'clear:$2inline-end$4', 40 | isStatic: true, 41 | ignorePropertiesNames: ['clear', 'clear-right'], 42 | }, 43 | // TEXT ALIGN 44 | { 45 | search: 46 | '(?:[^-]|^)(text-align:(\\s*)(left)(\\s!important)?)(?:;|$|\\s|"|})', 47 | replacement: 'text-align:$2start$4', 48 | isStatic: true, 49 | ignorePropertiesNames: ['text-align', 'text-align-left'], 50 | }, 51 | { 52 | search: 53 | '(?:[^-]|^)(text-align:(\\s*)(right)(\\s!important)?)(?:;|$|\\s|"|})', 54 | replacement: 'text-align:$2end$4', 55 | isStatic: true, 56 | ignorePropertiesNames: ['text-align', 'text-align-right'], 57 | }, 58 | // POSITION 59 | { 60 | search: 'left', 61 | replacement: 'inset-inline-start', 62 | }, 63 | { 64 | search: 'right', 65 | replacement: 'inset-inline-end', 66 | }, 67 | { 68 | search: 'top', 69 | replacement: 'inset-block-start', 70 | }, 71 | { 72 | search: 'bottom', 73 | replacement: 'inset-block-end', 74 | }, 75 | // DIMENSIONS 76 | { 77 | search: 'width', 78 | replacement: 'inline-size', 79 | }, 80 | { 81 | search: 'height', 82 | replacement: 'block-size', 83 | }, 84 | { 85 | search: 'min-width', 86 | replacement: 'min-inline-size', 87 | }, 88 | { 89 | search: 'min-height', 90 | replacement: 'min-block-size', 91 | }, 92 | { 93 | search: 'max-width', 94 | replacement: 'max-inline-size', 95 | }, 96 | { 97 | search: 'max-height', 98 | replacement: 'max-block-size', 99 | }, 100 | // MARGINS 101 | { 102 | search: 'margin-left', 103 | replacement: 'margin-inline-start', 104 | }, 105 | { 106 | search: 'margin-right', 107 | replacement: 'margin-inline-end', 108 | }, 109 | { 110 | search: 'margin-top', 111 | replacement: 'margin-block-start', 112 | }, 113 | { 114 | search: 'margin-bottom', 115 | replacement: 'margin-block-end', 116 | }, 117 | // PADDINGS 118 | { 119 | search: 'padding-left', 120 | replacement: 'padding-inline-start', 121 | }, 122 | { 123 | search: 'padding-right', 124 | replacement: 'padding-inline-end', 125 | }, 126 | { 127 | search: 'padding-top', 128 | replacement: 'padding-block-start', 129 | }, 130 | { 131 | search: 'padding-bottom', 132 | replacement: 'padding-block-end', 133 | }, 134 | // BORDERS 135 | { 136 | search: 'border-left-width', 137 | replacement: 'border-inline-start-width', 138 | }, 139 | { 140 | search: 'border-right-width', 141 | replacement: 'border-inline-end-width', 142 | }, 143 | { 144 | search: 'border-top-width', 145 | replacement: 'border-block-start-width', 146 | }, 147 | { 148 | search: 'border-bottom-width', 149 | replacement: 'border-block-end-width', 150 | }, 151 | { 152 | search: 'border-left-color', 153 | replacement: 'border-inline-start-color', 154 | }, 155 | { 156 | search: 'border-right-color', 157 | replacement: 'border-inline-end-color', 158 | }, 159 | { 160 | search: 'border-top-color', 161 | replacement: 'border-block-start-color', 162 | }, 163 | { 164 | search: 'border-bottom-color', 165 | replacement: 'border-block-end-color', 166 | }, 167 | { 168 | search: 'border-left-style', 169 | replacement: 'border-inline-start-style', 170 | }, 171 | { 172 | search: 'border-right-style', 173 | replacement: 'border-inline-end-style', 174 | }, 175 | { 176 | search: 'border-top-style', 177 | replacement: 'border-block-start-style', 178 | }, 179 | { 180 | search: 'border-bottom-style', 181 | replacement: 'border-block-end-style', 182 | }, 183 | { 184 | search: 'border-top-left-radius', 185 | replacement: 'border-start-start-radius', 186 | }, 187 | { 188 | search: 'border-top-right-radius', 189 | replacement: 'border-start-end-radius', 190 | }, 191 | { 192 | search: 'border-bottom-left-radius', 193 | replacement: 'border-end-start-radius', 194 | }, 195 | { 196 | search: 'border-bottom-right-radius', 197 | replacement: 'border-end-end-radius', 198 | }, 199 | { 200 | search: 'border-left', 201 | replacement: 'border-inline-start', 202 | }, 203 | { 204 | search: 'border-right', 205 | replacement: 'border-inline-end', 206 | }, 207 | { 208 | search: 'border-top', 209 | replacement: 'border-block-start', 210 | }, 211 | { 212 | search: 'border-bottom', 213 | replacement: 'border-block-end', 214 | }, 215 | ]; 216 | 217 | /** 218 | * @param {vscode.TextDocument} document 219 | * @returns {Promise} 220 | */ 221 | async function getDiagnostics(document) { 222 | const configuration = vscode.workspace.getConfiguration('logicalProperties'); 223 | 224 | if ( 225 | document.isClosed || 226 | configuration?.ignoreLanguageIds?.includes(document.languageId) 227 | ) { 228 | return []; 229 | } 230 | 231 | const ignoreProperties = configuration?.ignoreProperties?.length 232 | ? configuration?.ignoreProperties 233 | : configuration?.ignoreList; 234 | 235 | const text = document.getText(); 236 | const diagnostics = []; 237 | 238 | const lines = text.split(/\r\n|\n/); 239 | 240 | let i = 0; 241 | while (lines.length > i) { 242 | if (lines[i].startsWith('@media')) { 243 | i++; 244 | continue; 245 | } 246 | 247 | for (let j = 0; j < TERMS.length; j++) { 248 | let { search, replacement, isStatic, ignorePropertiesNames } = TERMS[j]; 249 | 250 | if ( 251 | ignoreProperties?.length && 252 | ignorePropertiesNames && 253 | ignoreProperties.some((currentIgnoreProperties) => 254 | ignorePropertiesNames.includes(currentIgnoreProperties) 255 | ) 256 | ) { 257 | continue; 258 | } else if ( 259 | ignoreProperties?.length && 260 | ignoreProperties.includes(search) 261 | ) { 262 | continue; 263 | } 264 | 265 | const searchTermRegExp = new RegExp(search, 'gi'); 266 | if (!searchTermRegExp.test(lines[i])) { 267 | continue; 268 | } 269 | 270 | let toSearch = isStatic 271 | ? search 272 | : `(?:[^-]|^)(${search}:(\\s*)(.*?)(\\s!important)?)(?:;|$|\\s|"|}|\\))`; 273 | let withReplacement = isStatic ? replacement : `${replacement}:$2$3$4`; 274 | const matchesRegExp = new RegExp(toSearch, 'gi'); 275 | const replaceRegExp = new RegExp(toSearch, 'gi'); 276 | let finalSearch; 277 | let finalReplacement; 278 | let start; 279 | let end; 280 | let matches; 281 | while ((matches = execWithIndices(matchesRegExp, lines[i])) !== null) { 282 | // @ts-ignore 283 | start = matches.indices[1][0]; // start location of the match group without whitespace, etc. 284 | // @ts-ignore 285 | end = matches.indices[1][1]; 286 | 287 | finalSearch = matches[1]; 288 | finalReplacement = withReplacement; 289 | 290 | if (lines[i].substring(end, end + 1) === ';') { 291 | end += 1; 292 | finalSearch += ';'; 293 | finalReplacement += ';'; 294 | } 295 | 296 | finalReplacement = finalSearch.replace(replaceRegExp, finalReplacement); 297 | 298 | diagnostics.push({ 299 | severity: vscode.DiagnosticSeverity.Warning, 300 | message: `🧠 ${finalReplacement} ⇔ ${finalSearch} 💪`, 301 | term: { 302 | search: finalSearch, 303 | replacement: finalReplacement, 304 | isStatic, 305 | }, 306 | code: 'physical-property-detected', 307 | source: 'Logical Properties', 308 | range: new vscode.Range(i, start, i, end), 309 | }); 310 | } 311 | } 312 | 313 | i++; 314 | } 315 | 316 | return diagnostics; 317 | } 318 | 319 | /** 320 | * @param {vscode.DiagnosticCollection} diagnosticCollection 321 | * @param {vscode.TextDocument} document 322 | * @returns {Promise} 323 | */ 324 | async function handler(diagnosticCollection, document) { 325 | if (document && document.uri.scheme === 'file') { 326 | diagnosticCollection.set(document.uri, await getDiagnostics(document)); 327 | } 328 | } 329 | 330 | /** 331 | * @type {vscode.StatusBarItem} 332 | */ 333 | let statusBarItem; 334 | 335 | async function updateStatusBarItem() { 336 | let numberOfDiagnostics = 0; 337 | const diagnosticsResponses = vscode.languages.getDiagnostics(); 338 | 339 | for (let diagnosticsResponse of diagnosticsResponses) { 340 | const currentDocument = vscode.window.activeTextEditor?.document; 341 | if (!currentDocument) { 342 | continue; 343 | } 344 | 345 | const [documentUri, diagnostics] = 346 | /** @type {[vscode.Uri, Diagnostic[]]} */ ( 347 | /** @type {unknown} */ (diagnosticsResponse) 348 | ); 349 | 350 | if ( 351 | documentUri.scheme === 'file' && 352 | documentUri.path === currentDocument.uri.path && 353 | diagnostics?.length 354 | ) { 355 | for (let diagnostic of diagnostics) { 356 | if (diagnostic.code === 'physical-property-detected') { 357 | numberOfDiagnostics++; 358 | } 359 | } 360 | } 361 | } 362 | 363 | statusBarItem.text = `${ 364 | numberOfDiagnostics 365 | ? `$(alert) ${numberOfDiagnostics} 💪` 366 | : `$(check-all) 🧠` 367 | }`; 368 | statusBarItem.name = 'Logical Properties'; 369 | 370 | if (numberOfDiagnostics) { 371 | statusBarItem.command = 372 | 'logical-properties.replacePhysicalWithLogicalReplaceAll'; 373 | statusBarItem.tooltip = `${numberOfDiagnostics} possible physical ${ 374 | numberOfDiagnostics ? 'properties' : 'property' 375 | } detected. 💪 376 | 377 | 🖱 - Click to replace all 💪 physical properties with 🧠 logical properties.`; 378 | statusBarItem.color = new vscode.ThemeColor( 379 | 'problemsWarningIcon.foreground' 380 | ); 381 | } else { 382 | statusBarItem.command = null; 383 | statusBarItem.tooltip = `🧠 You've gone logical! 384 | No physical properties detected!`; 385 | statusBarItem.color = '#F2ABBA'; 386 | } 387 | 388 | statusBarItem.show(); 389 | } 390 | 391 | /** 392 | * @param {vscode.ExtensionContext} context 393 | * @returns {Promise} 394 | */ 395 | async function activate(context) { 396 | const diagnosticCollection = 397 | vscode.languages.createDiagnosticCollection('logical-properties'); 398 | 399 | // When to run the check 400 | const didOpen = vscode.workspace.onDidOpenTextDocument(async (document) => { 401 | await handler(diagnosticCollection, document); 402 | 403 | updateStatusBarItem(); 404 | }); 405 | const didClose = vscode.workspace.onDidCloseTextDocument(async (document) => { 406 | await handler(diagnosticCollection, document); 407 | 408 | updateStatusBarItem(); 409 | }); 410 | const didChange = vscode.workspace.onDidChangeTextDocument(async (event) => { 411 | await handler(diagnosticCollection, event?.document); 412 | 413 | updateStatusBarItem(); 414 | }); 415 | const didChangeVisible = vscode.window.onDidChangeVisibleTextEditors( 416 | async (textEditors) => { 417 | for (let textEditor of textEditors) { 418 | await handler(diagnosticCollection, textEditor?.document); 419 | } 420 | 421 | updateStatusBarItem(); 422 | } 423 | ); 424 | 425 | // Lightbulb/Quick Fix action 426 | const codeActionProvider = vscode.languages.registerCodeActionsProvider( 427 | [ 428 | { scheme: 'file', language: 'coffeescript' }, 429 | { scheme: 'file', language: 'css' }, 430 | { scheme: 'file', language: 'html' }, 431 | { scheme: 'file', language: 'javascript' }, 432 | { scheme: 'file', language: 'javascriptreact' }, 433 | { scheme: 'file', language: 'less' }, 434 | { scheme: 'file', language: 'markdown' }, 435 | { scheme: 'file', language: 'php' }, 436 | { scheme: 'file', language: 'plaintext' }, 437 | { scheme: 'file', language: 'sass' }, 438 | { scheme: 'file', language: 'scss' }, 439 | { scheme: 'file', language: 'stylus' }, 440 | { scheme: 'file', language: 'typescript' }, 441 | { scheme: 'file', language: 'typescriptreact' }, 442 | { scheme: 'file', language: 'vue' }, 443 | { scheme: 'file', language: 'vue-html' }, 444 | { scheme: 'file', language: 'xml' }, 445 | { scheme: 'file', language: 'xsl' }, 446 | ], 447 | new ReplacePhysicalWithLogical(context, updateStatusBarItem) 448 | ); 449 | 450 | // If we have an activeTextEditor when we open the workspace, trigger the handler 451 | if (vscode.window.activeTextEditor) { 452 | await handler( 453 | diagnosticCollection, 454 | vscode.window.activeTextEditor?.document 455 | ); 456 | } 457 | 458 | // Push all of the disposables that should be cleaned up when the extension is disabled 459 | context.subscriptions.push( 460 | diagnosticCollection, 461 | didOpen, 462 | didClose, 463 | didChange, 464 | didChangeVisible, 465 | codeActionProvider 466 | ); 467 | 468 | // Show statusbar item 469 | statusBarItem = vscode.window.createStatusBarItem( 470 | vscode.StatusBarAlignment.Right, 471 | -100 472 | ); 473 | context.subscriptions.push(statusBarItem); 474 | 475 | // register some listener that make sure the status bar item always up-to-date 476 | context.subscriptions.push( 477 | vscode.window.onDidChangeActiveTextEditor(updateStatusBarItem), 478 | vscode.window.onDidChangeTextEditorSelection(updateStatusBarItem), 479 | vscode.window.onDidChangeVisibleTextEditors(updateStatusBarItem) 480 | ); 481 | 482 | // update status bar item once at start 483 | updateStatusBarItem(); 484 | } 485 | 486 | function deactivate() {} 487 | 488 | module.exports = { 489 | activate, 490 | deactivate, 491 | }; 492 | -------------------------------------------------------------------------------- /images/action.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/action.gif -------------------------------------------------------------------------------- /images/command-pallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/command-pallet.png -------------------------------------------------------------------------------- /images/context-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/context-menu.png -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/icon.png -------------------------------------------------------------------------------- /images/keybindings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/keybindings.png -------------------------------------------------------------------------------- /images/languages-add-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/languages-add-json.png -------------------------------------------------------------------------------- /images/languages-add-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/languages-add-list.png -------------------------------------------------------------------------------- /images/languages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/languages.png -------------------------------------------------------------------------------- /images/logical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/logical.png -------------------------------------------------------------------------------- /images/problems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/problems.png -------------------------------------------------------------------------------- /images/properties-add-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/properties-add-json.png -------------------------------------------------------------------------------- /images/properties-add-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/properties-add-list.png -------------------------------------------------------------------------------- /images/properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/properties.png -------------------------------------------------------------------------------- /images/quick-fix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/quick-fix.png -------------------------------------------------------------------------------- /images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderfin/logical-properties/feebf72ac08bc101a688d6835fe98f6d50a32f1f/images/warning.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "checkJs": true /* Typecheck .js files. */, 6 | "lib": ["ES2020"] 7 | }, 8 | "exclude": ["node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logical-properties", 3 | "version": "0.1.16", 4 | "description": "Identify and replace CSS 💪 physical properties with 🧠 logical properties.", 5 | "keywords": [ 6 | "css", 7 | "logical", 8 | "properties", 9 | "physical", 10 | "replace", 11 | "identify", 12 | "debuggers", 13 | "formatters", 14 | "linters", 15 | "programming languages", 16 | "languages" 17 | ], 18 | "homepage": "https://github.com/coderfin/logical-properties", 19 | "license": "MIT", 20 | "author": { 21 | "name": "coderfin", 22 | "url": "https://github.com/coderfin", 23 | "email": "coderfin@gmail.com" 24 | }, 25 | "publisher": "coderfin", 26 | "main": "./extension.js", 27 | "repository": { 28 | "type": "git", 29 | "url": "https://github.com/coderfin/logical-properties.git" 30 | }, 31 | "scripts": { 32 | "lint": "eslint .", 33 | "pretest": "yarn run lint", 34 | "test": "node ./test/runTest.js", 35 | "package": "vsce package", 36 | "publish": "vsce publish", 37 | "login": "vsce login" 38 | }, 39 | "devDependencies": { 40 | "@types/glob": "^7.1.4", 41 | "@types/mocha": "^9.0.0", 42 | "@types/node": "14.x", 43 | "@types/vscode": "^1.63.0", 44 | "@vscode/test-electron": "^1.6.2", 45 | "eslint": "^8.1.0", 46 | "glob": "^7.1.7", 47 | "jshint": "^2.13.3", 48 | "mocha": "^9.1.3", 49 | "typescript": "^4.4.4" 50 | }, 51 | "dependencies": { 52 | "regexp-match-indices": "^1.0.2" 53 | }, 54 | "engines": { 55 | "vscode": "^1.63.0" 56 | }, 57 | "private": true, 58 | "displayName": "🧠 Logical Properties", 59 | "activationEvents": [ 60 | "onStartupFinished" 61 | ], 62 | "categories": [ 63 | "Debuggers", 64 | "Formatters", 65 | "Linters", 66 | "Programming Languages", 67 | "Other" 68 | ], 69 | "contributes": { 70 | "commands": [ 71 | { 72 | "command": "logical-properties.replacePhysicalWithLogicalReplaceAll", 73 | "title": "Replace all 💪 physical properties with 🧠 logical properties." 74 | } 75 | ], 76 | "configuration": { 77 | "title": "logicalProperties", 78 | "properties": { 79 | "logicalProperties.ignoreLanguageIds": { 80 | "default": [], 81 | "markdownDescription": "Ignore files with the specified language identifiers. \n\n See: https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers \n\n Note: Very little testing has been done and a given file may or may not support or work with with this extension.", 82 | "items": { 83 | "type": "string", 84 | "enum": [ 85 | "abap", 86 | "bat", 87 | "bibtex", 88 | "c", 89 | "clojure", 90 | "coffeescript", 91 | "cpp", 92 | "csharp", 93 | "css", 94 | "cuda-cpp", 95 | "d", 96 | "diff", 97 | "dockercompose", 98 | "dockerfile", 99 | "erlang", 100 | "fsharp", 101 | "git-commit", 102 | "git-rebase", 103 | "go", 104 | "groovy", 105 | "haml", 106 | "handlebars", 107 | "haskell", 108 | "html", 109 | "ini", 110 | "jade", 111 | "java", 112 | "javascript", 113 | "javascriptreact", 114 | "json", 115 | "jsonc", 116 | "julia", 117 | "latex", 118 | "less", 119 | "lua", 120 | "makefile", 121 | "markdown", 122 | "objective-c", 123 | "objective-cpp", 124 | "ocaml", 125 | "pascal", 126 | "pascal", 127 | "perl", 128 | "perl6", 129 | "php", 130 | "plaintext", 131 | "powershell", 132 | "pug", 133 | "python", 134 | "r", 135 | "razor", 136 | "ruby", 137 | "rust", 138 | "sass", 139 | "scss", 140 | "shaderlab", 141 | "shellscript", 142 | "slim", 143 | "sql", 144 | "stylus", 145 | "svelte", 146 | "swift", 147 | "tex", 148 | "typescript", 149 | "typescriptreact", 150 | "vb", 151 | "vue", 152 | "vue-html", 153 | "xml", 154 | "xsl", 155 | "yaml" 156 | ] 157 | }, 158 | "type": "array" 159 | }, 160 | "logicalProperties.ignoreProperties": { 161 | "default": [], 162 | "description": "Ignore the specified css properties.", 163 | "items": { 164 | "type": "string", 165 | "enum": [ 166 | "border-bottom-color", 167 | "border-bottom-left-radius", 168 | "border-bottom-right-radius", 169 | "border-bottom-style", 170 | "border-bottom-width", 171 | "border-bottom", 172 | "border-left-color", 173 | "border-left-style", 174 | "border-left-width", 175 | "border-left", 176 | "border-right-color", 177 | "border-right-style", 178 | "border-right-width", 179 | "border-right", 180 | "border-top-color", 181 | "border-top-left-radius", 182 | "border-top-right-radius", 183 | "border-top-style", 184 | "border-top-width", 185 | "border-top", 186 | "bottom", 187 | "clear-left", 188 | "clear-right", 189 | "clear", 190 | "float-left", 191 | "float-right", 192 | "float", 193 | "height", 194 | "left", 195 | "margin-bottom", 196 | "margin-left", 197 | "margin-right", 198 | "margin-top", 199 | "max-height", 200 | "max-width", 201 | "min-height", 202 | "min-width", 203 | "padding-bottom", 204 | "padding-left", 205 | "padding-right", 206 | "padding-top", 207 | "right", 208 | "text-align-left", 209 | "text-align-right", 210 | "text-align", 211 | "top", 212 | "width" 213 | ] 214 | }, 215 | "type": "array" 216 | }, 217 | "logicalProperties.ignoreList": { 218 | "default": [], 219 | "markdownDescription": "Ignore the specified css properties. \n\n Deprecated: Use `logicalProperties.ignoreProperties` instead.", 220 | "deprecationMessage": "Deprecated: Use `logicalProperties.ignoreProperties` instead.", 221 | "items": { 222 | "type": "string", 223 | "enum": [ 224 | "border-bottom-color", 225 | "border-bottom-left-radius", 226 | "border-bottom-right-radius", 227 | "border-bottom-style", 228 | "border-bottom-width", 229 | "border-bottom", 230 | "border-left-color", 231 | "border-left-style", 232 | "border-left-width", 233 | "border-left", 234 | "border-right-color", 235 | "border-right-style", 236 | "border-right-width", 237 | "border-right", 238 | "border-top-color", 239 | "border-top-left-radius", 240 | "border-top-right-radius", 241 | "border-top-style", 242 | "border-top-width", 243 | "border-top", 244 | "bottom", 245 | "clear-left", 246 | "clear-right", 247 | "clear", 248 | "float-left", 249 | "float-right", 250 | "float", 251 | "height", 252 | "left", 253 | "margin-bottom", 254 | "margin-left", 255 | "margin-right", 256 | "margin-top", 257 | "max-height", 258 | "max-width", 259 | "min-height", 260 | "min-width", 261 | "padding-bottom", 262 | "padding-left", 263 | "padding-right", 264 | "padding-top", 265 | "right", 266 | "text-align-left", 267 | "text-align-right", 268 | "text-align", 269 | "top", 270 | "width" 271 | ] 272 | }, 273 | "type": "array" 274 | } 275 | } 276 | }, 277 | "keybindings": [ 278 | { 279 | "command": "logical-properties.replacePhysicalWithLogicalReplaceAll", 280 | "key": "ctrl+shift+l", 281 | "mac": "cmd+shift+l", 282 | "when": "editorFocus" 283 | } 284 | ], 285 | "menus": { 286 | "editor/context": [ 287 | { 288 | "when": "editorFocus", 289 | "command": "logical-properties.replacePhysicalWithLogicalReplaceAll", 290 | "group": "logicalProperties@1" 291 | } 292 | ] 293 | } 294 | }, 295 | "galleryBanner": { 296 | "color": "#FFEB85", 297 | "theme": "light" 298 | }, 299 | "preview": true, 300 | "icon": "images/icon.png" 301 | } 302 | -------------------------------------------------------------------------------- /test/runTest.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | const { runTests } = require('@vscode/test-electron'); 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 the extension test script 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 | -------------------------------------------------------------------------------- /test/suite/extension.test.js: -------------------------------------------------------------------------------- 1 | const assert = require('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 | const vscode = require('vscode'); 6 | // const myExtension = require('../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 | -------------------------------------------------------------------------------- /test/suite/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const Mocha = require('mocha'); 3 | const glob = require('glob'); 4 | 5 | function run() { 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 | 40 | module.exports = { 41 | run, 42 | }; 43 | -------------------------------------------------------------------------------- /test/suite/test.css: -------------------------------------------------------------------------------- 1 | #🧠 { 2 | float: left; float: right; 3 | clear: left; clear: right; 4 | left: 20px !important; right: 15px; 5 | top: 10px; bottom: 5px; 6 | text-align: left; text-align: right; 7 | width: 100px; height: 200px; 8 | min-width: 100px; max-width: 200px; 9 | min-height: 100px; max-height: 200px; 10 | border-bottom: 5px; border-bottom-color: #f2abba; border-bottom-style: solid; border-bottom-width: 5px; 11 | border-top: 5px; border-top-color: #f2abba; border-top-style: solid; border-top-width: 5px; 12 | border-right: 5px; border-right-color: #f2abba; border-right-style: solid; border-right-width: 5px; 13 | border-left: 5px; border-left-color: #f2abba; border-left-style: solid; border-left-width: 5px; 14 | border-top-left-radius: 5px; border-bottom-left-radius: 5px; 15 | border-top-right-radius: 5px; border-bottom-right-radius: 5px; 16 | padding-top: 5px; padding-bottom: 5px; 17 | padding-left: 5px; padding-right: 5px; 18 | margin-top: 5px; margin-bottom: 5px; 19 | margin-left: 5px; margin-right: 5px; 20 | } 21 | 22 | @media (min-width: 100px) { 23 | #🧠 { 24 | left: 50px; 25 | } 26 | } 27 | 28 | @media (min-width: 100px) and (max-width: 200px) { 29 | #🧠 { 30 | left: 50px; 31 | } 32 | } 33 | 34 | @media (width <= 500px) { 35 | #🧠 { 36 | left: 50px; 37 | } 38 | } 39 | 40 | @media (100px < width < 200px) { 41 | #🧠 { 42 | left: 50px; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /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 | * `extension.js` - 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 `extension.js` 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 `extension.js`. 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 | ## Explore the API 25 | 26 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 27 | 28 | ## Run tests 29 | 30 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 31 | * Press `F5` to run the tests in a new window with your extension loaded. 32 | * See the output of the test result in the debug console. 33 | * Make changes to `src/test/suite/extension.test.js` or create new test files inside the `test/suite` folder. 34 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 35 | * You can create folders inside the `test` folder to structure your tests any way you want. 36 | ## Go further 37 | 38 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 39 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 40 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@eslint-community/eslint-utils@^4.2.0": 11 | version "4.4.0" 12 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 13 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 14 | dependencies: 15 | eslint-visitor-keys "^3.3.0" 16 | 17 | "@eslint-community/regexpp@^4.6.1": 18 | version "4.10.0" 19 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" 20 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== 21 | 22 | "@eslint/eslintrc@^2.1.3": 23 | version "2.1.3" 24 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" 25 | integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== 26 | dependencies: 27 | ajv "^6.12.4" 28 | debug "^4.3.2" 29 | espree "^9.6.0" 30 | globals "^13.19.0" 31 | ignore "^5.2.0" 32 | import-fresh "^3.2.1" 33 | js-yaml "^4.1.0" 34 | minimatch "^3.1.2" 35 | strip-json-comments "^3.1.1" 36 | 37 | "@eslint/js@8.53.0": 38 | version "8.53.0" 39 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" 40 | integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== 41 | 42 | "@humanwhocodes/config-array@^0.11.13": 43 | version "0.11.13" 44 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" 45 | integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== 46 | dependencies: 47 | "@humanwhocodes/object-schema" "^2.0.1" 48 | debug "^4.1.1" 49 | minimatch "^3.0.5" 50 | 51 | "@humanwhocodes/module-importer@^1.0.1": 52 | version "1.0.1" 53 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 54 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 55 | 56 | "@humanwhocodes/object-schema@^2.0.1": 57 | version "2.0.1" 58 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" 59 | integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== 60 | 61 | "@nodelib/fs.scandir@2.1.5": 62 | version "2.1.5" 63 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 64 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 65 | dependencies: 66 | "@nodelib/fs.stat" "2.0.5" 67 | run-parallel "^1.1.9" 68 | 69 | "@nodelib/fs.stat@2.0.5": 70 | version "2.0.5" 71 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 72 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 73 | 74 | "@nodelib/fs.walk@^1.2.8": 75 | version "1.2.8" 76 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 77 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 78 | dependencies: 79 | "@nodelib/fs.scandir" "2.1.5" 80 | fastq "^1.6.0" 81 | 82 | "@tootallnate/once@1": 83 | version "1.1.2" 84 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" 85 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== 86 | 87 | "@types/glob@^7.1.4": 88 | version "7.2.0" 89 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" 90 | integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== 91 | dependencies: 92 | "@types/minimatch" "*" 93 | "@types/node" "*" 94 | 95 | "@types/minimatch@*": 96 | version "5.1.2" 97 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" 98 | integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== 99 | 100 | "@types/mocha@^9.0.0": 101 | version "9.1.1" 102 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" 103 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 104 | 105 | "@types/node@*": 106 | version "20.8.10" 107 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" 108 | integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== 109 | dependencies: 110 | undici-types "~5.26.4" 111 | 112 | "@types/node@14.x": 113 | version "14.18.63" 114 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" 115 | integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== 116 | 117 | "@types/vscode@^1.63.0": 118 | version "1.84.0" 119 | resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.84.0.tgz#801e3a546a4c8ccb197b191ec9ff7b4f4da2dce0" 120 | integrity sha512-lCGOSrhT3cL+foUEqc8G1PVZxoDbiMmxgnUZZTEnHF4mC47eKAUtBGAuMLY6o6Ua8PAuNCoKXbqPmJd1JYnQfg== 121 | 122 | "@ungap/promise-all-settled@1.1.2": 123 | version "1.1.2" 124 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 125 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 126 | 127 | "@ungap/structured-clone@^1.2.0": 128 | version "1.2.0" 129 | resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" 130 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 131 | 132 | "@vscode/test-electron@^1.6.2": 133 | version "1.6.2" 134 | resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-1.6.2.tgz#f639cab19a0013949015079dcfd2ff0c1aa88a1b" 135 | integrity sha512-W01ajJEMx6223Y7J5yaajGjVs1QfW3YGkkOJHVKfAMEqNB1ZHN9wCcViehv5ZwVSSJnjhu6lYEYgwBdHtCxqhQ== 136 | dependencies: 137 | http-proxy-agent "^4.0.1" 138 | https-proxy-agent "^5.0.0" 139 | rimraf "^3.0.2" 140 | unzipper "^0.10.11" 141 | 142 | acorn-jsx@^5.3.2: 143 | version "5.3.2" 144 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 145 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 146 | 147 | acorn@^8.9.0: 148 | version "8.11.2" 149 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" 150 | integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== 151 | 152 | agent-base@6: 153 | version "6.0.2" 154 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 155 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 156 | dependencies: 157 | debug "4" 158 | 159 | ajv@^6.12.4: 160 | version "6.12.6" 161 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 162 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 163 | dependencies: 164 | fast-deep-equal "^3.1.1" 165 | fast-json-stable-stringify "^2.0.0" 166 | json-schema-traverse "^0.4.1" 167 | uri-js "^4.2.2" 168 | 169 | ansi-colors@4.1.1: 170 | version "4.1.1" 171 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 172 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 173 | 174 | ansi-regex@^5.0.1: 175 | version "5.0.1" 176 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 177 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 178 | 179 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 180 | version "4.3.0" 181 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 182 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 183 | dependencies: 184 | color-convert "^2.0.1" 185 | 186 | anymatch@~3.1.2: 187 | version "3.1.3" 188 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 189 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 190 | dependencies: 191 | normalize-path "^3.0.0" 192 | picomatch "^2.0.4" 193 | 194 | argparse@^2.0.1: 195 | version "2.0.1" 196 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 197 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 198 | 199 | balanced-match@^1.0.0: 200 | version "1.0.2" 201 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 202 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 203 | 204 | big-integer@^1.6.17: 205 | version "1.6.51" 206 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" 207 | integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== 208 | 209 | binary-extensions@^2.0.0: 210 | version "2.2.0" 211 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 212 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 213 | 214 | binary@~0.3.0: 215 | version "0.3.0" 216 | resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" 217 | integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== 218 | dependencies: 219 | buffers "~0.1.1" 220 | chainsaw "~0.1.0" 221 | 222 | bluebird@~3.4.1: 223 | version "3.4.7" 224 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" 225 | integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== 226 | 227 | brace-expansion@^1.1.7: 228 | version "1.1.11" 229 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 230 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 231 | dependencies: 232 | balanced-match "^1.0.0" 233 | concat-map "0.0.1" 234 | 235 | braces@~3.0.2: 236 | version "3.0.2" 237 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 238 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 239 | dependencies: 240 | fill-range "^7.0.1" 241 | 242 | browser-stdout@1.3.1: 243 | version "1.3.1" 244 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 245 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 246 | 247 | buffer-indexof-polyfill@~1.0.0: 248 | version "1.0.2" 249 | resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" 250 | integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== 251 | 252 | buffers@~0.1.1: 253 | version "0.1.1" 254 | resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" 255 | integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== 256 | 257 | callsites@^3.0.0: 258 | version "3.1.0" 259 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 260 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 261 | 262 | camelcase@^6.0.0: 263 | version "6.3.0" 264 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 265 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 266 | 267 | chainsaw@~0.1.0: 268 | version "0.1.0" 269 | resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" 270 | integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== 271 | dependencies: 272 | traverse ">=0.3.0 <0.4" 273 | 274 | chalk@^4.0.0, chalk@^4.1.0: 275 | version "4.1.2" 276 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 277 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 278 | dependencies: 279 | ansi-styles "^4.1.0" 280 | supports-color "^7.1.0" 281 | 282 | chokidar@3.5.3: 283 | version "3.5.3" 284 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 285 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 286 | dependencies: 287 | anymatch "~3.1.2" 288 | braces "~3.0.2" 289 | glob-parent "~5.1.2" 290 | is-binary-path "~2.1.0" 291 | is-glob "~4.0.1" 292 | normalize-path "~3.0.0" 293 | readdirp "~3.6.0" 294 | optionalDependencies: 295 | fsevents "~2.3.2" 296 | 297 | cli@~1.0.0: 298 | version "1.0.1" 299 | resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" 300 | integrity sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg== 301 | dependencies: 302 | exit "0.1.2" 303 | glob "^7.1.1" 304 | 305 | cliui@^7.0.2: 306 | version "7.0.4" 307 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 308 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 309 | dependencies: 310 | string-width "^4.2.0" 311 | strip-ansi "^6.0.0" 312 | wrap-ansi "^7.0.0" 313 | 314 | color-convert@^2.0.1: 315 | version "2.0.1" 316 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 317 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 318 | dependencies: 319 | color-name "~1.1.4" 320 | 321 | color-name@~1.1.4: 322 | version "1.1.4" 323 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 324 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 325 | 326 | concat-map@0.0.1: 327 | version "0.0.1" 328 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 329 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 330 | 331 | console-browserify@1.1.x: 332 | version "1.1.0" 333 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 334 | integrity sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg== 335 | dependencies: 336 | date-now "^0.1.4" 337 | 338 | core-util-is@~1.0.0: 339 | version "1.0.3" 340 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 341 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 342 | 343 | cross-spawn@^7.0.2: 344 | version "7.0.3" 345 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 346 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 347 | dependencies: 348 | path-key "^3.1.0" 349 | shebang-command "^2.0.0" 350 | which "^2.0.1" 351 | 352 | date-now@^0.1.4: 353 | version "0.1.4" 354 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 355 | integrity sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw== 356 | 357 | debug@4, debug@^4.1.1, debug@^4.3.2: 358 | version "4.3.4" 359 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 360 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 361 | dependencies: 362 | ms "2.1.2" 363 | 364 | debug@4.3.3: 365 | version "4.3.3" 366 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 367 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 368 | dependencies: 369 | ms "2.1.2" 370 | 371 | decamelize@^4.0.0: 372 | version "4.0.0" 373 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 374 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 375 | 376 | deep-is@^0.1.3: 377 | version "0.1.4" 378 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 379 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 380 | 381 | diff@5.0.0: 382 | version "5.0.0" 383 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 384 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 385 | 386 | doctrine@^3.0.0: 387 | version "3.0.0" 388 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 389 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 390 | dependencies: 391 | esutils "^2.0.2" 392 | 393 | dom-serializer@0: 394 | version "0.2.2" 395 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 396 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 397 | dependencies: 398 | domelementtype "^2.0.1" 399 | entities "^2.0.0" 400 | 401 | domelementtype@1: 402 | version "1.3.1" 403 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 404 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 405 | 406 | domelementtype@^2.0.1: 407 | version "2.3.0" 408 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 409 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 410 | 411 | domhandler@2.3: 412 | version "2.3.0" 413 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" 414 | integrity sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ== 415 | dependencies: 416 | domelementtype "1" 417 | 418 | domutils@1.5: 419 | version "1.5.1" 420 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 421 | integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw== 422 | dependencies: 423 | dom-serializer "0" 424 | domelementtype "1" 425 | 426 | duplexer2@~0.1.4: 427 | version "0.1.4" 428 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 429 | integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== 430 | dependencies: 431 | readable-stream "^2.0.2" 432 | 433 | emoji-regex@^8.0.0: 434 | version "8.0.0" 435 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 436 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 437 | 438 | entities@1.0: 439 | version "1.0.0" 440 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" 441 | integrity sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ== 442 | 443 | entities@^2.0.0: 444 | version "2.2.0" 445 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 446 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 447 | 448 | escalade@^3.1.1: 449 | version "3.1.1" 450 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 451 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 452 | 453 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 454 | version "4.0.0" 455 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 456 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 457 | 458 | eslint-scope@^7.2.2: 459 | version "7.2.2" 460 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" 461 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 462 | dependencies: 463 | esrecurse "^4.3.0" 464 | estraverse "^5.2.0" 465 | 466 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 467 | version "3.4.3" 468 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 469 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 470 | 471 | eslint@^8.1.0: 472 | version "8.53.0" 473 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" 474 | integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== 475 | dependencies: 476 | "@eslint-community/eslint-utils" "^4.2.0" 477 | "@eslint-community/regexpp" "^4.6.1" 478 | "@eslint/eslintrc" "^2.1.3" 479 | "@eslint/js" "8.53.0" 480 | "@humanwhocodes/config-array" "^0.11.13" 481 | "@humanwhocodes/module-importer" "^1.0.1" 482 | "@nodelib/fs.walk" "^1.2.8" 483 | "@ungap/structured-clone" "^1.2.0" 484 | ajv "^6.12.4" 485 | chalk "^4.0.0" 486 | cross-spawn "^7.0.2" 487 | debug "^4.3.2" 488 | doctrine "^3.0.0" 489 | escape-string-regexp "^4.0.0" 490 | eslint-scope "^7.2.2" 491 | eslint-visitor-keys "^3.4.3" 492 | espree "^9.6.1" 493 | esquery "^1.4.2" 494 | esutils "^2.0.2" 495 | fast-deep-equal "^3.1.3" 496 | file-entry-cache "^6.0.1" 497 | find-up "^5.0.0" 498 | glob-parent "^6.0.2" 499 | globals "^13.19.0" 500 | graphemer "^1.4.0" 501 | ignore "^5.2.0" 502 | imurmurhash "^0.1.4" 503 | is-glob "^4.0.0" 504 | is-path-inside "^3.0.3" 505 | js-yaml "^4.1.0" 506 | json-stable-stringify-without-jsonify "^1.0.1" 507 | levn "^0.4.1" 508 | lodash.merge "^4.6.2" 509 | minimatch "^3.1.2" 510 | natural-compare "^1.4.0" 511 | optionator "^0.9.3" 512 | strip-ansi "^6.0.1" 513 | text-table "^0.2.0" 514 | 515 | espree@^9.6.0, espree@^9.6.1: 516 | version "9.6.1" 517 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" 518 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 519 | dependencies: 520 | acorn "^8.9.0" 521 | acorn-jsx "^5.3.2" 522 | eslint-visitor-keys "^3.4.1" 523 | 524 | esquery@^1.4.2: 525 | version "1.5.0" 526 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 527 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 528 | dependencies: 529 | estraverse "^5.1.0" 530 | 531 | esrecurse@^4.3.0: 532 | version "4.3.0" 533 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 534 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 535 | dependencies: 536 | estraverse "^5.2.0" 537 | 538 | estraverse@^5.1.0, estraverse@^5.2.0: 539 | version "5.3.0" 540 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 541 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 542 | 543 | esutils@^2.0.2: 544 | version "2.0.3" 545 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 546 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 547 | 548 | exit@0.1.2, exit@0.1.x: 549 | version "0.1.2" 550 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 551 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 552 | 553 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 554 | version "3.1.3" 555 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 556 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 557 | 558 | fast-json-stable-stringify@^2.0.0: 559 | version "2.1.0" 560 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 561 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 562 | 563 | fast-levenshtein@^2.0.6: 564 | version "2.0.6" 565 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 566 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 567 | 568 | fastq@^1.6.0: 569 | version "1.15.0" 570 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 571 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 572 | dependencies: 573 | reusify "^1.0.4" 574 | 575 | file-entry-cache@^6.0.1: 576 | version "6.0.1" 577 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 578 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 579 | dependencies: 580 | flat-cache "^3.0.4" 581 | 582 | fill-range@^7.0.1: 583 | version "7.0.1" 584 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 585 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 586 | dependencies: 587 | to-regex-range "^5.0.1" 588 | 589 | find-up@5.0.0, find-up@^5.0.0: 590 | version "5.0.0" 591 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 592 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 593 | dependencies: 594 | locate-path "^6.0.0" 595 | path-exists "^4.0.0" 596 | 597 | flat-cache@^3.0.4: 598 | version "3.1.1" 599 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" 600 | integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== 601 | dependencies: 602 | flatted "^3.2.9" 603 | keyv "^4.5.3" 604 | rimraf "^3.0.2" 605 | 606 | flat@^5.0.2: 607 | version "5.0.2" 608 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 609 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 610 | 611 | flatted@^3.2.9: 612 | version "3.2.9" 613 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" 614 | integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== 615 | 616 | fs.realpath@^1.0.0: 617 | version "1.0.0" 618 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 619 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 620 | 621 | fsevents@~2.3.2: 622 | version "2.3.3" 623 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 624 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 625 | 626 | fstream@^1.0.12: 627 | version "1.0.12" 628 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 629 | integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== 630 | dependencies: 631 | graceful-fs "^4.1.2" 632 | inherits "~2.0.0" 633 | mkdirp ">=0.5 0" 634 | rimraf "2" 635 | 636 | get-caller-file@^2.0.5: 637 | version "2.0.5" 638 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 639 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 640 | 641 | glob-parent@^6.0.2: 642 | version "6.0.2" 643 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 644 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 645 | dependencies: 646 | is-glob "^4.0.3" 647 | 648 | glob-parent@~5.1.2: 649 | version "5.1.2" 650 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 651 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 652 | dependencies: 653 | is-glob "^4.0.1" 654 | 655 | glob@7.2.0: 656 | version "7.2.0" 657 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 658 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 659 | dependencies: 660 | fs.realpath "^1.0.0" 661 | inflight "^1.0.4" 662 | inherits "2" 663 | minimatch "^3.0.4" 664 | once "^1.3.0" 665 | path-is-absolute "^1.0.0" 666 | 667 | glob@^7.1.1, glob@^7.1.3, glob@^7.1.7: 668 | version "7.2.3" 669 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 670 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 671 | dependencies: 672 | fs.realpath "^1.0.0" 673 | inflight "^1.0.4" 674 | inherits "2" 675 | minimatch "^3.1.1" 676 | once "^1.3.0" 677 | path-is-absolute "^1.0.0" 678 | 679 | globals@^13.19.0: 680 | version "13.23.0" 681 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" 682 | integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== 683 | dependencies: 684 | type-fest "^0.20.2" 685 | 686 | graceful-fs@^4.1.2, graceful-fs@^4.2.2: 687 | version "4.2.11" 688 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 689 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 690 | 691 | graphemer@^1.4.0: 692 | version "1.4.0" 693 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 694 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 695 | 696 | growl@1.10.5: 697 | version "1.10.5" 698 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 699 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 700 | 701 | has-flag@^4.0.0: 702 | version "4.0.0" 703 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 704 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 705 | 706 | he@1.2.0: 707 | version "1.2.0" 708 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 709 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 710 | 711 | htmlparser2@3.8.x: 712 | version "3.8.3" 713 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" 714 | integrity sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q== 715 | dependencies: 716 | domelementtype "1" 717 | domhandler "2.3" 718 | domutils "1.5" 719 | entities "1.0" 720 | readable-stream "1.1" 721 | 722 | http-proxy-agent@^4.0.1: 723 | version "4.0.1" 724 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" 725 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== 726 | dependencies: 727 | "@tootallnate/once" "1" 728 | agent-base "6" 729 | debug "4" 730 | 731 | https-proxy-agent@^5.0.0: 732 | version "5.0.1" 733 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 734 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 735 | dependencies: 736 | agent-base "6" 737 | debug "4" 738 | 739 | ignore@^5.2.0: 740 | version "5.2.4" 741 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 742 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 743 | 744 | import-fresh@^3.2.1: 745 | version "3.3.0" 746 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 747 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 748 | dependencies: 749 | parent-module "^1.0.0" 750 | resolve-from "^4.0.0" 751 | 752 | imurmurhash@^0.1.4: 753 | version "0.1.4" 754 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 755 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 756 | 757 | inflight@^1.0.4: 758 | version "1.0.6" 759 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 760 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 761 | dependencies: 762 | once "^1.3.0" 763 | wrappy "1" 764 | 765 | inherits@2, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 766 | version "2.0.4" 767 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 768 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 769 | 770 | is-binary-path@~2.1.0: 771 | version "2.1.0" 772 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 773 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 774 | dependencies: 775 | binary-extensions "^2.0.0" 776 | 777 | is-extglob@^2.1.1: 778 | version "2.1.1" 779 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 780 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 781 | 782 | is-fullwidth-code-point@^3.0.0: 783 | version "3.0.0" 784 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 785 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 786 | 787 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 788 | version "4.0.3" 789 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 790 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 791 | dependencies: 792 | is-extglob "^2.1.1" 793 | 794 | is-number@^7.0.0: 795 | version "7.0.0" 796 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 797 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 798 | 799 | is-path-inside@^3.0.3: 800 | version "3.0.3" 801 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 802 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 803 | 804 | is-plain-obj@^2.1.0: 805 | version "2.1.0" 806 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 807 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 808 | 809 | is-unicode-supported@^0.1.0: 810 | version "0.1.0" 811 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 812 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 813 | 814 | isarray@0.0.1: 815 | version "0.0.1" 816 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 817 | integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== 818 | 819 | isarray@~1.0.0: 820 | version "1.0.0" 821 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 822 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 823 | 824 | isexe@^2.0.0: 825 | version "2.0.0" 826 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 827 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 828 | 829 | js-yaml@4.1.0, js-yaml@^4.1.0: 830 | version "4.1.0" 831 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 832 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 833 | dependencies: 834 | argparse "^2.0.1" 835 | 836 | jshint@^2.13.3: 837 | version "2.13.6" 838 | resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.13.6.tgz#3679a2687a3066fa9034ef85d8c305613a31eec6" 839 | integrity sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ== 840 | dependencies: 841 | cli "~1.0.0" 842 | console-browserify "1.1.x" 843 | exit "0.1.x" 844 | htmlparser2 "3.8.x" 845 | lodash "~4.17.21" 846 | minimatch "~3.0.2" 847 | strip-json-comments "1.0.x" 848 | 849 | json-buffer@3.0.1: 850 | version "3.0.1" 851 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 852 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 853 | 854 | json-schema-traverse@^0.4.1: 855 | version "0.4.1" 856 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 857 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 858 | 859 | json-stable-stringify-without-jsonify@^1.0.1: 860 | version "1.0.1" 861 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 862 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 863 | 864 | keyv@^4.5.3: 865 | version "4.5.4" 866 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 867 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 868 | dependencies: 869 | json-buffer "3.0.1" 870 | 871 | levn@^0.4.1: 872 | version "0.4.1" 873 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 874 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 875 | dependencies: 876 | prelude-ls "^1.2.1" 877 | type-check "~0.4.0" 878 | 879 | listenercount@~1.0.1: 880 | version "1.0.1" 881 | resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" 882 | integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== 883 | 884 | locate-path@^6.0.0: 885 | version "6.0.0" 886 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 887 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 888 | dependencies: 889 | p-locate "^5.0.0" 890 | 891 | lodash.merge@^4.6.2: 892 | version "4.6.2" 893 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 894 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 895 | 896 | lodash@~4.17.21: 897 | version "4.17.21" 898 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 899 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 900 | 901 | log-symbols@4.1.0: 902 | version "4.1.0" 903 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 904 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 905 | dependencies: 906 | chalk "^4.1.0" 907 | is-unicode-supported "^0.1.0" 908 | 909 | minimatch@4.2.1: 910 | version "4.2.1" 911 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" 912 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 913 | dependencies: 914 | brace-expansion "^1.1.7" 915 | 916 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 917 | version "3.1.2" 918 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 919 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 920 | dependencies: 921 | brace-expansion "^1.1.7" 922 | 923 | minimatch@~3.0.2: 924 | version "3.0.8" 925 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" 926 | integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== 927 | dependencies: 928 | brace-expansion "^1.1.7" 929 | 930 | minimist@^1.2.6: 931 | version "1.2.8" 932 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 933 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 934 | 935 | "mkdirp@>=0.5 0": 936 | version "0.5.6" 937 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 938 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 939 | dependencies: 940 | minimist "^1.2.6" 941 | 942 | mocha@^9.1.3: 943 | version "9.2.2" 944 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" 945 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 946 | dependencies: 947 | "@ungap/promise-all-settled" "1.1.2" 948 | ansi-colors "4.1.1" 949 | browser-stdout "1.3.1" 950 | chokidar "3.5.3" 951 | debug "4.3.3" 952 | diff "5.0.0" 953 | escape-string-regexp "4.0.0" 954 | find-up "5.0.0" 955 | glob "7.2.0" 956 | growl "1.10.5" 957 | he "1.2.0" 958 | js-yaml "4.1.0" 959 | log-symbols "4.1.0" 960 | minimatch "4.2.1" 961 | ms "2.1.3" 962 | nanoid "3.3.1" 963 | serialize-javascript "6.0.0" 964 | strip-json-comments "3.1.1" 965 | supports-color "8.1.1" 966 | which "2.0.2" 967 | workerpool "6.2.0" 968 | yargs "16.2.0" 969 | yargs-parser "20.2.4" 970 | yargs-unparser "2.0.0" 971 | 972 | ms@2.1.2: 973 | version "2.1.2" 974 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 975 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 976 | 977 | ms@2.1.3: 978 | version "2.1.3" 979 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 980 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 981 | 982 | nanoid@3.3.1: 983 | version "3.3.1" 984 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 985 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 986 | 987 | natural-compare@^1.4.0: 988 | version "1.4.0" 989 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 990 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 991 | 992 | normalize-path@^3.0.0, normalize-path@~3.0.0: 993 | version "3.0.0" 994 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 995 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 996 | 997 | once@^1.3.0: 998 | version "1.4.0" 999 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1000 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1001 | dependencies: 1002 | wrappy "1" 1003 | 1004 | optionator@^0.9.3: 1005 | version "0.9.3" 1006 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1007 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1008 | dependencies: 1009 | "@aashutoshrathi/word-wrap" "^1.2.3" 1010 | deep-is "^0.1.3" 1011 | fast-levenshtein "^2.0.6" 1012 | levn "^0.4.1" 1013 | prelude-ls "^1.2.1" 1014 | type-check "^0.4.0" 1015 | 1016 | p-limit@^3.0.2: 1017 | version "3.1.0" 1018 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1019 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1020 | dependencies: 1021 | yocto-queue "^0.1.0" 1022 | 1023 | p-locate@^5.0.0: 1024 | version "5.0.0" 1025 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1026 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1027 | dependencies: 1028 | p-limit "^3.0.2" 1029 | 1030 | parent-module@^1.0.0: 1031 | version "1.0.1" 1032 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1033 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1034 | dependencies: 1035 | callsites "^3.0.0" 1036 | 1037 | path-exists@^4.0.0: 1038 | version "4.0.0" 1039 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1040 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1041 | 1042 | path-is-absolute@^1.0.0: 1043 | version "1.0.1" 1044 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1045 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1046 | 1047 | path-key@^3.1.0: 1048 | version "3.1.1" 1049 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1050 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1051 | 1052 | picomatch@^2.0.4, picomatch@^2.2.1: 1053 | version "2.3.1" 1054 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1055 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1056 | 1057 | prelude-ls@^1.2.1: 1058 | version "1.2.1" 1059 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1060 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1061 | 1062 | process-nextick-args@~2.0.0: 1063 | version "2.0.1" 1064 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1065 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1066 | 1067 | punycode@^2.1.0: 1068 | version "2.3.1" 1069 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 1070 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1071 | 1072 | queue-microtask@^1.2.2: 1073 | version "1.2.3" 1074 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1075 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1076 | 1077 | randombytes@^2.1.0: 1078 | version "2.1.0" 1079 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1080 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1081 | dependencies: 1082 | safe-buffer "^5.1.0" 1083 | 1084 | readable-stream@1.1: 1085 | version "1.1.13" 1086 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" 1087 | integrity sha512-E98tWzqShvKDGpR2MbjsDkDQWLW2TfWUC15H4tNQhIJ5Lsta84l8nUGL9/ybltGwe+wZzWPpc1Kmd2wQP4bdCA== 1088 | dependencies: 1089 | core-util-is "~1.0.0" 1090 | inherits "~2.0.1" 1091 | isarray "0.0.1" 1092 | string_decoder "~0.10.x" 1093 | 1094 | readable-stream@^2.0.2, readable-stream@~2.3.6: 1095 | version "2.3.8" 1096 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" 1097 | integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== 1098 | dependencies: 1099 | core-util-is "~1.0.0" 1100 | inherits "~2.0.3" 1101 | isarray "~1.0.0" 1102 | process-nextick-args "~2.0.0" 1103 | safe-buffer "~5.1.1" 1104 | string_decoder "~1.1.1" 1105 | util-deprecate "~1.0.1" 1106 | 1107 | readdirp@~3.6.0: 1108 | version "3.6.0" 1109 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1110 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1111 | dependencies: 1112 | picomatch "^2.2.1" 1113 | 1114 | regexp-match-indices@^1.0.2: 1115 | version "1.0.2" 1116 | resolved "https://registry.yarnpkg.com/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6" 1117 | integrity sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ== 1118 | dependencies: 1119 | regexp-tree "^0.1.11" 1120 | 1121 | regexp-tree@^0.1.11: 1122 | version "0.1.27" 1123 | resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" 1124 | integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== 1125 | 1126 | require-directory@^2.1.1: 1127 | version "2.1.1" 1128 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1129 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1130 | 1131 | resolve-from@^4.0.0: 1132 | version "4.0.0" 1133 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1134 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1135 | 1136 | reusify@^1.0.4: 1137 | version "1.0.4" 1138 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1139 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1140 | 1141 | rimraf@2: 1142 | version "2.7.1" 1143 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1144 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1145 | dependencies: 1146 | glob "^7.1.3" 1147 | 1148 | rimraf@^3.0.2: 1149 | version "3.0.2" 1150 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1151 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1152 | dependencies: 1153 | glob "^7.1.3" 1154 | 1155 | run-parallel@^1.1.9: 1156 | version "1.2.0" 1157 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1158 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1159 | dependencies: 1160 | queue-microtask "^1.2.2" 1161 | 1162 | safe-buffer@^5.1.0: 1163 | version "5.2.1" 1164 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1165 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1166 | 1167 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1168 | version "5.1.2" 1169 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1170 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1171 | 1172 | serialize-javascript@6.0.0: 1173 | version "6.0.0" 1174 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1175 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1176 | dependencies: 1177 | randombytes "^2.1.0" 1178 | 1179 | setimmediate@~1.0.4: 1180 | version "1.0.5" 1181 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1182 | integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== 1183 | 1184 | shebang-command@^2.0.0: 1185 | version "2.0.0" 1186 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1187 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1188 | dependencies: 1189 | shebang-regex "^3.0.0" 1190 | 1191 | shebang-regex@^3.0.0: 1192 | version "3.0.0" 1193 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1194 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1195 | 1196 | string-width@^4.1.0, string-width@^4.2.0: 1197 | version "4.2.3" 1198 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1199 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1200 | dependencies: 1201 | emoji-regex "^8.0.0" 1202 | is-fullwidth-code-point "^3.0.0" 1203 | strip-ansi "^6.0.1" 1204 | 1205 | string_decoder@~0.10.x: 1206 | version "0.10.31" 1207 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1208 | integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== 1209 | 1210 | string_decoder@~1.1.1: 1211 | version "1.1.1" 1212 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1213 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1214 | dependencies: 1215 | safe-buffer "~5.1.0" 1216 | 1217 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1218 | version "6.0.1" 1219 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1220 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1221 | dependencies: 1222 | ansi-regex "^5.0.1" 1223 | 1224 | strip-json-comments@1.0.x: 1225 | version "1.0.4" 1226 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 1227 | integrity sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg== 1228 | 1229 | strip-json-comments@3.1.1, strip-json-comments@^3.1.1: 1230 | version "3.1.1" 1231 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1232 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1233 | 1234 | supports-color@8.1.1: 1235 | version "8.1.1" 1236 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1237 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1238 | dependencies: 1239 | has-flag "^4.0.0" 1240 | 1241 | supports-color@^7.1.0: 1242 | version "7.2.0" 1243 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1244 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1245 | dependencies: 1246 | has-flag "^4.0.0" 1247 | 1248 | text-table@^0.2.0: 1249 | version "0.2.0" 1250 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1251 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1252 | 1253 | to-regex-range@^5.0.1: 1254 | version "5.0.1" 1255 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1256 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1257 | dependencies: 1258 | is-number "^7.0.0" 1259 | 1260 | "traverse@>=0.3.0 <0.4": 1261 | version "0.3.9" 1262 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" 1263 | integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== 1264 | 1265 | type-check@^0.4.0, type-check@~0.4.0: 1266 | version "0.4.0" 1267 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1268 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1269 | dependencies: 1270 | prelude-ls "^1.2.1" 1271 | 1272 | type-fest@^0.20.2: 1273 | version "0.20.2" 1274 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1275 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1276 | 1277 | typescript@^4.4.4: 1278 | version "4.9.5" 1279 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 1280 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1281 | 1282 | undici-types@~5.26.4: 1283 | version "5.26.5" 1284 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 1285 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1286 | 1287 | unzipper@^0.10.11: 1288 | version "0.10.14" 1289 | resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" 1290 | integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== 1291 | dependencies: 1292 | big-integer "^1.6.17" 1293 | binary "~0.3.0" 1294 | bluebird "~3.4.1" 1295 | buffer-indexof-polyfill "~1.0.0" 1296 | duplexer2 "~0.1.4" 1297 | fstream "^1.0.12" 1298 | graceful-fs "^4.2.2" 1299 | listenercount "~1.0.1" 1300 | readable-stream "~2.3.6" 1301 | setimmediate "~1.0.4" 1302 | 1303 | uri-js@^4.2.2: 1304 | version "4.4.1" 1305 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1306 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1307 | dependencies: 1308 | punycode "^2.1.0" 1309 | 1310 | util-deprecate@~1.0.1: 1311 | version "1.0.2" 1312 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1313 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1314 | 1315 | which@2.0.2, which@^2.0.1: 1316 | version "2.0.2" 1317 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1318 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1319 | dependencies: 1320 | isexe "^2.0.0" 1321 | 1322 | workerpool@6.2.0: 1323 | version "6.2.0" 1324 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 1325 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 1326 | 1327 | wrap-ansi@^7.0.0: 1328 | version "7.0.0" 1329 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1330 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1331 | dependencies: 1332 | ansi-styles "^4.0.0" 1333 | string-width "^4.1.0" 1334 | strip-ansi "^6.0.0" 1335 | 1336 | wrappy@1: 1337 | version "1.0.2" 1338 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1339 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1340 | 1341 | y18n@^5.0.5: 1342 | version "5.0.8" 1343 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1344 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1345 | 1346 | yargs-parser@20.2.4: 1347 | version "20.2.4" 1348 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1349 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1350 | 1351 | yargs-parser@^20.2.2: 1352 | version "20.2.9" 1353 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1354 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1355 | 1356 | yargs-unparser@2.0.0: 1357 | version "2.0.0" 1358 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1359 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1360 | dependencies: 1361 | camelcase "^6.0.0" 1362 | decamelize "^4.0.0" 1363 | flat "^5.0.2" 1364 | is-plain-obj "^2.1.0" 1365 | 1366 | yargs@16.2.0: 1367 | version "16.2.0" 1368 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1369 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1370 | dependencies: 1371 | cliui "^7.0.2" 1372 | escalade "^3.1.1" 1373 | get-caller-file "^2.0.5" 1374 | require-directory "^2.1.1" 1375 | string-width "^4.2.0" 1376 | y18n "^5.0.5" 1377 | yargs-parser "^20.2.2" 1378 | 1379 | yocto-queue@^0.1.0: 1380 | version "0.1.0" 1381 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1382 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1383 | --------------------------------------------------------------------------------