.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Obsidian Python Scripter
2 |
3 | ## Archived
4 |
5 | Use [obsidian-shellcommand](https://github.com/Taitava/obsidian-shellcommands) instead
6 |
7 | ## Summary
8 |
9 | This is a program to quickly allow you to run your own Python scripts from inside Obsidian. To get started enable this plugin, it will create a scripts/python folder inside your designated .obsidian folder. For each script it will add a custom command to the obsidian commands panel.
10 |
11 | ## Requirements
12 |
13 | - Install your preferred version of python and make sure it functions from the command line eg: ```python .obsidian/scripts/python/main.py```
14 | - This plugin works with naked python scripts eg. scripts/python/example.py
15 | - Or you may want a more complicated script, you can have a folder as a script. You just need to have a main.py file inside of a src folder for it to function as a command, otherwise it will not be able to execute. Make sure to structure the scripts/python as follows
16 |
17 | scripts
18 | |
19 | ---- python
20 | |
21 | ---- example
22 | |
23 | ---- src
24 | |
25 | ---- main.py
26 | |
27 | ---- hello.py
28 |
29 |
30 | Your resulting scripts folder should have a structure like the following:
31 |
32 | scripts
33 | |
34 | ---- python
35 | |
36 | ---- example
37 | | |
38 | | ---- src
39 | | |
40 | | ---- main.py
41 | | |
42 | | ---- hello.py
43 | |
44 | ---- example2.py
45 |
46 |
47 | ## Obsidian Directions
48 |
49 | - Add your python scripts in the format specified in the requirements section.
50 | - Once Obsidian starts, your commands will be added to the commands window and can be run as you would like.
51 | - If Obsidian is already open it will need to be **Restarted** when first added but not after that
52 | - In the above example, there would be 2 commands added:
53 | - Run example
54 | - Run example2.py
55 |
56 | 
57 |
58 | ## Plugin Direction
59 |
60 | This plugin passes 2 optional arguments to the script, argument 1 is the absolute path to the obsidian root folder, argument 2 is the path to the open file if it is open, otherwise an empty path is sent
61 | e.g. ```python \Users\nick\Documents\Vault\.obsidian\scripts\python\main.py \Users\nick\Documents\Vault dir1\file1.md```
62 |
63 | More optional arguments can be added, as well as the ability to prompt the user for arguments.
64 |
65 | These can be used by the script as liked.
66 |
67 | Here is a starting point for a python script: main.py
68 |
69 | ```python
70 | # main.py
71 | import sys
72 | import os
73 |
74 | python_script = sys.argv[0]
75 | file_path = sys.argv[2]
76 | vault_path = sys.argv[1]
77 |
78 | abs_file_path = os.path.abspath(os.path.join(vault_path, file_path))
79 |
80 | print(f"This is the open file: {abs_file_path}")
81 | ```
82 |
83 | ### Environment
84 |
85 | If you don't want to add secrets directly to your scripts, you can store them elsewhere in an environment file, which can then be imported at run time.
86 |
87 | Example Env File:
88 | ```
89 | SECRET_PASSWORD=supersecretword
90 | OTHER_PASSWORD=password
91 | ```
92 |
93 | ## Settings
94 |
95 | You have the ability to change the default python script location in settings. Additionally you have the ability to change the default python executable, or can configure python executables per script if you would like to use virtual environments. i.e. Python Exe: C:\Users\nickr\Documents\Projects\Scratch\.venv\Scripts\python.exe
96 |
97 | ## Debugging
98 |
99 | If your script fails to run. An error is shown in the top right of obsidian and in the *developer console* which can be found with the following hotkeys: "ctrl" + "shift" + "i" on Windows, or "cmd" + "option" + "i" on MacOS.
100 |
101 | ## 1.1.x Migration
102 |
103 | If you are upgrading the 1.1.x, the changes from 1.0.x are breaking.
104 | - You can set the script base path in settings, but it must be from the root of the vault, .obsidian/scripts is default:
105 | 
106 | - You have to set the python interperter (or other interpreter manually for each script)
107 | 
108 | - You have to set the run method manually for each script
109 | 
110 |
111 |
--------------------------------------------------------------------------------
/assets/interpreter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nickrallison/obsidian-python-scripter/6255f75b06122a80d9f1fc0dd77ee877b09f7020/assets/interpreter.png
--------------------------------------------------------------------------------
/assets/run_type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nickrallison/obsidian-python-scripter/6255f75b06122a80d9f1fc0dd77ee877b09f7020/assets/run_type.png
--------------------------------------------------------------------------------
/assets/scripts_folder_path.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nickrallison/obsidian-python-scripter/6255f75b06122a80d9f1fc0dd77ee877b09f7020/assets/scripts_folder_path.png
--------------------------------------------------------------------------------
/esbuild.config.mjs:
--------------------------------------------------------------------------------
1 | import esbuild from "esbuild";
2 | import process from "process";
3 | import builtins from "builtin-modules";
4 |
5 | const banner =
6 | `/*
7 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
8 | if you want to view the source, please visit the github repository of this plugin
9 | */
10 | `;
11 |
12 | const prod = (process.argv[2] === "production");
13 |
14 | const context = await esbuild.context({
15 | banner: {
16 | js: banner,
17 | },
18 | entryPoints: ["src/main.ts"],
19 | bundle: true,
20 | external: [
21 | "obsidian",
22 | "electron",
23 | "@codemirror/autocomplete",
24 | "@codemirror/collab",
25 | "@codemirror/commands",
26 | "@codemirror/language",
27 | "@codemirror/lint",
28 | "@codemirror/search",
29 | "@codemirror/state",
30 | "@codemirror/view",
31 | "@lezer/common",
32 | "@lezer/highlight",
33 | "@lezer/lr",
34 | ...builtins],
35 | format: "cjs",
36 | target: "es2018",
37 | logLevel: "info",
38 | sourcemap: prod ? false : "inline",
39 | treeShaking: true,
40 | outfile: "main.js",
41 | minify: prod,
42 | });
43 |
44 | if (prod) {
45 | await context.rebuild();
46 | process.exit(0);
47 | } else {
48 | await context.watch();
49 | }
50 |
--------------------------------------------------------------------------------
/flake.lock:
--------------------------------------------------------------------------------
1 | {
2 | "nodes": {
3 | "nixpkgs": {
4 | "locked": {
5 | "lastModified": 1729181673,
6 | "narHash": "sha256-LDiPhQ3l+fBjRATNtnuDZsBS7hqoBtPkKBkhpoBHv3I=",
7 | "owner": "NixOS",
8 | "repo": "nixpkgs",
9 | "rev": "4eb33fe664af7b41a4c446f87d20c9a0a6321fa3",
10 | "type": "github"
11 | },
12 | "original": {
13 | "owner": "NixOS",
14 | "ref": "nixos-24.05",
15 | "repo": "nixpkgs",
16 | "type": "github"
17 | }
18 | },
19 | "root": {
20 | "inputs": {
21 | "nixpkgs": "nixpkgs"
22 | }
23 | }
24 | },
25 | "root": "root",
26 | "version": 7
27 | }
28 |
--------------------------------------------------------------------------------
/flake.nix:
--------------------------------------------------------------------------------
1 | {
2 | description = "A flake for Rust development";
3 |
4 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
5 |
6 | outputs = { self, nixpkgs }: {
7 |
8 | devShell.x86_64-linux = with nixpkgs.legacyPackages.x86_64-linux; mkShellNoCC {
9 | packages = with pkgs; [
10 | yarn
11 | ];
12 |
13 | shellHook = ''
14 | '';
15 | };
16 |
17 | devShell.aarch64-darwin = with nixpkgs.legacyPackages.aarch64-darwin; mkShellNoCC {
18 | packages = with pkgs; [
19 | yarn
20 | ];
21 | };
22 |
23 | shellHook = ''
24 | '';
25 |
26 | };
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "python-scripter",
3 | "name": "Python Scripter",
4 | "version": "1.1.3",
5 | "minAppVersion": "0.15.0",
6 | "description": "Run Python scripts directly as Obsidian commands.",
7 | "author": "Nick Allison",
8 | "authorUrl": "https://github.com/nickrallison",
9 | "fundingUrl": "https://github.com/sponsors/nickrallison",
10 | "isDesktopOnly": true
11 | }
12 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "obsidian-sample-plugin",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "obsidian-sample-plugin",
9 | "version": "1.0.0",
10 | "license": "MIT",
11 | "devDependencies": {
12 | "@types/node": "^16.11.6",
13 | "@typescript-eslint/eslint-plugin": "5.29.0",
14 | "@typescript-eslint/parser": "5.29.0",
15 | "builtin-modules": "3.3.0",
16 | "esbuild": "0.17.3",
17 | "obsidian": "^1.7.2",
18 | "tslib": "2.4.0",
19 | "typescript": "4.7.4"
20 | }
21 | },
22 | "node_modules/@codemirror/state": {
23 | "version": "6.5.0",
24 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.0.tgz",
25 | "integrity": "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==",
26 | "dev": true,
27 | "license": "MIT",
28 | "peer": true,
29 | "dependencies": {
30 | "@marijn/find-cluster-break": "^1.0.0"
31 | }
32 | },
33 | "node_modules/@codemirror/view": {
34 | "version": "6.36.1",
35 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.1.tgz",
36 | "integrity": "sha512-miD1nyT4m4uopZaDdO2uXU/LLHliKNYL9kB1C1wJHrunHLm/rpkb5QVSokqgw9hFqEZakrdlb/VGWX8aYZTslQ==",
37 | "dev": true,
38 | "license": "MIT",
39 | "peer": true,
40 | "dependencies": {
41 | "@codemirror/state": "^6.5.0",
42 | "style-mod": "^4.1.0",
43 | "w3c-keyname": "^2.2.4"
44 | }
45 | },
46 | "node_modules/@esbuild/android-arm": {
47 | "version": "0.17.3",
48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.3.tgz",
49 | "integrity": "sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg==",
50 | "cpu": [
51 | "arm"
52 | ],
53 | "dev": true,
54 | "license": "MIT",
55 | "optional": true,
56 | "os": [
57 | "android"
58 | ],
59 | "engines": {
60 | "node": ">=12"
61 | }
62 | },
63 | "node_modules/@esbuild/android-arm64": {
64 | "version": "0.17.3",
65 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz",
66 | "integrity": "sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ==",
67 | "cpu": [
68 | "arm64"
69 | ],
70 | "dev": true,
71 | "license": "MIT",
72 | "optional": true,
73 | "os": [
74 | "android"
75 | ],
76 | "engines": {
77 | "node": ">=12"
78 | }
79 | },
80 | "node_modules/@esbuild/android-x64": {
81 | "version": "0.17.3",
82 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.3.tgz",
83 | "integrity": "sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A==",
84 | "cpu": [
85 | "x64"
86 | ],
87 | "dev": true,
88 | "license": "MIT",
89 | "optional": true,
90 | "os": [
91 | "android"
92 | ],
93 | "engines": {
94 | "node": ">=12"
95 | }
96 | },
97 | "node_modules/@esbuild/darwin-arm64": {
98 | "version": "0.17.3",
99 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz",
100 | "integrity": "sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw==",
101 | "cpu": [
102 | "arm64"
103 | ],
104 | "dev": true,
105 | "license": "MIT",
106 | "optional": true,
107 | "os": [
108 | "darwin"
109 | ],
110 | "engines": {
111 | "node": ">=12"
112 | }
113 | },
114 | "node_modules/@esbuild/darwin-x64": {
115 | "version": "0.17.3",
116 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz",
117 | "integrity": "sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA==",
118 | "cpu": [
119 | "x64"
120 | ],
121 | "dev": true,
122 | "license": "MIT",
123 | "optional": true,
124 | "os": [
125 | "darwin"
126 | ],
127 | "engines": {
128 | "node": ">=12"
129 | }
130 | },
131 | "node_modules/@esbuild/freebsd-arm64": {
132 | "version": "0.17.3",
133 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz",
134 | "integrity": "sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w==",
135 | "cpu": [
136 | "arm64"
137 | ],
138 | "dev": true,
139 | "license": "MIT",
140 | "optional": true,
141 | "os": [
142 | "freebsd"
143 | ],
144 | "engines": {
145 | "node": ">=12"
146 | }
147 | },
148 | "node_modules/@esbuild/freebsd-x64": {
149 | "version": "0.17.3",
150 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz",
151 | "integrity": "sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg==",
152 | "cpu": [
153 | "x64"
154 | ],
155 | "dev": true,
156 | "license": "MIT",
157 | "optional": true,
158 | "os": [
159 | "freebsd"
160 | ],
161 | "engines": {
162 | "node": ">=12"
163 | }
164 | },
165 | "node_modules/@esbuild/linux-arm": {
166 | "version": "0.17.3",
167 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz",
168 | "integrity": "sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ==",
169 | "cpu": [
170 | "arm"
171 | ],
172 | "dev": true,
173 | "license": "MIT",
174 | "optional": true,
175 | "os": [
176 | "linux"
177 | ],
178 | "engines": {
179 | "node": ">=12"
180 | }
181 | },
182 | "node_modules/@esbuild/linux-arm64": {
183 | "version": "0.17.3",
184 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz",
185 | "integrity": "sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g==",
186 | "cpu": [
187 | "arm64"
188 | ],
189 | "dev": true,
190 | "license": "MIT",
191 | "optional": true,
192 | "os": [
193 | "linux"
194 | ],
195 | "engines": {
196 | "node": ">=12"
197 | }
198 | },
199 | "node_modules/@esbuild/linux-ia32": {
200 | "version": "0.17.3",
201 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz",
202 | "integrity": "sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA==",
203 | "cpu": [
204 | "ia32"
205 | ],
206 | "dev": true,
207 | "license": "MIT",
208 | "optional": true,
209 | "os": [
210 | "linux"
211 | ],
212 | "engines": {
213 | "node": ">=12"
214 | }
215 | },
216 | "node_modules/@esbuild/linux-loong64": {
217 | "version": "0.17.3",
218 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz",
219 | "integrity": "sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA==",
220 | "cpu": [
221 | "loong64"
222 | ],
223 | "dev": true,
224 | "license": "MIT",
225 | "optional": true,
226 | "os": [
227 | "linux"
228 | ],
229 | "engines": {
230 | "node": ">=12"
231 | }
232 | },
233 | "node_modules/@esbuild/linux-mips64el": {
234 | "version": "0.17.3",
235 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz",
236 | "integrity": "sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ==",
237 | "cpu": [
238 | "mips64el"
239 | ],
240 | "dev": true,
241 | "license": "MIT",
242 | "optional": true,
243 | "os": [
244 | "linux"
245 | ],
246 | "engines": {
247 | "node": ">=12"
248 | }
249 | },
250 | "node_modules/@esbuild/linux-ppc64": {
251 | "version": "0.17.3",
252 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz",
253 | "integrity": "sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ==",
254 | "cpu": [
255 | "ppc64"
256 | ],
257 | "dev": true,
258 | "license": "MIT",
259 | "optional": true,
260 | "os": [
261 | "linux"
262 | ],
263 | "engines": {
264 | "node": ">=12"
265 | }
266 | },
267 | "node_modules/@esbuild/linux-riscv64": {
268 | "version": "0.17.3",
269 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz",
270 | "integrity": "sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow==",
271 | "cpu": [
272 | "riscv64"
273 | ],
274 | "dev": true,
275 | "license": "MIT",
276 | "optional": true,
277 | "os": [
278 | "linux"
279 | ],
280 | "engines": {
281 | "node": ">=12"
282 | }
283 | },
284 | "node_modules/@esbuild/linux-s390x": {
285 | "version": "0.17.3",
286 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz",
287 | "integrity": "sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug==",
288 | "cpu": [
289 | "s390x"
290 | ],
291 | "dev": true,
292 | "license": "MIT",
293 | "optional": true,
294 | "os": [
295 | "linux"
296 | ],
297 | "engines": {
298 | "node": ">=12"
299 | }
300 | },
301 | "node_modules/@esbuild/linux-x64": {
302 | "version": "0.17.3",
303 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz",
304 | "integrity": "sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg==",
305 | "cpu": [
306 | "x64"
307 | ],
308 | "dev": true,
309 | "license": "MIT",
310 | "optional": true,
311 | "os": [
312 | "linux"
313 | ],
314 | "engines": {
315 | "node": ">=12"
316 | }
317 | },
318 | "node_modules/@esbuild/netbsd-x64": {
319 | "version": "0.17.3",
320 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz",
321 | "integrity": "sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg==",
322 | "cpu": [
323 | "x64"
324 | ],
325 | "dev": true,
326 | "license": "MIT",
327 | "optional": true,
328 | "os": [
329 | "netbsd"
330 | ],
331 | "engines": {
332 | "node": ">=12"
333 | }
334 | },
335 | "node_modules/@esbuild/openbsd-x64": {
336 | "version": "0.17.3",
337 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz",
338 | "integrity": "sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA==",
339 | "cpu": [
340 | "x64"
341 | ],
342 | "dev": true,
343 | "license": "MIT",
344 | "optional": true,
345 | "os": [
346 | "openbsd"
347 | ],
348 | "engines": {
349 | "node": ">=12"
350 | }
351 | },
352 | "node_modules/@esbuild/sunos-x64": {
353 | "version": "0.17.3",
354 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz",
355 | "integrity": "sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q==",
356 | "cpu": [
357 | "x64"
358 | ],
359 | "dev": true,
360 | "license": "MIT",
361 | "optional": true,
362 | "os": [
363 | "sunos"
364 | ],
365 | "engines": {
366 | "node": ">=12"
367 | }
368 | },
369 | "node_modules/@esbuild/win32-arm64": {
370 | "version": "0.17.3",
371 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz",
372 | "integrity": "sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A==",
373 | "cpu": [
374 | "arm64"
375 | ],
376 | "dev": true,
377 | "license": "MIT",
378 | "optional": true,
379 | "os": [
380 | "win32"
381 | ],
382 | "engines": {
383 | "node": ">=12"
384 | }
385 | },
386 | "node_modules/@esbuild/win32-ia32": {
387 | "version": "0.17.3",
388 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz",
389 | "integrity": "sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg==",
390 | "cpu": [
391 | "ia32"
392 | ],
393 | "dev": true,
394 | "license": "MIT",
395 | "optional": true,
396 | "os": [
397 | "win32"
398 | ],
399 | "engines": {
400 | "node": ">=12"
401 | }
402 | },
403 | "node_modules/@esbuild/win32-x64": {
404 | "version": "0.17.3",
405 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz",
406 | "integrity": "sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g==",
407 | "cpu": [
408 | "x64"
409 | ],
410 | "dev": true,
411 | "license": "MIT",
412 | "optional": true,
413 | "os": [
414 | "win32"
415 | ],
416 | "engines": {
417 | "node": ">=12"
418 | }
419 | },
420 | "node_modules/@eslint-community/eslint-utils": {
421 | "version": "4.4.1",
422 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
423 | "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
424 | "dev": true,
425 | "license": "MIT",
426 | "peer": true,
427 | "dependencies": {
428 | "eslint-visitor-keys": "^3.4.3"
429 | },
430 | "engines": {
431 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
432 | },
433 | "funding": {
434 | "url": "https://opencollective.com/eslint"
435 | },
436 | "peerDependencies": {
437 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
438 | }
439 | },
440 | "node_modules/@eslint-community/regexpp": {
441 | "version": "4.12.1",
442 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
443 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
444 | "dev": true,
445 | "license": "MIT",
446 | "peer": true,
447 | "engines": {
448 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
449 | }
450 | },
451 | "node_modules/@eslint/eslintrc": {
452 | "version": "2.1.4",
453 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
454 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
455 | "dev": true,
456 | "license": "MIT",
457 | "peer": true,
458 | "dependencies": {
459 | "ajv": "^6.12.4",
460 | "debug": "^4.3.2",
461 | "espree": "^9.6.0",
462 | "globals": "^13.19.0",
463 | "ignore": "^5.2.0",
464 | "import-fresh": "^3.2.1",
465 | "js-yaml": "^4.1.0",
466 | "minimatch": "^3.1.2",
467 | "strip-json-comments": "^3.1.1"
468 | },
469 | "engines": {
470 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
471 | },
472 | "funding": {
473 | "url": "https://opencollective.com/eslint"
474 | }
475 | },
476 | "node_modules/@eslint/js": {
477 | "version": "8.57.1",
478 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
479 | "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
480 | "dev": true,
481 | "license": "MIT",
482 | "peer": true,
483 | "engines": {
484 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
485 | }
486 | },
487 | "node_modules/@humanwhocodes/config-array": {
488 | "version": "0.13.0",
489 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
490 | "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
491 | "deprecated": "Use @eslint/config-array instead",
492 | "dev": true,
493 | "license": "Apache-2.0",
494 | "peer": true,
495 | "dependencies": {
496 | "@humanwhocodes/object-schema": "^2.0.3",
497 | "debug": "^4.3.1",
498 | "minimatch": "^3.0.5"
499 | },
500 | "engines": {
501 | "node": ">=10.10.0"
502 | }
503 | },
504 | "node_modules/@humanwhocodes/module-importer": {
505 | "version": "1.0.1",
506 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
507 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
508 | "dev": true,
509 | "license": "Apache-2.0",
510 | "peer": true,
511 | "engines": {
512 | "node": ">=12.22"
513 | },
514 | "funding": {
515 | "type": "github",
516 | "url": "https://github.com/sponsors/nzakas"
517 | }
518 | },
519 | "node_modules/@humanwhocodes/object-schema": {
520 | "version": "2.0.3",
521 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
522 | "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
523 | "deprecated": "Use @eslint/object-schema instead",
524 | "dev": true,
525 | "license": "BSD-3-Clause",
526 | "peer": true
527 | },
528 | "node_modules/@marijn/find-cluster-break": {
529 | "version": "1.0.2",
530 | "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
531 | "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
532 | "dev": true,
533 | "license": "MIT",
534 | "peer": true
535 | },
536 | "node_modules/@nodelib/fs.scandir": {
537 | "version": "2.1.5",
538 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
539 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
540 | "dev": true,
541 | "license": "MIT",
542 | "dependencies": {
543 | "@nodelib/fs.stat": "2.0.5",
544 | "run-parallel": "^1.1.9"
545 | },
546 | "engines": {
547 | "node": ">= 8"
548 | }
549 | },
550 | "node_modules/@nodelib/fs.stat": {
551 | "version": "2.0.5",
552 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
553 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
554 | "dev": true,
555 | "license": "MIT",
556 | "engines": {
557 | "node": ">= 8"
558 | }
559 | },
560 | "node_modules/@nodelib/fs.walk": {
561 | "version": "1.2.8",
562 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
563 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
564 | "dev": true,
565 | "license": "MIT",
566 | "dependencies": {
567 | "@nodelib/fs.scandir": "2.1.5",
568 | "fastq": "^1.6.0"
569 | },
570 | "engines": {
571 | "node": ">= 8"
572 | }
573 | },
574 | "node_modules/@types/codemirror": {
575 | "version": "5.60.8",
576 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz",
577 | "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==",
578 | "dev": true,
579 | "license": "MIT",
580 | "dependencies": {
581 | "@types/tern": "*"
582 | }
583 | },
584 | "node_modules/@types/estree": {
585 | "version": "1.0.6",
586 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
587 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
588 | "dev": true,
589 | "license": "MIT"
590 | },
591 | "node_modules/@types/json-schema": {
592 | "version": "7.0.15",
593 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
594 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
595 | "dev": true,
596 | "license": "MIT"
597 | },
598 | "node_modules/@types/node": {
599 | "version": "16.18.122",
600 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.122.tgz",
601 | "integrity": "sha512-rF6rUBS80n4oK16EW8nE75U+9fw0SSUgoPtWSvHhPXdT7itbvmS7UjB/jyM8i3AkvI6yeSM5qCwo+xN0npGDHg==",
602 | "dev": true,
603 | "license": "MIT"
604 | },
605 | "node_modules/@types/tern": {
606 | "version": "0.23.9",
607 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz",
608 | "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==",
609 | "dev": true,
610 | "license": "MIT",
611 | "dependencies": {
612 | "@types/estree": "*"
613 | }
614 | },
615 | "node_modules/@typescript-eslint/eslint-plugin": {
616 | "version": "5.29.0",
617 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz",
618 | "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==",
619 | "dev": true,
620 | "license": "MIT",
621 | "dependencies": {
622 | "@typescript-eslint/scope-manager": "5.29.0",
623 | "@typescript-eslint/type-utils": "5.29.0",
624 | "@typescript-eslint/utils": "5.29.0",
625 | "debug": "^4.3.4",
626 | "functional-red-black-tree": "^1.0.1",
627 | "ignore": "^5.2.0",
628 | "regexpp": "^3.2.0",
629 | "semver": "^7.3.7",
630 | "tsutils": "^3.21.0"
631 | },
632 | "engines": {
633 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
634 | },
635 | "funding": {
636 | "type": "opencollective",
637 | "url": "https://opencollective.com/typescript-eslint"
638 | },
639 | "peerDependencies": {
640 | "@typescript-eslint/parser": "^5.0.0",
641 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
642 | },
643 | "peerDependenciesMeta": {
644 | "typescript": {
645 | "optional": true
646 | }
647 | }
648 | },
649 | "node_modules/@typescript-eslint/parser": {
650 | "version": "5.29.0",
651 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz",
652 | "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==",
653 | "dev": true,
654 | "license": "BSD-2-Clause",
655 | "dependencies": {
656 | "@typescript-eslint/scope-manager": "5.29.0",
657 | "@typescript-eslint/types": "5.29.0",
658 | "@typescript-eslint/typescript-estree": "5.29.0",
659 | "debug": "^4.3.4"
660 | },
661 | "engines": {
662 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
663 | },
664 | "funding": {
665 | "type": "opencollective",
666 | "url": "https://opencollective.com/typescript-eslint"
667 | },
668 | "peerDependencies": {
669 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
670 | },
671 | "peerDependenciesMeta": {
672 | "typescript": {
673 | "optional": true
674 | }
675 | }
676 | },
677 | "node_modules/@typescript-eslint/scope-manager": {
678 | "version": "5.29.0",
679 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz",
680 | "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==",
681 | "dev": true,
682 | "license": "MIT",
683 | "dependencies": {
684 | "@typescript-eslint/types": "5.29.0",
685 | "@typescript-eslint/visitor-keys": "5.29.0"
686 | },
687 | "engines": {
688 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
689 | },
690 | "funding": {
691 | "type": "opencollective",
692 | "url": "https://opencollective.com/typescript-eslint"
693 | }
694 | },
695 | "node_modules/@typescript-eslint/type-utils": {
696 | "version": "5.29.0",
697 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz",
698 | "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==",
699 | "dev": true,
700 | "license": "MIT",
701 | "dependencies": {
702 | "@typescript-eslint/utils": "5.29.0",
703 | "debug": "^4.3.4",
704 | "tsutils": "^3.21.0"
705 | },
706 | "engines": {
707 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
708 | },
709 | "funding": {
710 | "type": "opencollective",
711 | "url": "https://opencollective.com/typescript-eslint"
712 | },
713 | "peerDependencies": {
714 | "eslint": "*"
715 | },
716 | "peerDependenciesMeta": {
717 | "typescript": {
718 | "optional": true
719 | }
720 | }
721 | },
722 | "node_modules/@typescript-eslint/types": {
723 | "version": "5.29.0",
724 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz",
725 | "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==",
726 | "dev": true,
727 | "license": "MIT",
728 | "engines": {
729 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
730 | },
731 | "funding": {
732 | "type": "opencollective",
733 | "url": "https://opencollective.com/typescript-eslint"
734 | }
735 | },
736 | "node_modules/@typescript-eslint/typescript-estree": {
737 | "version": "5.29.0",
738 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz",
739 | "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==",
740 | "dev": true,
741 | "license": "BSD-2-Clause",
742 | "dependencies": {
743 | "@typescript-eslint/types": "5.29.0",
744 | "@typescript-eslint/visitor-keys": "5.29.0",
745 | "debug": "^4.3.4",
746 | "globby": "^11.1.0",
747 | "is-glob": "^4.0.3",
748 | "semver": "^7.3.7",
749 | "tsutils": "^3.21.0"
750 | },
751 | "engines": {
752 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
753 | },
754 | "funding": {
755 | "type": "opencollective",
756 | "url": "https://opencollective.com/typescript-eslint"
757 | },
758 | "peerDependenciesMeta": {
759 | "typescript": {
760 | "optional": true
761 | }
762 | }
763 | },
764 | "node_modules/@typescript-eslint/utils": {
765 | "version": "5.29.0",
766 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz",
767 | "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==",
768 | "dev": true,
769 | "license": "MIT",
770 | "dependencies": {
771 | "@types/json-schema": "^7.0.9",
772 | "@typescript-eslint/scope-manager": "5.29.0",
773 | "@typescript-eslint/types": "5.29.0",
774 | "@typescript-eslint/typescript-estree": "5.29.0",
775 | "eslint-scope": "^5.1.1",
776 | "eslint-utils": "^3.0.0"
777 | },
778 | "engines": {
779 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
780 | },
781 | "funding": {
782 | "type": "opencollective",
783 | "url": "https://opencollective.com/typescript-eslint"
784 | },
785 | "peerDependencies": {
786 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
787 | }
788 | },
789 | "node_modules/@typescript-eslint/visitor-keys": {
790 | "version": "5.29.0",
791 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz",
792 | "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==",
793 | "dev": true,
794 | "license": "MIT",
795 | "dependencies": {
796 | "@typescript-eslint/types": "5.29.0",
797 | "eslint-visitor-keys": "^3.3.0"
798 | },
799 | "engines": {
800 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
801 | },
802 | "funding": {
803 | "type": "opencollective",
804 | "url": "https://opencollective.com/typescript-eslint"
805 | }
806 | },
807 | "node_modules/@ungap/structured-clone": {
808 | "version": "1.2.1",
809 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz",
810 | "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==",
811 | "dev": true,
812 | "license": "ISC",
813 | "peer": true
814 | },
815 | "node_modules/acorn": {
816 | "version": "8.14.0",
817 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
818 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
819 | "dev": true,
820 | "license": "MIT",
821 | "peer": true,
822 | "bin": {
823 | "acorn": "bin/acorn"
824 | },
825 | "engines": {
826 | "node": ">=0.4.0"
827 | }
828 | },
829 | "node_modules/acorn-jsx": {
830 | "version": "5.3.2",
831 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
832 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
833 | "dev": true,
834 | "license": "MIT",
835 | "peer": true,
836 | "peerDependencies": {
837 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
838 | }
839 | },
840 | "node_modules/ajv": {
841 | "version": "6.12.6",
842 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
843 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
844 | "dev": true,
845 | "license": "MIT",
846 | "peer": true,
847 | "dependencies": {
848 | "fast-deep-equal": "^3.1.1",
849 | "fast-json-stable-stringify": "^2.0.0",
850 | "json-schema-traverse": "^0.4.1",
851 | "uri-js": "^4.2.2"
852 | },
853 | "funding": {
854 | "type": "github",
855 | "url": "https://github.com/sponsors/epoberezkin"
856 | }
857 | },
858 | "node_modules/ansi-regex": {
859 | "version": "5.0.1",
860 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
861 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
862 | "dev": true,
863 | "license": "MIT",
864 | "peer": true,
865 | "engines": {
866 | "node": ">=8"
867 | }
868 | },
869 | "node_modules/ansi-styles": {
870 | "version": "4.3.0",
871 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
872 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
873 | "dev": true,
874 | "license": "MIT",
875 | "peer": true,
876 | "dependencies": {
877 | "color-convert": "^2.0.1"
878 | },
879 | "engines": {
880 | "node": ">=8"
881 | },
882 | "funding": {
883 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
884 | }
885 | },
886 | "node_modules/argparse": {
887 | "version": "2.0.1",
888 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
889 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
890 | "dev": true,
891 | "license": "Python-2.0",
892 | "peer": true
893 | },
894 | "node_modules/array-union": {
895 | "version": "2.1.0",
896 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
897 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
898 | "dev": true,
899 | "license": "MIT",
900 | "engines": {
901 | "node": ">=8"
902 | }
903 | },
904 | "node_modules/balanced-match": {
905 | "version": "1.0.2",
906 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
907 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
908 | "dev": true,
909 | "license": "MIT",
910 | "peer": true
911 | },
912 | "node_modules/brace-expansion": {
913 | "version": "1.1.11",
914 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
915 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
916 | "dev": true,
917 | "license": "MIT",
918 | "peer": true,
919 | "dependencies": {
920 | "balanced-match": "^1.0.0",
921 | "concat-map": "0.0.1"
922 | }
923 | },
924 | "node_modules/braces": {
925 | "version": "3.0.3",
926 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
927 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
928 | "dev": true,
929 | "license": "MIT",
930 | "dependencies": {
931 | "fill-range": "^7.1.1"
932 | },
933 | "engines": {
934 | "node": ">=8"
935 | }
936 | },
937 | "node_modules/builtin-modules": {
938 | "version": "3.3.0",
939 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
940 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
941 | "dev": true,
942 | "license": "MIT",
943 | "engines": {
944 | "node": ">=6"
945 | },
946 | "funding": {
947 | "url": "https://github.com/sponsors/sindresorhus"
948 | }
949 | },
950 | "node_modules/callsites": {
951 | "version": "3.1.0",
952 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
953 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
954 | "dev": true,
955 | "license": "MIT",
956 | "peer": true,
957 | "engines": {
958 | "node": ">=6"
959 | }
960 | },
961 | "node_modules/chalk": {
962 | "version": "4.1.2",
963 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
964 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
965 | "dev": true,
966 | "license": "MIT",
967 | "peer": true,
968 | "dependencies": {
969 | "ansi-styles": "^4.1.0",
970 | "supports-color": "^7.1.0"
971 | },
972 | "engines": {
973 | "node": ">=10"
974 | },
975 | "funding": {
976 | "url": "https://github.com/chalk/chalk?sponsor=1"
977 | }
978 | },
979 | "node_modules/color-convert": {
980 | "version": "2.0.1",
981 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
982 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
983 | "dev": true,
984 | "license": "MIT",
985 | "peer": true,
986 | "dependencies": {
987 | "color-name": "~1.1.4"
988 | },
989 | "engines": {
990 | "node": ">=7.0.0"
991 | }
992 | },
993 | "node_modules/color-name": {
994 | "version": "1.1.4",
995 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
996 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
997 | "dev": true,
998 | "license": "MIT",
999 | "peer": true
1000 | },
1001 | "node_modules/concat-map": {
1002 | "version": "0.0.1",
1003 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1004 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1005 | "dev": true,
1006 | "license": "MIT",
1007 | "peer": true
1008 | },
1009 | "node_modules/cross-spawn": {
1010 | "version": "7.0.6",
1011 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1012 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1013 | "dev": true,
1014 | "license": "MIT",
1015 | "peer": true,
1016 | "dependencies": {
1017 | "path-key": "^3.1.0",
1018 | "shebang-command": "^2.0.0",
1019 | "which": "^2.0.1"
1020 | },
1021 | "engines": {
1022 | "node": ">= 8"
1023 | }
1024 | },
1025 | "node_modules/debug": {
1026 | "version": "4.4.0",
1027 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
1028 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
1029 | "dev": true,
1030 | "license": "MIT",
1031 | "dependencies": {
1032 | "ms": "^2.1.3"
1033 | },
1034 | "engines": {
1035 | "node": ">=6.0"
1036 | },
1037 | "peerDependenciesMeta": {
1038 | "supports-color": {
1039 | "optional": true
1040 | }
1041 | }
1042 | },
1043 | "node_modules/deep-is": {
1044 | "version": "0.1.4",
1045 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1046 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1047 | "dev": true,
1048 | "license": "MIT",
1049 | "peer": true
1050 | },
1051 | "node_modules/dir-glob": {
1052 | "version": "3.0.1",
1053 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
1054 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
1055 | "dev": true,
1056 | "license": "MIT",
1057 | "dependencies": {
1058 | "path-type": "^4.0.0"
1059 | },
1060 | "engines": {
1061 | "node": ">=8"
1062 | }
1063 | },
1064 | "node_modules/doctrine": {
1065 | "version": "3.0.0",
1066 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
1067 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
1068 | "dev": true,
1069 | "license": "Apache-2.0",
1070 | "peer": true,
1071 | "dependencies": {
1072 | "esutils": "^2.0.2"
1073 | },
1074 | "engines": {
1075 | "node": ">=6.0.0"
1076 | }
1077 | },
1078 | "node_modules/esbuild": {
1079 | "version": "0.17.3",
1080 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz",
1081 | "integrity": "sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==",
1082 | "dev": true,
1083 | "hasInstallScript": true,
1084 | "license": "MIT",
1085 | "bin": {
1086 | "esbuild": "bin/esbuild"
1087 | },
1088 | "engines": {
1089 | "node": ">=12"
1090 | },
1091 | "optionalDependencies": {
1092 | "@esbuild/android-arm": "0.17.3",
1093 | "@esbuild/android-arm64": "0.17.3",
1094 | "@esbuild/android-x64": "0.17.3",
1095 | "@esbuild/darwin-arm64": "0.17.3",
1096 | "@esbuild/darwin-x64": "0.17.3",
1097 | "@esbuild/freebsd-arm64": "0.17.3",
1098 | "@esbuild/freebsd-x64": "0.17.3",
1099 | "@esbuild/linux-arm": "0.17.3",
1100 | "@esbuild/linux-arm64": "0.17.3",
1101 | "@esbuild/linux-ia32": "0.17.3",
1102 | "@esbuild/linux-loong64": "0.17.3",
1103 | "@esbuild/linux-mips64el": "0.17.3",
1104 | "@esbuild/linux-ppc64": "0.17.3",
1105 | "@esbuild/linux-riscv64": "0.17.3",
1106 | "@esbuild/linux-s390x": "0.17.3",
1107 | "@esbuild/linux-x64": "0.17.3",
1108 | "@esbuild/netbsd-x64": "0.17.3",
1109 | "@esbuild/openbsd-x64": "0.17.3",
1110 | "@esbuild/sunos-x64": "0.17.3",
1111 | "@esbuild/win32-arm64": "0.17.3",
1112 | "@esbuild/win32-ia32": "0.17.3",
1113 | "@esbuild/win32-x64": "0.17.3"
1114 | }
1115 | },
1116 | "node_modules/escape-string-regexp": {
1117 | "version": "4.0.0",
1118 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1119 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1120 | "dev": true,
1121 | "license": "MIT",
1122 | "peer": true,
1123 | "engines": {
1124 | "node": ">=10"
1125 | },
1126 | "funding": {
1127 | "url": "https://github.com/sponsors/sindresorhus"
1128 | }
1129 | },
1130 | "node_modules/eslint": {
1131 | "version": "8.57.1",
1132 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
1133 | "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
1134 | "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
1135 | "dev": true,
1136 | "license": "MIT",
1137 | "peer": true,
1138 | "dependencies": {
1139 | "@eslint-community/eslint-utils": "^4.2.0",
1140 | "@eslint-community/regexpp": "^4.6.1",
1141 | "@eslint/eslintrc": "^2.1.4",
1142 | "@eslint/js": "8.57.1",
1143 | "@humanwhocodes/config-array": "^0.13.0",
1144 | "@humanwhocodes/module-importer": "^1.0.1",
1145 | "@nodelib/fs.walk": "^1.2.8",
1146 | "@ungap/structured-clone": "^1.2.0",
1147 | "ajv": "^6.12.4",
1148 | "chalk": "^4.0.0",
1149 | "cross-spawn": "^7.0.2",
1150 | "debug": "^4.3.2",
1151 | "doctrine": "^3.0.0",
1152 | "escape-string-regexp": "^4.0.0",
1153 | "eslint-scope": "^7.2.2",
1154 | "eslint-visitor-keys": "^3.4.3",
1155 | "espree": "^9.6.1",
1156 | "esquery": "^1.4.2",
1157 | "esutils": "^2.0.2",
1158 | "fast-deep-equal": "^3.1.3",
1159 | "file-entry-cache": "^6.0.1",
1160 | "find-up": "^5.0.0",
1161 | "glob-parent": "^6.0.2",
1162 | "globals": "^13.19.0",
1163 | "graphemer": "^1.4.0",
1164 | "ignore": "^5.2.0",
1165 | "imurmurhash": "^0.1.4",
1166 | "is-glob": "^4.0.0",
1167 | "is-path-inside": "^3.0.3",
1168 | "js-yaml": "^4.1.0",
1169 | "json-stable-stringify-without-jsonify": "^1.0.1",
1170 | "levn": "^0.4.1",
1171 | "lodash.merge": "^4.6.2",
1172 | "minimatch": "^3.1.2",
1173 | "natural-compare": "^1.4.0",
1174 | "optionator": "^0.9.3",
1175 | "strip-ansi": "^6.0.1",
1176 | "text-table": "^0.2.0"
1177 | },
1178 | "bin": {
1179 | "eslint": "bin/eslint.js"
1180 | },
1181 | "engines": {
1182 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1183 | },
1184 | "funding": {
1185 | "url": "https://opencollective.com/eslint"
1186 | }
1187 | },
1188 | "node_modules/eslint-scope": {
1189 | "version": "5.1.1",
1190 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1191 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1192 | "dev": true,
1193 | "license": "BSD-2-Clause",
1194 | "dependencies": {
1195 | "esrecurse": "^4.3.0",
1196 | "estraverse": "^4.1.1"
1197 | },
1198 | "engines": {
1199 | "node": ">=8.0.0"
1200 | }
1201 | },
1202 | "node_modules/eslint-utils": {
1203 | "version": "3.0.0",
1204 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
1205 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
1206 | "dev": true,
1207 | "license": "MIT",
1208 | "dependencies": {
1209 | "eslint-visitor-keys": "^2.0.0"
1210 | },
1211 | "engines": {
1212 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
1213 | },
1214 | "funding": {
1215 | "url": "https://github.com/sponsors/mysticatea"
1216 | },
1217 | "peerDependencies": {
1218 | "eslint": ">=5"
1219 | }
1220 | },
1221 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
1222 | "version": "2.1.0",
1223 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
1224 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
1225 | "dev": true,
1226 | "license": "Apache-2.0",
1227 | "engines": {
1228 | "node": ">=10"
1229 | }
1230 | },
1231 | "node_modules/eslint-visitor-keys": {
1232 | "version": "3.4.3",
1233 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
1234 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
1235 | "dev": true,
1236 | "license": "Apache-2.0",
1237 | "engines": {
1238 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1239 | },
1240 | "funding": {
1241 | "url": "https://opencollective.com/eslint"
1242 | }
1243 | },
1244 | "node_modules/eslint/node_modules/eslint-scope": {
1245 | "version": "7.2.2",
1246 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
1247 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
1248 | "dev": true,
1249 | "license": "BSD-2-Clause",
1250 | "peer": true,
1251 | "dependencies": {
1252 | "esrecurse": "^4.3.0",
1253 | "estraverse": "^5.2.0"
1254 | },
1255 | "engines": {
1256 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1257 | },
1258 | "funding": {
1259 | "url": "https://opencollective.com/eslint"
1260 | }
1261 | },
1262 | "node_modules/eslint/node_modules/estraverse": {
1263 | "version": "5.3.0",
1264 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1265 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1266 | "dev": true,
1267 | "license": "BSD-2-Clause",
1268 | "peer": true,
1269 | "engines": {
1270 | "node": ">=4.0"
1271 | }
1272 | },
1273 | "node_modules/espree": {
1274 | "version": "9.6.1",
1275 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
1276 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
1277 | "dev": true,
1278 | "license": "BSD-2-Clause",
1279 | "peer": true,
1280 | "dependencies": {
1281 | "acorn": "^8.9.0",
1282 | "acorn-jsx": "^5.3.2",
1283 | "eslint-visitor-keys": "^3.4.1"
1284 | },
1285 | "engines": {
1286 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1287 | },
1288 | "funding": {
1289 | "url": "https://opencollective.com/eslint"
1290 | }
1291 | },
1292 | "node_modules/esquery": {
1293 | "version": "1.6.0",
1294 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
1295 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
1296 | "dev": true,
1297 | "license": "BSD-3-Clause",
1298 | "peer": true,
1299 | "dependencies": {
1300 | "estraverse": "^5.1.0"
1301 | },
1302 | "engines": {
1303 | "node": ">=0.10"
1304 | }
1305 | },
1306 | "node_modules/esquery/node_modules/estraverse": {
1307 | "version": "5.3.0",
1308 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1309 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1310 | "dev": true,
1311 | "license": "BSD-2-Clause",
1312 | "peer": true,
1313 | "engines": {
1314 | "node": ">=4.0"
1315 | }
1316 | },
1317 | "node_modules/esrecurse": {
1318 | "version": "4.3.0",
1319 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1320 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1321 | "dev": true,
1322 | "license": "BSD-2-Clause",
1323 | "dependencies": {
1324 | "estraverse": "^5.2.0"
1325 | },
1326 | "engines": {
1327 | "node": ">=4.0"
1328 | }
1329 | },
1330 | "node_modules/esrecurse/node_modules/estraverse": {
1331 | "version": "5.3.0",
1332 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1333 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1334 | "dev": true,
1335 | "license": "BSD-2-Clause",
1336 | "engines": {
1337 | "node": ">=4.0"
1338 | }
1339 | },
1340 | "node_modules/estraverse": {
1341 | "version": "4.3.0",
1342 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1343 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1344 | "dev": true,
1345 | "license": "BSD-2-Clause",
1346 | "engines": {
1347 | "node": ">=4.0"
1348 | }
1349 | },
1350 | "node_modules/esutils": {
1351 | "version": "2.0.3",
1352 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1353 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1354 | "dev": true,
1355 | "license": "BSD-2-Clause",
1356 | "peer": true,
1357 | "engines": {
1358 | "node": ">=0.10.0"
1359 | }
1360 | },
1361 | "node_modules/fast-deep-equal": {
1362 | "version": "3.1.3",
1363 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1364 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1365 | "dev": true,
1366 | "license": "MIT",
1367 | "peer": true
1368 | },
1369 | "node_modules/fast-glob": {
1370 | "version": "3.3.2",
1371 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
1372 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
1373 | "dev": true,
1374 | "license": "MIT",
1375 | "dependencies": {
1376 | "@nodelib/fs.stat": "^2.0.2",
1377 | "@nodelib/fs.walk": "^1.2.3",
1378 | "glob-parent": "^5.1.2",
1379 | "merge2": "^1.3.0",
1380 | "micromatch": "^4.0.4"
1381 | },
1382 | "engines": {
1383 | "node": ">=8.6.0"
1384 | }
1385 | },
1386 | "node_modules/fast-glob/node_modules/glob-parent": {
1387 | "version": "5.1.2",
1388 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1389 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1390 | "dev": true,
1391 | "license": "ISC",
1392 | "dependencies": {
1393 | "is-glob": "^4.0.1"
1394 | },
1395 | "engines": {
1396 | "node": ">= 6"
1397 | }
1398 | },
1399 | "node_modules/fast-json-stable-stringify": {
1400 | "version": "2.1.0",
1401 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1402 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1403 | "dev": true,
1404 | "license": "MIT",
1405 | "peer": true
1406 | },
1407 | "node_modules/fast-levenshtein": {
1408 | "version": "2.0.6",
1409 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1410 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1411 | "dev": true,
1412 | "license": "MIT",
1413 | "peer": true
1414 | },
1415 | "node_modules/fastq": {
1416 | "version": "1.18.0",
1417 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
1418 | "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
1419 | "dev": true,
1420 | "license": "ISC",
1421 | "dependencies": {
1422 | "reusify": "^1.0.4"
1423 | }
1424 | },
1425 | "node_modules/file-entry-cache": {
1426 | "version": "6.0.1",
1427 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1428 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1429 | "dev": true,
1430 | "license": "MIT",
1431 | "peer": true,
1432 | "dependencies": {
1433 | "flat-cache": "^3.0.4"
1434 | },
1435 | "engines": {
1436 | "node": "^10.12.0 || >=12.0.0"
1437 | }
1438 | },
1439 | "node_modules/fill-range": {
1440 | "version": "7.1.1",
1441 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1442 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1443 | "dev": true,
1444 | "license": "MIT",
1445 | "dependencies": {
1446 | "to-regex-range": "^5.0.1"
1447 | },
1448 | "engines": {
1449 | "node": ">=8"
1450 | }
1451 | },
1452 | "node_modules/find-up": {
1453 | "version": "5.0.0",
1454 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1455 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1456 | "dev": true,
1457 | "license": "MIT",
1458 | "peer": true,
1459 | "dependencies": {
1460 | "locate-path": "^6.0.0",
1461 | "path-exists": "^4.0.0"
1462 | },
1463 | "engines": {
1464 | "node": ">=10"
1465 | },
1466 | "funding": {
1467 | "url": "https://github.com/sponsors/sindresorhus"
1468 | }
1469 | },
1470 | "node_modules/flat-cache": {
1471 | "version": "3.2.0",
1472 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
1473 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
1474 | "dev": true,
1475 | "license": "MIT",
1476 | "peer": true,
1477 | "dependencies": {
1478 | "flatted": "^3.2.9",
1479 | "keyv": "^4.5.3",
1480 | "rimraf": "^3.0.2"
1481 | },
1482 | "engines": {
1483 | "node": "^10.12.0 || >=12.0.0"
1484 | }
1485 | },
1486 | "node_modules/flatted": {
1487 | "version": "3.3.2",
1488 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
1489 | "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
1490 | "dev": true,
1491 | "license": "ISC",
1492 | "peer": true
1493 | },
1494 | "node_modules/fs.realpath": {
1495 | "version": "1.0.0",
1496 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1497 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1498 | "dev": true,
1499 | "license": "ISC",
1500 | "peer": true
1501 | },
1502 | "node_modules/functional-red-black-tree": {
1503 | "version": "1.0.1",
1504 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1505 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
1506 | "dev": true,
1507 | "license": "MIT"
1508 | },
1509 | "node_modules/glob": {
1510 | "version": "7.2.3",
1511 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1512 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1513 | "deprecated": "Glob versions prior to v9 are no longer supported",
1514 | "dev": true,
1515 | "license": "ISC",
1516 | "peer": true,
1517 | "dependencies": {
1518 | "fs.realpath": "^1.0.0",
1519 | "inflight": "^1.0.4",
1520 | "inherits": "2",
1521 | "minimatch": "^3.1.1",
1522 | "once": "^1.3.0",
1523 | "path-is-absolute": "^1.0.0"
1524 | },
1525 | "engines": {
1526 | "node": "*"
1527 | },
1528 | "funding": {
1529 | "url": "https://github.com/sponsors/isaacs"
1530 | }
1531 | },
1532 | "node_modules/glob-parent": {
1533 | "version": "6.0.2",
1534 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1535 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1536 | "dev": true,
1537 | "license": "ISC",
1538 | "peer": true,
1539 | "dependencies": {
1540 | "is-glob": "^4.0.3"
1541 | },
1542 | "engines": {
1543 | "node": ">=10.13.0"
1544 | }
1545 | },
1546 | "node_modules/globals": {
1547 | "version": "13.24.0",
1548 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
1549 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
1550 | "dev": true,
1551 | "license": "MIT",
1552 | "peer": true,
1553 | "dependencies": {
1554 | "type-fest": "^0.20.2"
1555 | },
1556 | "engines": {
1557 | "node": ">=8"
1558 | },
1559 | "funding": {
1560 | "url": "https://github.com/sponsors/sindresorhus"
1561 | }
1562 | },
1563 | "node_modules/globby": {
1564 | "version": "11.1.0",
1565 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
1566 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
1567 | "dev": true,
1568 | "license": "MIT",
1569 | "dependencies": {
1570 | "array-union": "^2.1.0",
1571 | "dir-glob": "^3.0.1",
1572 | "fast-glob": "^3.2.9",
1573 | "ignore": "^5.2.0",
1574 | "merge2": "^1.4.1",
1575 | "slash": "^3.0.0"
1576 | },
1577 | "engines": {
1578 | "node": ">=10"
1579 | },
1580 | "funding": {
1581 | "url": "https://github.com/sponsors/sindresorhus"
1582 | }
1583 | },
1584 | "node_modules/graphemer": {
1585 | "version": "1.4.0",
1586 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
1587 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
1588 | "dev": true,
1589 | "license": "MIT",
1590 | "peer": true
1591 | },
1592 | "node_modules/has-flag": {
1593 | "version": "4.0.0",
1594 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1595 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1596 | "dev": true,
1597 | "license": "MIT",
1598 | "peer": true,
1599 | "engines": {
1600 | "node": ">=8"
1601 | }
1602 | },
1603 | "node_modules/ignore": {
1604 | "version": "5.3.2",
1605 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
1606 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
1607 | "dev": true,
1608 | "license": "MIT",
1609 | "engines": {
1610 | "node": ">= 4"
1611 | }
1612 | },
1613 | "node_modules/import-fresh": {
1614 | "version": "3.3.0",
1615 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1616 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1617 | "dev": true,
1618 | "license": "MIT",
1619 | "peer": true,
1620 | "dependencies": {
1621 | "parent-module": "^1.0.0",
1622 | "resolve-from": "^4.0.0"
1623 | },
1624 | "engines": {
1625 | "node": ">=6"
1626 | },
1627 | "funding": {
1628 | "url": "https://github.com/sponsors/sindresorhus"
1629 | }
1630 | },
1631 | "node_modules/imurmurhash": {
1632 | "version": "0.1.4",
1633 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1634 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1635 | "dev": true,
1636 | "license": "MIT",
1637 | "peer": true,
1638 | "engines": {
1639 | "node": ">=0.8.19"
1640 | }
1641 | },
1642 | "node_modules/inflight": {
1643 | "version": "1.0.6",
1644 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1645 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1646 | "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.",
1647 | "dev": true,
1648 | "license": "ISC",
1649 | "peer": true,
1650 | "dependencies": {
1651 | "once": "^1.3.0",
1652 | "wrappy": "1"
1653 | }
1654 | },
1655 | "node_modules/inherits": {
1656 | "version": "2.0.4",
1657 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1658 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1659 | "dev": true,
1660 | "license": "ISC",
1661 | "peer": true
1662 | },
1663 | "node_modules/is-extglob": {
1664 | "version": "2.1.1",
1665 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1666 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1667 | "dev": true,
1668 | "license": "MIT",
1669 | "engines": {
1670 | "node": ">=0.10.0"
1671 | }
1672 | },
1673 | "node_modules/is-glob": {
1674 | "version": "4.0.3",
1675 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1676 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1677 | "dev": true,
1678 | "license": "MIT",
1679 | "dependencies": {
1680 | "is-extglob": "^2.1.1"
1681 | },
1682 | "engines": {
1683 | "node": ">=0.10.0"
1684 | }
1685 | },
1686 | "node_modules/is-number": {
1687 | "version": "7.0.0",
1688 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1689 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1690 | "dev": true,
1691 | "license": "MIT",
1692 | "engines": {
1693 | "node": ">=0.12.0"
1694 | }
1695 | },
1696 | "node_modules/is-path-inside": {
1697 | "version": "3.0.3",
1698 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
1699 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
1700 | "dev": true,
1701 | "license": "MIT",
1702 | "peer": true,
1703 | "engines": {
1704 | "node": ">=8"
1705 | }
1706 | },
1707 | "node_modules/isexe": {
1708 | "version": "2.0.0",
1709 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1710 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1711 | "dev": true,
1712 | "license": "ISC",
1713 | "peer": true
1714 | },
1715 | "node_modules/js-yaml": {
1716 | "version": "4.1.0",
1717 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1718 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1719 | "dev": true,
1720 | "license": "MIT",
1721 | "peer": true,
1722 | "dependencies": {
1723 | "argparse": "^2.0.1"
1724 | },
1725 | "bin": {
1726 | "js-yaml": "bin/js-yaml.js"
1727 | }
1728 | },
1729 | "node_modules/json-buffer": {
1730 | "version": "3.0.1",
1731 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
1732 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
1733 | "dev": true,
1734 | "license": "MIT",
1735 | "peer": true
1736 | },
1737 | "node_modules/json-schema-traverse": {
1738 | "version": "0.4.1",
1739 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1740 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1741 | "dev": true,
1742 | "license": "MIT",
1743 | "peer": true
1744 | },
1745 | "node_modules/json-stable-stringify-without-jsonify": {
1746 | "version": "1.0.1",
1747 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1748 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1749 | "dev": true,
1750 | "license": "MIT",
1751 | "peer": true
1752 | },
1753 | "node_modules/keyv": {
1754 | "version": "4.5.4",
1755 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
1756 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
1757 | "dev": true,
1758 | "license": "MIT",
1759 | "peer": true,
1760 | "dependencies": {
1761 | "json-buffer": "3.0.1"
1762 | }
1763 | },
1764 | "node_modules/levn": {
1765 | "version": "0.4.1",
1766 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1767 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1768 | "dev": true,
1769 | "license": "MIT",
1770 | "peer": true,
1771 | "dependencies": {
1772 | "prelude-ls": "^1.2.1",
1773 | "type-check": "~0.4.0"
1774 | },
1775 | "engines": {
1776 | "node": ">= 0.8.0"
1777 | }
1778 | },
1779 | "node_modules/locate-path": {
1780 | "version": "6.0.0",
1781 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
1782 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
1783 | "dev": true,
1784 | "license": "MIT",
1785 | "peer": true,
1786 | "dependencies": {
1787 | "p-locate": "^5.0.0"
1788 | },
1789 | "engines": {
1790 | "node": ">=10"
1791 | },
1792 | "funding": {
1793 | "url": "https://github.com/sponsors/sindresorhus"
1794 | }
1795 | },
1796 | "node_modules/lodash.merge": {
1797 | "version": "4.6.2",
1798 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1799 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1800 | "dev": true,
1801 | "license": "MIT",
1802 | "peer": true
1803 | },
1804 | "node_modules/merge2": {
1805 | "version": "1.4.1",
1806 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1807 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1808 | "dev": true,
1809 | "license": "MIT",
1810 | "engines": {
1811 | "node": ">= 8"
1812 | }
1813 | },
1814 | "node_modules/micromatch": {
1815 | "version": "4.0.8",
1816 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1817 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1818 | "dev": true,
1819 | "license": "MIT",
1820 | "dependencies": {
1821 | "braces": "^3.0.3",
1822 | "picomatch": "^2.3.1"
1823 | },
1824 | "engines": {
1825 | "node": ">=8.6"
1826 | }
1827 | },
1828 | "node_modules/minimatch": {
1829 | "version": "3.1.2",
1830 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1831 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1832 | "dev": true,
1833 | "license": "ISC",
1834 | "peer": true,
1835 | "dependencies": {
1836 | "brace-expansion": "^1.1.7"
1837 | },
1838 | "engines": {
1839 | "node": "*"
1840 | }
1841 | },
1842 | "node_modules/moment": {
1843 | "version": "2.29.4",
1844 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
1845 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
1846 | "dev": true,
1847 | "license": "MIT",
1848 | "engines": {
1849 | "node": "*"
1850 | }
1851 | },
1852 | "node_modules/ms": {
1853 | "version": "2.1.3",
1854 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1855 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1856 | "dev": true,
1857 | "license": "MIT"
1858 | },
1859 | "node_modules/natural-compare": {
1860 | "version": "1.4.0",
1861 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1862 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
1863 | "dev": true,
1864 | "license": "MIT",
1865 | "peer": true
1866 | },
1867 | "node_modules/obsidian": {
1868 | "version": "1.7.2",
1869 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.7.2.tgz",
1870 | "integrity": "sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==",
1871 | "dev": true,
1872 | "license": "MIT",
1873 | "dependencies": {
1874 | "@types/codemirror": "5.60.8",
1875 | "moment": "2.29.4"
1876 | },
1877 | "peerDependencies": {
1878 | "@codemirror/state": "^6.0.0",
1879 | "@codemirror/view": "^6.0.0"
1880 | }
1881 | },
1882 | "node_modules/once": {
1883 | "version": "1.4.0",
1884 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1885 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1886 | "dev": true,
1887 | "license": "ISC",
1888 | "peer": true,
1889 | "dependencies": {
1890 | "wrappy": "1"
1891 | }
1892 | },
1893 | "node_modules/optionator": {
1894 | "version": "0.9.4",
1895 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
1896 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
1897 | "dev": true,
1898 | "license": "MIT",
1899 | "peer": true,
1900 | "dependencies": {
1901 | "deep-is": "^0.1.3",
1902 | "fast-levenshtein": "^2.0.6",
1903 | "levn": "^0.4.1",
1904 | "prelude-ls": "^1.2.1",
1905 | "type-check": "^0.4.0",
1906 | "word-wrap": "^1.2.5"
1907 | },
1908 | "engines": {
1909 | "node": ">= 0.8.0"
1910 | }
1911 | },
1912 | "node_modules/p-limit": {
1913 | "version": "3.1.0",
1914 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
1915 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
1916 | "dev": true,
1917 | "license": "MIT",
1918 | "peer": true,
1919 | "dependencies": {
1920 | "yocto-queue": "^0.1.0"
1921 | },
1922 | "engines": {
1923 | "node": ">=10"
1924 | },
1925 | "funding": {
1926 | "url": "https://github.com/sponsors/sindresorhus"
1927 | }
1928 | },
1929 | "node_modules/p-locate": {
1930 | "version": "5.0.0",
1931 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
1932 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
1933 | "dev": true,
1934 | "license": "MIT",
1935 | "peer": true,
1936 | "dependencies": {
1937 | "p-limit": "^3.0.2"
1938 | },
1939 | "engines": {
1940 | "node": ">=10"
1941 | },
1942 | "funding": {
1943 | "url": "https://github.com/sponsors/sindresorhus"
1944 | }
1945 | },
1946 | "node_modules/parent-module": {
1947 | "version": "1.0.1",
1948 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1949 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1950 | "dev": true,
1951 | "license": "MIT",
1952 | "peer": true,
1953 | "dependencies": {
1954 | "callsites": "^3.0.0"
1955 | },
1956 | "engines": {
1957 | "node": ">=6"
1958 | }
1959 | },
1960 | "node_modules/path-exists": {
1961 | "version": "4.0.0",
1962 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1963 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1964 | "dev": true,
1965 | "license": "MIT",
1966 | "peer": true,
1967 | "engines": {
1968 | "node": ">=8"
1969 | }
1970 | },
1971 | "node_modules/path-is-absolute": {
1972 | "version": "1.0.1",
1973 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1974 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1975 | "dev": true,
1976 | "license": "MIT",
1977 | "peer": true,
1978 | "engines": {
1979 | "node": ">=0.10.0"
1980 | }
1981 | },
1982 | "node_modules/path-key": {
1983 | "version": "3.1.1",
1984 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1985 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1986 | "dev": true,
1987 | "license": "MIT",
1988 | "peer": true,
1989 | "engines": {
1990 | "node": ">=8"
1991 | }
1992 | },
1993 | "node_modules/path-type": {
1994 | "version": "4.0.0",
1995 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1996 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1997 | "dev": true,
1998 | "license": "MIT",
1999 | "engines": {
2000 | "node": ">=8"
2001 | }
2002 | },
2003 | "node_modules/picomatch": {
2004 | "version": "2.3.1",
2005 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2006 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2007 | "dev": true,
2008 | "license": "MIT",
2009 | "engines": {
2010 | "node": ">=8.6"
2011 | },
2012 | "funding": {
2013 | "url": "https://github.com/sponsors/jonschlinkert"
2014 | }
2015 | },
2016 | "node_modules/prelude-ls": {
2017 | "version": "1.2.1",
2018 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2019 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2020 | "dev": true,
2021 | "license": "MIT",
2022 | "peer": true,
2023 | "engines": {
2024 | "node": ">= 0.8.0"
2025 | }
2026 | },
2027 | "node_modules/punycode": {
2028 | "version": "2.3.1",
2029 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2030 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2031 | "dev": true,
2032 | "license": "MIT",
2033 | "peer": true,
2034 | "engines": {
2035 | "node": ">=6"
2036 | }
2037 | },
2038 | "node_modules/queue-microtask": {
2039 | "version": "1.2.3",
2040 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2041 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2042 | "dev": true,
2043 | "funding": [
2044 | {
2045 | "type": "github",
2046 | "url": "https://github.com/sponsors/feross"
2047 | },
2048 | {
2049 | "type": "patreon",
2050 | "url": "https://www.patreon.com/feross"
2051 | },
2052 | {
2053 | "type": "consulting",
2054 | "url": "https://feross.org/support"
2055 | }
2056 | ],
2057 | "license": "MIT"
2058 | },
2059 | "node_modules/regexpp": {
2060 | "version": "3.2.0",
2061 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
2062 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
2063 | "dev": true,
2064 | "license": "MIT",
2065 | "engines": {
2066 | "node": ">=8"
2067 | },
2068 | "funding": {
2069 | "url": "https://github.com/sponsors/mysticatea"
2070 | }
2071 | },
2072 | "node_modules/resolve-from": {
2073 | "version": "4.0.0",
2074 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2075 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2076 | "dev": true,
2077 | "license": "MIT",
2078 | "peer": true,
2079 | "engines": {
2080 | "node": ">=4"
2081 | }
2082 | },
2083 | "node_modules/reusify": {
2084 | "version": "1.0.4",
2085 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2086 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2087 | "dev": true,
2088 | "license": "MIT",
2089 | "engines": {
2090 | "iojs": ">=1.0.0",
2091 | "node": ">=0.10.0"
2092 | }
2093 | },
2094 | "node_modules/rimraf": {
2095 | "version": "3.0.2",
2096 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2097 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2098 | "deprecated": "Rimraf versions prior to v4 are no longer supported",
2099 | "dev": true,
2100 | "license": "ISC",
2101 | "peer": true,
2102 | "dependencies": {
2103 | "glob": "^7.1.3"
2104 | },
2105 | "bin": {
2106 | "rimraf": "bin.js"
2107 | },
2108 | "funding": {
2109 | "url": "https://github.com/sponsors/isaacs"
2110 | }
2111 | },
2112 | "node_modules/run-parallel": {
2113 | "version": "1.2.0",
2114 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2115 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2116 | "dev": true,
2117 | "funding": [
2118 | {
2119 | "type": "github",
2120 | "url": "https://github.com/sponsors/feross"
2121 | },
2122 | {
2123 | "type": "patreon",
2124 | "url": "https://www.patreon.com/feross"
2125 | },
2126 | {
2127 | "type": "consulting",
2128 | "url": "https://feross.org/support"
2129 | }
2130 | ],
2131 | "license": "MIT",
2132 | "dependencies": {
2133 | "queue-microtask": "^1.2.2"
2134 | }
2135 | },
2136 | "node_modules/semver": {
2137 | "version": "7.6.3",
2138 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
2139 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
2140 | "dev": true,
2141 | "license": "ISC",
2142 | "bin": {
2143 | "semver": "bin/semver.js"
2144 | },
2145 | "engines": {
2146 | "node": ">=10"
2147 | }
2148 | },
2149 | "node_modules/shebang-command": {
2150 | "version": "2.0.0",
2151 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2152 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2153 | "dev": true,
2154 | "license": "MIT",
2155 | "peer": true,
2156 | "dependencies": {
2157 | "shebang-regex": "^3.0.0"
2158 | },
2159 | "engines": {
2160 | "node": ">=8"
2161 | }
2162 | },
2163 | "node_modules/shebang-regex": {
2164 | "version": "3.0.0",
2165 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2166 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2167 | "dev": true,
2168 | "license": "MIT",
2169 | "peer": true,
2170 | "engines": {
2171 | "node": ">=8"
2172 | }
2173 | },
2174 | "node_modules/slash": {
2175 | "version": "3.0.0",
2176 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
2177 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
2178 | "dev": true,
2179 | "license": "MIT",
2180 | "engines": {
2181 | "node": ">=8"
2182 | }
2183 | },
2184 | "node_modules/strip-ansi": {
2185 | "version": "6.0.1",
2186 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2187 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2188 | "dev": true,
2189 | "license": "MIT",
2190 | "peer": true,
2191 | "dependencies": {
2192 | "ansi-regex": "^5.0.1"
2193 | },
2194 | "engines": {
2195 | "node": ">=8"
2196 | }
2197 | },
2198 | "node_modules/strip-json-comments": {
2199 | "version": "3.1.1",
2200 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2201 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2202 | "dev": true,
2203 | "license": "MIT",
2204 | "peer": true,
2205 | "engines": {
2206 | "node": ">=8"
2207 | },
2208 | "funding": {
2209 | "url": "https://github.com/sponsors/sindresorhus"
2210 | }
2211 | },
2212 | "node_modules/style-mod": {
2213 | "version": "4.1.2",
2214 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz",
2215 | "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
2216 | "dev": true,
2217 | "license": "MIT",
2218 | "peer": true
2219 | },
2220 | "node_modules/supports-color": {
2221 | "version": "7.2.0",
2222 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2223 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2224 | "dev": true,
2225 | "license": "MIT",
2226 | "peer": true,
2227 | "dependencies": {
2228 | "has-flag": "^4.0.0"
2229 | },
2230 | "engines": {
2231 | "node": ">=8"
2232 | }
2233 | },
2234 | "node_modules/text-table": {
2235 | "version": "0.2.0",
2236 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2237 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
2238 | "dev": true,
2239 | "license": "MIT",
2240 | "peer": true
2241 | },
2242 | "node_modules/to-regex-range": {
2243 | "version": "5.0.1",
2244 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2245 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2246 | "dev": true,
2247 | "license": "MIT",
2248 | "dependencies": {
2249 | "is-number": "^7.0.0"
2250 | },
2251 | "engines": {
2252 | "node": ">=8.0"
2253 | }
2254 | },
2255 | "node_modules/tslib": {
2256 | "version": "2.4.0",
2257 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
2258 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
2259 | "dev": true,
2260 | "license": "0BSD"
2261 | },
2262 | "node_modules/tsutils": {
2263 | "version": "3.21.0",
2264 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
2265 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
2266 | "dev": true,
2267 | "license": "MIT",
2268 | "dependencies": {
2269 | "tslib": "^1.8.1"
2270 | },
2271 | "engines": {
2272 | "node": ">= 6"
2273 | },
2274 | "peerDependencies": {
2275 | "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"
2276 | }
2277 | },
2278 | "node_modules/tsutils/node_modules/tslib": {
2279 | "version": "1.14.1",
2280 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2281 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2282 | "dev": true,
2283 | "license": "0BSD"
2284 | },
2285 | "node_modules/type-check": {
2286 | "version": "0.4.0",
2287 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
2288 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
2289 | "dev": true,
2290 | "license": "MIT",
2291 | "peer": 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 | "license": "(MIT OR CC0-1.0)",
2305 | "peer": true,
2306 | "engines": {
2307 | "node": ">=10"
2308 | },
2309 | "funding": {
2310 | "url": "https://github.com/sponsors/sindresorhus"
2311 | }
2312 | },
2313 | "node_modules/typescript": {
2314 | "version": "4.7.4",
2315 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
2316 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
2317 | "dev": true,
2318 | "license": "Apache-2.0",
2319 | "bin": {
2320 | "tsc": "bin/tsc",
2321 | "tsserver": "bin/tsserver"
2322 | },
2323 | "engines": {
2324 | "node": ">=4.2.0"
2325 | }
2326 | },
2327 | "node_modules/uri-js": {
2328 | "version": "4.4.1",
2329 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2330 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2331 | "dev": true,
2332 | "license": "BSD-2-Clause",
2333 | "peer": true,
2334 | "dependencies": {
2335 | "punycode": "^2.1.0"
2336 | }
2337 | },
2338 | "node_modules/w3c-keyname": {
2339 | "version": "2.2.8",
2340 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
2341 | "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
2342 | "dev": true,
2343 | "license": "MIT",
2344 | "peer": true
2345 | },
2346 | "node_modules/which": {
2347 | "version": "2.0.2",
2348 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2349 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2350 | "dev": true,
2351 | "license": "ISC",
2352 | "peer": true,
2353 | "dependencies": {
2354 | "isexe": "^2.0.0"
2355 | },
2356 | "bin": {
2357 | "node-which": "bin/node-which"
2358 | },
2359 | "engines": {
2360 | "node": ">= 8"
2361 | }
2362 | },
2363 | "node_modules/word-wrap": {
2364 | "version": "1.2.5",
2365 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
2366 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
2367 | "dev": true,
2368 | "license": "MIT",
2369 | "peer": true,
2370 | "engines": {
2371 | "node": ">=0.10.0"
2372 | }
2373 | },
2374 | "node_modules/wrappy": {
2375 | "version": "1.0.2",
2376 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2377 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2378 | "dev": true,
2379 | "license": "ISC",
2380 | "peer": true
2381 | },
2382 | "node_modules/yocto-queue": {
2383 | "version": "0.1.0",
2384 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
2385 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
2386 | "dev": true,
2387 | "license": "MIT",
2388 | "peer": true,
2389 | "engines": {
2390 | "node": ">=10"
2391 | },
2392 | "funding": {
2393 | "url": "https://github.com/sponsors/sindresorhus"
2394 | }
2395 | }
2396 | }
2397 | }
2398 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "obsidian-sample-plugin",
3 | "version": "1.0.0",
4 | "description": "This is a sample plugin for Obsidian (https://obsidian.md)",
5 | "main": "main.js",
6 | "scripts": {
7 | "dev": "node esbuild.config.mjs",
8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
9 | "version": "node version-bump.mjs && git add manifest.json versions.json"
10 | },
11 | "keywords": [],
12 | "author": "",
13 | "license": "MIT",
14 | "devDependencies": {
15 | "@types/node": "^16.11.6",
16 | "@typescript-eslint/eslint-plugin": "5.29.0",
17 | "@typescript-eslint/parser": "5.29.0",
18 | "builtin-modules": "3.3.0",
19 | "esbuild": "0.17.3",
20 | "obsidian": "^1.7.2",
21 | "tslib": "2.4.0",
22 | "typescript": "4.7.4"
23 | },
24 | "compilerOptions": {
25 | "rootDir": "src",
26 | "outDir": "dist"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | // src/main.ts
2 | import { App, Plugin, FileSystemAdapter, Modal, TextComponent, Setting } from 'obsidian';
3 | import { ScriptManager } from './managers/scriptManager';
4 | import { ScriptExecutionModal } from './modals/scriptExecutionModal';
5 | import { ScriptSettingsTab } from './settings/scriptSettingsTab';
6 | import { ScriptSettings } from './settings/scriptSettings';
7 | import { PluginSettings, DEFAULT_SETTINGS } from './settings/pluginSettings';
8 |
9 | export default class ScriptRunnerPlugin extends Plugin {
10 | settings: PluginSettings;
11 | scriptManager: ScriptManager;
12 | ribbonIcons: Map = new Map(); // Track ribbon icons by script path
13 |
14 | async onload() {
15 | await this.loadSettings();
16 | this.scriptManager = new ScriptManager(this.app, this.settings, this);
17 |
18 | // Add settings tab
19 | this.addSettingTab(new ScriptSettingsTab(this.app, this));
20 |
21 | // Dynamically add commands and ribbon icons for each script
22 | this.addScriptCommandsAndIcons();
23 | this.refreshCommandsAndIcons();
24 | }
25 |
26 | onunload() {
27 | // Clean up ribbon icons
28 | this.ribbonIcons.forEach((icon) => icon.remove());
29 | this.ribbonIcons.clear();
30 | }
31 |
32 | async loadSettings() {
33 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
34 | }
35 |
36 | async saveSettings() {
37 | await this.saveData(this.settings);
38 | this.refreshCommandsAndIcons(); // Refresh commands and icons when settings are saved
39 | }
40 |
41 | getBasePath(): string {
42 | let basePath;
43 | if (this.app.vault.adapter instanceof FileSystemAdapter) {
44 | basePath = this.app.vault.adapter.getBasePath();
45 | } else {
46 | throw new Error('Cannot determine base path.');
47 | }
48 | return `${basePath}`;
49 | }
50 |
51 | log(message: string, level: 'verbose' | 'normal' | 'silent' = 'normal') {
52 | var logLevel: number = 0;
53 | var settingLogLevel: number = 0;
54 | switch (level) {
55 | case 'verbose':
56 | logLevel = 2;
57 | break;
58 | case 'normal':
59 | logLevel = 1;
60 | break;
61 | case 'silent':
62 | logLevel = 0;
63 | break;
64 | }
65 | switch (this.settings.verbosity) {
66 | case 'verbose':
67 | settingLogLevel = 2;
68 | break;
69 | case 'normal':
70 | settingLogLevel = 1;
71 | break;
72 | case 'silent':
73 | settingLogLevel = 0;
74 | break;
75 | }
76 | if (settingLogLevel >= logLevel) {
77 | console.log(`[ScriptRunner] ${message}`);
78 | }
79 | }
80 |
81 | addScriptCommandsAndIcons() {
82 | Object.keys(this.settings.scripts).forEach(scriptPath => {
83 | const scriptConfig = this.settings.scripts[scriptPath];
84 |
85 | // Add command for each script
86 | if (scriptConfig.runType === 'command') {
87 | this.log(`Adding command for script: ${scriptPath}`, 'verbose');
88 | this.addCommand({
89 | id: `run-script-${scriptPath}`,
90 | name: `Run Script: ${scriptPath}`,
91 | callback: async () => {
92 | const args = await this.promptForArguments(scriptConfig);
93 | this.scriptManager.runScript(scriptPath, scriptConfig, args);
94 | },
95 | });
96 | }
97 |
98 | // Add ribbon icon for each script
99 | if (scriptConfig.runType === 'icon') {
100 | this.log(`Adding ribbon icon for script: ${scriptPath}`, 'verbose');
101 | const icon = this.addRibbonIcon('play', `Run Script: ${scriptPath}`, async () => {
102 | const args = await this.promptForArguments(scriptConfig);
103 | this.scriptManager.runScript(scriptPath, scriptConfig, args);
104 | });
105 | this.ribbonIcons.set(scriptPath, icon); // Track the ribbon icon
106 | }
107 | });
108 | }
109 |
110 | refreshCommandsAndIcons() {
111 | // Clear existing commands
112 | // @ts-ignore - Accessing private property `commands`
113 | this.commands = {};
114 |
115 | // Clear existing ribbon icons
116 | this.ribbonIcons.forEach((icon) => icon.remove());
117 | this.ribbonIcons.clear();
118 |
119 | // Re-add commands and ribbon icons based on updated settings
120 | this.addScriptCommandsAndIcons();
121 | }
122 |
123 | async promptForArguments(scriptConfig: ScriptSettings): Promise {
124 | const args: string[] = [];
125 |
126 | // add current file path argument
127 | if (scriptConfig.arguments?.currentFile) {
128 | var local_current_file_path = this.app.workspace.getActiveFile()?.path?.toString();
129 | if (!(local_current_file_path === undefined)) {
130 | args.push(local_current_file_path);
131 | } else {
132 | args.push("");
133 | }
134 | }
135 |
136 | // add vault path argument
137 | if (scriptConfig.arguments?.vaultPath) {
138 | args.push(this.getBasePath());
139 | }
140 |
141 | // add clipboard contents argument
142 | if (scriptConfig.arguments?.clipboard) {
143 | args.push(await navigator.clipboard.readText());
144 | }
145 |
146 | // add highlighted contents argument
147 | if (scriptConfig.arguments?.highlight) {
148 | const editor = this.app.workspace.activeEditor?.editor;
149 | if (editor) {
150 | const selectedText = editor.getSelection();
151 | args.push(selectedText || "");
152 | } else {
153 | args.push("");
154 | }
155 | }
156 |
157 | // Add predefined arguments
158 | if (scriptConfig.arguments?.predefined) {
159 | args.push(...scriptConfig.arguments.predefined);
160 | }
161 |
162 | // Prompt for arguments if promptArgumentCount is set
163 | if (scriptConfig.arguments?.promptArgumentCount && scriptConfig.arguments.promptArgumentCount > 0) {
164 | for (let i = 0; i < scriptConfig.arguments.promptArgumentCount; i++) {
165 | const arg = await this.promptForArgument(i + 1);
166 | if (arg !== null) {
167 | args.push(arg);
168 | }
169 | }
170 | }
171 |
172 | return args;
173 | }
174 |
175 | async promptForArgument(index: number): Promise {
176 | return new Promise((resolve) => {
177 | const modal = new Modal(this.app);
178 | modal.titleEl.setText(`Argument ${index}`);
179 | let inputValue = '';
180 | const input = new TextComponent(modal.contentEl)
181 | .setPlaceholder('Enter argument value')
182 | .onChange((value) => {
183 | inputValue = value; // Store the input value
184 | });
185 | // Add a submit button
186 | new Setting(modal.contentEl)
187 | .addButton((btn) =>
188 | btn
189 | .setButtonText('Submit')
190 | .setCta()
191 | .onClick(() => {
192 | resolve(inputValue); // Resolve with the input value
193 | modal.close();
194 | })
195 | );
196 | modal.open();
197 | });
198 | }
199 | }
200 |
201 | // Ensure the plugin is desktop-only
202 | export const isDesktopOnly = true;
--------------------------------------------------------------------------------
/src/managers/scriptManager.ts:
--------------------------------------------------------------------------------
1 | // src/managers/scriptManager.ts
2 | import { App, Notice, MarkdownView, FileSystemAdapter, Plugin } from 'obsidian';
3 | import ScriptRunnerPlugin from '../main'; // Adjust the import path as necessary
4 | import * as fs from 'fs';
5 | import * as path from 'path';
6 | import { exec } from 'child_process';
7 | import { ScriptSettings } from '../settings/scriptSettings';
8 | import { PluginSettings } from '../settings/pluginSettings';
9 |
10 | export class ScriptManager {
11 | app: App;
12 | plugin: ScriptRunnerPlugin;
13 | settings: PluginSettings;
14 |
15 | constructor(app: App, settings: PluginSettings, plugin: ScriptRunnerPlugin) {
16 | this.app = app;
17 | this.settings = settings;
18 | this.plugin = plugin;
19 | }
20 |
21 | runScript(scriptPath: string, scriptConfig: ScriptSettings, args: string[]) {
22 | let basePath = this.plugin.getBasePath();
23 | scriptPath = path.join(basePath, scriptPath);
24 | let interpreter: string | undefined = scriptConfig.interpreter;
25 |
26 | // Escape any unescaped quotes in the arguments
27 | const escapedArgs = args.map(arg => {
28 | // Replace any unescaped quotes with escaped quotes
29 | return `"${arg.replace(/"/g, '\\"')}"`;
30 | });
31 |
32 | // Quote the script path to handle spaces
33 | const quotedScriptPath = `"${scriptPath}"`;
34 |
35 | let cmd = scriptConfig.interpreter
36 | ? `"${scriptConfig.interpreter}" ${quotedScriptPath} ${escapedArgs.join(' ')}`
37 | : `${quotedScriptPath} ${escapedArgs.join(' ')}`;
38 |
39 | // check if command is executable
40 | this.plugin.log(`Running script: ${scriptPath}, with interpreter: ${interpreter}`, 'verbose');
41 | if (!this.isRunnable(interpreter, scriptPath)) {
42 | if (interpreter != undefined) {
43 | new Notice('Interpreter is not executable.', 5000);
44 | this.plugin.log(`Interpreter is not executable: ${interpreter}`, 'silent');
45 | } else {
46 | new Notice('Script is not executable.', 5000);
47 | this.plugin.log(`Script is not executable: ${scriptPath}`, 'silent');
48 | }
49 | return;
50 | }
51 |
52 | if (this.settings.verbosity === 'verbose') {
53 | this.plugin.log(`Executing command: ${cmd}`, 'verbose');
54 | }
55 |
56 | let scriptStartTime = Date.now();
57 | if (scriptConfig.runDirectory) {
58 | basePath = path.join(basePath, scriptConfig.runDirectory);
59 | }
60 | process.chdir(basePath);
61 | console.log(`Running script: ${cmd} from ${basePath}`);
62 | exec(cmd, (error, stdout, stderr) => {
63 | // Handle output based on scriptConfig.output
64 | if (scriptConfig.output?.type === 'notice') {
65 | new Notice(stdout);
66 | } else if (scriptConfig.output?.type === 'insert') {
67 | const editor = (this.app.workspace.activeLeaf?.view as MarkdownView)?.editor;
68 | if (editor) {
69 | if (scriptConfig.output.location === 'end') {
70 | editor.replaceRange(stdout, { line: editor.lastLine(), ch: 0 });
71 | } else if (scriptConfig.output.location === 'cursor') {
72 | editor.replaceSelection(stdout);
73 | }
74 | }
75 | }
76 |
77 | // Handle errors
78 | if (error) {
79 | new Notice('Error executing script.', 5000);
80 | this.plugin.log('Error executing script:', "silent");
81 | }
82 |
83 | const scriptEndTime = Date.now();
84 | const scriptDuration = scriptEndTime - scriptStartTime;
85 | new Notice(`Script executed successfully (took ${scriptDuration} ms), output: ${stdout}`, 5000);
86 | this.plugin.log(`Script executed successfully (took ${scriptDuration} ms), output: ${stdout}`, 'verbose');
87 | if (stderr) {
88 | this.plugin.log(`Script error: ${stderr}`, 'silent');
89 | }
90 | });
91 | }
92 |
93 | isRunnable(interpreter: string | undefined, scriptPath: string): boolean {
94 | // Check if the script exists
95 | try {
96 | fs.accessSync(scriptPath, fs.constants.F_OK);
97 | } catch (error) {
98 | this.plugin.log(`Script does not exist: ${scriptPath}`, 'silent');
99 | return false;
100 | }
101 |
102 | // Case 1: No interpreter specified
103 | if (!interpreter) {
104 | // The script itself must be executable
105 | if (!this.isExecutable(scriptPath)) {
106 | this.plugin.log(`Script is not executable and no interpreter is specified: ${scriptPath}`, 'silent');
107 | return false;
108 | }
109 | return true;
110 | }
111 |
112 | // Case 2: Interpreter is specified
113 | // The interpreter must be executable
114 | if (!this.isExecutable(interpreter)) {
115 | this.plugin.log(`Interpreter is not executable: ${interpreter}`, 'silent');
116 | return false;
117 | }
118 |
119 | // If the interpreter is specified, the script does not need to be executable
120 | return true;
121 | }
122 |
123 | private isExecutable(filePath: string): boolean {
124 | try {
125 | // On Windows, check if the file has an executable extension
126 | if (process.platform === 'win32') {
127 | const executableExtensions = ['.exe', '.bat', '.cmd'];
128 | const ext = path.extname(filePath).toLowerCase();
129 | if (!executableExtensions.includes(ext)) {
130 | // If the file doesn't have an executable extension, it's not executable
131 | return false;
132 | }
133 | }
134 | if (process.platform !== 'win32') {
135 | // On Unix-based systems, check if the file has the executable permission
136 | fs.accessSync(filePath, fs.constants.F_OK | fs.constants.X_OK);
137 | }
138 | return true;
139 | } catch (error) {
140 | // If the file doesn't exist, check if it's in the PATH
141 | if (error.code === 'ENOENT') {
142 | try {
143 | const { execSync } = require('child_process');
144 | let command: string;
145 | if (process.platform === 'win32') {
146 | // On Windows, use 'where' to check for the executable
147 | command = `where ${filePath}`;
148 | } else {
149 | // On Unix-based systems, use 'which'
150 | command = `which ${filePath}`;
151 | }
152 | execSync(command, { stdio: 'ignore' });
153 | return true;
154 | } catch (err) {
155 | return false;
156 | }
157 | }
158 | return false;
159 | }
160 | }
161 | }
--------------------------------------------------------------------------------
/src/modals/scriptExecutionModal.ts:
--------------------------------------------------------------------------------
1 | // src/modals/scriptExecutionModal.ts
2 | import { App, Modal, Setting, Notice, TextComponent } from 'obsidian';
3 | import { ScriptManager } from '../managers/scriptManager';
4 | import { PluginSettings } from '../settings/pluginSettings';
5 | import { ScriptSettings } from '../settings/scriptSettings';
6 |
7 | export class ScriptExecutionModal extends Modal {
8 | app: App;
9 | settings: PluginSettings;
10 | scriptManager: ScriptManager;
11 | selectedScript: string = '';
12 | commandPreview: HTMLElement;
13 |
14 | constructor(app: App, settings: PluginSettings, scriptManager: ScriptManager) {
15 | super(app);
16 | this.app = app;
17 | this.settings = settings;
18 | this.scriptManager = scriptManager;
19 | }
20 |
21 | onOpen() {
22 | const { contentEl } = this;
23 | contentEl.createEl('h2', { text: 'Run Script' });
24 |
25 | // Dropdown to select script
26 | const scriptDropdown = new Setting(contentEl)
27 | .setName('Select Script')
28 | .setDesc('Choose a script to run.')
29 | .addDropdown(dropdown => {
30 | Object.keys(this.settings.scripts).forEach(scriptPath => {
31 | dropdown.addOption(scriptPath, scriptPath);
32 | });
33 | dropdown.setValue('');
34 | dropdown.onChange(value => {
35 | this.selectedScript = value;
36 | this.updateCommandPreview();
37 | });
38 | });
39 |
40 | // Command Preview
41 | this.commandPreview = contentEl.createEl('p', { text: 'Command Preview: ' });
42 |
43 | // Run button
44 | new Setting(contentEl)
45 | .addButton(button => {
46 | button.setButtonText('Run Script')
47 | .onClick(async () => {
48 | const scriptConfig = this.settings.scripts[this.selectedScript];
49 | const args: string[] = await this.getArgs(scriptConfig);
50 | this.scriptManager.runScript(this.selectedScript, scriptConfig, args);
51 | this.close();
52 | });
53 | });
54 |
55 | this.updateCommandPreview();
56 | }
57 |
58 | async getArgs(scriptConfig: ScriptSettings): Promise {
59 | const args: string[] = [];
60 | // Add predefined arguments
61 | if (scriptConfig.arguments?.predefined) {
62 | args.push(...scriptConfig.arguments.predefined);
63 | }
64 | // Prompt for arguments if promptArgumentCount is set
65 | if (scriptConfig.arguments?.promptArgumentCount && scriptConfig.arguments.promptArgumentCount > 0) {
66 | for (let i = 0; i < scriptConfig.arguments.promptArgumentCount; i++) {
67 | const arg = await this.promptForArgument(i + 1);
68 | if (arg !== null) {
69 | args.push(arg);
70 | }
71 | }
72 | }
73 | return args;
74 | }
75 |
76 | async promptForArgument(index: number): Promise {
77 | return new Promise((resolve) => {
78 | const modal = new Modal(this.app);
79 | modal.titleEl.setText(`Argument ${index}`);
80 |
81 | let inputValue = '';
82 | const input = new TextComponent(modal.contentEl)
83 | .setPlaceholder('Enter argument value')
84 | .onChange((value) => {
85 | inputValue = value; // Store the input value
86 | });
87 |
88 | // Add a submit button
89 | new Setting(modal.contentEl)
90 | .addButton((btn) =>
91 | btn
92 | .setButtonText('Submit')
93 | .setCta()
94 | .onClick(() => {
95 | resolve(inputValue); // Resolve with the input value
96 | modal.close();
97 | })
98 | );
99 |
100 | modal.open();
101 | });
102 | }
103 |
104 | updateCommandPreview() {
105 | if (this.selectedScript) {
106 | const scriptConfig = this.settings.scripts[this.selectedScript];
107 | const cmd = scriptConfig.interpreter
108 | ? `${scriptConfig.interpreter} ${this.selectedScript}`
109 | : `${this.selectedScript}`;
110 | this.commandPreview.setText(`Command Preview: ${cmd}`);
111 | } else {
112 | this.commandPreview.setText('Command Preview: No script selected.');
113 | }
114 | }
115 |
116 | onClose() {
117 | this.contentEl.empty();
118 | }
119 | }
--------------------------------------------------------------------------------
/src/modals/scriptSettingsModal.ts:
--------------------------------------------------------------------------------
1 | // src/modals/scriptSettingsModal.ts
2 | import { App, Modal, Setting, Notice, TextComponent } from 'obsidian';
3 | import { ScriptSettings } from '../settings/scriptSettings';
4 | import { ScriptSettingsTab } from '../settings/scriptSettingsTab';
5 | import ScriptRunnerPlugin from '../main';
6 |
7 | export class ScriptSettingsModal extends Modal {
8 | app: App;
9 | plugin: ScriptRunnerPlugin;
10 | scriptPath: string;
11 | scriptConfig: ScriptSettings;
12 | scriptSettingsTab: ScriptSettingsTab;
13 | predefinedArgsContainer: HTMLElement; // Container for predefined arguments
14 |
15 | constructor(app: App, plugin: ScriptRunnerPlugin, scriptPath: string, scriptConfig: ScriptSettings, scriptSettingsTab: ScriptSettingsTab) {
16 | super(app);
17 | this.app = app;
18 | this.plugin = plugin;
19 | this.scriptPath = scriptPath;
20 | this.scriptConfig = scriptConfig;
21 | this.scriptSettingsTab = scriptSettingsTab;
22 | }
23 |
24 | onOpen() {
25 | const { contentEl } = this;
26 | contentEl.empty(); // Clear the modal content
27 | contentEl.createEl('h2', { text: `Settings for ${this.scriptPath}` });
28 |
29 | // Run Directory setting
30 | new Setting(contentEl)
31 | .setName('Run Directory')
32 | .setDesc('Specify the directory relative to the vault root to run the script in. (Defaults to the vault root directory)')
33 | .addText(text => {
34 | text.setValue(this.scriptConfig.runDirectory || '')
35 | .onChange(value => {
36 | this.scriptConfig.runDirectory = value;
37 | });
38 | });
39 |
40 | // Interpreter setting
41 | new Setting(contentEl)
42 | .setName('Interpreter')
43 | .setDesc('Specify the interpreter if needed. Leave blank if the script is directly executable.')
44 | .addText(text => {
45 | text.setValue(this.scriptConfig.interpreter || '')
46 | .onChange(value => {
47 | this.scriptConfig.interpreter = value;
48 | });
49 | });
50 |
51 | // Arguments settings
52 | new Setting(contentEl)
53 | .setName('Include Current File Path')
54 | .setDesc('Pass the current file\'s relative path as an argument to the script.')
55 | .addToggle(toggle => {
56 | toggle.setValue(this.scriptConfig.arguments?.currentFile || false)
57 | .onChange(value => {
58 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
59 | this.scriptConfig.arguments.currentFile = value;
60 | });
61 | });
62 |
63 | new Setting(contentEl)
64 | .setName('Include Vault Path')
65 | .setDesc('Pass the absolute path of the vault as an argument to the script.')
66 | .addToggle(toggle => {
67 | toggle.setValue(this.scriptConfig.arguments?.vaultPath || false)
68 | .onChange(value => {
69 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
70 | this.scriptConfig.arguments.vaultPath = value;
71 | });
72 | });
73 |
74 | new Setting(contentEl)
75 | .setName('Include Clipboard Contents')
76 | .setDesc('Pass the contents of the clipboard as an argument to the script.')
77 | .addToggle(toggle => {
78 | toggle.setValue(this.scriptConfig.arguments?.clipboard || false)
79 | .onChange(value => {
80 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
81 | this.scriptConfig.arguments.clipboard = value;
82 | });
83 | });
84 |
85 | new Setting(contentEl)
86 | .setName('Include Highlighted Contents')
87 | .setDesc('Pass the highlighted text as an argument to the script.')
88 | .addToggle(toggle => {
89 | toggle.setValue(this.scriptConfig.arguments?.highlight || false)
90 | .onChange(value => {
91 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
92 | this.scriptConfig.arguments.highlight = value;
93 | });
94 | });
95 |
96 | // Predefined Arguments
97 | this.predefinedArgsContainer = contentEl.createEl('div');
98 | this.predefinedArgsContainer.createEl('h3', { text: 'Predefined Arguments' });
99 |
100 | // Render existing predefined arguments
101 | this.renderPredefinedArguments();
102 |
103 | // Number of Arguments to Prompt For
104 | new Setting(contentEl)
105 | .setName('Number of Arguments to Prompt For')
106 | .setDesc('Specify the number of arguments to prompt the user for.')
107 | .addText(text => {
108 | text.setValue(this.scriptConfig.arguments?.promptArgumentCount?.toString() || '0')
109 | .onChange(value => {
110 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
111 | this.scriptConfig.arguments.promptArgumentCount = parseInt(value) || 0;
112 | });
113 | });
114 |
115 | // Run type settings
116 | new Setting(contentEl)
117 | .setName('Run Type')
118 | .setDesc('Choose how the script should be run.')
119 | .addDropdown(dropdown => {
120 | dropdown
121 | .addOption('command', 'Command')
122 | .addOption('icon', 'Ribbon Icon')
123 | .setValue(this.scriptConfig.runType || 'command')
124 | .onChange(value => {
125 | this.scriptConfig.runType = value as 'command' | 'icon';
126 | });
127 | });
128 |
129 | // Output settings
130 | new Setting(contentEl)
131 | .setName('Output Type')
132 | .setDesc('Choose how the script output should be handled.')
133 | .addDropdown(dropdown => {
134 | dropdown
135 | .addOption('notice', 'Notice')
136 | .addOption('insert', 'Insert into File')
137 | .setValue(this.scriptConfig.output?.type || 'notice')
138 | .onChange(value => {
139 | if (!this.scriptConfig.output) this.scriptConfig.output = {};
140 | this.scriptConfig.output.type = value as 'notice' | 'insert';
141 | });
142 | });
143 |
144 | new Setting(contentEl)
145 | .setName('Output Location')
146 | .setDesc('Choose where the output should be inserted in the file (if output type is "insert").')
147 | .addDropdown(dropdown => {
148 | dropdown
149 | .addOption('end', 'End of File')
150 | .addOption('cursor', 'Cursor Location')
151 | .setValue(this.scriptConfig.output?.location || 'end')
152 | .onChange(value => {
153 | if (!this.scriptConfig.output) this.scriptConfig.output = {};
154 | this.scriptConfig.output.location = value as 'end' | 'cursor';
155 | });
156 | });
157 |
158 | // Save button
159 | new Setting(contentEl)
160 | .addButton(button => {
161 | button.setButtonText('Save')
162 | .onClick(async () => {
163 | // Save the updated settings
164 | this.plugin.settings.scripts[this.scriptPath] = this.scriptConfig;
165 | await this.plugin.saveSettings();
166 | new Notice(`Settings for ${this.scriptPath} saved.`);
167 | this.close();
168 | });
169 | });
170 | }
171 |
172 | renderPredefinedArguments() {
173 | this.predefinedArgsContainer.empty(); // Clear the container
174 | this.predefinedArgsContainer.createEl('h3', { text: 'Predefined Arguments' });
175 |
176 | const predefinedArgs = this.scriptConfig.arguments?.predefined || [];
177 | predefinedArgs.forEach((arg, index) => {
178 | const setting = new Setting(this.predefinedArgsContainer)
179 | .setName(`Argument ${index + 1}`)
180 | .addText(text => {
181 | text.setValue(arg)
182 | .onChange(value => {
183 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
184 | if (!this.scriptConfig.arguments.predefined) this.scriptConfig.arguments.predefined = [];
185 | this.scriptConfig.arguments.predefined[index] = value;
186 | });
187 | });
188 |
189 | // Add a "Remove" button beside each argument
190 | setting.addButton(button => {
191 | button.setButtonText('Remove')
192 | .onClick(() => {
193 | if (!this.scriptConfig.arguments || !this.scriptConfig.arguments.predefined) return;
194 | this.scriptConfig.arguments.predefined.splice(index, 1); // Remove the argument
195 | this.renderPredefinedArguments(); // Re-render the arguments
196 | });
197 | });
198 | });
199 |
200 | new Setting(this.predefinedArgsContainer)
201 | .addButton(button => {
202 | button.setButtonText('Add Argument')
203 | .onClick(() => {
204 | if (!this.scriptConfig.arguments) this.scriptConfig.arguments = {};
205 | if (!this.scriptConfig.arguments.predefined) this.scriptConfig.arguments.predefined = [];
206 | this.scriptConfig.arguments.predefined.push('');
207 | this.renderPredefinedArguments(); // Dynamically add the new input field
208 | });
209 | });
210 | }
211 |
212 | onClose() {
213 | this.contentEl.empty();
214 | this.scriptSettingsTab.display();
215 | }
216 | }
--------------------------------------------------------------------------------
/src/settings/pluginSettings.ts:
--------------------------------------------------------------------------------
1 | // src/settings/pluginSettings.ts
2 | import { ScriptSettings } from './scriptSettings';
3 |
4 | export interface PluginSettings {
5 | scriptsFolder: string;
6 | scripts: { [key: string]: ScriptSettings };
7 | verbosity: 'verbose' | 'normal' | 'silent';
8 | }
9 |
10 | export const DEFAULT_SETTINGS: PluginSettings = {
11 | scriptsFolder: '.obsidian/scripts',
12 | scripts: {},
13 | verbosity: 'normal',
14 | };
--------------------------------------------------------------------------------
/src/settings/scriptSettings.ts:
--------------------------------------------------------------------------------
1 | // src/settings/scriptSettings.ts
2 | export interface ScriptSettings {
3 | interpreter?: string;
4 | runDirectory?: string; // Directory to run the script in
5 | arguments?: {
6 | currentFile?: boolean; // Include current file path
7 | vaultPath?: boolean; // Include vault path
8 | clipboard?: boolean; // Include clipboard contents
9 | highlight?: boolean; // Include highlighted contents
10 | predefined?: string[]; // Predefined arguments
11 | promptArgumentCount?: number; // Number of arguments to prompt for
12 | };
13 | runType?: 'command' | 'icon';
14 | output?: {
15 | type?: 'notice' | 'insert';
16 | location?: 'end' | 'cursor';
17 | };
18 | }
--------------------------------------------------------------------------------
/src/settings/scriptSettingsTab.ts:
--------------------------------------------------------------------------------
1 | // src/settings/scriptSettingsTab.ts
2 | import { App, PluginSettingTab, Setting, Notice } from 'obsidian';
3 | import ScriptRunnerPlugin from '../main';
4 | import { PluginSettings } from './pluginSettings';
5 | import { ScriptSettingsModal } from '../modals/scriptSettingsModal';
6 | import * as fs from 'fs';
7 | import * as path from 'path';
8 |
9 | export class ScriptSettingsTab extends PluginSettingTab {
10 | plugin: ScriptRunnerPlugin;
11 | constructor(app: App, plugin: ScriptRunnerPlugin) {
12 | super(app, plugin);
13 | this.plugin = plugin;
14 | }
15 |
16 | // Method to list scripts in the directory
17 | async listScripts(): Promise {
18 | const scriptsFolder = path.join(this.plugin.settings.scriptsFolder);
19 | // if the directory is an absolute path, print an error and return an empty array
20 | if (path.isAbsolute(this.plugin.settings.scriptsFolder)) {
21 | this.plugin.log(`Scripts directory path is absolute: ${this.plugin.settings.scriptsFolder}, change to local path`, 'silent');
22 | return [];
23 | }
24 | try {
25 | // Read the directory contents
26 | const items = await this.listFilesRecursive(scriptsFolder);
27 | return items;
28 | } catch (error) {
29 | this.plugin.log(`Scripts directory: ${scriptsFolder}`, 'verbose');
30 |
31 | this.plugin.log(`Error reading directory: ${error}`, 'silent');
32 | return [];
33 | }
34 | }
35 |
36 | async listFilesRecursive(dir: string): Promise {
37 | try {
38 | let results: string[] = [];
39 | let dir_spaces_escaped = dir.replace(" ", "\ ");
40 | const items = await this.plugin.app.vault.adapter.list(dir_spaces_escaped);
41 | const scriptsFolder = path.join(this.plugin.app.vault.configDir, this.plugin.settings.scriptsFolder);
42 |
43 | // Add all files from current directory
44 | results = items.files.map((file) => {
45 | // Convert absolute paths to relative paths from scripts folder
46 | return file.replace(scriptsFolder + "/", "");
47 | });
48 |
49 | // cut all .git folders
50 | items.folders = items.folders.filter((folder) => !folder.includes('.git'));
51 |
52 | // Recursively process subdirectories
53 | for (const folder of items.folders) {
54 | const subResults = await this.listFilesRecursive(folder);
55 | results = results.concat(subResults);
56 | }
57 |
58 | return results;
59 | } catch (error) {
60 | this.plugin.log(`Error scanning directory ${dir}: ${error}`, "silent");
61 | return [];
62 | }
63 | }
64 |
65 | async display(): Promise {
66 | const { containerEl } = this;
67 | containerEl.empty();
68 |
69 | // Existing settings for verbosity and scripts folder
70 | new Setting(containerEl)
71 | .setName('Verbosity')
72 | .setDesc('Set the verbosity level for logging.')
73 | .addDropdown(dropdown => {
74 | dropdown
75 | .addOption('verbose', 'Verbose')
76 | .addOption('normal', 'Normal')
77 | .addOption('silent', 'Silent')
78 | .setValue(this.plugin.settings.verbosity)
79 | .onChange(async (value: 'verbose' | 'normal' | 'silent') => {
80 | this.plugin.settings.verbosity = value;
81 | await this.plugin.saveSettings();
82 | new Notice(`Verbosity set to ${value}.`);
83 | });
84 | });
85 |
86 |
87 | new Setting(containerEl)
88 | .setName("Scripts Folder")
89 | .setDesc("Select the folder containing your scripts.")
90 | .addText((text) => {
91 | text
92 | .setValue(this.plugin.settings.scriptsFolder)
93 | .onChange(async (value) => {
94 | // Store the value but don't save yet
95 | text.inputEl.value = value;
96 | })
97 | .inputEl.addEventListener("blur", async () => {
98 | // Only save when the input loses focus
99 | const value = text.inputEl.value;
100 | this.plugin.settings.scriptsFolder = value;
101 | await this.plugin.saveSettings();
102 | new Notice("Scripts folder updated.");
103 | this.display(); // Refresh the settings tab
104 | });
105 | });
106 |
107 | // Dropdown to add a new script
108 | const scripts = await this.listScripts();
109 | this.plugin.log(`Scripts found: ${scripts}`, 'verbose');
110 | if (scripts.length > 0) {
111 | let selectedScript = '';
112 | new Setting(containerEl)
113 | .setName('Add Script')
114 | .setDesc('Select a script to add from the scripts folder.')
115 | .addDropdown(dropdown => {
116 | dropdown.addOption('', 'Select a script…');
117 | scripts.forEach(script => {
118 | if (!this.plugin.settings.scripts[script]) {
119 | dropdown.addOption(script, script);
120 | }
121 | else {
122 | this.plugin.log(`Updating Dropdown for add script, Script "${script}" already exists in settings.`, 'verbose');
123 | }
124 | });
125 | dropdown.onChange(value => {
126 | selectedScript = value;
127 |
128 | });
129 | })
130 | .addButton(button => {
131 | button.setButtonText('Add Script')
132 | .onClick(async () => {
133 | if (selectedScript === '') {
134 | return new Notice('Please select a script.');
135 | }
136 | this.plugin.log(`Attempting to add script: "${selectedScript}"`, 'verbose');
137 | if (!this.plugin.settings.scripts[selectedScript]) {
138 | this.plugin.settings.scripts[selectedScript] = {};
139 | await this.plugin.saveSettings();
140 | new Notice(`Script "${selectedScript}" added.`);
141 | this.plugin.log(`Script "${selectedScript}" added to settings.`, 'verbose');
142 | this.display(); // Refresh the settings tab
143 |
144 | } else {
145 | this.plugin.log(`Script "${selectedScript}" already exists in settings.`, 'verbose');
146 | }
147 | });
148 | });
149 |
150 | new Setting(containerEl)
151 | .setName('Remove Script')
152 | .setDesc('Select a script to remove from the available scripts.')
153 | .addDropdown(dropdown => {
154 | dropdown.addOption('', 'Select a script…');
155 | Object.keys(this.plugin.settings.scripts).forEach(script => {
156 | dropdown.addOption(script, script);
157 | });
158 | dropdown.onChange(value => {
159 | selectedScript = value;
160 | });
161 | })
162 | .addButton(button => {
163 | button.setButtonText('Remove Script')
164 | .onClick(async () => {
165 | if (selectedScript === '') {
166 | return new Notice('Please select a script.');
167 | }
168 | this.plugin.log(`Attempting to remove script: "${selectedScript}"`, 'verbose');
169 | if (this.plugin.settings.scripts[selectedScript]) {
170 | delete this.plugin.settings.scripts[selectedScript];
171 | await this.plugin.saveSettings();
172 | new Notice(`Script "${selectedScript}" removed.`);
173 | this.plugin.log(`Script "${selectedScript}" removed from settings.`, 'verbose');
174 | this.display(); // Refresh the settings tab
175 | }
176 | else {
177 | this.plugin.log(`Script "${selectedScript}" not found in settings.`, 'verbose');
178 | }
179 | });
180 | });
181 | } else {
182 | containerEl.createEl('p', { text: 'No scripts found in the specified folder.' });
183 | }
184 |
185 | // List of added scripts with command preview
186 | Object.keys(this.plugin.settings.scripts).forEach(scriptPath => {
187 | const scriptConfig = this.plugin.settings.scripts[scriptPath];
188 |
189 | // Command preview
190 | const commandPreview = scriptConfig.interpreter
191 | ? `${scriptConfig.interpreter} ${scriptPath}`
192 | : `${scriptPath}`;
193 |
194 | // Add placeholders for arguments
195 | const args: string[] = [];
196 | if (scriptConfig.arguments?.currentFile) {
197 | args.push('"[file path]"');
198 | }
199 | if (scriptConfig.arguments?.vaultPath) {
200 | args.push('"[vault path]"');
201 | }
202 | if (scriptConfig.arguments?.clipboard) {
203 | args.push('"[clipboard contents]"');
204 | }
205 | if (scriptConfig.arguments?.highlight) {
206 | args.push('"[highlighted contents]"');
207 | }
208 | if (scriptConfig.arguments?.predefined) {
209 | for (const arg of scriptConfig.arguments.predefined) {
210 | args.push(`"${arg}"`);
211 | }
212 | }
213 | if (scriptConfig.arguments?.promptArgumentCount && scriptConfig.arguments.promptArgumentCount > 0) {
214 | for (let i = 0; i < scriptConfig.arguments.promptArgumentCount; i++) {
215 | args.push(`"[prompted argument ${i + 1}]"`);
216 | }
217 | }
218 |
219 | const fullCommand = `${commandPreview} ${args.join(' ')}`;
220 |
221 | // Create a new setting for the script configuration
222 | const setting = new Setting(containerEl)
223 | .setName(`Configuration for ${scriptPath}`)
224 | .setDesc('Adjust settings for this script.')
225 | .addButton(button => {
226 | button.setButtonText('Edit Settings')
227 | .onClick(() => {
228 | new ScriptSettingsModal(this.app, this.plugin, scriptPath, scriptConfig, this).open();
229 | });
230 | });
231 |
232 | const exampleCommand = new Setting(containerEl)
233 | .setName(`Example Command for ${scriptPath}:`);
234 |
235 | // Add the command preview in its own row
236 | const commandPreviewRow = containerEl.createEl('div', {
237 | cls: 'command-preview-row',
238 | });
239 |
240 | const commandPreviewText = commandPreviewRow.createEl('textarea', {
241 | cls: 'command-preview-text',
242 | text: fullCommand,
243 | });
244 |
245 | // Apply CSS to make the textarea span the entire row and wrap or scroll
246 | commandPreviewText.style.width = '100%';
247 | commandPreviewText.style.height = 'auto';
248 | commandPreviewText.style.resize = 'vertical'; // Allow vertical resizing
249 | commandPreviewText.style.overflowY = 'auto'; // Add a vertical scrollbar if needed
250 | commandPreviewText.style.whiteSpace = 'pre-wrap'; // Allow text to wrap
251 | commandPreviewText.style.wordWrap = 'break-word'; // Break long words if necessary
252 | commandPreviewText.setAttribute('readonly', 'true'); // Make it read-only
253 | });
254 | }
255 | }
--------------------------------------------------------------------------------
/styles.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | This CSS file will be included with your plugin, and
4 | available in the app when your plugin is enabled.
5 |
6 | If your plugin does not need CSS, delete this file.
7 |
8 | */
9 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "inlineSourceMap": true,
5 | "inlineSources": true,
6 | "module": "ESNext",
7 | "target": "ES6",
8 | "allowJs": true,
9 | "noImplicitAny": true,
10 | "moduleResolution": "node",
11 | "importHelpers": true,
12 | "isolatedModules": true,
13 | "strictNullChecks": true,
14 | "lib": [
15 | "DOM",
16 | "ES5",
17 | "ES6",
18 | "ES7"
19 | ]
20 | },
21 | "include": [
22 | "**/*.ts"
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/version-bump.mjs:
--------------------------------------------------------------------------------
1 | import { readFileSync, writeFileSync } from "fs";
2 |
3 | const targetVersion = process.env.npm_package_version;
4 |
5 | // read minAppVersion from manifest.json and bump version to target version
6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8"));
7 | const { minAppVersion } = manifest;
8 | manifest.version = targetVersion;
9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t"));
10 |
11 | // update versions.json with target version and minAppVersion from manifest.json
12 | let versions = JSON.parse(readFileSync("versions.json", "utf8"));
13 | versions[targetVersion] = minAppVersion;
14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t"));
15 |
--------------------------------------------------------------------------------
/versions.json:
--------------------------------------------------------------------------------
1 | {
2 | "1.0.0": "0.15.0"
3 | }
4 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@codemirror/state@^6.0.0", "@codemirror/state@^6.5.0":
6 | version "6.5.0"
7 | resolved "https://registry.npmjs.org/@codemirror/state/-/state-6.5.0.tgz"
8 | integrity sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==
9 | dependencies:
10 | "@marijn/find-cluster-break" "^1.0.0"
11 |
12 | "@codemirror/view@^6.0.0":
13 | version "6.36.1"
14 | resolved "https://registry.npmjs.org/@codemirror/view/-/view-6.36.1.tgz"
15 | integrity sha512-miD1nyT4m4uopZaDdO2uXU/LLHliKNYL9kB1C1wJHrunHLm/rpkb5QVSokqgw9hFqEZakrdlb/VGWX8aYZTslQ==
16 | dependencies:
17 | "@codemirror/state" "^6.5.0"
18 | style-mod "^4.1.0"
19 | w3c-keyname "^2.2.4"
20 |
21 | "@esbuild/linux-x64@0.17.3":
22 | version "0.17.3"
23 | resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz"
24 | integrity sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg==
25 |
26 | "@esbuild/win32-x64@0.17.3":
27 | version "0.17.3"
28 | resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz"
29 | integrity sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g==
30 |
31 | "@eslint-community/eslint-utils@^4.2.0":
32 | version "4.4.1"
33 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz"
34 | integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
35 | dependencies:
36 | eslint-visitor-keys "^3.4.3"
37 |
38 | "@eslint-community/regexpp@^4.6.1":
39 | version "4.12.1"
40 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz"
41 | integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
42 |
43 | "@eslint/eslintrc@^2.1.4":
44 | version "2.1.4"
45 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz"
46 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
47 | dependencies:
48 | ajv "^6.12.4"
49 | debug "^4.3.2"
50 | espree "^9.6.0"
51 | globals "^13.19.0"
52 | ignore "^5.2.0"
53 | import-fresh "^3.2.1"
54 | js-yaml "^4.1.0"
55 | minimatch "^3.1.2"
56 | strip-json-comments "^3.1.1"
57 |
58 | "@eslint/js@8.57.1":
59 | version "8.57.1"
60 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz"
61 | integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
62 |
63 | "@humanwhocodes/config-array@^0.13.0":
64 | version "0.13.0"
65 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz"
66 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
67 | dependencies:
68 | "@humanwhocodes/object-schema" "^2.0.3"
69 | debug "^4.3.1"
70 | minimatch "^3.0.5"
71 |
72 | "@humanwhocodes/module-importer@^1.0.1":
73 | version "1.0.1"
74 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
75 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
76 |
77 | "@humanwhocodes/object-schema@^2.0.3":
78 | version "2.0.3"
79 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
80 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
81 |
82 | "@marijn/find-cluster-break@^1.0.0":
83 | version "1.0.2"
84 | resolved "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz"
85 | integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==
86 |
87 | "@nodelib/fs.scandir@2.1.5":
88 | version "2.1.5"
89 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
90 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
91 | dependencies:
92 | "@nodelib/fs.stat" "2.0.5"
93 | run-parallel "^1.1.9"
94 |
95 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
96 | version "2.0.5"
97 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
98 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
99 |
100 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
101 | version "1.2.8"
102 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
103 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
104 | dependencies:
105 | "@nodelib/fs.scandir" "2.1.5"
106 | fastq "^1.6.0"
107 |
108 | "@types/codemirror@5.60.8":
109 | version "5.60.8"
110 | resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz"
111 | integrity sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==
112 | dependencies:
113 | "@types/tern" "*"
114 |
115 | "@types/estree@*":
116 | version "1.0.6"
117 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz"
118 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
119 |
120 | "@types/json-schema@^7.0.9":
121 | version "7.0.15"
122 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
123 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
124 |
125 | "@types/node@^16.11.6":
126 | version "16.18.122"
127 | resolved "https://registry.npmjs.org/@types/node/-/node-16.18.122.tgz"
128 | integrity sha512-rF6rUBS80n4oK16EW8nE75U+9fw0SSUgoPtWSvHhPXdT7itbvmS7UjB/jyM8i3AkvI6yeSM5qCwo+xN0npGDHg==
129 |
130 | "@types/tern@*":
131 | version "0.23.9"
132 | resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz"
133 | integrity sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==
134 | dependencies:
135 | "@types/estree" "*"
136 |
137 | "@typescript-eslint/eslint-plugin@5.29.0":
138 | version "5.29.0"
139 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz"
140 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==
141 | dependencies:
142 | "@typescript-eslint/scope-manager" "5.29.0"
143 | "@typescript-eslint/type-utils" "5.29.0"
144 | "@typescript-eslint/utils" "5.29.0"
145 | debug "^4.3.4"
146 | functional-red-black-tree "^1.0.1"
147 | ignore "^5.2.0"
148 | regexpp "^3.2.0"
149 | semver "^7.3.7"
150 | tsutils "^3.21.0"
151 |
152 | "@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.29.0":
153 | version "5.29.0"
154 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz"
155 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==
156 | dependencies:
157 | "@typescript-eslint/scope-manager" "5.29.0"
158 | "@typescript-eslint/types" "5.29.0"
159 | "@typescript-eslint/typescript-estree" "5.29.0"
160 | debug "^4.3.4"
161 |
162 | "@typescript-eslint/scope-manager@5.29.0":
163 | version "5.29.0"
164 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz"
165 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==
166 | dependencies:
167 | "@typescript-eslint/types" "5.29.0"
168 | "@typescript-eslint/visitor-keys" "5.29.0"
169 |
170 | "@typescript-eslint/type-utils@5.29.0":
171 | version "5.29.0"
172 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz"
173 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==
174 | dependencies:
175 | "@typescript-eslint/utils" "5.29.0"
176 | debug "^4.3.4"
177 | tsutils "^3.21.0"
178 |
179 | "@typescript-eslint/types@5.29.0":
180 | version "5.29.0"
181 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz"
182 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==
183 |
184 | "@typescript-eslint/typescript-estree@5.29.0":
185 | version "5.29.0"
186 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz"
187 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==
188 | dependencies:
189 | "@typescript-eslint/types" "5.29.0"
190 | "@typescript-eslint/visitor-keys" "5.29.0"
191 | debug "^4.3.4"
192 | globby "^11.1.0"
193 | is-glob "^4.0.3"
194 | semver "^7.3.7"
195 | tsutils "^3.21.0"
196 |
197 | "@typescript-eslint/utils@5.29.0":
198 | version "5.29.0"
199 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz"
200 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==
201 | dependencies:
202 | "@types/json-schema" "^7.0.9"
203 | "@typescript-eslint/scope-manager" "5.29.0"
204 | "@typescript-eslint/types" "5.29.0"
205 | "@typescript-eslint/typescript-estree" "5.29.0"
206 | eslint-scope "^5.1.1"
207 | eslint-utils "^3.0.0"
208 |
209 | "@typescript-eslint/visitor-keys@5.29.0":
210 | version "5.29.0"
211 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz"
212 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==
213 | dependencies:
214 | "@typescript-eslint/types" "5.29.0"
215 | eslint-visitor-keys "^3.3.0"
216 |
217 | "@ungap/structured-clone@^1.2.0":
218 | version "1.2.1"
219 | resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz"
220 | integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==
221 |
222 | acorn-jsx@^5.3.2:
223 | version "5.3.2"
224 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
225 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
226 |
227 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0:
228 | version "8.14.0"
229 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz"
230 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
231 |
232 | ajv@^6.12.4:
233 | version "6.12.6"
234 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
235 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
236 | dependencies:
237 | fast-deep-equal "^3.1.1"
238 | fast-json-stable-stringify "^2.0.0"
239 | json-schema-traverse "^0.4.1"
240 | uri-js "^4.2.2"
241 |
242 | ansi-regex@^5.0.1:
243 | version "5.0.1"
244 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
245 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
246 |
247 | ansi-styles@^4.1.0:
248 | version "4.3.0"
249 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
250 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
251 | dependencies:
252 | color-convert "^2.0.1"
253 |
254 | argparse@^2.0.1:
255 | version "2.0.1"
256 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
257 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
258 |
259 | array-union@^2.1.0:
260 | version "2.1.0"
261 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
262 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
263 |
264 | balanced-match@^1.0.0:
265 | version "1.0.2"
266 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
267 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
268 |
269 | brace-expansion@^1.1.7:
270 | version "1.1.11"
271 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
272 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
273 | dependencies:
274 | balanced-match "^1.0.0"
275 | concat-map "0.0.1"
276 |
277 | braces@^3.0.3:
278 | version "3.0.3"
279 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
280 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
281 | dependencies:
282 | fill-range "^7.1.1"
283 |
284 | builtin-modules@3.3.0:
285 | version "3.3.0"
286 | resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz"
287 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
288 |
289 | callsites@^3.0.0:
290 | version "3.1.0"
291 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
292 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
293 |
294 | chalk@^4.0.0:
295 | version "4.1.2"
296 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
297 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
298 | dependencies:
299 | ansi-styles "^4.1.0"
300 | supports-color "^7.1.0"
301 |
302 | color-convert@^2.0.1:
303 | version "2.0.1"
304 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
305 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
306 | dependencies:
307 | color-name "~1.1.4"
308 |
309 | color-name@~1.1.4:
310 | version "1.1.4"
311 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
312 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
313 |
314 | concat-map@0.0.1:
315 | version "0.0.1"
316 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
317 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
318 |
319 | cross-spawn@^7.0.2:
320 | version "7.0.6"
321 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
322 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
323 | dependencies:
324 | path-key "^3.1.0"
325 | shebang-command "^2.0.0"
326 | which "^2.0.1"
327 |
328 | debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
329 | version "4.4.0"
330 | resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
331 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
332 | dependencies:
333 | ms "^2.1.3"
334 |
335 | deep-is@^0.1.3:
336 | version "0.1.4"
337 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
338 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
339 |
340 | dir-glob@^3.0.1:
341 | version "3.0.1"
342 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
343 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
344 | dependencies:
345 | path-type "^4.0.0"
346 |
347 | doctrine@^3.0.0:
348 | version "3.0.0"
349 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
350 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
351 | dependencies:
352 | esutils "^2.0.2"
353 |
354 | esbuild@0.17.3:
355 | version "0.17.3"
356 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz"
357 | integrity sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==
358 | optionalDependencies:
359 | "@esbuild/android-arm" "0.17.3"
360 | "@esbuild/android-arm64" "0.17.3"
361 | "@esbuild/android-x64" "0.17.3"
362 | "@esbuild/darwin-arm64" "0.17.3"
363 | "@esbuild/darwin-x64" "0.17.3"
364 | "@esbuild/freebsd-arm64" "0.17.3"
365 | "@esbuild/freebsd-x64" "0.17.3"
366 | "@esbuild/linux-arm" "0.17.3"
367 | "@esbuild/linux-arm64" "0.17.3"
368 | "@esbuild/linux-ia32" "0.17.3"
369 | "@esbuild/linux-loong64" "0.17.3"
370 | "@esbuild/linux-mips64el" "0.17.3"
371 | "@esbuild/linux-ppc64" "0.17.3"
372 | "@esbuild/linux-riscv64" "0.17.3"
373 | "@esbuild/linux-s390x" "0.17.3"
374 | "@esbuild/linux-x64" "0.17.3"
375 | "@esbuild/netbsd-x64" "0.17.3"
376 | "@esbuild/openbsd-x64" "0.17.3"
377 | "@esbuild/sunos-x64" "0.17.3"
378 | "@esbuild/win32-arm64" "0.17.3"
379 | "@esbuild/win32-ia32" "0.17.3"
380 | "@esbuild/win32-x64" "0.17.3"
381 |
382 | escape-string-regexp@^4.0.0:
383 | version "4.0.0"
384 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
385 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
386 |
387 | eslint-scope@^5.1.1:
388 | version "5.1.1"
389 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"
390 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
391 | dependencies:
392 | esrecurse "^4.3.0"
393 | estraverse "^4.1.1"
394 |
395 | eslint-scope@^7.2.2:
396 | version "7.2.2"
397 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
398 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
399 | dependencies:
400 | esrecurse "^4.3.0"
401 | estraverse "^5.2.0"
402 |
403 | eslint-utils@^3.0.0:
404 | version "3.0.0"
405 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz"
406 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
407 | dependencies:
408 | eslint-visitor-keys "^2.0.0"
409 |
410 | eslint-visitor-keys@^2.0.0:
411 | version "2.1.0"
412 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
413 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
414 |
415 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
416 | version "3.4.3"
417 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
418 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
419 |
420 | eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@>=5:
421 | version "8.57.1"
422 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
423 | integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
424 | dependencies:
425 | "@eslint-community/eslint-utils" "^4.2.0"
426 | "@eslint-community/regexpp" "^4.6.1"
427 | "@eslint/eslintrc" "^2.1.4"
428 | "@eslint/js" "8.57.1"
429 | "@humanwhocodes/config-array" "^0.13.0"
430 | "@humanwhocodes/module-importer" "^1.0.1"
431 | "@nodelib/fs.walk" "^1.2.8"
432 | "@ungap/structured-clone" "^1.2.0"
433 | ajv "^6.12.4"
434 | chalk "^4.0.0"
435 | cross-spawn "^7.0.2"
436 | debug "^4.3.2"
437 | doctrine "^3.0.0"
438 | escape-string-regexp "^4.0.0"
439 | eslint-scope "^7.2.2"
440 | eslint-visitor-keys "^3.4.3"
441 | espree "^9.6.1"
442 | esquery "^1.4.2"
443 | esutils "^2.0.2"
444 | fast-deep-equal "^3.1.3"
445 | file-entry-cache "^6.0.1"
446 | find-up "^5.0.0"
447 | glob-parent "^6.0.2"
448 | globals "^13.19.0"
449 | graphemer "^1.4.0"
450 | ignore "^5.2.0"
451 | imurmurhash "^0.1.4"
452 | is-glob "^4.0.0"
453 | is-path-inside "^3.0.3"
454 | js-yaml "^4.1.0"
455 | json-stable-stringify-without-jsonify "^1.0.1"
456 | levn "^0.4.1"
457 | lodash.merge "^4.6.2"
458 | minimatch "^3.1.2"
459 | natural-compare "^1.4.0"
460 | optionator "^0.9.3"
461 | strip-ansi "^6.0.1"
462 | text-table "^0.2.0"
463 |
464 | espree@^9.6.0, espree@^9.6.1:
465 | version "9.6.1"
466 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
467 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
468 | dependencies:
469 | acorn "^8.9.0"
470 | acorn-jsx "^5.3.2"
471 | eslint-visitor-keys "^3.4.1"
472 |
473 | esquery@^1.4.2:
474 | version "1.6.0"
475 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz"
476 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
477 | dependencies:
478 | estraverse "^5.1.0"
479 |
480 | esrecurse@^4.3.0:
481 | version "4.3.0"
482 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
483 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
484 | dependencies:
485 | estraverse "^5.2.0"
486 |
487 | estraverse@^4.1.1:
488 | version "4.3.0"
489 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
490 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
491 |
492 | estraverse@^5.1.0:
493 | version "5.3.0"
494 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
495 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
496 |
497 | estraverse@^5.2.0:
498 | version "5.3.0"
499 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
500 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
501 |
502 | esutils@^2.0.2:
503 | version "2.0.3"
504 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
505 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
506 |
507 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
508 | version "3.1.3"
509 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
510 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
511 |
512 | fast-glob@^3.2.9:
513 | version "3.3.2"
514 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz"
515 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
516 | dependencies:
517 | "@nodelib/fs.stat" "^2.0.2"
518 | "@nodelib/fs.walk" "^1.2.3"
519 | glob-parent "^5.1.2"
520 | merge2 "^1.3.0"
521 | micromatch "^4.0.4"
522 |
523 | fast-json-stable-stringify@^2.0.0:
524 | version "2.1.0"
525 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
526 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
527 |
528 | fast-levenshtein@^2.0.6:
529 | version "2.0.6"
530 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
531 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
532 |
533 | fastq@^1.6.0:
534 | version "1.18.0"
535 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz"
536 | integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==
537 | dependencies:
538 | reusify "^1.0.4"
539 |
540 | file-entry-cache@^6.0.1:
541 | version "6.0.1"
542 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
543 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
544 | dependencies:
545 | flat-cache "^3.0.4"
546 |
547 | fill-range@^7.1.1:
548 | version "7.1.1"
549 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
550 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
551 | dependencies:
552 | to-regex-range "^5.0.1"
553 |
554 | find-up@^5.0.0:
555 | version "5.0.0"
556 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
557 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
558 | dependencies:
559 | locate-path "^6.0.0"
560 | path-exists "^4.0.0"
561 |
562 | flat-cache@^3.0.4:
563 | version "3.2.0"
564 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz"
565 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
566 | dependencies:
567 | flatted "^3.2.9"
568 | keyv "^4.5.3"
569 | rimraf "^3.0.2"
570 |
571 | flatted@^3.2.9:
572 | version "3.3.2"
573 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz"
574 | integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==
575 |
576 | fs.realpath@^1.0.0:
577 | version "1.0.0"
578 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
579 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
580 |
581 | functional-red-black-tree@^1.0.1:
582 | version "1.0.1"
583 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
584 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
585 |
586 | glob-parent@^5.1.2:
587 | version "5.1.2"
588 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
589 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
590 | dependencies:
591 | is-glob "^4.0.1"
592 |
593 | glob-parent@^6.0.2:
594 | version "6.0.2"
595 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
596 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
597 | dependencies:
598 | is-glob "^4.0.3"
599 |
600 | glob@^7.1.3:
601 | version "7.2.3"
602 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
603 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
604 | dependencies:
605 | fs.realpath "^1.0.0"
606 | inflight "^1.0.4"
607 | inherits "2"
608 | minimatch "^3.1.1"
609 | once "^1.3.0"
610 | path-is-absolute "^1.0.0"
611 |
612 | globals@^13.19.0:
613 | version "13.24.0"
614 | resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz"
615 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
616 | dependencies:
617 | type-fest "^0.20.2"
618 |
619 | globby@^11.1.0:
620 | version "11.1.0"
621 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
622 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
623 | dependencies:
624 | array-union "^2.1.0"
625 | dir-glob "^3.0.1"
626 | fast-glob "^3.2.9"
627 | ignore "^5.2.0"
628 | merge2 "^1.4.1"
629 | slash "^3.0.0"
630 |
631 | graphemer@^1.4.0:
632 | version "1.4.0"
633 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
634 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
635 |
636 | has-flag@^4.0.0:
637 | version "4.0.0"
638 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
639 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
640 |
641 | ignore@^5.2.0:
642 | version "5.3.2"
643 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
644 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
645 |
646 | import-fresh@^3.2.1:
647 | version "3.3.0"
648 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
649 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
650 | dependencies:
651 | parent-module "^1.0.0"
652 | resolve-from "^4.0.0"
653 |
654 | imurmurhash@^0.1.4:
655 | version "0.1.4"
656 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
657 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
658 |
659 | inflight@^1.0.4:
660 | version "1.0.6"
661 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
662 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
663 | dependencies:
664 | once "^1.3.0"
665 | wrappy "1"
666 |
667 | inherits@2:
668 | version "2.0.4"
669 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
670 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
671 |
672 | is-extglob@^2.1.1:
673 | version "2.1.1"
674 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
675 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
676 |
677 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
678 | version "4.0.3"
679 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
680 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
681 | dependencies:
682 | is-extglob "^2.1.1"
683 |
684 | is-number@^7.0.0:
685 | version "7.0.0"
686 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
687 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
688 |
689 | is-path-inside@^3.0.3:
690 | version "3.0.3"
691 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
692 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
693 |
694 | isexe@^2.0.0:
695 | version "2.0.0"
696 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
697 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
698 |
699 | js-yaml@^4.1.0:
700 | version "4.1.0"
701 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
702 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
703 | dependencies:
704 | argparse "^2.0.1"
705 |
706 | json-buffer@3.0.1:
707 | version "3.0.1"
708 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
709 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
710 |
711 | json-schema-traverse@^0.4.1:
712 | version "0.4.1"
713 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
714 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
715 |
716 | json-stable-stringify-without-jsonify@^1.0.1:
717 | version "1.0.1"
718 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
719 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
720 |
721 | keyv@^4.5.3:
722 | version "4.5.4"
723 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
724 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
725 | dependencies:
726 | json-buffer "3.0.1"
727 |
728 | levn@^0.4.1:
729 | version "0.4.1"
730 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
731 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
732 | dependencies:
733 | prelude-ls "^1.2.1"
734 | type-check "~0.4.0"
735 |
736 | locate-path@^6.0.0:
737 | version "6.0.0"
738 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
739 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
740 | dependencies:
741 | p-locate "^5.0.0"
742 |
743 | lodash.merge@^4.6.2:
744 | version "4.6.2"
745 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
746 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
747 |
748 | merge2@^1.3.0, merge2@^1.4.1:
749 | version "1.4.1"
750 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
751 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
752 |
753 | micromatch@^4.0.4:
754 | version "4.0.8"
755 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
756 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
757 | dependencies:
758 | braces "^3.0.3"
759 | picomatch "^2.3.1"
760 |
761 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
762 | version "3.1.2"
763 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
764 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
765 | dependencies:
766 | brace-expansion "^1.1.7"
767 |
768 | moment@2.29.4:
769 | version "2.29.4"
770 | resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
771 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
772 |
773 | ms@^2.1.3:
774 | version "2.1.3"
775 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
776 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
777 |
778 | natural-compare@^1.4.0:
779 | version "1.4.0"
780 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
781 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
782 |
783 | obsidian@^1.7.2:
784 | version "1.7.2"
785 | resolved "https://registry.npmjs.org/obsidian/-/obsidian-1.7.2.tgz"
786 | integrity sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==
787 | dependencies:
788 | "@types/codemirror" "5.60.8"
789 | moment "2.29.4"
790 |
791 | once@^1.3.0:
792 | version "1.4.0"
793 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
794 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
795 | dependencies:
796 | wrappy "1"
797 |
798 | optionator@^0.9.3:
799 | version "0.9.4"
800 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
801 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
802 | dependencies:
803 | deep-is "^0.1.3"
804 | fast-levenshtein "^2.0.6"
805 | levn "^0.4.1"
806 | prelude-ls "^1.2.1"
807 | type-check "^0.4.0"
808 | word-wrap "^1.2.5"
809 |
810 | p-limit@^3.0.2:
811 | version "3.1.0"
812 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
813 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
814 | dependencies:
815 | yocto-queue "^0.1.0"
816 |
817 | p-locate@^5.0.0:
818 | version "5.0.0"
819 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
820 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
821 | dependencies:
822 | p-limit "^3.0.2"
823 |
824 | parent-module@^1.0.0:
825 | version "1.0.1"
826 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
827 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
828 | dependencies:
829 | callsites "^3.0.0"
830 |
831 | path-exists@^4.0.0:
832 | version "4.0.0"
833 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
834 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
835 |
836 | path-is-absolute@^1.0.0:
837 | version "1.0.1"
838 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
839 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
840 |
841 | path-key@^3.1.0:
842 | version "3.1.1"
843 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
844 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
845 |
846 | path-type@^4.0.0:
847 | version "4.0.0"
848 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
849 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
850 |
851 | picomatch@^2.3.1:
852 | version "2.3.1"
853 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
854 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
855 |
856 | prelude-ls@^1.2.1:
857 | version "1.2.1"
858 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
859 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
860 |
861 | punycode@^2.1.0:
862 | version "2.3.1"
863 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
864 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
865 |
866 | queue-microtask@^1.2.2:
867 | version "1.2.3"
868 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
869 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
870 |
871 | regexpp@^3.2.0:
872 | version "3.2.0"
873 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz"
874 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
875 |
876 | resolve-from@^4.0.0:
877 | version "4.0.0"
878 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
879 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
880 |
881 | reusify@^1.0.4:
882 | version "1.0.4"
883 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
884 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
885 |
886 | rimraf@^3.0.2:
887 | version "3.0.2"
888 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
889 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
890 | dependencies:
891 | glob "^7.1.3"
892 |
893 | run-parallel@^1.1.9:
894 | version "1.2.0"
895 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
896 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
897 | dependencies:
898 | queue-microtask "^1.2.2"
899 |
900 | semver@^7.3.7:
901 | version "7.6.3"
902 | resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz"
903 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
904 |
905 | shebang-command@^2.0.0:
906 | version "2.0.0"
907 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
908 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
909 | dependencies:
910 | shebang-regex "^3.0.0"
911 |
912 | shebang-regex@^3.0.0:
913 | version "3.0.0"
914 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
915 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
916 |
917 | slash@^3.0.0:
918 | version "3.0.0"
919 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
920 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
921 |
922 | strip-ansi@^6.0.1:
923 | version "6.0.1"
924 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
925 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
926 | dependencies:
927 | ansi-regex "^5.0.1"
928 |
929 | strip-json-comments@^3.1.1:
930 | version "3.1.1"
931 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
932 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
933 |
934 | style-mod@^4.1.0:
935 | version "4.1.2"
936 | resolved "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz"
937 | integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==
938 |
939 | supports-color@^7.1.0:
940 | version "7.2.0"
941 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
942 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
943 | dependencies:
944 | has-flag "^4.0.0"
945 |
946 | text-table@^0.2.0:
947 | version "0.2.0"
948 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
949 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
950 |
951 | to-regex-range@^5.0.1:
952 | version "5.0.1"
953 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
954 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
955 | dependencies:
956 | is-number "^7.0.0"
957 |
958 | tslib@^1.8.1:
959 | version "1.14.1"
960 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
961 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
962 |
963 | tslib@2.4.0:
964 | version "2.4.0"
965 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz"
966 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
967 |
968 | tsutils@^3.21.0:
969 | version "3.21.0"
970 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
971 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
972 | dependencies:
973 | tslib "^1.8.1"
974 |
975 | type-check@^0.4.0, type-check@~0.4.0:
976 | version "0.4.0"
977 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
978 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
979 | dependencies:
980 | prelude-ls "^1.2.1"
981 |
982 | type-fest@^0.20.2:
983 | version "0.20.2"
984 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
985 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
986 |
987 | "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", typescript@4.7.4:
988 | version "4.7.4"
989 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz"
990 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
991 |
992 | uri-js@^4.2.2:
993 | version "4.4.1"
994 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
995 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
996 | dependencies:
997 | punycode "^2.1.0"
998 |
999 | w3c-keyname@^2.2.4:
1000 | version "2.2.8"
1001 | resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz"
1002 | integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
1003 |
1004 | which@^2.0.1:
1005 | version "2.0.2"
1006 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
1007 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1008 | dependencies:
1009 | isexe "^2.0.0"
1010 |
1011 | word-wrap@^1.2.5:
1012 | version "1.2.5"
1013 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
1014 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
1015 |
1016 | wrappy@1:
1017 | version "1.0.2"
1018 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
1019 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1020 |
1021 | yocto-queue@^0.1.0:
1022 | version "0.1.0"
1023 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
1024 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1025 |
--------------------------------------------------------------------------------