├── .eslintrc.js ├── .github └── workflows │ └── lint.yml ├── .gitignore ├── .prettierrc ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── renovate.json ├── src └── extension.ts ├── static ├── banner.png ├── icon.png └── tutorial.gif └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: "@typescript-eslint/parser", 3 | parserOptions: { 4 | ecmaVersion: 2020, 5 | sourceType: "module", 6 | }, 7 | extends: ["plugin:@typescript-eslint/recommended"], 8 | rules: { 9 | "max-len": ["error", 120], 10 | "@typescript-eslint/no-inferrable-types": 0, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | lint: 6 | name: Lint 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@master 10 | - run: npm install 11 | - run: npm run types 12 | - run: npm run lint 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_* 2 | *.log 3 | logs 4 | **/*.backup.* 5 | **/*.back.* 6 | dist/ 7 | node_modules/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": false 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.1", 3 | "configurations": [ 4 | { 5 | "name": "Run VSCode Deprecated", 6 | "type": "extensionHost", 7 | "request": "launch", 8 | "runtimeExecutable": "${execPath}", 9 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"] 10 | }, 11 | { 12 | "name": "Tests VSCode Deprecated", 13 | "type": "extensionHost", 14 | "request": "launch", 15 | "runtimeExecutable": "${execPath}", 16 | "args": ["--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/test/extension.spec"] 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | **/*.ts 2 | **/tsconfig.json 3 | src/ -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/balajmarius/vscode-jsdocs-deprecated/6cee15f6566b06e5fb52621c03befeb39073445e/CHANGELOG.md -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at balajmarius@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Balaj Marius, Verebi Ioana. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VS Code JSDocs Deprecated 🚨 2 | 3 | > Leverage the power of JSDocs. Show deprecated usages in the editor, as you type. 4 | 5 | --- 6 | 7 | ### ⚠️ VS Code now [supports](https://code.visualstudio.com/updates/v1_49#_deprecated-tag-support-for-javascript-and-typescript "supports") the `@deprecated` JSDoc tag in JavaScript and TypeScript files by default. 8 | 9 | You may not need the extension anymore. 10 | 11 | --- 12 | 13 | VS Code JSDocs Deprecated 14 | 15 | # Installation 16 | 17 | In the command palette (CMD + SHIFT + P) select “Install Extension” and choose "VS Code JSDocs Deprecated". 18 | 19 | # Usage 20 | 21 | We detect when you open a file, when you change something in it, when you switch editors. So there is no command to run, just install the extension and work as you normally would. We will mark any deprecated usages in the editor. 22 | 23 | VS Code JSDocs Deprecated 24 | 25 | # Behind the scenes 26 | 27 | We plug into VSCode and use the hover functionality to find deprecated identifiers. So if your project is configured properly and the VS Code hover shows you that tiny deprecated warning, we will show it, too. 28 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-deprecated", 3 | "version": "0.5.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.12.11", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 10 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.12.11", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 19 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.4", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "chalk": { 34 | "version": "2.4.2", 35 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 36 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 37 | "dev": true, 38 | "requires": { 39 | "ansi-styles": "^3.2.1", 40 | "escape-string-regexp": "^1.0.5", 41 | "supports-color": "^5.3.0" 42 | } 43 | } 44 | } 45 | }, 46 | "@eslint/eslintrc": { 47 | "version": "0.3.0", 48 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", 49 | "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", 50 | "dev": true, 51 | "requires": { 52 | "ajv": "^6.12.4", 53 | "debug": "^4.1.1", 54 | "espree": "^7.3.0", 55 | "globals": "^12.1.0", 56 | "ignore": "^4.0.6", 57 | "import-fresh": "^3.2.1", 58 | "js-yaml": "^3.13.1", 59 | "lodash": "^4.17.20", 60 | "minimatch": "^3.0.4", 61 | "strip-json-comments": "^3.1.1" 62 | }, 63 | "dependencies": { 64 | "ignore": { 65 | "version": "4.0.6", 66 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 67 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 68 | "dev": true 69 | } 70 | } 71 | }, 72 | "@nodelib/fs.scandir": { 73 | "version": "2.1.4", 74 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", 75 | "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", 76 | "dev": true, 77 | "requires": { 78 | "@nodelib/fs.stat": "2.0.4", 79 | "run-parallel": "^1.1.9" 80 | } 81 | }, 82 | "@nodelib/fs.stat": { 83 | "version": "2.0.4", 84 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", 85 | "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", 86 | "dev": true 87 | }, 88 | "@nodelib/fs.walk": { 89 | "version": "1.2.6", 90 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", 91 | "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", 92 | "dev": true, 93 | "requires": { 94 | "@nodelib/fs.scandir": "2.1.4", 95 | "fastq": "^1.6.0" 96 | } 97 | }, 98 | "@types/json-schema": { 99 | "version": "7.0.7", 100 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", 101 | "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", 102 | "dev": true 103 | }, 104 | "@types/node": { 105 | "version": "14.14.22", 106 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", 107 | "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", 108 | "dev": true 109 | }, 110 | "@types/vscode": { 111 | "version": "1.52.0", 112 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.52.0.tgz", 113 | "integrity": "sha512-Kt3bvWzAvvF/WH9YEcrCICDp0Z7aHhJGhLJ1BxeyNP6yRjonWqWnAIh35/pXAjswAnWOABrYlF7SwXR9+1nnLA==", 114 | "dev": true 115 | }, 116 | "@typescript-eslint/eslint-plugin": { 117 | "version": "4.14.1", 118 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.1.tgz", 119 | "integrity": "sha512-5JriGbYhtqMS1kRcZTQxndz1lKMwwEXKbwZbkUZNnp6MJX0+OVXnG0kOlBZP4LUAxEyzu3cs+EXd/97MJXsGfw==", 120 | "dev": true, 121 | "requires": { 122 | "@typescript-eslint/experimental-utils": "4.14.1", 123 | "@typescript-eslint/scope-manager": "4.14.1", 124 | "debug": "^4.1.1", 125 | "functional-red-black-tree": "^1.0.1", 126 | "lodash": "^4.17.15", 127 | "regexpp": "^3.0.0", 128 | "semver": "^7.3.2", 129 | "tsutils": "^3.17.1" 130 | } 131 | }, 132 | "@typescript-eslint/experimental-utils": { 133 | "version": "4.14.1", 134 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.1.tgz", 135 | "integrity": "sha512-2CuHWOJwvpw0LofbyG5gvYjEyoJeSvVH2PnfUQSn0KQr4v8Dql2pr43ohmx4fdPQ/eVoTSFjTi/bsGEXl/zUUQ==", 136 | "dev": true, 137 | "requires": { 138 | "@types/json-schema": "^7.0.3", 139 | "@typescript-eslint/scope-manager": "4.14.1", 140 | "@typescript-eslint/types": "4.14.1", 141 | "@typescript-eslint/typescript-estree": "4.14.1", 142 | "eslint-scope": "^5.0.0", 143 | "eslint-utils": "^2.0.0" 144 | } 145 | }, 146 | "@typescript-eslint/parser": { 147 | "version": "4.14.1", 148 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.1.tgz", 149 | "integrity": "sha512-mL3+gU18g9JPsHZuKMZ8Z0Ss9YP1S5xYZ7n68Z98GnPq02pYNQuRXL85b9GYhl6jpdvUc45Km7hAl71vybjUmw==", 150 | "dev": true, 151 | "requires": { 152 | "@typescript-eslint/scope-manager": "4.14.1", 153 | "@typescript-eslint/types": "4.14.1", 154 | "@typescript-eslint/typescript-estree": "4.14.1", 155 | "debug": "^4.1.1" 156 | } 157 | }, 158 | "@typescript-eslint/scope-manager": { 159 | "version": "4.14.1", 160 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.14.1.tgz", 161 | "integrity": "sha512-F4bjJcSqXqHnC9JGUlnqSa3fC2YH5zTtmACS1Hk+WX/nFB0guuynVK5ev35D4XZbdKjulXBAQMyRr216kmxghw==", 162 | "dev": true, 163 | "requires": { 164 | "@typescript-eslint/types": "4.14.1", 165 | "@typescript-eslint/visitor-keys": "4.14.1" 166 | } 167 | }, 168 | "@typescript-eslint/types": { 169 | "version": "4.14.1", 170 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.14.1.tgz", 171 | "integrity": "sha512-SkhzHdI/AllAgQSxXM89XwS1Tkic7csPdndUuTKabEwRcEfR8uQ/iPA3Dgio1rqsV3jtqZhY0QQni8rLswJM2w==", 172 | "dev": true 173 | }, 174 | "@typescript-eslint/typescript-estree": { 175 | "version": "4.14.1", 176 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.1.tgz", 177 | "integrity": "sha512-M8+7MbzKC1PvJIA8kR2sSBnex8bsR5auatLCnVlNTJczmJgqRn8M+sAlQfkEq7M4IY3WmaNJ+LJjPVRrREVSHQ==", 178 | "dev": true, 179 | "requires": { 180 | "@typescript-eslint/types": "4.14.1", 181 | "@typescript-eslint/visitor-keys": "4.14.1", 182 | "debug": "^4.1.1", 183 | "globby": "^11.0.1", 184 | "is-glob": "^4.0.1", 185 | "lodash": "^4.17.15", 186 | "semver": "^7.3.2", 187 | "tsutils": "^3.17.1" 188 | } 189 | }, 190 | "@typescript-eslint/visitor-keys": { 191 | "version": "4.14.1", 192 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.1.tgz", 193 | "integrity": "sha512-TAblbDXOI7bd0C/9PE1G+AFo7R5uc+ty1ArDoxmrC1ah61Hn6shURKy7gLdRb1qKJmjHkqu5Oq+e4Kt0jwf1IA==", 194 | "dev": true, 195 | "requires": { 196 | "@typescript-eslint/types": "4.14.1", 197 | "eslint-visitor-keys": "^2.0.0" 198 | } 199 | }, 200 | "acorn": { 201 | "version": "7.4.1", 202 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 203 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 204 | "dev": true 205 | }, 206 | "acorn-jsx": { 207 | "version": "5.3.1", 208 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", 209 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", 210 | "dev": true 211 | }, 212 | "ajv": { 213 | "version": "6.12.6", 214 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 215 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 216 | "dev": true, 217 | "requires": { 218 | "fast-deep-equal": "^3.1.1", 219 | "fast-json-stable-stringify": "^2.0.0", 220 | "json-schema-traverse": "^0.4.1", 221 | "uri-js": "^4.2.2" 222 | } 223 | }, 224 | "ansi-colors": { 225 | "version": "4.1.1", 226 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 227 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 228 | "dev": true 229 | }, 230 | "ansi-regex": { 231 | "version": "5.0.0", 232 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 233 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 234 | "dev": true 235 | }, 236 | "ansi-styles": { 237 | "version": "3.2.1", 238 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 239 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 240 | "dev": true, 241 | "requires": { 242 | "color-convert": "^1.9.0" 243 | } 244 | }, 245 | "argparse": { 246 | "version": "1.0.10", 247 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 248 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 249 | "dev": true, 250 | "requires": { 251 | "sprintf-js": "~1.0.2" 252 | } 253 | }, 254 | "array-union": { 255 | "version": "2.1.0", 256 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 257 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 258 | "dev": true 259 | }, 260 | "astral-regex": { 261 | "version": "2.0.0", 262 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 263 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 264 | "dev": true 265 | }, 266 | "balanced-match": { 267 | "version": "1.0.0", 268 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 269 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 270 | "dev": true 271 | }, 272 | "brace-expansion": { 273 | "version": "1.1.11", 274 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 275 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 276 | "dev": true, 277 | "requires": { 278 | "balanced-match": "^1.0.0", 279 | "concat-map": "0.0.1" 280 | } 281 | }, 282 | "braces": { 283 | "version": "3.0.2", 284 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 285 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 286 | "dev": true, 287 | "requires": { 288 | "fill-range": "^7.0.1" 289 | } 290 | }, 291 | "callsites": { 292 | "version": "3.1.0", 293 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 294 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 295 | "dev": true 296 | }, 297 | "chalk": { 298 | "version": "4.1.0", 299 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 300 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 301 | "dev": true, 302 | "requires": { 303 | "ansi-styles": "^4.1.0", 304 | "supports-color": "^7.1.0" 305 | }, 306 | "dependencies": { 307 | "ansi-styles": { 308 | "version": "4.3.0", 309 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 310 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 311 | "dev": true, 312 | "requires": { 313 | "color-convert": "^2.0.1" 314 | } 315 | }, 316 | "color-convert": { 317 | "version": "2.0.1", 318 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 319 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 320 | "dev": true, 321 | "requires": { 322 | "color-name": "~1.1.4" 323 | } 324 | }, 325 | "color-name": { 326 | "version": "1.1.4", 327 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 328 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 329 | "dev": true 330 | }, 331 | "has-flag": { 332 | "version": "4.0.0", 333 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 334 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 335 | "dev": true 336 | }, 337 | "supports-color": { 338 | "version": "7.2.0", 339 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 340 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 341 | "dev": true, 342 | "requires": { 343 | "has-flag": "^4.0.0" 344 | } 345 | } 346 | } 347 | }, 348 | "color-convert": { 349 | "version": "1.9.3", 350 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 351 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 352 | "dev": true, 353 | "requires": { 354 | "color-name": "1.1.3" 355 | } 356 | }, 357 | "color-name": { 358 | "version": "1.1.3", 359 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 360 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 361 | "dev": true 362 | }, 363 | "concat-map": { 364 | "version": "0.0.1", 365 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 366 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 367 | "dev": true 368 | }, 369 | "cross-spawn": { 370 | "version": "7.0.3", 371 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 372 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 373 | "dev": true, 374 | "requires": { 375 | "path-key": "^3.1.0", 376 | "shebang-command": "^2.0.0", 377 | "which": "^2.0.1" 378 | } 379 | }, 380 | "debug": { 381 | "version": "4.3.1", 382 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 383 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 384 | "dev": true, 385 | "requires": { 386 | "ms": "2.1.2" 387 | } 388 | }, 389 | "deep-is": { 390 | "version": "0.1.3", 391 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 392 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 393 | "dev": true 394 | }, 395 | "dir-glob": { 396 | "version": "3.0.1", 397 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 398 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 399 | "dev": true, 400 | "requires": { 401 | "path-type": "^4.0.0" 402 | } 403 | }, 404 | "doctrine": { 405 | "version": "3.0.0", 406 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 407 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 408 | "dev": true, 409 | "requires": { 410 | "esutils": "^2.0.2" 411 | } 412 | }, 413 | "emoji-regex": { 414 | "version": "8.0.0", 415 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 416 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 417 | "dev": true 418 | }, 419 | "enquirer": { 420 | "version": "2.3.6", 421 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 422 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 423 | "dev": true, 424 | "requires": { 425 | "ansi-colors": "^4.1.1" 426 | } 427 | }, 428 | "escape-string-regexp": { 429 | "version": "1.0.5", 430 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 431 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 432 | "dev": true 433 | }, 434 | "eslint": { 435 | "version": "7.19.0", 436 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", 437 | "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", 438 | "dev": true, 439 | "requires": { 440 | "@babel/code-frame": "^7.0.0", 441 | "@eslint/eslintrc": "^0.3.0", 442 | "ajv": "^6.10.0", 443 | "chalk": "^4.0.0", 444 | "cross-spawn": "^7.0.2", 445 | "debug": "^4.0.1", 446 | "doctrine": "^3.0.0", 447 | "enquirer": "^2.3.5", 448 | "eslint-scope": "^5.1.1", 449 | "eslint-utils": "^2.1.0", 450 | "eslint-visitor-keys": "^2.0.0", 451 | "espree": "^7.3.1", 452 | "esquery": "^1.2.0", 453 | "esutils": "^2.0.2", 454 | "file-entry-cache": "^6.0.0", 455 | "functional-red-black-tree": "^1.0.1", 456 | "glob-parent": "^5.0.0", 457 | "globals": "^12.1.0", 458 | "ignore": "^4.0.6", 459 | "import-fresh": "^3.0.0", 460 | "imurmurhash": "^0.1.4", 461 | "is-glob": "^4.0.0", 462 | "js-yaml": "^3.13.1", 463 | "json-stable-stringify-without-jsonify": "^1.0.1", 464 | "levn": "^0.4.1", 465 | "lodash": "^4.17.20", 466 | "minimatch": "^3.0.4", 467 | "natural-compare": "^1.4.0", 468 | "optionator": "^0.9.1", 469 | "progress": "^2.0.0", 470 | "regexpp": "^3.1.0", 471 | "semver": "^7.2.1", 472 | "strip-ansi": "^6.0.0", 473 | "strip-json-comments": "^3.1.0", 474 | "table": "^6.0.4", 475 | "text-table": "^0.2.0", 476 | "v8-compile-cache": "^2.0.3" 477 | }, 478 | "dependencies": { 479 | "ignore": { 480 | "version": "4.0.6", 481 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 482 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 483 | "dev": true 484 | } 485 | } 486 | }, 487 | "eslint-scope": { 488 | "version": "5.1.1", 489 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 490 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 491 | "dev": true, 492 | "requires": { 493 | "esrecurse": "^4.3.0", 494 | "estraverse": "^4.1.1" 495 | } 496 | }, 497 | "eslint-utils": { 498 | "version": "2.1.0", 499 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 500 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 501 | "dev": true, 502 | "requires": { 503 | "eslint-visitor-keys": "^1.1.0" 504 | }, 505 | "dependencies": { 506 | "eslint-visitor-keys": { 507 | "version": "1.3.0", 508 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 509 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 510 | "dev": true 511 | } 512 | } 513 | }, 514 | "eslint-visitor-keys": { 515 | "version": "2.0.0", 516 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", 517 | "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", 518 | "dev": true 519 | }, 520 | "espree": { 521 | "version": "7.3.1", 522 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 523 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 524 | "dev": true, 525 | "requires": { 526 | "acorn": "^7.4.0", 527 | "acorn-jsx": "^5.3.1", 528 | "eslint-visitor-keys": "^1.3.0" 529 | }, 530 | "dependencies": { 531 | "eslint-visitor-keys": { 532 | "version": "1.3.0", 533 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 534 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 535 | "dev": true 536 | } 537 | } 538 | }, 539 | "esprima": { 540 | "version": "4.0.1", 541 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 542 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 543 | "dev": true 544 | }, 545 | "esquery": { 546 | "version": "1.3.1", 547 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 548 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 549 | "dev": true, 550 | "requires": { 551 | "estraverse": "^5.1.0" 552 | }, 553 | "dependencies": { 554 | "estraverse": { 555 | "version": "5.2.0", 556 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 557 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 558 | "dev": true 559 | } 560 | } 561 | }, 562 | "esrecurse": { 563 | "version": "4.3.0", 564 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 565 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 566 | "dev": true, 567 | "requires": { 568 | "estraverse": "^5.2.0" 569 | }, 570 | "dependencies": { 571 | "estraverse": { 572 | "version": "5.2.0", 573 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 574 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 575 | "dev": true 576 | } 577 | } 578 | }, 579 | "estraverse": { 580 | "version": "4.3.0", 581 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 582 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 583 | "dev": true 584 | }, 585 | "esutils": { 586 | "version": "2.0.3", 587 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 588 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 589 | "dev": true 590 | }, 591 | "fast-deep-equal": { 592 | "version": "3.1.3", 593 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 594 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 595 | "dev": true 596 | }, 597 | "fast-glob": { 598 | "version": "3.2.5", 599 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 600 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 601 | "dev": true, 602 | "requires": { 603 | "@nodelib/fs.stat": "^2.0.2", 604 | "@nodelib/fs.walk": "^1.2.3", 605 | "glob-parent": "^5.1.0", 606 | "merge2": "^1.3.0", 607 | "micromatch": "^4.0.2", 608 | "picomatch": "^2.2.1" 609 | } 610 | }, 611 | "fast-json-stable-stringify": { 612 | "version": "2.1.0", 613 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 614 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 615 | "dev": true 616 | }, 617 | "fast-levenshtein": { 618 | "version": "2.0.6", 619 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 620 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 621 | "dev": true 622 | }, 623 | "fastq": { 624 | "version": "1.10.1", 625 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", 626 | "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", 627 | "dev": true, 628 | "requires": { 629 | "reusify": "^1.0.4" 630 | } 631 | }, 632 | "file-entry-cache": { 633 | "version": "6.0.0", 634 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", 635 | "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", 636 | "dev": true, 637 | "requires": { 638 | "flat-cache": "^3.0.4" 639 | } 640 | }, 641 | "fill-range": { 642 | "version": "7.0.1", 643 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 644 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 645 | "dev": true, 646 | "requires": { 647 | "to-regex-range": "^5.0.1" 648 | } 649 | }, 650 | "flat-cache": { 651 | "version": "3.0.4", 652 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 653 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 654 | "dev": true, 655 | "requires": { 656 | "flatted": "^3.1.0", 657 | "rimraf": "^3.0.2" 658 | } 659 | }, 660 | "flatted": { 661 | "version": "3.1.1", 662 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", 663 | "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", 664 | "dev": true 665 | }, 666 | "fs.realpath": { 667 | "version": "1.0.0", 668 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 669 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 670 | "dev": true 671 | }, 672 | "functional-red-black-tree": { 673 | "version": "1.0.1", 674 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 675 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 676 | "dev": true 677 | }, 678 | "glob": { 679 | "version": "7.1.6", 680 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 681 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 682 | "dev": true, 683 | "requires": { 684 | "fs.realpath": "^1.0.0", 685 | "inflight": "^1.0.4", 686 | "inherits": "2", 687 | "minimatch": "^3.0.4", 688 | "once": "^1.3.0", 689 | "path-is-absolute": "^1.0.0" 690 | } 691 | }, 692 | "glob-parent": { 693 | "version": "5.1.1", 694 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 695 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 696 | "dev": true, 697 | "requires": { 698 | "is-glob": "^4.0.1" 699 | } 700 | }, 701 | "globals": { 702 | "version": "12.4.0", 703 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 704 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 705 | "dev": true, 706 | "requires": { 707 | "type-fest": "^0.8.1" 708 | } 709 | }, 710 | "globby": { 711 | "version": "11.0.2", 712 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", 713 | "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", 714 | "dev": true, 715 | "requires": { 716 | "array-union": "^2.1.0", 717 | "dir-glob": "^3.0.1", 718 | "fast-glob": "^3.1.1", 719 | "ignore": "^5.1.4", 720 | "merge2": "^1.3.0", 721 | "slash": "^3.0.0" 722 | } 723 | }, 724 | "has-flag": { 725 | "version": "3.0.0", 726 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 727 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 728 | "dev": true 729 | }, 730 | "ignore": { 731 | "version": "5.1.8", 732 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 733 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 734 | "dev": true 735 | }, 736 | "import-fresh": { 737 | "version": "3.3.0", 738 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 739 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 740 | "dev": true, 741 | "requires": { 742 | "parent-module": "^1.0.0", 743 | "resolve-from": "^4.0.0" 744 | } 745 | }, 746 | "imurmurhash": { 747 | "version": "0.1.4", 748 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 749 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 750 | "dev": true 751 | }, 752 | "inflight": { 753 | "version": "1.0.6", 754 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 755 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 756 | "dev": true, 757 | "requires": { 758 | "once": "^1.3.0", 759 | "wrappy": "1" 760 | } 761 | }, 762 | "inherits": { 763 | "version": "2.0.4", 764 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 765 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 766 | "dev": true 767 | }, 768 | "is-extglob": { 769 | "version": "2.1.1", 770 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 771 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 772 | "dev": true 773 | }, 774 | "is-fullwidth-code-point": { 775 | "version": "3.0.0", 776 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 777 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 778 | "dev": true 779 | }, 780 | "is-glob": { 781 | "version": "4.0.1", 782 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 783 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 784 | "dev": true, 785 | "requires": { 786 | "is-extglob": "^2.1.1" 787 | } 788 | }, 789 | "is-number": { 790 | "version": "7.0.0", 791 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 792 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 793 | "dev": true 794 | }, 795 | "isexe": { 796 | "version": "2.0.0", 797 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 798 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 799 | "dev": true 800 | }, 801 | "js-tokens": { 802 | "version": "4.0.0", 803 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 804 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 805 | "dev": true 806 | }, 807 | "js-yaml": { 808 | "version": "3.14.1", 809 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 810 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 811 | "dev": true, 812 | "requires": { 813 | "argparse": "^1.0.7", 814 | "esprima": "^4.0.0" 815 | } 816 | }, 817 | "json-schema-traverse": { 818 | "version": "0.4.1", 819 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 820 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 821 | "dev": true 822 | }, 823 | "json-stable-stringify-without-jsonify": { 824 | "version": "1.0.1", 825 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 826 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 827 | "dev": true 828 | }, 829 | "levn": { 830 | "version": "0.4.1", 831 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 832 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 833 | "dev": true, 834 | "requires": { 835 | "prelude-ls": "^1.2.1", 836 | "type-check": "~0.4.0" 837 | } 838 | }, 839 | "lodash": { 840 | "version": "4.17.20", 841 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 842 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 843 | "dev": true 844 | }, 845 | "lru-cache": { 846 | "version": "6.0.0", 847 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 848 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 849 | "dev": true, 850 | "requires": { 851 | "yallist": "^4.0.0" 852 | } 853 | }, 854 | "merge2": { 855 | "version": "1.4.1", 856 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 857 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 858 | "dev": true 859 | }, 860 | "micromatch": { 861 | "version": "4.0.2", 862 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 863 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 864 | "dev": true, 865 | "requires": { 866 | "braces": "^3.0.1", 867 | "picomatch": "^2.0.5" 868 | } 869 | }, 870 | "minimatch": { 871 | "version": "3.0.4", 872 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 873 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 874 | "dev": true, 875 | "requires": { 876 | "brace-expansion": "^1.1.7" 877 | } 878 | }, 879 | "ms": { 880 | "version": "2.1.2", 881 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 882 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 883 | "dev": true 884 | }, 885 | "natural-compare": { 886 | "version": "1.4.0", 887 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 888 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 889 | "dev": true 890 | }, 891 | "once": { 892 | "version": "1.4.0", 893 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 894 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 895 | "dev": true, 896 | "requires": { 897 | "wrappy": "1" 898 | } 899 | }, 900 | "optionator": { 901 | "version": "0.9.1", 902 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 903 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 904 | "dev": true, 905 | "requires": { 906 | "deep-is": "^0.1.3", 907 | "fast-levenshtein": "^2.0.6", 908 | "levn": "^0.4.1", 909 | "prelude-ls": "^1.2.1", 910 | "type-check": "^0.4.0", 911 | "word-wrap": "^1.2.3" 912 | } 913 | }, 914 | "parent-module": { 915 | "version": "1.0.1", 916 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 917 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 918 | "dev": true, 919 | "requires": { 920 | "callsites": "^3.0.0" 921 | } 922 | }, 923 | "path-is-absolute": { 924 | "version": "1.0.1", 925 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 926 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 927 | "dev": true 928 | }, 929 | "path-key": { 930 | "version": "3.1.1", 931 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 932 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 933 | "dev": true 934 | }, 935 | "path-type": { 936 | "version": "4.0.0", 937 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 938 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 939 | "dev": true 940 | }, 941 | "picomatch": { 942 | "version": "2.2.2", 943 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 944 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 945 | "dev": true 946 | }, 947 | "prelude-ls": { 948 | "version": "1.2.1", 949 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 950 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 951 | "dev": true 952 | }, 953 | "progress": { 954 | "version": "2.0.3", 955 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 956 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 957 | "dev": true 958 | }, 959 | "punycode": { 960 | "version": "2.1.1", 961 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 962 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 963 | "dev": true 964 | }, 965 | "regexpp": { 966 | "version": "3.1.0", 967 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 968 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 969 | "dev": true 970 | }, 971 | "require-from-string": { 972 | "version": "2.0.2", 973 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 974 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 975 | "dev": true 976 | }, 977 | "resolve-from": { 978 | "version": "4.0.0", 979 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 980 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 981 | "dev": true 982 | }, 983 | "reusify": { 984 | "version": "1.0.4", 985 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 986 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 987 | "dev": true 988 | }, 989 | "rimraf": { 990 | "version": "3.0.2", 991 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 992 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 993 | "dev": true, 994 | "requires": { 995 | "glob": "^7.1.3" 996 | } 997 | }, 998 | "run-parallel": { 999 | "version": "1.1.10", 1000 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", 1001 | "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", 1002 | "dev": true 1003 | }, 1004 | "semver": { 1005 | "version": "7.3.4", 1006 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 1007 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 1008 | "dev": true, 1009 | "requires": { 1010 | "lru-cache": "^6.0.0" 1011 | } 1012 | }, 1013 | "shebang-command": { 1014 | "version": "2.0.0", 1015 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1016 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1017 | "dev": true, 1018 | "requires": { 1019 | "shebang-regex": "^3.0.0" 1020 | } 1021 | }, 1022 | "shebang-regex": { 1023 | "version": "3.0.0", 1024 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1025 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1026 | "dev": true 1027 | }, 1028 | "slash": { 1029 | "version": "3.0.0", 1030 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1031 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1032 | "dev": true 1033 | }, 1034 | "slice-ansi": { 1035 | "version": "4.0.0", 1036 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1037 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1038 | "dev": true, 1039 | "requires": { 1040 | "ansi-styles": "^4.0.0", 1041 | "astral-regex": "^2.0.0", 1042 | "is-fullwidth-code-point": "^3.0.0" 1043 | }, 1044 | "dependencies": { 1045 | "ansi-styles": { 1046 | "version": "4.3.0", 1047 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1048 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1049 | "dev": true, 1050 | "requires": { 1051 | "color-convert": "^2.0.1" 1052 | } 1053 | }, 1054 | "color-convert": { 1055 | "version": "2.0.1", 1056 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1057 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1058 | "dev": true, 1059 | "requires": { 1060 | "color-name": "~1.1.4" 1061 | } 1062 | }, 1063 | "color-name": { 1064 | "version": "1.1.4", 1065 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1066 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1067 | "dev": true 1068 | } 1069 | } 1070 | }, 1071 | "sprintf-js": { 1072 | "version": "1.0.3", 1073 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1074 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1075 | "dev": true 1076 | }, 1077 | "string-width": { 1078 | "version": "4.2.0", 1079 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1080 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1081 | "dev": true, 1082 | "requires": { 1083 | "emoji-regex": "^8.0.0", 1084 | "is-fullwidth-code-point": "^3.0.0", 1085 | "strip-ansi": "^6.0.0" 1086 | } 1087 | }, 1088 | "strip-ansi": { 1089 | "version": "6.0.0", 1090 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1091 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1092 | "dev": true, 1093 | "requires": { 1094 | "ansi-regex": "^5.0.0" 1095 | } 1096 | }, 1097 | "strip-json-comments": { 1098 | "version": "3.1.1", 1099 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1100 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1101 | "dev": true 1102 | }, 1103 | "supports-color": { 1104 | "version": "5.5.0", 1105 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1106 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1107 | "dev": true, 1108 | "requires": { 1109 | "has-flag": "^3.0.0" 1110 | } 1111 | }, 1112 | "table": { 1113 | "version": "6.0.7", 1114 | "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", 1115 | "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", 1116 | "dev": true, 1117 | "requires": { 1118 | "ajv": "^7.0.2", 1119 | "lodash": "^4.17.20", 1120 | "slice-ansi": "^4.0.0", 1121 | "string-width": "^4.2.0" 1122 | }, 1123 | "dependencies": { 1124 | "ajv": { 1125 | "version": "7.0.3", 1126 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", 1127 | "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", 1128 | "dev": true, 1129 | "requires": { 1130 | "fast-deep-equal": "^3.1.1", 1131 | "json-schema-traverse": "^1.0.0", 1132 | "require-from-string": "^2.0.2", 1133 | "uri-js": "^4.2.2" 1134 | } 1135 | }, 1136 | "json-schema-traverse": { 1137 | "version": "1.0.0", 1138 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1139 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1140 | "dev": true 1141 | } 1142 | } 1143 | }, 1144 | "text-table": { 1145 | "version": "0.2.0", 1146 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1147 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1148 | "dev": true 1149 | }, 1150 | "to-regex-range": { 1151 | "version": "5.0.1", 1152 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1153 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1154 | "dev": true, 1155 | "requires": { 1156 | "is-number": "^7.0.0" 1157 | } 1158 | }, 1159 | "tslib": { 1160 | "version": "1.14.1", 1161 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1162 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1163 | "dev": true 1164 | }, 1165 | "tsutils": { 1166 | "version": "3.20.0", 1167 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", 1168 | "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", 1169 | "dev": true, 1170 | "requires": { 1171 | "tslib": "^1.8.1" 1172 | } 1173 | }, 1174 | "type-check": { 1175 | "version": "0.4.0", 1176 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1177 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1178 | "dev": true, 1179 | "requires": { 1180 | "prelude-ls": "^1.2.1" 1181 | } 1182 | }, 1183 | "type-fest": { 1184 | "version": "0.8.1", 1185 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1186 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1187 | "dev": true 1188 | }, 1189 | "typescript": { 1190 | "version": "4.1.3", 1191 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", 1192 | "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==" 1193 | }, 1194 | "uri-js": { 1195 | "version": "4.4.1", 1196 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1197 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1198 | "dev": true, 1199 | "requires": { 1200 | "punycode": "^2.1.0" 1201 | } 1202 | }, 1203 | "v8-compile-cache": { 1204 | "version": "2.2.0", 1205 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", 1206 | "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", 1207 | "dev": true 1208 | }, 1209 | "which": { 1210 | "version": "2.0.2", 1211 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1212 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1213 | "dev": true, 1214 | "requires": { 1215 | "isexe": "^2.0.0" 1216 | } 1217 | }, 1218 | "word-wrap": { 1219 | "version": "1.2.3", 1220 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1221 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1222 | "dev": true 1223 | }, 1224 | "wrappy": { 1225 | "version": "1.0.2", 1226 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1227 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1228 | "dev": true 1229 | }, 1230 | "yallist": { 1231 | "version": "4.0.0", 1232 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1233 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1234 | "dev": true 1235 | } 1236 | } 1237 | } 1238 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-deprecated", 3 | "displayName": "VS Code JSDocs Deprecated", 4 | "license": "MIT", 5 | "icon": "images/icon.png", 6 | "version": "0.5.0", 7 | "description": "VSCode extension that checks for deprecated imports", 8 | "main": "./dist/extension.js", 9 | "activationEvents": [ 10 | "onLanguage:javascript", 11 | "onLanguage:javascriptreact", 12 | "onLanguage:typescript", 13 | "onLanguage:typescriptreact" 14 | ], 15 | "contributes": { 16 | "commands": [ 17 | { 18 | "title": "VSCode Deprecated", 19 | "command": "vsCodeDeprecated.showAnnotations" 20 | } 21 | ] 22 | }, 23 | "engines": { 24 | "vscode": "1.52.1" 25 | }, 26 | "scripts": { 27 | "vscode:prepublish": "npm run compile", 28 | "compile": "tsc -p ./", 29 | "watch": "tsc -watch -p ./", 30 | "types": "tsc src/*.ts", 31 | "lint": "eslint ./src/*.ts" 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "https://github.com/vscode-jsdocs-deprecated" 36 | }, 37 | "keywords": [ 38 | "vscode", 39 | "extension", 40 | "deprecated" 41 | ], 42 | "author": "Marius Balaj", 43 | "publisher": "balajmarius", 44 | "contributors": [ 45 | "Ioana Verebi" 46 | ], 47 | "bugs": { 48 | "url": "https://github.com/balajmarius/vscode-jsdocs-deprecated/issues" 49 | }, 50 | "homepage": "https://github.com/balajmarius/vscode-jsdocs-deprecated#readme", 51 | "dependencies": { 52 | "typescript": "4.1.3" 53 | }, 54 | "devDependencies": { 55 | "@types/node": "14.14.22", 56 | "@types/vscode": "1.52.0", 57 | "@typescript-eslint/eslint-plugin": "4.14.1", 58 | "@typescript-eslint/parser": "4.14.1", 59 | "eslint": "7.19.0" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "automerge": false, 3 | "branchName": "renovate/all", 4 | "commitMessage": "🤖 Dependency update", 5 | "dryRun": false, 6 | "enabled": true, 7 | "lockFileMaintenance": { 8 | "enabled": true, 9 | "schedule": ["before 5am on monday"] 10 | }, 11 | "node": { 12 | "pinVersions": true, 13 | "supportPolicy": ["lts_latest"] 14 | }, 15 | "pinDigests": false, 16 | "prCreation": "immediate", 17 | "rangeStrategy": "pin", 18 | "rebaseConflictedPrs": false, 19 | "rebaseStalePrs": false, 20 | "schedule": ["before 5am on monday"], 21 | "semanticCommits": false, 22 | "semanticCommitScope": null, 23 | "separateMajorMinor": false, 24 | "separateMinorPatch": false, 25 | "separateMultipleMajor": false, 26 | "trustLevel": "high", 27 | "updateLockFiles": true, 28 | "updateNotScheduled": false, 29 | "vulnerabilityAlerts": { 30 | "enabled": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | import * as vscode from "vscode"; 3 | 4 | const JSDOC_DEPRECATED_ANNOTATION: string = "*@deprecated*"; 5 | 6 | function getIdentifierPositions(document: vscode.TextDocument): vscode.Position[] { 7 | const positions: vscode.Position[] = []; 8 | const file: string = document.uri.fsPath; 9 | const program: ts.Program = ts.createProgram([file], { allowJs: true }); 10 | const source: ts.SourceFile = program.getSourceFile(file); 11 | 12 | const visit = (node: ts.Node): void => { 13 | if (ts.isIdentifier(node)) { 14 | positions.push(document.positionAt(node.end)); 15 | } 16 | ts.forEachChild(node, visit); 17 | }; 18 | ts.forEachChild(source, visit); 19 | 20 | return positions; 21 | } 22 | 23 | async function getHoverAnnotations( 24 | document: vscode.TextDocument, 25 | positions: vscode.Position[] 26 | ): Promise { 27 | return Promise.all( 28 | positions.map( 29 | (position: vscode.Position): Thenable => 30 | vscode.commands.executeCommand("vscode.executeHoverProvider", document.uri, position) 31 | ) 32 | ); 33 | } 34 | 35 | function containsDeprecatedAnnotation(hovers: vscode.Hover[]): boolean { 36 | return hovers.some((hover: vscode.Hover) => 37 | hover.contents.some((content: vscode.MarkdownString) => content.value.includes(JSDOC_DEPRECATED_ANNOTATION)) 38 | ); 39 | } 40 | 41 | function getDeprecatedRanges(hovers: vscode.Hover[][]): vscode.Range[] { 42 | return hovers.reduce((ranges: vscode.Range[], hover: vscode.Hover[]) => { 43 | if (containsDeprecatedAnnotation(hover)) { 44 | return [...ranges, hover.pop().range as vscode.Range]; 45 | } 46 | return ranges; 47 | }, []); 48 | } 49 | 50 | function paintAnnotations( 51 | editor: vscode.TextEditor, 52 | ranges: vscode.Range[], 53 | decorationType: vscode.TextEditorDecorationType 54 | ) { 55 | editor.setDecorations(decorationType, []); 56 | editor.setDecorations(decorationType, ranges); 57 | } 58 | 59 | async function onDidUpdateTextDocument( 60 | document: vscode.TextDocument, 61 | editor: vscode.TextEditor, 62 | decorationType: vscode.TextEditorDecorationType 63 | ) { 64 | if (editor) { 65 | const positions: vscode.Position[] = getIdentifierPositions(document); 66 | const annotations: vscode.Hover[][] = await getHoverAnnotations(document, positions); 67 | const deprecated: vscode.Range[] = getDeprecatedRanges(annotations); 68 | 69 | paintAnnotations(editor, deprecated, decorationType); 70 | } 71 | } 72 | 73 | export function activate(): void { 74 | const decorationType: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ 75 | textDecoration: "line-through", 76 | }); 77 | 78 | setImmediate(() => 79 | onDidUpdateTextDocument(vscode.window.activeTextEditor.document, vscode.window.activeTextEditor, decorationType) 80 | ); 81 | 82 | vscode.workspace.onDidOpenTextDocument((document: vscode.TextDocument) => { 83 | onDidUpdateTextDocument(document, vscode.window.activeTextEditor, decorationType); 84 | }); 85 | vscode.workspace.onDidSaveTextDocument((document: vscode.TextDocument) => { 86 | onDidUpdateTextDocument(document, vscode.window.activeTextEditor, decorationType); 87 | }); 88 | vscode.window.onDidChangeActiveTextEditor((editor: vscode.TextEditor) => { 89 | onDidUpdateTextDocument(editor.document, editor, decorationType); 90 | }); 91 | } 92 | -------------------------------------------------------------------------------- /static/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/balajmarius/vscode-jsdocs-deprecated/6cee15f6566b06e5fb52621c03befeb39073445e/static/banner.png -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/balajmarius/vscode-jsdocs-deprecated/6cee15f6566b06e5fb52621c03befeb39073445e/static/icon.png -------------------------------------------------------------------------------- /static/tutorial.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/balajmarius/vscode-jsdocs-deprecated/6cee15f6566b06e5fb52621c03befeb39073445e/static/tutorial.gif -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "dist", 6 | "lib": ["es6"], 7 | "sourceMap": false, 8 | "rootDir": "./src" 9 | }, 10 | "exclude": ["node_modules", ".vscode-test"] 11 | } 12 | --------------------------------------------------------------------------------