├── .eslintrc.json
├── .github
└── workflows
│ └── python-test.yml
├── .gitignore
├── .vscode
├── extensions.json
├── launch.json
├── settings.json
└── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── images
└── icon.png
├── package-lock.json
├── package.json
├── pyscripts
├── example
│ └── create_example.py
├── read_files.py
├── requirements.txt
└── test
│ └── test_read_files.py
├── src
├── disposable.ts
├── extension.ts
├── pydataPreview.ts
├── pydataProvider.ts
├── test
│ ├── runTest.ts
│ └── suite
│ │ ├── extension.test.ts
│ │ └── index.ts
└── utils.ts
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "parserOptions": {
5 | "ecmaVersion": 6,
6 | "sourceType": "module"
7 | },
8 | "plugins": [
9 | "@typescript-eslint"
10 | ],
11 | "rules": {
12 | "@typescript-eslint/naming-convention": "warn",
13 | "@typescript-eslint/semi": "warn",
14 | "curly": "warn",
15 | "eqeqeq": "warn",
16 | "no-throw-literal": "warn",
17 | "semi": "off"
18 | },
19 | "ignorePatterns": [
20 | "out",
21 | "dist",
22 | "**/*.d.ts"
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/.github/workflows/python-test.yml:
--------------------------------------------------------------------------------
1 | name: Python Tests
2 |
3 | on:
4 | push:
5 | branches: [ main, master ]
6 | paths:
7 | - '**.py'
8 | - '.github/workflows/python-test.yml'
9 | - 'requirements*.txt'
10 | pull_request:
11 | branches: [ main, master ]
12 | paths:
13 | - '**.py'
14 | - '.github/workflows/python-test.yml'
15 | - 'requirements*.txt'
16 |
17 | jobs:
18 | test:
19 | runs-on: ubuntu-latest
20 | strategy:
21 | matrix:
22 | python-version: ['3.8', '3.9', '3.10']
23 |
24 | steps:
25 | - uses: actions/checkout@v3
26 |
27 | - name: Set up Python ${{ matrix.python-version }}
28 | uses: actions/setup-python@v4
29 | with:
30 | python-version: ${{ matrix.python-version }}
31 | cache: 'pip'
32 |
33 | - name: Install dependencies
34 | run: |
35 | python -m pip install --upgrade pip
36 | pip install -r pyscripts/requirements.txt
37 |
38 | - name: Run tests with pytest
39 | run: |
40 | pytest pyscripts/test/ --cov=pyscripts --cov-report=xml -v
41 |
42 | - name: Upload coverage reports to Codecov
43 | uses: codecov/codecov-action@v5
44 | with:
45 | token: ${{ secrets.CODECOV_TOKEN }}
46 | slug: haochengxia/vscode-pydata-viewer
47 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | dist
3 | node_modules
4 | .vscode-test/
5 | *.vsix
6 |
7 | # for python
8 | __pycache__
9 | *.pyc
10 | *.pyo
11 | *.pyd
12 | *.pyx
13 | *.pyx
14 | *.pyx
15 | *.pyx
16 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "dbaeumer.vscode-eslint"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that compiles the extension and then opens it inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [
8 | {
9 | "name": "Run Extension",
10 | "type": "extensionHost",
11 | "request": "launch",
12 | "args": [
13 | "--extensionDevelopmentPath=${workspaceFolder}"
14 | ],
15 | "outFiles": [
16 | "${workspaceFolder}/out/**/*.js"
17 | ],
18 | "preLaunchTask": "${defaultBuildTask}"
19 | },
20 | {
21 | "name": "Extension Tests",
22 | "type": "extensionHost",
23 | "request": "launch",
24 | "args": [
25 | "--extensionDevelopmentPath=${workspaceFolder}",
26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
27 | ],
28 | "outFiles": [
29 | "${workspaceFolder}/out/test/**/*.js"
30 | ],
31 | "preLaunchTask": "${defaultBuildTask}"
32 | }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | // Place your settings in this file to overwrite default and user settings.
2 | {
3 | "files.exclude": {
4 | "out": false // set this to true to hide the "out" folder with the compiled JS files
5 | },
6 | "search.exclude": {
7 | "out": true // set this to false to include "out" folder in search results
8 | },
9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts
10 | "typescript.tsc.autoDetect": "off"
11 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | // See https://go.microsoft.com/fwlink/?LinkId=733558
2 | // for the documentation about the tasks.json format
3 | {
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "type": "npm",
8 | "script": "watch",
9 | "problemMatcher": "$tsc-watch",
10 | "isBackground": true,
11 | "presentation": {
12 | "reveal": "never"
13 | },
14 | "group": {
15 | "kind": "build",
16 | "isDefault": true
17 | }
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode/**
2 | .vscode-test/**
3 | src/**
4 | .gitignore
5 | .yarnrc
6 | vsc-extension-quickstart.md
7 | **/tsconfig.json
8 | **/.eslintrc.json
9 | **/*.map
10 | **/*.ts
11 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## 0.0.13 (2024/02/28)
4 |
5 | - Feat: use CPU to load torch files. ([pull#23](https://github.com/haochengxia/vscode-pydata-viewer/pull/23) by [blaise-tk](https://github.com/blaise-tk))
6 |
7 | ## 0.0.12 (2023/12/03)
8 |
9 | - Feat: support to show `plt.figure` instances (matplotlib.pyplot). (the update for [issue#18](https://github.com/haochengxia/vscode-pydata-viewer/issues/18) by [beijiguang94](https://github.com/beijiguang94))
10 |
11 | ## 0.0.11 (2023/09/28)
12 |
13 | - Feat: support pikle file with multiple obj. ([pull#16](https://github.com/haochengxia/vscode-pydata-viewer/pull/16) by [kenshi84](https://github.com/kenshi84))
14 |
15 | ## 0.0.10 (2023/04/20)
16 |
17 | - Feat: support custom script. (the update for [issue#3](https://github.com/haochengxia/vscode-pydata-viewer/issues/3))
18 |
19 | ## 0.0.9 (2023/04/19)
20 |
21 | - Feat: use monospace font and display blanks for pretty view.
22 |
23 | ## 0.0.8 (2023/03/29)
24 |
25 | - Feat: script as an external file.
26 | - Fix: encoding problem of pickle. (by [jasongzy](https://github.com/jasongzy))
27 |
28 | ## 0.0.7 (2023/03/29)
29 |
30 | - Feat: add an extension name of pickle file, '.pickle'.
31 |
32 | ## 0.0.6 (2023/02/26)
33 |
34 | - Feat: add icon.
35 |
36 | ## 0.0.5 (2023/02/25)
37 |
38 | - Feat: add config `pythonPath` to customize interpreter. (the update addresses [issue#7](https://github.com/haochengxia/vscode-pydata-viewer/issues/7))
39 | - Feat: add an extension name of pickle file, '.pck'. (by [blannoy](https://github.com/blannoy))
40 |
41 | ## 0.0.4 (2022/09/22)
42 |
43 | - Fix: the update addresses [issue#2](https://github.com/haochengxia/vscode-pydata-viewer/issues/2)
44 | - Feat: prettier ndarray style with shape info. (by [jasongzy](https://github.com/jasongzy))
45 |
46 | ## 0.0.3 (2022/09/05)
47 |
48 | - Fix: error in judging torch files.
49 |
50 | ## 0.0.2 (2022/09/05)
51 |
52 | - Fix: error in pyscript when read numpy files.
53 |
54 | ## 0.0.1 (2022/09/05)
55 |
56 | - Initial release.
57 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 - present Percy
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 | # PyData Viewer
2 |
3 | [](https://marketplace.visualstudio.com/items?itemName=Percy.vscode-pydata-viewer)
4 | [](https://marketplace.visualstudio.com/items?itemName=Percy.vscode-pydata-viewer)
5 | [](http://makeapullrequest.com)
6 | [](https://github.com/haochengxia/vscode-pydata-viewer/actions/workflows/python-test.yml)
7 | [](https://codecov.io/gh/haochengxia/vscode-pydata-viewer)
8 |
9 |
10 |
11 | Display Python data files in VSCode.
12 |
13 | - Numpy Files: `.npz` `.npy`
14 | - Pickle Files: `.pkl` `.pck` `.pickle`
15 | - Torch Files: `.pth` `.pt` `.ckpt`
16 |
17 | :pushpin: A Python interpreter is **mandatory** for this extension, please add python path into **SYSTEM ENVIRONMENT PATH** or add the path to an interpreter in the Extension settings.
18 |
19 | If you DO NOT have Python available on your device but need to view numpy files, the extension [vscode-numpy-viewer](https://github.com/haochengxia/vscode-numpy-viewer) may be helpful.
20 |
21 | ## Change log
22 |
23 | Please refer to [CHANGELOG.md](./CHANGELOG.md).
24 |
25 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/haochengxia/vscode-pydata-viewer/fcdb6701b93ff59b88f67e5f260c7f5650c9d480/images/icon.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vscode-pydata-viewer",
3 | "version": "0.0.13",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vscode-pydata-viewer",
9 | "version": "0.0.13",
10 | "dependencies": {
11 | "python-shell": "^3.0.1"
12 | },
13 | "devDependencies": {
14 | "@types/glob": "^7.2.0",
15 | "@types/mocha": "^9.1.1",
16 | "@types/node": "16.x",
17 | "@types/vscode": "^1.70.0",
18 | "@typescript-eslint/eslint-plugin": "^5.27.0",
19 | "@typescript-eslint/parser": "^5.27.0",
20 | "@vscode/test-electron": "^2.1.3",
21 | "eslint": "^8.16.0",
22 | "glob": "^8.0.3",
23 | "mocha": "^10.0.0",
24 | "python-shell": "^3.0.1",
25 | "typescript": "^4.7.2"
26 | },
27 | "engines": {
28 | "vscode": "^1.70.0"
29 | }
30 | },
31 | "node_modules/@eslint/eslintrc": {
32 | "version": "1.3.1",
33 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz",
34 | "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==",
35 | "dev": true,
36 | "dependencies": {
37 | "ajv": "^6.12.4",
38 | "debug": "^4.3.2",
39 | "espree": "^9.4.0",
40 | "globals": "^13.15.0",
41 | "ignore": "^5.2.0",
42 | "import-fresh": "^3.2.1",
43 | "js-yaml": "^4.1.0",
44 | "minimatch": "^3.1.2",
45 | "strip-json-comments": "^3.1.1"
46 | },
47 | "engines": {
48 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
49 | },
50 | "funding": {
51 | "url": "https://opencollective.com/eslint"
52 | }
53 | },
54 | "node_modules/@humanwhocodes/config-array": {
55 | "version": "0.10.4",
56 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
57 | "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
58 | "deprecated": "Use @eslint/config-array instead",
59 | "dev": true,
60 | "dependencies": {
61 | "@humanwhocodes/object-schema": "^1.2.1",
62 | "debug": "^4.1.1",
63 | "minimatch": "^3.0.4"
64 | },
65 | "engines": {
66 | "node": ">=10.10.0"
67 | }
68 | },
69 | "node_modules/@humanwhocodes/gitignore-to-minimatch": {
70 | "version": "1.0.2",
71 | "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
72 | "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
73 | "dev": true,
74 | "funding": {
75 | "type": "github",
76 | "url": "https://github.com/sponsors/nzakas"
77 | }
78 | },
79 | "node_modules/@humanwhocodes/module-importer": {
80 | "version": "1.0.1",
81 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
82 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
83 | "dev": true,
84 | "engines": {
85 | "node": ">=12.22"
86 | },
87 | "funding": {
88 | "type": "github",
89 | "url": "https://github.com/sponsors/nzakas"
90 | }
91 | },
92 | "node_modules/@humanwhocodes/object-schema": {
93 | "version": "1.2.1",
94 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
95 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
96 | "deprecated": "Use @eslint/object-schema instead",
97 | "dev": true
98 | },
99 | "node_modules/@nodelib/fs.scandir": {
100 | "version": "2.1.5",
101 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
102 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
103 | "dev": true,
104 | "dependencies": {
105 | "@nodelib/fs.stat": "2.0.5",
106 | "run-parallel": "^1.1.9"
107 | },
108 | "engines": {
109 | "node": ">= 8"
110 | }
111 | },
112 | "node_modules/@nodelib/fs.stat": {
113 | "version": "2.0.5",
114 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
115 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
116 | "dev": true,
117 | "engines": {
118 | "node": ">= 8"
119 | }
120 | },
121 | "node_modules/@nodelib/fs.walk": {
122 | "version": "1.2.8",
123 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
124 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
125 | "dev": true,
126 | "dependencies": {
127 | "@nodelib/fs.scandir": "2.1.5",
128 | "fastq": "^1.6.0"
129 | },
130 | "engines": {
131 | "node": ">= 8"
132 | }
133 | },
134 | "node_modules/@tootallnate/once": {
135 | "version": "1.1.2",
136 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
137 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
138 | "dev": true,
139 | "engines": {
140 | "node": ">= 6"
141 | }
142 | },
143 | "node_modules/@types/glob": {
144 | "version": "7.2.0",
145 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
146 | "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
147 | "dev": true,
148 | "dependencies": {
149 | "@types/minimatch": "*",
150 | "@types/node": "*"
151 | }
152 | },
153 | "node_modules/@types/json-schema": {
154 | "version": "7.0.11",
155 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
156 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
157 | "dev": true
158 | },
159 | "node_modules/@types/minimatch": {
160 | "version": "5.1.1",
161 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.1.tgz",
162 | "integrity": "sha512-v55NF6Dz0wrj14Rn8iEABTWrhYRmgkJYuokduunSiq++t3hZ9VZ6dvcDt+850Pm5sGJZk8RaHzkFCXPxVINZ+g==",
163 | "dev": true
164 | },
165 | "node_modules/@types/mocha": {
166 | "version": "9.1.1",
167 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
168 | "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
169 | "dev": true
170 | },
171 | "node_modules/@types/node": {
172 | "version": "16.11.56",
173 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.56.tgz",
174 | "integrity": "sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==",
175 | "dev": true
176 | },
177 | "node_modules/@types/vscode": {
178 | "version": "1.70.0",
179 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.70.0.tgz",
180 | "integrity": "sha512-3/9Fz0F2eBgwciazc94Ien+9u1elnjFg9YAhvAb3qDy/WeFWD9VrOPU7CIytryOVUdbxus8uzL4VZYONA0gDtA==",
181 | "dev": true
182 | },
183 | "node_modules/@typescript-eslint/eslint-plugin": {
184 | "version": "5.36.1",
185 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.1.tgz",
186 | "integrity": "sha512-iC40UK8q1tMepSDwiLbTbMXKDxzNy+4TfPWgIL661Ym0sD42vRcQU93IsZIrmi+x292DBr60UI/gSwfdVYexCA==",
187 | "dev": true,
188 | "dependencies": {
189 | "@typescript-eslint/scope-manager": "5.36.1",
190 | "@typescript-eslint/type-utils": "5.36.1",
191 | "@typescript-eslint/utils": "5.36.1",
192 | "debug": "^4.3.4",
193 | "functional-red-black-tree": "^1.0.1",
194 | "ignore": "^5.2.0",
195 | "regexpp": "^3.2.0",
196 | "semver": "^7.3.7",
197 | "tsutils": "^3.21.0"
198 | },
199 | "engines": {
200 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
201 | },
202 | "funding": {
203 | "type": "opencollective",
204 | "url": "https://opencollective.com/typescript-eslint"
205 | },
206 | "peerDependencies": {
207 | "@typescript-eslint/parser": "^5.0.0",
208 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
209 | },
210 | "peerDependenciesMeta": {
211 | "typescript": {
212 | "optional": true
213 | }
214 | }
215 | },
216 | "node_modules/@typescript-eslint/parser": {
217 | "version": "5.36.1",
218 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz",
219 | "integrity": "sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==",
220 | "dev": true,
221 | "dependencies": {
222 | "@typescript-eslint/scope-manager": "5.36.1",
223 | "@typescript-eslint/types": "5.36.1",
224 | "@typescript-eslint/typescript-estree": "5.36.1",
225 | "debug": "^4.3.4"
226 | },
227 | "engines": {
228 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
229 | },
230 | "funding": {
231 | "type": "opencollective",
232 | "url": "https://opencollective.com/typescript-eslint"
233 | },
234 | "peerDependencies": {
235 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
236 | },
237 | "peerDependenciesMeta": {
238 | "typescript": {
239 | "optional": true
240 | }
241 | }
242 | },
243 | "node_modules/@typescript-eslint/scope-manager": {
244 | "version": "5.36.1",
245 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz",
246 | "integrity": "sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==",
247 | "dev": true,
248 | "dependencies": {
249 | "@typescript-eslint/types": "5.36.1",
250 | "@typescript-eslint/visitor-keys": "5.36.1"
251 | },
252 | "engines": {
253 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
254 | },
255 | "funding": {
256 | "type": "opencollective",
257 | "url": "https://opencollective.com/typescript-eslint"
258 | }
259 | },
260 | "node_modules/@typescript-eslint/type-utils": {
261 | "version": "5.36.1",
262 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.1.tgz",
263 | "integrity": "sha512-xfZhfmoQT6m3lmlqDvDzv9TiCYdw22cdj06xY0obSznBsT///GK5IEZQdGliXpAOaRL34o8phEvXzEo/VJx13Q==",
264 | "dev": true,
265 | "dependencies": {
266 | "@typescript-eslint/typescript-estree": "5.36.1",
267 | "@typescript-eslint/utils": "5.36.1",
268 | "debug": "^4.3.4",
269 | "tsutils": "^3.21.0"
270 | },
271 | "engines": {
272 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
273 | },
274 | "funding": {
275 | "type": "opencollective",
276 | "url": "https://opencollective.com/typescript-eslint"
277 | },
278 | "peerDependencies": {
279 | "eslint": "*"
280 | },
281 | "peerDependenciesMeta": {
282 | "typescript": {
283 | "optional": true
284 | }
285 | }
286 | },
287 | "node_modules/@typescript-eslint/types": {
288 | "version": "5.36.1",
289 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz",
290 | "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==",
291 | "dev": true,
292 | "engines": {
293 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
294 | },
295 | "funding": {
296 | "type": "opencollective",
297 | "url": "https://opencollective.com/typescript-eslint"
298 | }
299 | },
300 | "node_modules/@typescript-eslint/typescript-estree": {
301 | "version": "5.36.1",
302 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz",
303 | "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==",
304 | "dev": true,
305 | "dependencies": {
306 | "@typescript-eslint/types": "5.36.1",
307 | "@typescript-eslint/visitor-keys": "5.36.1",
308 | "debug": "^4.3.4",
309 | "globby": "^11.1.0",
310 | "is-glob": "^4.0.3",
311 | "semver": "^7.3.7",
312 | "tsutils": "^3.21.0"
313 | },
314 | "engines": {
315 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
316 | },
317 | "funding": {
318 | "type": "opencollective",
319 | "url": "https://opencollective.com/typescript-eslint"
320 | },
321 | "peerDependenciesMeta": {
322 | "typescript": {
323 | "optional": true
324 | }
325 | }
326 | },
327 | "node_modules/@typescript-eslint/utils": {
328 | "version": "5.36.1",
329 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.1.tgz",
330 | "integrity": "sha512-lNj4FtTiXm5c+u0pUehozaUWhh7UYKnwryku0nxJlYUEWetyG92uw2pr+2Iy4M/u0ONMKzfrx7AsGBTCzORmIg==",
331 | "dev": true,
332 | "dependencies": {
333 | "@types/json-schema": "^7.0.9",
334 | "@typescript-eslint/scope-manager": "5.36.1",
335 | "@typescript-eslint/types": "5.36.1",
336 | "@typescript-eslint/typescript-estree": "5.36.1",
337 | "eslint-scope": "^5.1.1",
338 | "eslint-utils": "^3.0.0"
339 | },
340 | "engines": {
341 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
342 | },
343 | "funding": {
344 | "type": "opencollective",
345 | "url": "https://opencollective.com/typescript-eslint"
346 | },
347 | "peerDependencies": {
348 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
349 | }
350 | },
351 | "node_modules/@typescript-eslint/visitor-keys": {
352 | "version": "5.36.1",
353 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz",
354 | "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==",
355 | "dev": true,
356 | "dependencies": {
357 | "@typescript-eslint/types": "5.36.1",
358 | "eslint-visitor-keys": "^3.3.0"
359 | },
360 | "engines": {
361 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
362 | },
363 | "funding": {
364 | "type": "opencollective",
365 | "url": "https://opencollective.com/typescript-eslint"
366 | }
367 | },
368 | "node_modules/@ungap/promise-all-settled": {
369 | "version": "1.1.2",
370 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
371 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
372 | "dev": true
373 | },
374 | "node_modules/@vscode/test-electron": {
375 | "version": "2.1.5",
376 | "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz",
377 | "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==",
378 | "dev": true,
379 | "dependencies": {
380 | "http-proxy-agent": "^4.0.1",
381 | "https-proxy-agent": "^5.0.0",
382 | "rimraf": "^3.0.2",
383 | "unzipper": "^0.10.11"
384 | },
385 | "engines": {
386 | "node": ">=8.9.3"
387 | }
388 | },
389 | "node_modules/acorn": {
390 | "version": "8.8.0",
391 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
392 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
393 | "dev": true,
394 | "bin": {
395 | "acorn": "bin/acorn"
396 | },
397 | "engines": {
398 | "node": ">=0.4.0"
399 | }
400 | },
401 | "node_modules/acorn-jsx": {
402 | "version": "5.3.2",
403 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
404 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
405 | "dev": true,
406 | "peerDependencies": {
407 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
408 | }
409 | },
410 | "node_modules/agent-base": {
411 | "version": "6.0.2",
412 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
413 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
414 | "dev": true,
415 | "dependencies": {
416 | "debug": "4"
417 | },
418 | "engines": {
419 | "node": ">= 6.0.0"
420 | }
421 | },
422 | "node_modules/ajv": {
423 | "version": "6.12.6",
424 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
425 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
426 | "dev": true,
427 | "dependencies": {
428 | "fast-deep-equal": "^3.1.1",
429 | "fast-json-stable-stringify": "^2.0.0",
430 | "json-schema-traverse": "^0.4.1",
431 | "uri-js": "^4.2.2"
432 | },
433 | "funding": {
434 | "type": "github",
435 | "url": "https://github.com/sponsors/epoberezkin"
436 | }
437 | },
438 | "node_modules/ansi-colors": {
439 | "version": "4.1.1",
440 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
441 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
442 | "dev": true,
443 | "engines": {
444 | "node": ">=6"
445 | }
446 | },
447 | "node_modules/ansi-regex": {
448 | "version": "5.0.1",
449 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
450 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
451 | "dev": true,
452 | "engines": {
453 | "node": ">=8"
454 | }
455 | },
456 | "node_modules/ansi-styles": {
457 | "version": "4.3.0",
458 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
459 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
460 | "dev": true,
461 | "dependencies": {
462 | "color-convert": "^2.0.1"
463 | },
464 | "engines": {
465 | "node": ">=8"
466 | },
467 | "funding": {
468 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
469 | }
470 | },
471 | "node_modules/anymatch": {
472 | "version": "3.1.2",
473 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
474 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
475 | "dev": true,
476 | "dependencies": {
477 | "normalize-path": "^3.0.0",
478 | "picomatch": "^2.0.4"
479 | },
480 | "engines": {
481 | "node": ">= 8"
482 | }
483 | },
484 | "node_modules/argparse": {
485 | "version": "2.0.1",
486 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
487 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
488 | "dev": true
489 | },
490 | "node_modules/array-union": {
491 | "version": "2.1.0",
492 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
493 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
494 | "dev": true,
495 | "engines": {
496 | "node": ">=8"
497 | }
498 | },
499 | "node_modules/balanced-match": {
500 | "version": "1.0.2",
501 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
502 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
503 | "dev": true
504 | },
505 | "node_modules/big-integer": {
506 | "version": "1.6.51",
507 | "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
508 | "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
509 | "dev": true,
510 | "engines": {
511 | "node": ">=0.6"
512 | }
513 | },
514 | "node_modules/binary": {
515 | "version": "0.3.0",
516 | "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
517 | "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
518 | "dev": true,
519 | "dependencies": {
520 | "buffers": "~0.1.1",
521 | "chainsaw": "~0.1.0"
522 | },
523 | "engines": {
524 | "node": "*"
525 | }
526 | },
527 | "node_modules/binary-extensions": {
528 | "version": "2.2.0",
529 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
530 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
531 | "dev": true,
532 | "engines": {
533 | "node": ">=8"
534 | }
535 | },
536 | "node_modules/bluebird": {
537 | "version": "3.4.7",
538 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
539 | "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
540 | "dev": true
541 | },
542 | "node_modules/brace-expansion": {
543 | "version": "1.1.11",
544 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
545 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
546 | "dev": true,
547 | "dependencies": {
548 | "balanced-match": "^1.0.0",
549 | "concat-map": "0.0.1"
550 | }
551 | },
552 | "node_modules/braces": {
553 | "version": "3.0.2",
554 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
555 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
556 | "dev": true,
557 | "dependencies": {
558 | "fill-range": "^7.0.1"
559 | },
560 | "engines": {
561 | "node": ">=8"
562 | }
563 | },
564 | "node_modules/browser-stdout": {
565 | "version": "1.3.1",
566 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
567 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
568 | "dev": true
569 | },
570 | "node_modules/buffer-indexof-polyfill": {
571 | "version": "1.0.2",
572 | "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
573 | "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
574 | "dev": true,
575 | "engines": {
576 | "node": ">=0.10"
577 | }
578 | },
579 | "node_modules/buffers": {
580 | "version": "0.1.1",
581 | "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
582 | "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==",
583 | "dev": true,
584 | "engines": {
585 | "node": ">=0.2.0"
586 | }
587 | },
588 | "node_modules/callsites": {
589 | "version": "3.1.0",
590 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
591 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
592 | "dev": true,
593 | "engines": {
594 | "node": ">=6"
595 | }
596 | },
597 | "node_modules/camelcase": {
598 | "version": "6.3.0",
599 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
600 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
601 | "dev": true,
602 | "engines": {
603 | "node": ">=10"
604 | },
605 | "funding": {
606 | "url": "https://github.com/sponsors/sindresorhus"
607 | }
608 | },
609 | "node_modules/chainsaw": {
610 | "version": "0.1.0",
611 | "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
612 | "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
613 | "dev": true,
614 | "dependencies": {
615 | "traverse": ">=0.3.0 <0.4"
616 | },
617 | "engines": {
618 | "node": "*"
619 | }
620 | },
621 | "node_modules/chalk": {
622 | "version": "4.1.2",
623 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
624 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
625 | "dev": true,
626 | "dependencies": {
627 | "ansi-styles": "^4.1.0",
628 | "supports-color": "^7.1.0"
629 | },
630 | "engines": {
631 | "node": ">=10"
632 | },
633 | "funding": {
634 | "url": "https://github.com/chalk/chalk?sponsor=1"
635 | }
636 | },
637 | "node_modules/chokidar": {
638 | "version": "3.5.3",
639 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
640 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
641 | "dev": true,
642 | "funding": [
643 | {
644 | "type": "individual",
645 | "url": "https://paulmillr.com/funding/"
646 | }
647 | ],
648 | "dependencies": {
649 | "anymatch": "~3.1.2",
650 | "braces": "~3.0.2",
651 | "glob-parent": "~5.1.2",
652 | "is-binary-path": "~2.1.0",
653 | "is-glob": "~4.0.1",
654 | "normalize-path": "~3.0.0",
655 | "readdirp": "~3.6.0"
656 | },
657 | "engines": {
658 | "node": ">= 8.10.0"
659 | },
660 | "optionalDependencies": {
661 | "fsevents": "~2.3.2"
662 | }
663 | },
664 | "node_modules/cliui": {
665 | "version": "7.0.4",
666 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
667 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
668 | "dev": true,
669 | "dependencies": {
670 | "string-width": "^4.2.0",
671 | "strip-ansi": "^6.0.0",
672 | "wrap-ansi": "^7.0.0"
673 | }
674 | },
675 | "node_modules/color-convert": {
676 | "version": "2.0.1",
677 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
678 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
679 | "dev": true,
680 | "dependencies": {
681 | "color-name": "~1.1.4"
682 | },
683 | "engines": {
684 | "node": ">=7.0.0"
685 | }
686 | },
687 | "node_modules/color-name": {
688 | "version": "1.1.4",
689 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
690 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
691 | "dev": true
692 | },
693 | "node_modules/concat-map": {
694 | "version": "0.0.1",
695 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
696 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
697 | "dev": true
698 | },
699 | "node_modules/core-util-is": {
700 | "version": "1.0.3",
701 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
702 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
703 | "dev": true
704 | },
705 | "node_modules/cross-spawn": {
706 | "version": "7.0.3",
707 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
708 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
709 | "dev": true,
710 | "dependencies": {
711 | "path-key": "^3.1.0",
712 | "shebang-command": "^2.0.0",
713 | "which": "^2.0.1"
714 | },
715 | "engines": {
716 | "node": ">= 8"
717 | }
718 | },
719 | "node_modules/debug": {
720 | "version": "4.3.4",
721 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
722 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
723 | "dev": true,
724 | "dependencies": {
725 | "ms": "2.1.2"
726 | },
727 | "engines": {
728 | "node": ">=6.0"
729 | },
730 | "peerDependenciesMeta": {
731 | "supports-color": {
732 | "optional": true
733 | }
734 | }
735 | },
736 | "node_modules/decamelize": {
737 | "version": "4.0.0",
738 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
739 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
740 | "dev": true,
741 | "engines": {
742 | "node": ">=10"
743 | },
744 | "funding": {
745 | "url": "https://github.com/sponsors/sindresorhus"
746 | }
747 | },
748 | "node_modules/deep-is": {
749 | "version": "0.1.4",
750 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
751 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
752 | "dev": true
753 | },
754 | "node_modules/diff": {
755 | "version": "5.0.0",
756 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
757 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
758 | "dev": true,
759 | "engines": {
760 | "node": ">=0.3.1"
761 | }
762 | },
763 | "node_modules/dir-glob": {
764 | "version": "3.0.1",
765 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
766 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
767 | "dev": true,
768 | "dependencies": {
769 | "path-type": "^4.0.0"
770 | },
771 | "engines": {
772 | "node": ">=8"
773 | }
774 | },
775 | "node_modules/doctrine": {
776 | "version": "3.0.0",
777 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
778 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
779 | "dev": true,
780 | "dependencies": {
781 | "esutils": "^2.0.2"
782 | },
783 | "engines": {
784 | "node": ">=6.0.0"
785 | }
786 | },
787 | "node_modules/duplexer2": {
788 | "version": "0.1.4",
789 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
790 | "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
791 | "dev": true,
792 | "dependencies": {
793 | "readable-stream": "^2.0.2"
794 | }
795 | },
796 | "node_modules/emoji-regex": {
797 | "version": "8.0.0",
798 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
799 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
800 | "dev": true
801 | },
802 | "node_modules/escalade": {
803 | "version": "3.1.1",
804 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
805 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
806 | "dev": true,
807 | "engines": {
808 | "node": ">=6"
809 | }
810 | },
811 | "node_modules/escape-string-regexp": {
812 | "version": "4.0.0",
813 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
814 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
815 | "dev": true,
816 | "engines": {
817 | "node": ">=10"
818 | },
819 | "funding": {
820 | "url": "https://github.com/sponsors/sindresorhus"
821 | }
822 | },
823 | "node_modules/eslint": {
824 | "version": "8.23.0",
825 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz",
826 | "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==",
827 | "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
828 | "dev": true,
829 | "dependencies": {
830 | "@eslint/eslintrc": "^1.3.1",
831 | "@humanwhocodes/config-array": "^0.10.4",
832 | "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
833 | "@humanwhocodes/module-importer": "^1.0.1",
834 | "ajv": "^6.10.0",
835 | "chalk": "^4.0.0",
836 | "cross-spawn": "^7.0.2",
837 | "debug": "^4.3.2",
838 | "doctrine": "^3.0.0",
839 | "escape-string-regexp": "^4.0.0",
840 | "eslint-scope": "^7.1.1",
841 | "eslint-utils": "^3.0.0",
842 | "eslint-visitor-keys": "^3.3.0",
843 | "espree": "^9.4.0",
844 | "esquery": "^1.4.0",
845 | "esutils": "^2.0.2",
846 | "fast-deep-equal": "^3.1.3",
847 | "file-entry-cache": "^6.0.1",
848 | "find-up": "^5.0.0",
849 | "functional-red-black-tree": "^1.0.1",
850 | "glob-parent": "^6.0.1",
851 | "globals": "^13.15.0",
852 | "globby": "^11.1.0",
853 | "grapheme-splitter": "^1.0.4",
854 | "ignore": "^5.2.0",
855 | "import-fresh": "^3.0.0",
856 | "imurmurhash": "^0.1.4",
857 | "is-glob": "^4.0.0",
858 | "js-yaml": "^4.1.0",
859 | "json-stable-stringify-without-jsonify": "^1.0.1",
860 | "levn": "^0.4.1",
861 | "lodash.merge": "^4.6.2",
862 | "minimatch": "^3.1.2",
863 | "natural-compare": "^1.4.0",
864 | "optionator": "^0.9.1",
865 | "regexpp": "^3.2.0",
866 | "strip-ansi": "^6.0.1",
867 | "strip-json-comments": "^3.1.0",
868 | "text-table": "^0.2.0"
869 | },
870 | "bin": {
871 | "eslint": "bin/eslint.js"
872 | },
873 | "engines": {
874 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
875 | },
876 | "funding": {
877 | "url": "https://opencollective.com/eslint"
878 | }
879 | },
880 | "node_modules/eslint-scope": {
881 | "version": "5.1.1",
882 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
883 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
884 | "dev": true,
885 | "dependencies": {
886 | "esrecurse": "^4.3.0",
887 | "estraverse": "^4.1.1"
888 | },
889 | "engines": {
890 | "node": ">=8.0.0"
891 | }
892 | },
893 | "node_modules/eslint-utils": {
894 | "version": "3.0.0",
895 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
896 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
897 | "dev": true,
898 | "dependencies": {
899 | "eslint-visitor-keys": "^2.0.0"
900 | },
901 | "engines": {
902 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
903 | },
904 | "funding": {
905 | "url": "https://github.com/sponsors/mysticatea"
906 | },
907 | "peerDependencies": {
908 | "eslint": ">=5"
909 | }
910 | },
911 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
912 | "version": "2.1.0",
913 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
914 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
915 | "dev": true,
916 | "engines": {
917 | "node": ">=10"
918 | }
919 | },
920 | "node_modules/eslint-visitor-keys": {
921 | "version": "3.3.0",
922 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
923 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
924 | "dev": true,
925 | "engines": {
926 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
927 | }
928 | },
929 | "node_modules/eslint/node_modules/eslint-scope": {
930 | "version": "7.1.1",
931 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
932 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
933 | "dev": true,
934 | "dependencies": {
935 | "esrecurse": "^4.3.0",
936 | "estraverse": "^5.2.0"
937 | },
938 | "engines": {
939 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
940 | }
941 | },
942 | "node_modules/eslint/node_modules/estraverse": {
943 | "version": "5.3.0",
944 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
945 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
946 | "dev": true,
947 | "engines": {
948 | "node": ">=4.0"
949 | }
950 | },
951 | "node_modules/eslint/node_modules/glob-parent": {
952 | "version": "6.0.2",
953 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
954 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
955 | "dev": true,
956 | "dependencies": {
957 | "is-glob": "^4.0.3"
958 | },
959 | "engines": {
960 | "node": ">=10.13.0"
961 | }
962 | },
963 | "node_modules/espree": {
964 | "version": "9.4.0",
965 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
966 | "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
967 | "dev": true,
968 | "dependencies": {
969 | "acorn": "^8.8.0",
970 | "acorn-jsx": "^5.3.2",
971 | "eslint-visitor-keys": "^3.3.0"
972 | },
973 | "engines": {
974 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
975 | },
976 | "funding": {
977 | "url": "https://opencollective.com/eslint"
978 | }
979 | },
980 | "node_modules/esquery": {
981 | "version": "1.4.0",
982 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
983 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
984 | "dev": true,
985 | "dependencies": {
986 | "estraverse": "^5.1.0"
987 | },
988 | "engines": {
989 | "node": ">=0.10"
990 | }
991 | },
992 | "node_modules/esquery/node_modules/estraverse": {
993 | "version": "5.3.0",
994 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
995 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
996 | "dev": true,
997 | "engines": {
998 | "node": ">=4.0"
999 | }
1000 | },
1001 | "node_modules/esrecurse": {
1002 | "version": "4.3.0",
1003 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1004 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1005 | "dev": true,
1006 | "dependencies": {
1007 | "estraverse": "^5.2.0"
1008 | },
1009 | "engines": {
1010 | "node": ">=4.0"
1011 | }
1012 | },
1013 | "node_modules/esrecurse/node_modules/estraverse": {
1014 | "version": "5.3.0",
1015 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1016 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1017 | "dev": true,
1018 | "engines": {
1019 | "node": ">=4.0"
1020 | }
1021 | },
1022 | "node_modules/estraverse": {
1023 | "version": "4.3.0",
1024 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1025 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1026 | "dev": true,
1027 | "engines": {
1028 | "node": ">=4.0"
1029 | }
1030 | },
1031 | "node_modules/esutils": {
1032 | "version": "2.0.3",
1033 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1034 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1035 | "dev": true,
1036 | "engines": {
1037 | "node": ">=0.10.0"
1038 | }
1039 | },
1040 | "node_modules/fast-deep-equal": {
1041 | "version": "3.1.3",
1042 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1043 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1044 | "dev": true
1045 | },
1046 | "node_modules/fast-glob": {
1047 | "version": "3.2.11",
1048 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
1049 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
1050 | "dev": true,
1051 | "dependencies": {
1052 | "@nodelib/fs.stat": "^2.0.2",
1053 | "@nodelib/fs.walk": "^1.2.3",
1054 | "glob-parent": "^5.1.2",
1055 | "merge2": "^1.3.0",
1056 | "micromatch": "^4.0.4"
1057 | },
1058 | "engines": {
1059 | "node": ">=8.6.0"
1060 | }
1061 | },
1062 | "node_modules/fast-json-stable-stringify": {
1063 | "version": "2.1.0",
1064 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1065 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1066 | "dev": true
1067 | },
1068 | "node_modules/fast-levenshtein": {
1069 | "version": "2.0.6",
1070 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1071 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1072 | "dev": true
1073 | },
1074 | "node_modules/fastq": {
1075 | "version": "1.13.0",
1076 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
1077 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
1078 | "dev": true,
1079 | "dependencies": {
1080 | "reusify": "^1.0.4"
1081 | }
1082 | },
1083 | "node_modules/file-entry-cache": {
1084 | "version": "6.0.1",
1085 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1086 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1087 | "dev": true,
1088 | "dependencies": {
1089 | "flat-cache": "^3.0.4"
1090 | },
1091 | "engines": {
1092 | "node": "^10.12.0 || >=12.0.0"
1093 | }
1094 | },
1095 | "node_modules/fill-range": {
1096 | "version": "7.0.1",
1097 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1098 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1099 | "dev": true,
1100 | "dependencies": {
1101 | "to-regex-range": "^5.0.1"
1102 | },
1103 | "engines": {
1104 | "node": ">=8"
1105 | }
1106 | },
1107 | "node_modules/find-up": {
1108 | "version": "5.0.0",
1109 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1110 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1111 | "dev": true,
1112 | "dependencies": {
1113 | "locate-path": "^6.0.0",
1114 | "path-exists": "^4.0.0"
1115 | },
1116 | "engines": {
1117 | "node": ">=10"
1118 | },
1119 | "funding": {
1120 | "url": "https://github.com/sponsors/sindresorhus"
1121 | }
1122 | },
1123 | "node_modules/flat": {
1124 | "version": "5.0.2",
1125 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
1126 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
1127 | "dev": true,
1128 | "bin": {
1129 | "flat": "cli.js"
1130 | }
1131 | },
1132 | "node_modules/flat-cache": {
1133 | "version": "3.0.4",
1134 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
1135 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
1136 | "dev": true,
1137 | "dependencies": {
1138 | "flatted": "^3.1.0",
1139 | "rimraf": "^3.0.2"
1140 | },
1141 | "engines": {
1142 | "node": "^10.12.0 || >=12.0.0"
1143 | }
1144 | },
1145 | "node_modules/flatted": {
1146 | "version": "3.2.7",
1147 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
1148 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
1149 | "dev": true
1150 | },
1151 | "node_modules/fs.realpath": {
1152 | "version": "1.0.0",
1153 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1154 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1155 | "dev": true
1156 | },
1157 | "node_modules/fsevents": {
1158 | "version": "2.3.2",
1159 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1160 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1161 | "dev": true,
1162 | "hasInstallScript": true,
1163 | "optional": true,
1164 | "os": [
1165 | "darwin"
1166 | ],
1167 | "engines": {
1168 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1169 | }
1170 | },
1171 | "node_modules/fstream": {
1172 | "version": "1.0.12",
1173 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
1174 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
1175 | "deprecated": "This package is no longer supported.",
1176 | "dev": true,
1177 | "dependencies": {
1178 | "graceful-fs": "^4.1.2",
1179 | "inherits": "~2.0.0",
1180 | "mkdirp": ">=0.5 0",
1181 | "rimraf": "2"
1182 | },
1183 | "engines": {
1184 | "node": ">=0.6"
1185 | }
1186 | },
1187 | "node_modules/fstream/node_modules/glob": {
1188 | "version": "7.2.3",
1189 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1190 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1191 | "deprecated": "Glob versions prior to v9 are no longer supported",
1192 | "dev": true,
1193 | "dependencies": {
1194 | "fs.realpath": "^1.0.0",
1195 | "inflight": "^1.0.4",
1196 | "inherits": "2",
1197 | "minimatch": "^3.1.1",
1198 | "once": "^1.3.0",
1199 | "path-is-absolute": "^1.0.0"
1200 | },
1201 | "engines": {
1202 | "node": "*"
1203 | },
1204 | "funding": {
1205 | "url": "https://github.com/sponsors/isaacs"
1206 | }
1207 | },
1208 | "node_modules/fstream/node_modules/rimraf": {
1209 | "version": "2.7.1",
1210 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1211 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1212 | "deprecated": "Rimraf versions prior to v4 are no longer supported",
1213 | "dev": true,
1214 | "dependencies": {
1215 | "glob": "^7.1.3"
1216 | },
1217 | "bin": {
1218 | "rimraf": "bin.js"
1219 | }
1220 | },
1221 | "node_modules/functional-red-black-tree": {
1222 | "version": "1.0.1",
1223 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1224 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
1225 | "dev": true
1226 | },
1227 | "node_modules/get-caller-file": {
1228 | "version": "2.0.5",
1229 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1230 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1231 | "dev": true,
1232 | "engines": {
1233 | "node": "6.* || 8.* || >= 10.*"
1234 | }
1235 | },
1236 | "node_modules/glob": {
1237 | "version": "8.0.3",
1238 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
1239 | "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
1240 | "deprecated": "Glob versions prior to v9 are no longer supported",
1241 | "dev": true,
1242 | "dependencies": {
1243 | "fs.realpath": "^1.0.0",
1244 | "inflight": "^1.0.4",
1245 | "inherits": "2",
1246 | "minimatch": "^5.0.1",
1247 | "once": "^1.3.0"
1248 | },
1249 | "engines": {
1250 | "node": ">=12"
1251 | },
1252 | "funding": {
1253 | "url": "https://github.com/sponsors/isaacs"
1254 | }
1255 | },
1256 | "node_modules/glob-parent": {
1257 | "version": "5.1.2",
1258 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1259 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1260 | "dev": true,
1261 | "dependencies": {
1262 | "is-glob": "^4.0.1"
1263 | },
1264 | "engines": {
1265 | "node": ">= 6"
1266 | }
1267 | },
1268 | "node_modules/glob/node_modules/brace-expansion": {
1269 | "version": "2.0.1",
1270 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1271 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1272 | "dev": true,
1273 | "dependencies": {
1274 | "balanced-match": "^1.0.0"
1275 | }
1276 | },
1277 | "node_modules/glob/node_modules/minimatch": {
1278 | "version": "5.1.0",
1279 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
1280 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
1281 | "dev": true,
1282 | "dependencies": {
1283 | "brace-expansion": "^2.0.1"
1284 | },
1285 | "engines": {
1286 | "node": ">=10"
1287 | }
1288 | },
1289 | "node_modules/globals": {
1290 | "version": "13.17.0",
1291 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
1292 | "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
1293 | "dev": true,
1294 | "dependencies": {
1295 | "type-fest": "^0.20.2"
1296 | },
1297 | "engines": {
1298 | "node": ">=8"
1299 | },
1300 | "funding": {
1301 | "url": "https://github.com/sponsors/sindresorhus"
1302 | }
1303 | },
1304 | "node_modules/globby": {
1305 | "version": "11.1.0",
1306 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
1307 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
1308 | "dev": true,
1309 | "dependencies": {
1310 | "array-union": "^2.1.0",
1311 | "dir-glob": "^3.0.1",
1312 | "fast-glob": "^3.2.9",
1313 | "ignore": "^5.2.0",
1314 | "merge2": "^1.4.1",
1315 | "slash": "^3.0.0"
1316 | },
1317 | "engines": {
1318 | "node": ">=10"
1319 | },
1320 | "funding": {
1321 | "url": "https://github.com/sponsors/sindresorhus"
1322 | }
1323 | },
1324 | "node_modules/graceful-fs": {
1325 | "version": "4.2.10",
1326 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1327 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
1328 | "dev": true
1329 | },
1330 | "node_modules/grapheme-splitter": {
1331 | "version": "1.0.4",
1332 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
1333 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
1334 | "dev": true
1335 | },
1336 | "node_modules/has-flag": {
1337 | "version": "4.0.0",
1338 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1339 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1340 | "dev": true,
1341 | "engines": {
1342 | "node": ">=8"
1343 | }
1344 | },
1345 | "node_modules/he": {
1346 | "version": "1.2.0",
1347 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
1348 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
1349 | "dev": true,
1350 | "bin": {
1351 | "he": "bin/he"
1352 | }
1353 | },
1354 | "node_modules/http-proxy-agent": {
1355 | "version": "4.0.1",
1356 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
1357 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
1358 | "dev": true,
1359 | "dependencies": {
1360 | "@tootallnate/once": "1",
1361 | "agent-base": "6",
1362 | "debug": "4"
1363 | },
1364 | "engines": {
1365 | "node": ">= 6"
1366 | }
1367 | },
1368 | "node_modules/https-proxy-agent": {
1369 | "version": "5.0.1",
1370 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
1371 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
1372 | "dev": true,
1373 | "dependencies": {
1374 | "agent-base": "6",
1375 | "debug": "4"
1376 | },
1377 | "engines": {
1378 | "node": ">= 6"
1379 | }
1380 | },
1381 | "node_modules/ignore": {
1382 | "version": "5.2.0",
1383 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
1384 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
1385 | "dev": true,
1386 | "engines": {
1387 | "node": ">= 4"
1388 | }
1389 | },
1390 | "node_modules/import-fresh": {
1391 | "version": "3.3.0",
1392 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1393 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1394 | "dev": true,
1395 | "dependencies": {
1396 | "parent-module": "^1.0.0",
1397 | "resolve-from": "^4.0.0"
1398 | },
1399 | "engines": {
1400 | "node": ">=6"
1401 | },
1402 | "funding": {
1403 | "url": "https://github.com/sponsors/sindresorhus"
1404 | }
1405 | },
1406 | "node_modules/imurmurhash": {
1407 | "version": "0.1.4",
1408 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1409 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1410 | "dev": true,
1411 | "engines": {
1412 | "node": ">=0.8.19"
1413 | }
1414 | },
1415 | "node_modules/inflight": {
1416 | "version": "1.0.6",
1417 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1418 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1419 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
1420 | "dev": true,
1421 | "dependencies": {
1422 | "once": "^1.3.0",
1423 | "wrappy": "1"
1424 | }
1425 | },
1426 | "node_modules/inherits": {
1427 | "version": "2.0.4",
1428 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1429 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1430 | "dev": true
1431 | },
1432 | "node_modules/is-binary-path": {
1433 | "version": "2.1.0",
1434 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1435 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1436 | "dev": true,
1437 | "dependencies": {
1438 | "binary-extensions": "^2.0.0"
1439 | },
1440 | "engines": {
1441 | "node": ">=8"
1442 | }
1443 | },
1444 | "node_modules/is-extglob": {
1445 | "version": "2.1.1",
1446 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1447 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1448 | "dev": true,
1449 | "engines": {
1450 | "node": ">=0.10.0"
1451 | }
1452 | },
1453 | "node_modules/is-fullwidth-code-point": {
1454 | "version": "3.0.0",
1455 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1456 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1457 | "dev": true,
1458 | "engines": {
1459 | "node": ">=8"
1460 | }
1461 | },
1462 | "node_modules/is-glob": {
1463 | "version": "4.0.3",
1464 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1465 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1466 | "dev": true,
1467 | "dependencies": {
1468 | "is-extglob": "^2.1.1"
1469 | },
1470 | "engines": {
1471 | "node": ">=0.10.0"
1472 | }
1473 | },
1474 | "node_modules/is-number": {
1475 | "version": "7.0.0",
1476 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1477 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1478 | "dev": true,
1479 | "engines": {
1480 | "node": ">=0.12.0"
1481 | }
1482 | },
1483 | "node_modules/is-plain-obj": {
1484 | "version": "2.1.0",
1485 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1486 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1487 | "dev": true,
1488 | "engines": {
1489 | "node": ">=8"
1490 | }
1491 | },
1492 | "node_modules/is-unicode-supported": {
1493 | "version": "0.1.0",
1494 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
1495 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
1496 | "dev": true,
1497 | "engines": {
1498 | "node": ">=10"
1499 | },
1500 | "funding": {
1501 | "url": "https://github.com/sponsors/sindresorhus"
1502 | }
1503 | },
1504 | "node_modules/isarray": {
1505 | "version": "1.0.0",
1506 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1507 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
1508 | "dev": true
1509 | },
1510 | "node_modules/isexe": {
1511 | "version": "2.0.0",
1512 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1513 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1514 | "dev": true
1515 | },
1516 | "node_modules/js-yaml": {
1517 | "version": "4.1.0",
1518 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1519 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1520 | "dev": true,
1521 | "dependencies": {
1522 | "argparse": "^2.0.1"
1523 | },
1524 | "bin": {
1525 | "js-yaml": "bin/js-yaml.js"
1526 | }
1527 | },
1528 | "node_modules/json-schema-traverse": {
1529 | "version": "0.4.1",
1530 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1531 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1532 | "dev": true
1533 | },
1534 | "node_modules/json-stable-stringify-without-jsonify": {
1535 | "version": "1.0.1",
1536 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1537 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1538 | "dev": true
1539 | },
1540 | "node_modules/levn": {
1541 | "version": "0.4.1",
1542 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1543 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1544 | "dev": true,
1545 | "dependencies": {
1546 | "prelude-ls": "^1.2.1",
1547 | "type-check": "~0.4.0"
1548 | },
1549 | "engines": {
1550 | "node": ">= 0.8.0"
1551 | }
1552 | },
1553 | "node_modules/listenercount": {
1554 | "version": "1.0.1",
1555 | "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
1556 | "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==",
1557 | "dev": true
1558 | },
1559 | "node_modules/locate-path": {
1560 | "version": "6.0.0",
1561 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
1562 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
1563 | "dev": true,
1564 | "dependencies": {
1565 | "p-locate": "^5.0.0"
1566 | },
1567 | "engines": {
1568 | "node": ">=10"
1569 | },
1570 | "funding": {
1571 | "url": "https://github.com/sponsors/sindresorhus"
1572 | }
1573 | },
1574 | "node_modules/lodash.merge": {
1575 | "version": "4.6.2",
1576 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1577 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1578 | "dev": true
1579 | },
1580 | "node_modules/log-symbols": {
1581 | "version": "4.1.0",
1582 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
1583 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
1584 | "dev": true,
1585 | "dependencies": {
1586 | "chalk": "^4.1.0",
1587 | "is-unicode-supported": "^0.1.0"
1588 | },
1589 | "engines": {
1590 | "node": ">=10"
1591 | },
1592 | "funding": {
1593 | "url": "https://github.com/sponsors/sindresorhus"
1594 | }
1595 | },
1596 | "node_modules/lru-cache": {
1597 | "version": "6.0.0",
1598 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1599 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1600 | "dev": true,
1601 | "dependencies": {
1602 | "yallist": "^4.0.0"
1603 | },
1604 | "engines": {
1605 | "node": ">=10"
1606 | }
1607 | },
1608 | "node_modules/merge2": {
1609 | "version": "1.4.1",
1610 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1611 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1612 | "dev": true,
1613 | "engines": {
1614 | "node": ">= 8"
1615 | }
1616 | },
1617 | "node_modules/micromatch": {
1618 | "version": "4.0.5",
1619 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1620 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1621 | "dev": true,
1622 | "dependencies": {
1623 | "braces": "^3.0.2",
1624 | "picomatch": "^2.3.1"
1625 | },
1626 | "engines": {
1627 | "node": ">=8.6"
1628 | }
1629 | },
1630 | "node_modules/minimatch": {
1631 | "version": "3.1.2",
1632 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1633 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1634 | "dev": true,
1635 | "dependencies": {
1636 | "brace-expansion": "^1.1.7"
1637 | },
1638 | "engines": {
1639 | "node": "*"
1640 | }
1641 | },
1642 | "node_modules/minimist": {
1643 | "version": "1.2.6",
1644 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
1645 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
1646 | "dev": true
1647 | },
1648 | "node_modules/mkdirp": {
1649 | "version": "0.5.6",
1650 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
1651 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
1652 | "dev": true,
1653 | "dependencies": {
1654 | "minimist": "^1.2.6"
1655 | },
1656 | "bin": {
1657 | "mkdirp": "bin/cmd.js"
1658 | }
1659 | },
1660 | "node_modules/mocha": {
1661 | "version": "10.0.0",
1662 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
1663 | "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
1664 | "dev": true,
1665 | "dependencies": {
1666 | "@ungap/promise-all-settled": "1.1.2",
1667 | "ansi-colors": "4.1.1",
1668 | "browser-stdout": "1.3.1",
1669 | "chokidar": "3.5.3",
1670 | "debug": "4.3.4",
1671 | "diff": "5.0.0",
1672 | "escape-string-regexp": "4.0.0",
1673 | "find-up": "5.0.0",
1674 | "glob": "7.2.0",
1675 | "he": "1.2.0",
1676 | "js-yaml": "4.1.0",
1677 | "log-symbols": "4.1.0",
1678 | "minimatch": "5.0.1",
1679 | "ms": "2.1.3",
1680 | "nanoid": "3.3.3",
1681 | "serialize-javascript": "6.0.0",
1682 | "strip-json-comments": "3.1.1",
1683 | "supports-color": "8.1.1",
1684 | "workerpool": "6.2.1",
1685 | "yargs": "16.2.0",
1686 | "yargs-parser": "20.2.4",
1687 | "yargs-unparser": "2.0.0"
1688 | },
1689 | "bin": {
1690 | "_mocha": "bin/_mocha",
1691 | "mocha": "bin/mocha.js"
1692 | },
1693 | "engines": {
1694 | "node": ">= 14.0.0"
1695 | },
1696 | "funding": {
1697 | "type": "opencollective",
1698 | "url": "https://opencollective.com/mochajs"
1699 | }
1700 | },
1701 | "node_modules/mocha/node_modules/glob": {
1702 | "version": "7.2.0",
1703 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1704 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1705 | "deprecated": "Glob versions prior to v9 are no longer supported",
1706 | "dev": true,
1707 | "dependencies": {
1708 | "fs.realpath": "^1.0.0",
1709 | "inflight": "^1.0.4",
1710 | "inherits": "2",
1711 | "minimatch": "^3.0.4",
1712 | "once": "^1.3.0",
1713 | "path-is-absolute": "^1.0.0"
1714 | },
1715 | "engines": {
1716 | "node": "*"
1717 | },
1718 | "funding": {
1719 | "url": "https://github.com/sponsors/isaacs"
1720 | }
1721 | },
1722 | "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
1723 | "version": "3.1.2",
1724 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1725 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1726 | "dev": true,
1727 | "dependencies": {
1728 | "brace-expansion": "^1.1.7"
1729 | },
1730 | "engines": {
1731 | "node": "*"
1732 | }
1733 | },
1734 | "node_modules/mocha/node_modules/minimatch": {
1735 | "version": "5.0.1",
1736 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
1737 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
1738 | "dev": true,
1739 | "dependencies": {
1740 | "brace-expansion": "^2.0.1"
1741 | },
1742 | "engines": {
1743 | "node": ">=10"
1744 | }
1745 | },
1746 | "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": {
1747 | "version": "2.0.1",
1748 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1749 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1750 | "dev": true,
1751 | "dependencies": {
1752 | "balanced-match": "^1.0.0"
1753 | }
1754 | },
1755 | "node_modules/mocha/node_modules/ms": {
1756 | "version": "2.1.3",
1757 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1758 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1759 | "dev": true
1760 | },
1761 | "node_modules/mocha/node_modules/supports-color": {
1762 | "version": "8.1.1",
1763 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
1764 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
1765 | "dev": true,
1766 | "dependencies": {
1767 | "has-flag": "^4.0.0"
1768 | },
1769 | "engines": {
1770 | "node": ">=10"
1771 | },
1772 | "funding": {
1773 | "url": "https://github.com/chalk/supports-color?sponsor=1"
1774 | }
1775 | },
1776 | "node_modules/ms": {
1777 | "version": "2.1.2",
1778 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1779 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1780 | "dev": true
1781 | },
1782 | "node_modules/nanoid": {
1783 | "version": "3.3.3",
1784 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
1785 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
1786 | "dev": true,
1787 | "bin": {
1788 | "nanoid": "bin/nanoid.cjs"
1789 | },
1790 | "engines": {
1791 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1792 | }
1793 | },
1794 | "node_modules/natural-compare": {
1795 | "version": "1.4.0",
1796 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1797 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
1798 | "dev": true
1799 | },
1800 | "node_modules/normalize-path": {
1801 | "version": "3.0.0",
1802 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1803 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1804 | "dev": true,
1805 | "engines": {
1806 | "node": ">=0.10.0"
1807 | }
1808 | },
1809 | "node_modules/once": {
1810 | "version": "1.4.0",
1811 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1812 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1813 | "dev": true,
1814 | "dependencies": {
1815 | "wrappy": "1"
1816 | }
1817 | },
1818 | "node_modules/optionator": {
1819 | "version": "0.9.1",
1820 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
1821 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
1822 | "dev": true,
1823 | "dependencies": {
1824 | "deep-is": "^0.1.3",
1825 | "fast-levenshtein": "^2.0.6",
1826 | "levn": "^0.4.1",
1827 | "prelude-ls": "^1.2.1",
1828 | "type-check": "^0.4.0",
1829 | "word-wrap": "^1.2.3"
1830 | },
1831 | "engines": {
1832 | "node": ">= 0.8.0"
1833 | }
1834 | },
1835 | "node_modules/p-limit": {
1836 | "version": "3.1.0",
1837 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
1838 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
1839 | "dev": true,
1840 | "dependencies": {
1841 | "yocto-queue": "^0.1.0"
1842 | },
1843 | "engines": {
1844 | "node": ">=10"
1845 | },
1846 | "funding": {
1847 | "url": "https://github.com/sponsors/sindresorhus"
1848 | }
1849 | },
1850 | "node_modules/p-locate": {
1851 | "version": "5.0.0",
1852 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
1853 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
1854 | "dev": true,
1855 | "dependencies": {
1856 | "p-limit": "^3.0.2"
1857 | },
1858 | "engines": {
1859 | "node": ">=10"
1860 | },
1861 | "funding": {
1862 | "url": "https://github.com/sponsors/sindresorhus"
1863 | }
1864 | },
1865 | "node_modules/parent-module": {
1866 | "version": "1.0.1",
1867 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1868 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1869 | "dev": true,
1870 | "dependencies": {
1871 | "callsites": "^3.0.0"
1872 | },
1873 | "engines": {
1874 | "node": ">=6"
1875 | }
1876 | },
1877 | "node_modules/path-exists": {
1878 | "version": "4.0.0",
1879 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1880 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1881 | "dev": true,
1882 | "engines": {
1883 | "node": ">=8"
1884 | }
1885 | },
1886 | "node_modules/path-is-absolute": {
1887 | "version": "1.0.1",
1888 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1889 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1890 | "dev": true,
1891 | "engines": {
1892 | "node": ">=0.10.0"
1893 | }
1894 | },
1895 | "node_modules/path-key": {
1896 | "version": "3.1.1",
1897 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1898 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1899 | "dev": true,
1900 | "engines": {
1901 | "node": ">=8"
1902 | }
1903 | },
1904 | "node_modules/path-type": {
1905 | "version": "4.0.0",
1906 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1907 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1908 | "dev": true,
1909 | "engines": {
1910 | "node": ">=8"
1911 | }
1912 | },
1913 | "node_modules/picomatch": {
1914 | "version": "2.3.1",
1915 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1916 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1917 | "dev": true,
1918 | "engines": {
1919 | "node": ">=8.6"
1920 | },
1921 | "funding": {
1922 | "url": "https://github.com/sponsors/jonschlinkert"
1923 | }
1924 | },
1925 | "node_modules/prelude-ls": {
1926 | "version": "1.2.1",
1927 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1928 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1929 | "dev": true,
1930 | "engines": {
1931 | "node": ">= 0.8.0"
1932 | }
1933 | },
1934 | "node_modules/process-nextick-args": {
1935 | "version": "2.0.1",
1936 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1937 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
1938 | "dev": true
1939 | },
1940 | "node_modules/punycode": {
1941 | "version": "2.1.1",
1942 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1943 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1944 | "dev": true,
1945 | "engines": {
1946 | "node": ">=6"
1947 | }
1948 | },
1949 | "node_modules/python-shell": {
1950 | "version": "3.0.1",
1951 | "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-3.0.1.tgz",
1952 | "integrity": "sha512-TWeotuxe1auhXa5bGRScxnc2J+0r41NBntSa6RYZtMBLtAEsvCboKrEbW6DvASosWQepVkhZZlT3B5Ei766G+Q==",
1953 | "dev": true,
1954 | "engines": {
1955 | "node": ">=0.10"
1956 | }
1957 | },
1958 | "node_modules/queue-microtask": {
1959 | "version": "1.2.3",
1960 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1961 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1962 | "dev": true,
1963 | "funding": [
1964 | {
1965 | "type": "github",
1966 | "url": "https://github.com/sponsors/feross"
1967 | },
1968 | {
1969 | "type": "patreon",
1970 | "url": "https://www.patreon.com/feross"
1971 | },
1972 | {
1973 | "type": "consulting",
1974 | "url": "https://feross.org/support"
1975 | }
1976 | ]
1977 | },
1978 | "node_modules/randombytes": {
1979 | "version": "2.1.0",
1980 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1981 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1982 | "dev": true,
1983 | "dependencies": {
1984 | "safe-buffer": "^5.1.0"
1985 | }
1986 | },
1987 | "node_modules/readable-stream": {
1988 | "version": "2.3.7",
1989 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1990 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1991 | "dev": true,
1992 | "dependencies": {
1993 | "core-util-is": "~1.0.0",
1994 | "inherits": "~2.0.3",
1995 | "isarray": "~1.0.0",
1996 | "process-nextick-args": "~2.0.0",
1997 | "safe-buffer": "~5.1.1",
1998 | "string_decoder": "~1.1.1",
1999 | "util-deprecate": "~1.0.1"
2000 | }
2001 | },
2002 | "node_modules/readdirp": {
2003 | "version": "3.6.0",
2004 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2005 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2006 | "dev": true,
2007 | "dependencies": {
2008 | "picomatch": "^2.2.1"
2009 | },
2010 | "engines": {
2011 | "node": ">=8.10.0"
2012 | }
2013 | },
2014 | "node_modules/regexpp": {
2015 | "version": "3.2.0",
2016 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
2017 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
2018 | "dev": true,
2019 | "engines": {
2020 | "node": ">=8"
2021 | },
2022 | "funding": {
2023 | "url": "https://github.com/sponsors/mysticatea"
2024 | }
2025 | },
2026 | "node_modules/require-directory": {
2027 | "version": "2.1.1",
2028 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2029 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
2030 | "dev": true,
2031 | "engines": {
2032 | "node": ">=0.10.0"
2033 | }
2034 | },
2035 | "node_modules/resolve-from": {
2036 | "version": "4.0.0",
2037 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2038 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2039 | "dev": true,
2040 | "engines": {
2041 | "node": ">=4"
2042 | }
2043 | },
2044 | "node_modules/reusify": {
2045 | "version": "1.0.4",
2046 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2047 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2048 | "dev": true,
2049 | "engines": {
2050 | "iojs": ">=1.0.0",
2051 | "node": ">=0.10.0"
2052 | }
2053 | },
2054 | "node_modules/rimraf": {
2055 | "version": "3.0.2",
2056 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2057 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2058 | "deprecated": "Rimraf versions prior to v4 are no longer supported",
2059 | "dev": true,
2060 | "dependencies": {
2061 | "glob": "^7.1.3"
2062 | },
2063 | "bin": {
2064 | "rimraf": "bin.js"
2065 | },
2066 | "funding": {
2067 | "url": "https://github.com/sponsors/isaacs"
2068 | }
2069 | },
2070 | "node_modules/rimraf/node_modules/glob": {
2071 | "version": "7.2.3",
2072 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2073 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2074 | "deprecated": "Glob versions prior to v9 are no longer supported",
2075 | "dev": true,
2076 | "dependencies": {
2077 | "fs.realpath": "^1.0.0",
2078 | "inflight": "^1.0.4",
2079 | "inherits": "2",
2080 | "minimatch": "^3.1.1",
2081 | "once": "^1.3.0",
2082 | "path-is-absolute": "^1.0.0"
2083 | },
2084 | "engines": {
2085 | "node": "*"
2086 | },
2087 | "funding": {
2088 | "url": "https://github.com/sponsors/isaacs"
2089 | }
2090 | },
2091 | "node_modules/run-parallel": {
2092 | "version": "1.2.0",
2093 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2094 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2095 | "dev": true,
2096 | "funding": [
2097 | {
2098 | "type": "github",
2099 | "url": "https://github.com/sponsors/feross"
2100 | },
2101 | {
2102 | "type": "patreon",
2103 | "url": "https://www.patreon.com/feross"
2104 | },
2105 | {
2106 | "type": "consulting",
2107 | "url": "https://feross.org/support"
2108 | }
2109 | ],
2110 | "dependencies": {
2111 | "queue-microtask": "^1.2.2"
2112 | }
2113 | },
2114 | "node_modules/safe-buffer": {
2115 | "version": "5.1.2",
2116 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2117 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2118 | "dev": true
2119 | },
2120 | "node_modules/semver": {
2121 | "version": "7.3.7",
2122 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
2123 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
2124 | "dev": true,
2125 | "dependencies": {
2126 | "lru-cache": "^6.0.0"
2127 | },
2128 | "bin": {
2129 | "semver": "bin/semver.js"
2130 | },
2131 | "engines": {
2132 | "node": ">=10"
2133 | }
2134 | },
2135 | "node_modules/serialize-javascript": {
2136 | "version": "6.0.0",
2137 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
2138 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
2139 | "dev": true,
2140 | "dependencies": {
2141 | "randombytes": "^2.1.0"
2142 | }
2143 | },
2144 | "node_modules/setimmediate": {
2145 | "version": "1.0.5",
2146 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
2147 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
2148 | "dev": true
2149 | },
2150 | "node_modules/shebang-command": {
2151 | "version": "2.0.0",
2152 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2153 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2154 | "dev": true,
2155 | "dependencies": {
2156 | "shebang-regex": "^3.0.0"
2157 | },
2158 | "engines": {
2159 | "node": ">=8"
2160 | }
2161 | },
2162 | "node_modules/shebang-regex": {
2163 | "version": "3.0.0",
2164 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2165 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2166 | "dev": true,
2167 | "engines": {
2168 | "node": ">=8"
2169 | }
2170 | },
2171 | "node_modules/slash": {
2172 | "version": "3.0.0",
2173 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
2174 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
2175 | "dev": true,
2176 | "engines": {
2177 | "node": ">=8"
2178 | }
2179 | },
2180 | "node_modules/string_decoder": {
2181 | "version": "1.1.1",
2182 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2183 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2184 | "dev": true,
2185 | "dependencies": {
2186 | "safe-buffer": "~5.1.0"
2187 | }
2188 | },
2189 | "node_modules/string-width": {
2190 | "version": "4.2.3",
2191 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2192 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2193 | "dev": true,
2194 | "dependencies": {
2195 | "emoji-regex": "^8.0.0",
2196 | "is-fullwidth-code-point": "^3.0.0",
2197 | "strip-ansi": "^6.0.1"
2198 | },
2199 | "engines": {
2200 | "node": ">=8"
2201 | }
2202 | },
2203 | "node_modules/strip-ansi": {
2204 | "version": "6.0.1",
2205 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2206 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2207 | "dev": true,
2208 | "dependencies": {
2209 | "ansi-regex": "^5.0.1"
2210 | },
2211 | "engines": {
2212 | "node": ">=8"
2213 | }
2214 | },
2215 | "node_modules/strip-json-comments": {
2216 | "version": "3.1.1",
2217 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2218 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2219 | "dev": true,
2220 | "engines": {
2221 | "node": ">=8"
2222 | },
2223 | "funding": {
2224 | "url": "https://github.com/sponsors/sindresorhus"
2225 | }
2226 | },
2227 | "node_modules/supports-color": {
2228 | "version": "7.2.0",
2229 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2230 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2231 | "dev": true,
2232 | "dependencies": {
2233 | "has-flag": "^4.0.0"
2234 | },
2235 | "engines": {
2236 | "node": ">=8"
2237 | }
2238 | },
2239 | "node_modules/text-table": {
2240 | "version": "0.2.0",
2241 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2242 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
2243 | "dev": true
2244 | },
2245 | "node_modules/to-regex-range": {
2246 | "version": "5.0.1",
2247 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2248 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2249 | "dev": true,
2250 | "dependencies": {
2251 | "is-number": "^7.0.0"
2252 | },
2253 | "engines": {
2254 | "node": ">=8.0"
2255 | }
2256 | },
2257 | "node_modules/traverse": {
2258 | "version": "0.3.9",
2259 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
2260 | "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==",
2261 | "dev": true,
2262 | "engines": {
2263 | "node": "*"
2264 | }
2265 | },
2266 | "node_modules/tslib": {
2267 | "version": "1.14.1",
2268 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2269 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2270 | "dev": true
2271 | },
2272 | "node_modules/tsutils": {
2273 | "version": "3.21.0",
2274 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
2275 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
2276 | "dev": true,
2277 | "dependencies": {
2278 | "tslib": "^1.8.1"
2279 | },
2280 | "engines": {
2281 | "node": ">= 6"
2282 | },
2283 | "peerDependencies": {
2284 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
2285 | }
2286 | },
2287 | "node_modules/type-check": {
2288 | "version": "0.4.0",
2289 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2290 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2291 | "dev": true,
2292 | "dependencies": {
2293 | "prelude-ls": "^1.2.1"
2294 | },
2295 | "engines": {
2296 | "node": ">= 0.8.0"
2297 | }
2298 | },
2299 | "node_modules/type-fest": {
2300 | "version": "0.20.2",
2301 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
2302 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
2303 | "dev": true,
2304 | "engines": {
2305 | "node": ">=10"
2306 | },
2307 | "funding": {
2308 | "url": "https://github.com/sponsors/sindresorhus"
2309 | }
2310 | },
2311 | "node_modules/typescript": {
2312 | "version": "4.8.2",
2313 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
2314 | "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==",
2315 | "dev": true,
2316 | "bin": {
2317 | "tsc": "bin/tsc",
2318 | "tsserver": "bin/tsserver"
2319 | },
2320 | "engines": {
2321 | "node": ">=4.2.0"
2322 | }
2323 | },
2324 | "node_modules/unzipper": {
2325 | "version": "0.10.11",
2326 | "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
2327 | "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
2328 | "dev": true,
2329 | "dependencies": {
2330 | "big-integer": "^1.6.17",
2331 | "binary": "~0.3.0",
2332 | "bluebird": "~3.4.1",
2333 | "buffer-indexof-polyfill": "~1.0.0",
2334 | "duplexer2": "~0.1.4",
2335 | "fstream": "^1.0.12",
2336 | "graceful-fs": "^4.2.2",
2337 | "listenercount": "~1.0.1",
2338 | "readable-stream": "~2.3.6",
2339 | "setimmediate": "~1.0.4"
2340 | }
2341 | },
2342 | "node_modules/uri-js": {
2343 | "version": "4.4.1",
2344 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2345 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2346 | "dev": true,
2347 | "dependencies": {
2348 | "punycode": "^2.1.0"
2349 | }
2350 | },
2351 | "node_modules/util-deprecate": {
2352 | "version": "1.0.2",
2353 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2354 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2355 | "dev": true
2356 | },
2357 | "node_modules/which": {
2358 | "version": "2.0.2",
2359 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2360 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2361 | "dev": true,
2362 | "dependencies": {
2363 | "isexe": "^2.0.0"
2364 | },
2365 | "bin": {
2366 | "node-which": "bin/node-which"
2367 | },
2368 | "engines": {
2369 | "node": ">= 8"
2370 | }
2371 | },
2372 | "node_modules/word-wrap": {
2373 | "version": "1.2.3",
2374 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
2375 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
2376 | "dev": true,
2377 | "engines": {
2378 | "node": ">=0.10.0"
2379 | }
2380 | },
2381 | "node_modules/workerpool": {
2382 | "version": "6.2.1",
2383 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
2384 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
2385 | "dev": true
2386 | },
2387 | "node_modules/wrap-ansi": {
2388 | "version": "7.0.0",
2389 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2390 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2391 | "dev": true,
2392 | "dependencies": {
2393 | "ansi-styles": "^4.0.0",
2394 | "string-width": "^4.1.0",
2395 | "strip-ansi": "^6.0.0"
2396 | },
2397 | "engines": {
2398 | "node": ">=10"
2399 | },
2400 | "funding": {
2401 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2402 | }
2403 | },
2404 | "node_modules/wrappy": {
2405 | "version": "1.0.2",
2406 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2407 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2408 | "dev": true
2409 | },
2410 | "node_modules/y18n": {
2411 | "version": "5.0.8",
2412 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
2413 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
2414 | "dev": true,
2415 | "engines": {
2416 | "node": ">=10"
2417 | }
2418 | },
2419 | "node_modules/yallist": {
2420 | "version": "4.0.0",
2421 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2422 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2423 | "dev": true
2424 | },
2425 | "node_modules/yargs": {
2426 | "version": "16.2.0",
2427 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
2428 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
2429 | "dev": true,
2430 | "dependencies": {
2431 | "cliui": "^7.0.2",
2432 | "escalade": "^3.1.1",
2433 | "get-caller-file": "^2.0.5",
2434 | "require-directory": "^2.1.1",
2435 | "string-width": "^4.2.0",
2436 | "y18n": "^5.0.5",
2437 | "yargs-parser": "^20.2.2"
2438 | },
2439 | "engines": {
2440 | "node": ">=10"
2441 | }
2442 | },
2443 | "node_modules/yargs-parser": {
2444 | "version": "20.2.4",
2445 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
2446 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
2447 | "dev": true,
2448 | "engines": {
2449 | "node": ">=10"
2450 | }
2451 | },
2452 | "node_modules/yargs-unparser": {
2453 | "version": "2.0.0",
2454 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
2455 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
2456 | "dev": true,
2457 | "dependencies": {
2458 | "camelcase": "^6.0.0",
2459 | "decamelize": "^4.0.0",
2460 | "flat": "^5.0.2",
2461 | "is-plain-obj": "^2.1.0"
2462 | },
2463 | "engines": {
2464 | "node": ">=10"
2465 | }
2466 | },
2467 | "node_modules/yocto-queue": {
2468 | "version": "0.1.0",
2469 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
2470 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
2471 | "dev": true,
2472 | "engines": {
2473 | "node": ">=10"
2474 | },
2475 | "funding": {
2476 | "url": "https://github.com/sponsors/sindresorhus"
2477 | }
2478 | }
2479 | }
2480 | }
2481 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vscode-pydata-viewer",
3 | "displayName": "vscode-pydata-viewer",
4 | "description": "Display PyData files (.npz .npy .pkl .pth) in VSCode.",
5 | "publisher": "Percy",
6 | "version": "0.0.13",
7 | "icon": "images/icon.png",
8 | "engines": {
9 | "vscode": "^1.70.0"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/haochengxia/vscode-pydata-viewer.git"
14 | },
15 | "categories": [
16 | "Other"
17 | ],
18 | "activationEvents": [
19 | "onCustomEditor:pydata.preview"
20 | ],
21 | "main": "./out/extension.js",
22 | "contributes": {
23 | "customEditors": [
24 | {
25 | "viewType": "pydata.preview",
26 | "displayName": "Python Data Preview",
27 | "selector": [
28 | {
29 | "filenamePattern": "*.npy"
30 | },
31 | {
32 | "filenamePattern": "*.npz"
33 | },
34 | {
35 | "filenamePattern": "*.pkl"
36 | },
37 | {
38 | "filenamePattern": "*.pck"
39 | },
40 | {
41 | "filenamePattern": "*.pickle"
42 | },
43 | {
44 | "filenamePattern": "*.pkl.gz"
45 | },
46 | {
47 | "filenamePattern": "*.pth"
48 | },
49 | {
50 | "filenamePattern": "*.ckpt"
51 | },
52 | {
53 | "filenamePattern": "*.pt"
54 | }
55 | ]
56 | }
57 | ],
58 | "configuration": [
59 | {
60 | "title": "vscode-pydata-viewer configuration",
61 | "properties": {
62 | "vscode-pydata-viewer.pythonPath": {
63 | "type": "string",
64 | "default": "default",
65 | "description": "The absolute path of python interpreter. `default` means no custom interpreter."
66 | },
67 | "vscode-pydata-viewer.scriptPath": {
68 | "type": "string",
69 | "default": "default",
70 | "description": "The absolute path of custom script. `default` means no custom script."
71 | }
72 | }
73 | }
74 | ]
75 | },
76 | "scripts": {
77 | "vscode:prepublish": "npm run compile",
78 | "compile": "tsc -p ./",
79 | "watch": "tsc -watch -p ./",
80 | "pretest": "npm run compile && npm run lint",
81 | "lint": "eslint src --ext ts",
82 | "test": "node ./out/test/runTest.js"
83 | },
84 | "dependencies": {
85 | "python-shell": "^3.0.1"
86 | },
87 | "devDependencies": {
88 | "@types/vscode": "^1.70.0",
89 | "@types/glob": "^7.2.0",
90 | "@types/mocha": "^9.1.1",
91 | "@types/node": "16.x",
92 | "@typescript-eslint/eslint-plugin": "^5.27.0",
93 | "@typescript-eslint/parser": "^5.27.0",
94 | "eslint": "^8.16.0",
95 | "glob": "^8.0.3",
96 | "mocha": "^10.0.0",
97 | "typescript": "^4.7.2",
98 | "@vscode/test-electron": "^2.1.3",
99 | "python-shell": "^3.0.1"
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/pyscripts/example/create_example.py:
--------------------------------------------------------------------------------
1 | # create example files
2 | import numpy as np
3 | import torch
4 | import compress_pickle
5 |
6 | np.save('./example.npy', np.array([1, 2, 3]))
7 | torch.save(torch.tensor([1, 2, 3]), './example.pth')
8 | compress_pickle.dump({'example': 'data'}, './example.pkl.gz')
9 |
10 | tensors = {
11 | 'tensor1': torch.tensor([1, 2, 3]),
12 | 'tensor2': torch.tensor([4, 5, 6])
13 | }
14 | torch.save(tensors, './example_multi.pth')
15 |
--------------------------------------------------------------------------------
/pyscripts/read_files.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | """
4 | sys.argv[1]: `.npy` or `.npz` file path
5 | """
6 |
7 | import sys
8 | from enum import Enum
9 |
10 | class FileType(Enum):
11 | NUMPY = 0
12 | PICKLE = 1
13 | PYTORCH = 2
14 | COMPRESSED_PICKLE = 3
15 |
16 | # ============ Enhancement ============
17 | # gathering enhance features here
18 | ENHANCE_PLT = True
19 |
20 | try:
21 | import matplotlib.pyplot as plt
22 | from io import BytesIO
23 | import base64
24 |
25 | # dummy to load manager for plt
26 | _ = plt.figure()
27 | def render_plot_to_html(fig):
28 | buf = BytesIO()
29 | fig.savefig(buf, format='jpeg')
30 | buf.seek(0)
31 | img_base64 = base64.b64encode(buf.read()).decode('utf-8')
32 | html_img = f'
'
33 | return html_img
34 | except:
35 | ENHANCE_PLT = False
36 | # =====================================
37 |
38 | np = None
39 | def print_ndarray(array):
40 | if not isinstance(array, np.ndarray):
41 | array = np.array(array)
42 | if array.dtype == np.dtype("O"):
43 | if not array.shape:
44 | array = array.item()
45 | if isinstance(array, dict):
46 | print("{")
47 | for k, v in array.items():
48 | print("'{}':".format(k))
49 | if isinstance(v, np.ndarray):
50 | print("shape: {}".format(v.shape))
51 | print("{},".format(v))
52 | print("}")
53 | else:
54 | print(array)
55 | else:
56 | print("shape: {}".format(array.shape))
57 | print("[")
58 | if len(array) > 5:
59 | for item in array[:5]:
60 | print_ndarray(item)
61 | print(",")
62 | print("...,")
63 | print_ndarray(array[-1])
64 | else:
65 | for item in array[:-1]:
66 | print_ndarray(item)
67 | print(",")
68 | print_ndarray(array[-1])
69 | print("]")
70 | else:
71 | print("shape: {}".format(array.shape))
72 | # repr(array) will outputs "array([e, e, ...])", we cut the head "array(" and tail ")", then replace redundant 6 spaces per line
73 | print(repr(array)[6:-1].replace(" " * 6, ""))
74 |
75 | def process_file(file_type: int, file_path: str):
76 | """main function to process file
77 |
78 | Args:
79 | file_type:
80 | file_path:
81 | """
82 | if file_type == FileType.NUMPY.value:
83 | # Solve numpy files .npy or .npz
84 | try:
85 | global np
86 | import numpy as np
87 | if file_path.endswith("npz"):
88 | content = np.load(file_path, allow_pickle=True)
89 | print("{")
90 | for f in content.files:
91 | print("'{}':".format(f))
92 | print_ndarray(content[f])
93 | print("}")
94 | else:
95 | content = np.load(file_path, allow_pickle=True)
96 | print_ndarray(content)
97 | except Exception as e:
98 | print(e)
99 |
100 | elif file_type == FileType.PICKLE.value:
101 | # Solve pickle files .pkl
102 | try:
103 | import pickle
104 | contents = []
105 | with open(file_path, "rb") as f:
106 | while True:
107 | try:
108 | contents.append(pickle.load(f))
109 | except EOFError:
110 | break
111 | num_contents = len(contents)
112 | for i, c in enumerate(contents):
113 | if ENHANCE_PLT:
114 | if isinstance(c, plt.Figure):
115 | c = render_plot_to_html(c)
116 | print(f'Item {i+1}/{num_contents}:', c, sep="\n")
117 | except UnicodeDecodeError:
118 | with open(file_path, "rb") as f:
119 | content = pickle.load(f, encoding="latin1")
120 | print(content)
121 | except Exception as e:
122 | print(e)
123 |
124 | elif file_type == FileType.COMPRESSED_PICKLE.value:
125 | # compressed pickle file .pkl.gz
126 | try:
127 | import compress_pickle
128 | contents = compress_pickle.load(file_path)
129 | if ENHANCE_PLT:
130 | if isinstance(contents, plt.Figure):
131 | contents = render_plot_to_html(contents)
132 | print(contents)
133 | except Exception as e:
134 | print(e)
135 |
136 | elif file_type == FileType.PYTORCH.value:
137 | # Solve pytorch files .pth
138 | try:
139 | import torch
140 | content = torch.load(file_path, map_location='cpu', weights_only=True)
141 | print(content)
142 | except Exception as e:
143 | print(e)
144 | else:
145 | print("Unsupport file type.")
146 |
147 | def main():
148 | """main function"""
149 | if len(sys.argv) < 3:
150 | print("Usage: python read_files.py ")
151 | return
152 |
153 | try:
154 | file_type = int(sys.argv[1])
155 | file_path = sys.argv[2]
156 | process_file(file_type, file_path)
157 | except ValueError:
158 | print("Error: file_type must be an integer")
159 | except Exception as e:
160 | print(f"Error: {e}")
161 |
162 | if __name__ == "__main__":
163 | main()
164 |
--------------------------------------------------------------------------------
/pyscripts/requirements.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | torch
3 | matplotlib
4 | compress_pickle
5 | pytest
6 | pytest-cov
--------------------------------------------------------------------------------
/pyscripts/test/test_read_files.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | import numpy as np
3 | import pickle
4 | import torch
5 | import matplotlib.pyplot as plt
6 | import os
7 | import sys
8 | from pathlib import Path
9 | import compress_pickle
10 |
11 | # add project root to sys.path
12 | current_dir = Path(__file__).parent
13 | project_root = current_dir.parent.parent
14 | sys.path.insert(0, str(project_root))
15 |
16 | from pyscripts.read_files import FileType, print_ndarray, render_plot_to_html, process_file
17 |
18 | class TestReadFiles:
19 | @pytest.fixture
20 | def setup_test_files(self, tmp_path):
21 | """create test files for reading"""
22 | # create test data
23 | test_array = np.array([[1, 2], [3, 4]])
24 | test_dict = {'a': np.array([1, 2, 3]), 'b': 'test'}
25 |
26 | # create .npy file
27 | npy_path = tmp_path / "test.npy"
28 | np.save(npy_path, test_array)
29 |
30 | # create .npz file
31 | npz_path = tmp_path / "test.npz"
32 | np.savez(npz_path, array=test_array, dict=test_dict)
33 |
34 | # create .pkl file
35 | pkl_path = tmp_path / "test.pkl"
36 | with open(pkl_path, 'wb') as f:
37 | pickle.dump(test_dict, f)
38 |
39 | # create matplotlib pickle file
40 | plt_pkl_path = tmp_path / "test_plt.pkl"
41 | fig = plt.figure()
42 | plt.plot([1, 2, 3], [1, 2, 3])
43 | with open(plt_pkl_path, 'wb') as f:
44 | pickle.dump(fig, f)
45 |
46 | # create .pth file
47 | pth_path = tmp_path / "test.pth"
48 | model_dict = {'layer1': torch.randn(2, 2)}
49 | torch.save(model_dict, pth_path)
50 |
51 | # create compressed .pkl file
52 | compressed_pkl_path = tmp_path / "test.pkl.gz"
53 | test_data = {'compressed': 'data', 'array': np.array([1, 2, 3])}
54 | compress_pickle.dump(test_data, compressed_pkl_path)
55 |
56 | return {
57 | 'npy_path': npy_path,
58 | 'npz_path': npz_path,
59 | 'pkl_path': pkl_path,
60 | 'plt_pkl_path': plt_pkl_path,
61 | 'pth_path': pth_path,
62 | 'compressed_pkl_path': compressed_pkl_path
63 | }
64 |
65 | def test_numpy_file_reading(self, setup_test_files, capsys):
66 | process_file(FileType.NUMPY.value, str(setup_test_files['npy_path']))
67 | captured = capsys.readouterr()
68 | assert 'shape: (2, 2)' in captured.out
69 |
70 | def test_numpy_archive_reading(self, setup_test_files, capsys):
71 | process_file(FileType.NUMPY.value, str(setup_test_files['npz_path']))
72 | captured = capsys.readouterr()
73 | assert 'array' in captured.out
74 | assert 'dict' in captured.out
75 |
76 | def test_pickle_file_reading(self, setup_test_files, capsys):
77 | process_file(FileType.PICKLE.value, str(setup_test_files['pkl_path']))
78 | captured = capsys.readouterr()
79 | assert "'a'" in captured.out
80 | assert "'b'" in captured.out
81 |
82 | def test_pytorch_file_reading(self, setup_test_files, capsys):
83 | process_file(FileType.PYTORCH.value, str(setup_test_files['pth_path']))
84 | captured = capsys.readouterr()
85 | assert 'layer1' in captured.out
86 |
87 | def test_matplotlib_pickle_reading(self, setup_test_files, capsys):
88 | process_file(FileType.PICKLE.value, str(setup_test_files['plt_pkl_path']))
89 | captured = capsys.readouterr()
90 | assert 'data:image/jpeg;base64' in captured.out
91 |
92 | def test_compressed_pickle_reading(self, setup_test_files, capsys):
93 | process_file(FileType.COMPRESSED_PICKLE.value,
94 | str(setup_test_files['compressed_pkl_path']))
95 | captured = capsys.readouterr()
96 | assert "'compressed'" in captured.out
97 | assert "'array'" in captured.out
98 | assert "data" in captured.out
99 |
100 | def test_invalid_file_type(self, capsys):
101 | process_file(999, 'nonexistent.file')
102 | captured = capsys.readouterr()
103 | assert "Unsupport file type" in captured.out
104 |
105 | def test_nonexistent_file(self, capsys):
106 | process_file(FileType.NUMPY.value, 'nonexistent.npy')
107 | captured = capsys.readouterr()
108 | assert "No such file" in captured.out
109 |
--------------------------------------------------------------------------------
/src/disposable.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 |
3 | export function disposeAll(disposables: vscode.Disposable[]): void {
4 | while (disposables.length) {
5 | const item = disposables.pop();
6 | if (item) {
7 | item.dispose();
8 | }
9 | }
10 | }
11 |
12 | export abstract class Disposable {
13 | private _isDisposed = false;
14 |
15 | protected _disposables: vscode.Disposable[] = [];
16 |
17 | public dispose(): void {
18 | if (this._isDisposed) {
19 | return;
20 | }
21 | this._isDisposed = true;
22 | disposeAll(this._disposables);
23 | }
24 |
25 | protected _register(value: T): T {
26 | if (this._isDisposed) {
27 | value.dispose();
28 | } else {
29 | this._disposables.push(value);
30 | }
31 | return value;
32 | }
33 |
34 | protected get isDisposed(): boolean {
35 | return this._isDisposed;
36 | }
37 | }
--------------------------------------------------------------------------------
/src/extension.ts:
--------------------------------------------------------------------------------
1 | // The module 'vscode' contains the VS Code extensibility API
2 | // Import the module and reference it with the alias vscode in your code below
3 | import * as vscode from 'vscode';
4 | import { PyDataCustomProvider } from './pydataProvider';
5 |
6 | // this method is called when your extension is activated
7 | // your extension is activated the very first time the command is executed
8 | export function activate(context: vscode.ExtensionContext) {
9 |
10 | // Use the console to output diagnostic information (console.log) and errors (console.error)
11 | // This line of code will only be executed once when your extension is activated
12 | console.log('Congratulations, your extension "vscode-pydata-viewer" is now active!');
13 |
14 | const extensionRoot = vscode.Uri.file(context.extensionPath);
15 | const provider = new PyDataCustomProvider(context, extensionRoot);
16 | context.subscriptions.push(
17 | vscode.window.registerCustomEditorProvider(
18 | PyDataCustomProvider.viewType,
19 | provider,
20 | {
21 | webviewOptions: {
22 | enableFindWidget: true
23 | }
24 | }
25 | )
26 | );
27 | }
28 |
29 | // this method is called when your extension is deactivated
30 | export function deactivate() { }
31 |
--------------------------------------------------------------------------------
/src/pydataPreview.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 |
3 | import { Disposable } from './disposable';
4 | import { getOption, getPyScriptsPath, OSUtils } from './utils';
5 | import { Options, PythonShell } from 'python-shell';
6 |
7 | type PreviewState = 'Disposed' | 'Visible' | 'Active';
8 |
9 | enum FileType {
10 | NUMPY,
11 | PICKLE,
12 | PYTORCH,
13 | COMPRESSED_PICKLE
14 | }
15 |
16 |
17 | export class PyDataPreview extends Disposable {
18 | private _previewState: PreviewState = 'Visible';
19 |
20 | constructor(
21 | private readonly context: vscode.ExtensionContext,
22 | private readonly extensionRoot: vscode.Uri,
23 | private readonly resource: vscode.Uri,
24 | private readonly webviewEditor: vscode.WebviewPanel
25 | ) {
26 | super();
27 | const resourceRoot = resource.with({
28 | path: resource.path.replace(/\/[^/]+?\.\w+$/, '/'),
29 | });
30 |
31 | webviewEditor.webview.options = {
32 | enableScripts: true,
33 | localResourceRoots: [resourceRoot, extensionRoot],
34 | };
35 |
36 | this._register(
37 | webviewEditor.webview.onDidReceiveMessage((message) => {
38 | switch (message.type) {
39 | case 'reopen-as-text': {
40 | vscode.commands.executeCommand(
41 | 'vscode.openWith',
42 | resource,
43 | 'default',
44 | webviewEditor.viewColumn
45 | );
46 | break;
47 | }
48 | }
49 | })
50 | );
51 |
52 | this._register(
53 | webviewEditor.onDidChangeViewState(() => {
54 | this.update();
55 | })
56 | );
57 |
58 | this._register(
59 | webviewEditor.onDidDispose(() => {
60 | this._previewState = 'Disposed';
61 | })
62 | );
63 |
64 | const watcher = this._register(
65 | vscode.workspace.createFileSystemWatcher(resource.fsPath)
66 | );
67 | this._register(
68 | watcher.onDidChange((e) => {
69 | if (e.toString() === this.resource.toString()) {
70 | this.reload();
71 | }
72 | })
73 | );
74 | this._register(
75 | watcher.onDidDelete((e) => {
76 | if (e.toString() === this.resource.toString()) {
77 | this.webviewEditor.dispose();
78 | }
79 | })
80 | );
81 |
82 | this.getWebviewContents(this.resource.path);
83 | this.update();
84 | }
85 |
86 | private reload(): void {
87 | if (this._previewState !== 'Disposed') {
88 | this.webviewEditor.webview.postMessage({ type: 'reload' });
89 | }
90 | }
91 |
92 | private update(): void {
93 | if (this._previewState === 'Disposed') {
94 | return;
95 | }
96 |
97 | if (this.webviewEditor.active) {
98 | this._previewState = 'Active';
99 | return;
100 | }
101 | this._previewState = 'Visible';
102 | }
103 |
104 | public getWebviewContents(resourcePath: string) {
105 | var path = resourcePath;
106 | switch (OSUtils.isWindows()) {
107 | case true:
108 | path = path.slice(1,);
109 | console.log('[+] Windows -> cut path', path);
110 | break;
111 | default:
112 | console.log('[+] NOT Windows', path);
113 | }
114 | // extract the suffix
115 | var fileSuffix = path.toString().split('.').at(-1);
116 | if (fileSuffix === 'gz' || fileSuffix === 'tar') {
117 | const fileSuffix2 = path.toString().split('.').at(-2);
118 | fileSuffix = fileSuffix2 + '.' + fileSuffix;
119 | }
120 | const ft: FileType = PyDataPreview.suffixToType(fileSuffix as string);
121 | console.log('[*] File type is: ', ft);
122 |
123 | // Call python
124 | console.log('starting python....');
125 | var pythonPath = PythonShell.defaultPythonPath;
126 | console.log('default python path', pythonPath);
127 | const customPythonPath = getOption("vscode-pydata-viewer.pythonPath") as string;
128 | if (customPythonPath !== "default") {
129 | pythonPath = customPythonPath;
130 | console.log("[+] custom python path:", customPythonPath);
131 | }
132 |
133 | let options: Options = {
134 | mode: 'text',
135 | pythonPath: pythonPath,
136 | pythonOptions: ['-u'],
137 | // scriptPath: __dirname + '/pyscripts/',
138 | args: [ft.toString(), path]
139 | };
140 |
141 | const handle = this;
142 | var content: string = 'init';
143 |
144 | const workspace = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(resourcePath));
145 | var scriptPath = getOption("vscode-pydata-viewer.scriptPath") as string;
146 | if (scriptPath === "default") {
147 | scriptPath = getPyScriptsPath("read_files.py", this.context);
148 | } else {
149 | scriptPath = scriptPath.replace('${workspaceFolder}', workspace? workspace.uri.fsPath : "");
150 | }
151 |
152 | console.log("current deployed script", scriptPath);
153 | PythonShell.run(scriptPath,
154 | options, function (err, results) {
155 | if (err) { console.log(err); }
156 | // results is an array consisting of messages collected during execution
157 | console.log('results: %j', results);
158 | var r = results as Array;
159 | // display the blank and line break with html labels
160 | for (var i=1; i');
167 | const head = `
168 |
169 |
170 |
171 | `;
172 | const tail = [''].join('\n');
173 | const output = head + `
174 | ` + content + `
` + tail;
177 | console.log(output);
178 | handle.webviewEditor.webview.html = output;
179 | handle.update();
180 | });
181 |
182 | // Replace , with ,\n for reading
183 | // var re = /,/gi;
184 | // content = content.replace(re, `,\n`);
185 | // const head = `
186 | //
187 | //
188 | //
189 | // `;
190 | // const tail = [''].join('\n');
191 | // const output = head + `
192 | // ` + content + `
` + tail;
193 | // console.log(output);
194 | // return output;
195 | }
196 |
197 | public static suffixToType(suffix: string) {
198 | switch (suffix) {
199 | case 'npz': return FileType.NUMPY;
200 | case 'npy': return FileType.NUMPY;
201 | case 'pkl': return FileType.PICKLE;
202 | case 'pck': return FileType.PICKLE;
203 | case 'pickle': return FileType.PICKLE;
204 | case 'pkl.gz': return FileType.COMPRESSED_PICKLE;
205 | case 'pth': return FileType.PYTORCH;
206 | case 'pt': return FileType.PYTORCH;
207 | case 'ckpt': return FileType.PYTORCH;
208 | default: return FileType.NUMPY;
209 | }
210 | }
211 | }
212 |
--------------------------------------------------------------------------------
/src/pydataProvider.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 | import { PyDataPreview } from './pydataPreview';
3 |
4 | export class PyDataCustomProvider implements vscode.CustomReadonlyEditorProvider {
5 | public static readonly viewType = 'pydata.preview';
6 |
7 | private readonly _previews = new Set();
8 | private _activePreview: PyDataPreview | undefined;
9 |
10 | constructor(private readonly context: vscode.ExtensionContext,
11 | private readonly extensionRoot: vscode.Uri) { }
12 |
13 | public openCustomDocument(uri: vscode.Uri): vscode.CustomDocument {
14 | return { uri, dispose: (): void => { } };
15 | }
16 |
17 | public async resolveCustomEditor(
18 | document: vscode.CustomDocument,
19 | webviewEditor: vscode.WebviewPanel
20 | ): Promise {
21 | const preview = new PyDataPreview(
22 | this.context,
23 | this.extensionRoot,
24 | document.uri,
25 | webviewEditor
26 | );
27 | this._previews.add(preview);
28 | this.setActivePreview(preview);
29 |
30 | webviewEditor.onDidDispose(() => {
31 | this._previews.delete(preview);
32 | });
33 |
34 | webviewEditor.onDidChangeViewState(() => {
35 | if (webviewEditor.active) {
36 | this.setActivePreview(preview);
37 | } else if (this._activePreview === preview && !webviewEditor.active) {
38 | this.setActivePreview(undefined);
39 | }
40 | });
41 | }
42 |
43 | public get activePreview(): PyDataPreview | undefined {
44 | return this._activePreview;
45 | }
46 |
47 | private setActivePreview(value: PyDataPreview | undefined): void {
48 | this._activePreview = value;
49 | }
50 | }
--------------------------------------------------------------------------------
/src/test/runTest.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path';
2 |
3 | import { runTests } from '@vscode/test-electron';
4 |
5 | async function main() {
6 | try {
7 | // The folder containing the Extension Manifest package.json
8 | // Passed to `--extensionDevelopmentPath`
9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../');
10 |
11 | // The path to test runner
12 | // Passed to --extensionTestsPath
13 | const extensionTestsPath = path.resolve(__dirname, './suite/index');
14 |
15 | // Download VS Code, unzip it and run the integration test
16 | await runTests({ extensionDevelopmentPath, extensionTestsPath });
17 | } catch (err) {
18 | console.error('Failed to run tests');
19 | process.exit(1);
20 | }
21 | }
22 |
23 | main();
24 |
--------------------------------------------------------------------------------
/src/test/suite/extension.test.ts:
--------------------------------------------------------------------------------
1 | import * as assert from 'assert';
2 |
3 | // You can import and use all API from the 'vscode' module
4 | // as well as import your extension to test it
5 | import * as vscode from 'vscode';
6 | // import * as myExtension from '../../extension';
7 |
8 | suite('Extension Test Suite', () => {
9 | vscode.window.showInformationMessage('Start all tests.');
10 |
11 | test('Sample test', () => {
12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5));
13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0));
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/test/suite/index.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path';
2 | import * as Mocha from 'mocha';
3 | import * as glob from 'glob';
4 |
5 | export function run(): Promise {
6 | // Create the mocha test
7 | const mocha = new Mocha({
8 | ui: 'tdd',
9 | color: true
10 | });
11 |
12 | const testsRoot = path.resolve(__dirname, '..');
13 |
14 | return new Promise((c, e) => {
15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
16 | if (err) {
17 | return e(err);
18 | }
19 |
20 | // Add files to the test suite
21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
22 |
23 | try {
24 | // Run the mocha test
25 | mocha.run(failures => {
26 | if (failures > 0) {
27 | e(new Error(`${failures} tests failed.`));
28 | } else {
29 | c();
30 | }
31 | });
32 | } catch (err) {
33 | console.error(err);
34 | e(err);
35 | }
36 | });
37 | });
38 | }
39 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 | import * as path from 'path';
3 | import { PythonShell } from 'python-shell';
4 |
5 | const os = require('os');
6 |
7 | const LOCAL_OS_TYPE = os.type();
8 |
9 | export class OSUtils {
10 | static type = {
11 | macOS: 'Darwin',
12 | linux: 'Linux',
13 | windows: 'Windows_NT',
14 | };
15 |
16 | static isMacOS(): boolean {
17 | return LOCAL_OS_TYPE === OSUtils.type.macOS;
18 | }
19 |
20 | static isLinux(): boolean {
21 | return LOCAL_OS_TYPE === OSUtils.type.linux;
22 | }
23 |
24 | static isWindows(): boolean {
25 | return LOCAL_OS_TYPE === OSUtils.type.windows;
26 | }
27 | }
28 |
29 | export function settings() {
30 | return vscode.workspace.getConfiguration("PyDataViewer");
31 | }
32 |
33 | export function getOption(option: string) {
34 | let config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
35 | return config.get(option);
36 | }
37 |
38 |
39 | export function getPyScriptsPath(file: string, context: vscode.ExtensionContext, webview?: vscode.Webview): string {
40 | if (webview) {
41 | const uri = vscode.Uri.file(context.asAbsolutePath(path.join("pyscripts", file)));
42 |
43 | return webview.asWebviewUri(uri).toString();
44 | }
45 |
46 | return context.asAbsolutePath(path.join("pyscripts", file));
47 | }
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "ES2020",
5 | "outDir": "out",
6 | "lib": [
7 | "ES2020",
8 | "ES2021.String"
9 | ],
10 | "sourceMap": true,
11 | "rootDir": "src",
12 | "strict": true /* enable all strict type-checking options */
13 | /* Additional Checks */
14 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
15 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
16 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
17 | }
18 | }
19 |
--------------------------------------------------------------------------------