├── .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 |
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 |
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 |
--------------------------------------------------------------------------------