├── .eslintignore
├── .eslintrc
├── .github
└── workflows
│ ├── codeql-analysis.yml
│ └── node.js.yml
├── .gitignore
├── .npmignore
├── .travis.yml
├── LICENSE
├── README.md
├── dist
└── index.js
├── package-lock.json
├── package.json
├── src
└── index.js
├── stuff
└── AppIcon-readme.png
└── tests
├── benchmarker.js
├── data
├── json-metadata-v1.js
├── json-metadata-v2.js
└── json-metadata-v3.js
├── index.js
└── performance.js
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/*
2 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parserOptions": {
3 | "ecmaVersion": 2019
4 | },
5 | "env": {
6 | "es6": true,
7 | "mocha": true,
8 | "node": true
9 | },
10 | "globals": {
11 | "document": false,
12 | "navigator": false,
13 | "window": false
14 | },
15 | "extends": [
16 | "plugin:prettier/recommended"
17 | ],
18 | "plugins": [
19 | "jsdoc"
20 | ],
21 | "rules": {
22 | "func-names": "error",
23 | "global-require": "error",
24 | "id-length": [
25 | "error",
26 | {
27 | "exceptions": [
28 | "i",
29 | "j",
30 | "x",
31 | "y",
32 | "z"
33 | ],
34 | "min": 2,
35 | "properties": "never"
36 | }
37 | ],
38 | "jsdoc/check-param-names": "error",
39 | "jsdoc/check-tag-names": "error",
40 | "jsdoc/check-types": "error",
41 | "jsdoc/newline-after-description": "error",
42 | "jsdoc/require-description-complete-sentence": "error",
43 | "jsdoc/require-param": "error",
44 | "jsdoc/require-param-description": "error",
45 | "jsdoc/require-param-type": "error",
46 | "jsdoc/require-returns-description": "error",
47 | "jsdoc/require-returns-type": "error",
48 | "no-mixed-operators": [
49 | "error",
50 | {
51 | "allowSamePrecedence": true
52 | }
53 | ],
54 | "no-underscore-dangle": [
55 | "error",
56 | {
57 | "allow": [
58 | "__config",
59 | "__setMockValues"
60 | ]
61 | }
62 | ],
63 | "prettier/prettier": [
64 | "error",
65 | {
66 | "printWidth": 120,
67 | "singleQuote": true,
68 | "trailingComma": "all"
69 | }
70 | ]
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/.github/workflows/codeql-analysis.yml:
--------------------------------------------------------------------------------
1 | # For most projects, this workflow file will not need changing; you simply need
2 | # to commit it to your repository.
3 | #
4 | # You may wish to alter this file to override the set of languages analyzed,
5 | # or to provide custom queries or build logic.
6 | #
7 | # ******** NOTE ********
8 | # We have attempted to detect the languages in your repository. Please check
9 | # the `language` matrix defined below to confirm you have the correct set of
10 | # supported CodeQL languages.
11 | #
12 | name: "CodeQL"
13 |
14 | on:
15 | push:
16 | branches: [master]
17 | pull_request:
18 | # The branches below must be a subset of the branches above
19 | branches: [master]
20 | schedule:
21 | # Runs Saturdays at 4:44 pm
22 | - cron: "44 16 1-7 * 6"
23 |
24 | jobs:
25 | analyze:
26 | name: Analyze
27 | runs-on: ubuntu-latest
28 | permissions:
29 | actions: read
30 | contents: read
31 | security-events: write
32 |
33 | strategy:
34 | fail-fast: false
35 | matrix:
36 | language: ["javascript"]
37 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
38 | # Learn more:
39 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
40 |
41 | steps:
42 | - name: Checkout repository
43 | uses: actions/checkout@v3
44 |
45 | # Initializes the CodeQL tools for scanning.
46 | - name: Initialize CodeQL
47 | uses: github/codeql-action/init@v2
48 | with:
49 | languages: ${{ matrix.language }}
50 | # If you wish to specify custom queries, you can do so here or in a config file.
51 | # By default, queries listed here will override any specified in a config file.
52 | # Prefix the list here with "+" to use these queries and those in the config file.
53 | # queries: ./path/to/local/query, your-org/your-repo/queries@main
54 |
55 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
56 | # If this step fails, then you should remove it and run the build manually (see below)
57 | - name: Autobuild
58 | uses: github/codeql-action/autobuild@v2
59 |
60 | # ℹ️ Command-line programs to run using the OS shell.
61 | # 📚 https://git.io/JvXDl
62 |
63 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
64 | # and modify them (or add more) to build your code if your project
65 | # uses a compiled language
66 |
67 | #- run: |
68 | # make bootstrap
69 | # make release
70 |
71 | - name: Perform CodeQL Analysis
72 | uses: github/codeql-action/analyze@v2
73 |
--------------------------------------------------------------------------------
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and lints
2 |
3 | name: Lint
4 |
5 | on: [pull_request]
6 |
7 | jobs:
8 | lint:
9 | runs-on: ubuntu-latest
10 |
11 | steps:
12 | - uses: actions/checkout@v3
13 | - name: Use Node.js 16.x
14 | uses: actions/setup-node@v3
15 | with:
16 | node-version: "16.x"
17 | - run: npm ci --no-optional
18 | - run: npm run lint
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | *.log
3 |
4 | # Editors
5 | .vscode
6 |
7 | # Dependency directory
8 | node_modules
9 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .travis.yml
2 | tests
3 | src
4 | .eslintrc
5 | .eslintignore
6 | .gitignore
7 | .github
8 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - node
4 | - lts/*
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Gary Chisholm
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
diffler
4 |
5 | A recursive JSON comparison script for humans
6 |
7 |
8 |
9 |
10 |
11 | ## Motivation
12 |
13 | To compare JSON objects containing asset metadata for a digital library. Upon change of any metadata, we'd store these changes as an audit trail and email asset stakeholders for review and approval of the changes.
14 |
15 | ## Dependencies
16 |
17 | diffler is written with Node v12 in mind.
18 | Tests depend on [Mocha](https://mochajs.org/).
19 |
20 | ## Usage
21 |
22 | [](https://www.npmjs.com/package/diffler)
23 |
24 | ```bash
25 | npm install diffler
26 | ```
27 |
28 | ### Params
29 |
30 | `obj1` and `obj2` are two JSON objects for comparison.
31 |
32 | ### Return
33 |
34 | If same: returns `{}` _(empty object)_
35 |
36 | If different: A JSON object with preserved path structure. The resulting values will be an object with `from` and `to` fields.
37 |
38 | ### Example
39 |
40 | ```js
41 | const diffler = require("diffler");
42 |
43 | const before = { name: "omgaz", location: "London" };
44 | const after = { name: "omgaz", location: "Melbourne" };
45 |
46 | const difference = diffler(before, after);
47 | console.log(difference); // { location: { from: "London", to: "Melbourne" } }
48 | ```
49 |
50 | ## Tests
51 |
52 | [](https://travis-ci.org/omgaz/diffler)
53 |
54 | If you'd like to run tests, check out the whole project. You'll need NodeJS installed. Tests use Mocha.
55 |
56 | ```bash
57 | npm install
58 | npm test
59 | ```
60 |
--------------------------------------------------------------------------------
/dist/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @license MIT https://github.com/omgaz/diffler
3 | * Author: Gary Chisholm @omgaz
4 | */
5 | const isPlainObject=r=>r&&"object"==typeof r&&!Array.isArray(r),isValidProperty=(r,e)=>Object.prototype.hasOwnProperty.call(r,e)&&"function"!=typeof r[e],compareValues=(e,t)=>{if(typeof e!=typeof t)return{from:e,to:t};if(Array.isArray(e)&&Array.isArray(t)){var o={},l=Math.max(e.length,t.length);for(let r=0;r=16.0.0"
53 | },
54 | "funding": {
55 | "url": "https://opencollective.com/eslint"
56 | }
57 | },
58 | "node_modules/@humanwhocodes/config-array": {
59 | "version": "0.10.5",
60 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz",
61 | "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==",
62 | "dev": true,
63 | "dependencies": {
64 | "@humanwhocodes/object-schema": "^1.2.1",
65 | "debug": "^4.1.1",
66 | "minimatch": "^3.0.4"
67 | },
68 | "engines": {
69 | "node": ">=10.10.0"
70 | }
71 | },
72 | "node_modules/@humanwhocodes/gitignore-to-minimatch": {
73 | "version": "1.0.2",
74 | "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
75 | "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
76 | "dev": true,
77 | "funding": {
78 | "type": "github",
79 | "url": "https://github.com/sponsors/nzakas"
80 | }
81 | },
82 | "node_modules/@humanwhocodes/module-importer": {
83 | "version": "1.0.1",
84 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
85 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
86 | "dev": true,
87 | "engines": {
88 | "node": ">=12.22"
89 | },
90 | "funding": {
91 | "type": "github",
92 | "url": "https://github.com/sponsors/nzakas"
93 | }
94 | },
95 | "node_modules/@humanwhocodes/object-schema": {
96 | "version": "1.2.1",
97 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
98 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
99 | "dev": true
100 | },
101 | "node_modules/@nodelib/fs.scandir": {
102 | "version": "2.1.5",
103 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
104 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
105 | "dev": true,
106 | "dependencies": {
107 | "@nodelib/fs.stat": "2.0.5",
108 | "run-parallel": "^1.1.9"
109 | },
110 | "engines": {
111 | "node": ">= 8"
112 | }
113 | },
114 | "node_modules/@nodelib/fs.stat": {
115 | "version": "2.0.5",
116 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
117 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
118 | "dev": true,
119 | "engines": {
120 | "node": ">= 8"
121 | }
122 | },
123 | "node_modules/@nodelib/fs.walk": {
124 | "version": "1.2.8",
125 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
126 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
127 | "dev": true,
128 | "dependencies": {
129 | "@nodelib/fs.scandir": "2.1.5",
130 | "fastq": "^1.6.0"
131 | },
132 | "engines": {
133 | "node": ">= 8"
134 | }
135 | },
136 | "node_modules/acorn": {
137 | "version": "8.8.0",
138 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
139 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
140 | "dev": true,
141 | "bin": {
142 | "acorn": "bin/acorn"
143 | },
144 | "engines": {
145 | "node": ">=0.4.0"
146 | }
147 | },
148 | "node_modules/acorn-jsx": {
149 | "version": "5.3.2",
150 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
151 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
152 | "dev": true,
153 | "peerDependencies": {
154 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
155 | }
156 | },
157 | "node_modules/ajv": {
158 | "version": "6.12.6",
159 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
160 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
161 | "dev": true,
162 | "dependencies": {
163 | "fast-deep-equal": "^3.1.1",
164 | "fast-json-stable-stringify": "^2.0.0",
165 | "json-schema-traverse": "^0.4.1",
166 | "uri-js": "^4.2.2"
167 | },
168 | "funding": {
169 | "type": "github",
170 | "url": "https://github.com/sponsors/epoberezkin"
171 | }
172 | },
173 | "node_modules/ansi-colors": {
174 | "version": "4.1.3",
175 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
176 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
177 | "dev": true,
178 | "license": "MIT",
179 | "engines": {
180 | "node": ">=6"
181 | }
182 | },
183 | "node_modules/ansi-regex": {
184 | "version": "5.0.1",
185 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
186 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
187 | "dev": true,
188 | "engines": {
189 | "node": ">=8"
190 | }
191 | },
192 | "node_modules/ansi-styles": {
193 | "version": "4.3.0",
194 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
195 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
196 | "dev": true,
197 | "dependencies": {
198 | "color-convert": "^2.0.1"
199 | },
200 | "engines": {
201 | "node": ">=8"
202 | },
203 | "funding": {
204 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
205 | }
206 | },
207 | "node_modules/anymatch": {
208 | "version": "3.1.2",
209 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
210 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
211 | "dev": true,
212 | "dependencies": {
213 | "normalize-path": "^3.0.0",
214 | "picomatch": "^2.0.4"
215 | },
216 | "engines": {
217 | "node": ">= 8"
218 | }
219 | },
220 | "node_modules/argparse": {
221 | "version": "2.0.1",
222 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
223 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
224 | "dev": true
225 | },
226 | "node_modules/array-union": {
227 | "version": "2.1.0",
228 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
229 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
230 | "dev": true,
231 | "engines": {
232 | "node": ">=8"
233 | }
234 | },
235 | "node_modules/balanced-match": {
236 | "version": "1.0.2",
237 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
238 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
239 | "dev": true
240 | },
241 | "node_modules/binary-extensions": {
242 | "version": "2.2.0",
243 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
244 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
245 | "dev": true,
246 | "engines": {
247 | "node": ">=8"
248 | }
249 | },
250 | "node_modules/brace-expansion": {
251 | "version": "1.1.11",
252 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
253 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
254 | "dev": true,
255 | "dependencies": {
256 | "balanced-match": "^1.0.0",
257 | "concat-map": "0.0.1"
258 | }
259 | },
260 | "node_modules/braces": {
261 | "version": "3.0.3",
262 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
263 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
264 | "dev": true,
265 | "license": "MIT",
266 | "dependencies": {
267 | "fill-range": "^7.1.1"
268 | },
269 | "engines": {
270 | "node": ">=8"
271 | }
272 | },
273 | "node_modules/browser-stdout": {
274 | "version": "1.3.1",
275 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
276 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
277 | "dev": true
278 | },
279 | "node_modules/callsites": {
280 | "version": "3.1.0",
281 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
282 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
283 | "dev": true,
284 | "engines": {
285 | "node": ">=6"
286 | }
287 | },
288 | "node_modules/camelcase": {
289 | "version": "6.3.0",
290 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
291 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
292 | "dev": true,
293 | "engines": {
294 | "node": ">=10"
295 | },
296 | "funding": {
297 | "url": "https://github.com/sponsors/sindresorhus"
298 | }
299 | },
300 | "node_modules/chokidar": {
301 | "version": "3.5.3",
302 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
303 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
304 | "dev": true,
305 | "funding": [
306 | {
307 | "type": "individual",
308 | "url": "https://paulmillr.com/funding/"
309 | }
310 | ],
311 | "dependencies": {
312 | "anymatch": "~3.1.2",
313 | "braces": "~3.0.2",
314 | "glob-parent": "~5.1.2",
315 | "is-binary-path": "~2.1.0",
316 | "is-glob": "~4.0.1",
317 | "normalize-path": "~3.0.0",
318 | "readdirp": "~3.6.0"
319 | },
320 | "engines": {
321 | "node": ">= 8.10.0"
322 | },
323 | "optionalDependencies": {
324 | "fsevents": "~2.3.2"
325 | }
326 | },
327 | "node_modules/chokidar/node_modules/glob-parent": {
328 | "version": "5.1.2",
329 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
330 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
331 | "dev": true,
332 | "dependencies": {
333 | "is-glob": "^4.0.1"
334 | },
335 | "engines": {
336 | "node": ">= 6"
337 | }
338 | },
339 | "node_modules/cliui": {
340 | "version": "7.0.4",
341 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
342 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
343 | "dev": true,
344 | "dependencies": {
345 | "string-width": "^4.2.0",
346 | "strip-ansi": "^6.0.0",
347 | "wrap-ansi": "^7.0.0"
348 | }
349 | },
350 | "node_modules/color-convert": {
351 | "version": "2.0.1",
352 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
353 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
354 | "dev": true,
355 | "dependencies": {
356 | "color-name": "~1.1.4"
357 | },
358 | "engines": {
359 | "node": ">=7.0.0"
360 | }
361 | },
362 | "node_modules/color-name": {
363 | "version": "1.1.4",
364 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
365 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
366 | "dev": true
367 | },
368 | "node_modules/comment-parser": {
369 | "version": "1.3.1",
370 | "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
371 | "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
372 | "dev": true,
373 | "engines": {
374 | "node": ">= 12.0.0"
375 | }
376 | },
377 | "node_modules/concat-map": {
378 | "version": "0.0.1",
379 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
380 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
381 | "dev": true
382 | },
383 | "node_modules/cross-spawn": {
384 | "version": "7.0.6",
385 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
386 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
387 | "dev": true,
388 | "license": "MIT",
389 | "dependencies": {
390 | "path-key": "^3.1.0",
391 | "shebang-command": "^2.0.0",
392 | "which": "^2.0.1"
393 | },
394 | "engines": {
395 | "node": ">= 8"
396 | }
397 | },
398 | "node_modules/debug": {
399 | "version": "4.4.0",
400 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
401 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
402 | "dev": true,
403 | "license": "MIT",
404 | "dependencies": {
405 | "ms": "^2.1.3"
406 | },
407 | "engines": {
408 | "node": ">=6.0"
409 | },
410 | "peerDependenciesMeta": {
411 | "supports-color": {
412 | "optional": true
413 | }
414 | }
415 | },
416 | "node_modules/decamelize": {
417 | "version": "4.0.0",
418 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
419 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
420 | "dev": true,
421 | "engines": {
422 | "node": ">=10"
423 | },
424 | "funding": {
425 | "url": "https://github.com/sponsors/sindresorhus"
426 | }
427 | },
428 | "node_modules/deep-is": {
429 | "version": "0.1.4",
430 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
431 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
432 | "dev": true
433 | },
434 | "node_modules/diff": {
435 | "version": "5.2.0",
436 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
437 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
438 | "dev": true,
439 | "license": "BSD-3-Clause",
440 | "engines": {
441 | "node": ">=0.3.1"
442 | }
443 | },
444 | "node_modules/dir-glob": {
445 | "version": "3.0.1",
446 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
447 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
448 | "dev": true,
449 | "dependencies": {
450 | "path-type": "^4.0.0"
451 | },
452 | "engines": {
453 | "node": ">=8"
454 | }
455 | },
456 | "node_modules/doctrine": {
457 | "version": "3.0.0",
458 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
459 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
460 | "dev": true,
461 | "dependencies": {
462 | "esutils": "^2.0.2"
463 | },
464 | "engines": {
465 | "node": ">=6.0.0"
466 | }
467 | },
468 | "node_modules/emoji-regex": {
469 | "version": "8.0.0",
470 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
471 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
472 | "dev": true
473 | },
474 | "node_modules/escalade": {
475 | "version": "3.1.1",
476 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
477 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
478 | "dev": true,
479 | "engines": {
480 | "node": ">=6"
481 | }
482 | },
483 | "node_modules/escape-string-regexp": {
484 | "version": "4.0.0",
485 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
486 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
487 | "dev": true,
488 | "engines": {
489 | "node": ">=10"
490 | },
491 | "funding": {
492 | "url": "https://github.com/sponsors/sindresorhus"
493 | }
494 | },
495 | "node_modules/eslint": {
496 | "version": "8.23.1",
497 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz",
498 | "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==",
499 | "dev": true,
500 | "dependencies": {
501 | "@eslint/eslintrc": "^1.3.2",
502 | "@humanwhocodes/config-array": "^0.10.4",
503 | "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
504 | "@humanwhocodes/module-importer": "^1.0.1",
505 | "ajv": "^6.10.0",
506 | "chalk": "^4.0.0",
507 | "cross-spawn": "^7.0.2",
508 | "debug": "^4.3.2",
509 | "doctrine": "^3.0.0",
510 | "escape-string-regexp": "^4.0.0",
511 | "eslint-scope": "^7.1.1",
512 | "eslint-utils": "^3.0.0",
513 | "eslint-visitor-keys": "^3.3.0",
514 | "espree": "^9.4.0",
515 | "esquery": "^1.4.0",
516 | "esutils": "^2.0.2",
517 | "fast-deep-equal": "^3.1.3",
518 | "file-entry-cache": "^6.0.1",
519 | "find-up": "^5.0.0",
520 | "glob-parent": "^6.0.1",
521 | "globals": "^13.15.0",
522 | "globby": "^11.1.0",
523 | "grapheme-splitter": "^1.0.4",
524 | "ignore": "^5.2.0",
525 | "import-fresh": "^3.0.0",
526 | "imurmurhash": "^0.1.4",
527 | "is-glob": "^4.0.0",
528 | "js-sdsl": "^4.1.4",
529 | "js-yaml": "^4.1.0",
530 | "json-stable-stringify-without-jsonify": "^1.0.1",
531 | "levn": "^0.4.1",
532 | "lodash.merge": "^4.6.2",
533 | "minimatch": "^3.1.2",
534 | "natural-compare": "^1.4.0",
535 | "optionator": "^0.9.1",
536 | "regexpp": "^3.2.0",
537 | "strip-ansi": "^6.0.1",
538 | "strip-json-comments": "^3.1.0",
539 | "text-table": "^0.2.0"
540 | },
541 | "bin": {
542 | "eslint": "bin/eslint.js"
543 | },
544 | "engines": {
545 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
546 | },
547 | "funding": {
548 | "url": "https://opencollective.com/eslint"
549 | }
550 | },
551 | "node_modules/eslint-config-prettier": {
552 | "version": "8.5.0",
553 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
554 | "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
555 | "dev": true,
556 | "bin": {
557 | "eslint-config-prettier": "bin/cli.js"
558 | },
559 | "peerDependencies": {
560 | "eslint": ">=7.0.0"
561 | }
562 | },
563 | "node_modules/eslint-plugin-jsdoc": {
564 | "version": "39.3.6",
565 | "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz",
566 | "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==",
567 | "dev": true,
568 | "dependencies": {
569 | "@es-joy/jsdoccomment": "~0.31.0",
570 | "comment-parser": "1.3.1",
571 | "debug": "^4.3.4",
572 | "escape-string-regexp": "^4.0.0",
573 | "esquery": "^1.4.0",
574 | "semver": "^7.3.7",
575 | "spdx-expression-parse": "^3.0.1"
576 | },
577 | "engines": {
578 | "node": "^14 || ^16 || ^17 || ^18"
579 | },
580 | "peerDependencies": {
581 | "eslint": "^7.0.0 || ^8.0.0"
582 | }
583 | },
584 | "node_modules/eslint-plugin-prettier": {
585 | "version": "4.2.1",
586 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
587 | "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
588 | "dev": true,
589 | "dependencies": {
590 | "prettier-linter-helpers": "^1.0.0"
591 | },
592 | "engines": {
593 | "node": ">=12.0.0"
594 | },
595 | "peerDependencies": {
596 | "eslint": ">=7.28.0",
597 | "prettier": ">=2.0.0"
598 | },
599 | "peerDependenciesMeta": {
600 | "eslint-config-prettier": {
601 | "optional": true
602 | }
603 | }
604 | },
605 | "node_modules/eslint-scope": {
606 | "version": "7.1.1",
607 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
608 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
609 | "dev": true,
610 | "dependencies": {
611 | "esrecurse": "^4.3.0",
612 | "estraverse": "^5.2.0"
613 | },
614 | "engines": {
615 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
616 | }
617 | },
618 | "node_modules/eslint-utils": {
619 | "version": "3.0.0",
620 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
621 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
622 | "dev": true,
623 | "dependencies": {
624 | "eslint-visitor-keys": "^2.0.0"
625 | },
626 | "engines": {
627 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
628 | },
629 | "funding": {
630 | "url": "https://github.com/sponsors/mysticatea"
631 | },
632 | "peerDependencies": {
633 | "eslint": ">=5"
634 | }
635 | },
636 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
637 | "version": "2.1.0",
638 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
639 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
640 | "dev": true,
641 | "engines": {
642 | "node": ">=10"
643 | }
644 | },
645 | "node_modules/eslint-visitor-keys": {
646 | "version": "3.3.0",
647 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
648 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
649 | "dev": true,
650 | "engines": {
651 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
652 | }
653 | },
654 | "node_modules/eslint/node_modules/chalk": {
655 | "version": "4.1.2",
656 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
657 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
658 | "dev": true,
659 | "license": "MIT",
660 | "dependencies": {
661 | "ansi-styles": "^4.1.0",
662 | "supports-color": "^7.1.0"
663 | },
664 | "engines": {
665 | "node": ">=10"
666 | },
667 | "funding": {
668 | "url": "https://github.com/chalk/chalk?sponsor=1"
669 | }
670 | },
671 | "node_modules/espree": {
672 | "version": "9.4.0",
673 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
674 | "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
675 | "dev": true,
676 | "dependencies": {
677 | "acorn": "^8.8.0",
678 | "acorn-jsx": "^5.3.2",
679 | "eslint-visitor-keys": "^3.3.0"
680 | },
681 | "engines": {
682 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
683 | },
684 | "funding": {
685 | "url": "https://opencollective.com/eslint"
686 | }
687 | },
688 | "node_modules/esquery": {
689 | "version": "1.4.0",
690 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
691 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
692 | "dev": true,
693 | "dependencies": {
694 | "estraverse": "^5.1.0"
695 | },
696 | "engines": {
697 | "node": ">=0.10"
698 | }
699 | },
700 | "node_modules/esrecurse": {
701 | "version": "4.3.0",
702 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
703 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
704 | "dev": true,
705 | "dependencies": {
706 | "estraverse": "^5.2.0"
707 | },
708 | "engines": {
709 | "node": ">=4.0"
710 | }
711 | },
712 | "node_modules/estraverse": {
713 | "version": "5.3.0",
714 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
715 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
716 | "dev": true,
717 | "engines": {
718 | "node": ">=4.0"
719 | }
720 | },
721 | "node_modules/esutils": {
722 | "version": "2.0.3",
723 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
724 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
725 | "dev": true,
726 | "engines": {
727 | "node": ">=0.10.0"
728 | }
729 | },
730 | "node_modules/fast-deep-equal": {
731 | "version": "3.1.3",
732 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
733 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
734 | "dev": true
735 | },
736 | "node_modules/fast-diff": {
737 | "version": "1.2.0",
738 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
739 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
740 | "dev": true
741 | },
742 | "node_modules/fast-glob": {
743 | "version": "3.2.12",
744 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
745 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
746 | "dev": true,
747 | "dependencies": {
748 | "@nodelib/fs.stat": "^2.0.2",
749 | "@nodelib/fs.walk": "^1.2.3",
750 | "glob-parent": "^5.1.2",
751 | "merge2": "^1.3.0",
752 | "micromatch": "^4.0.4"
753 | },
754 | "engines": {
755 | "node": ">=8.6.0"
756 | }
757 | },
758 | "node_modules/fast-glob/node_modules/glob-parent": {
759 | "version": "5.1.2",
760 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
761 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
762 | "dev": true,
763 | "dependencies": {
764 | "is-glob": "^4.0.1"
765 | },
766 | "engines": {
767 | "node": ">= 6"
768 | }
769 | },
770 | "node_modules/fast-json-stable-stringify": {
771 | "version": "2.1.0",
772 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
773 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
774 | "dev": true
775 | },
776 | "node_modules/fast-levenshtein": {
777 | "version": "2.0.6",
778 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
779 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
780 | "dev": true
781 | },
782 | "node_modules/fastq": {
783 | "version": "1.13.0",
784 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
785 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
786 | "dev": true,
787 | "dependencies": {
788 | "reusify": "^1.0.4"
789 | }
790 | },
791 | "node_modules/file-entry-cache": {
792 | "version": "6.0.1",
793 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
794 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
795 | "dev": true,
796 | "dependencies": {
797 | "flat-cache": "^3.0.4"
798 | },
799 | "engines": {
800 | "node": "^10.12.0 || >=12.0.0"
801 | }
802 | },
803 | "node_modules/fill-range": {
804 | "version": "7.1.1",
805 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
806 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
807 | "dev": true,
808 | "license": "MIT",
809 | "dependencies": {
810 | "to-regex-range": "^5.0.1"
811 | },
812 | "engines": {
813 | "node": ">=8"
814 | }
815 | },
816 | "node_modules/find-up": {
817 | "version": "5.0.0",
818 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
819 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
820 | "dev": true,
821 | "dependencies": {
822 | "locate-path": "^6.0.0",
823 | "path-exists": "^4.0.0"
824 | },
825 | "engines": {
826 | "node": ">=10"
827 | },
828 | "funding": {
829 | "url": "https://github.com/sponsors/sindresorhus"
830 | }
831 | },
832 | "node_modules/flat": {
833 | "version": "5.0.2",
834 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
835 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
836 | "dev": true,
837 | "bin": {
838 | "flat": "cli.js"
839 | }
840 | },
841 | "node_modules/flat-cache": {
842 | "version": "3.0.4",
843 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
844 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
845 | "dev": true,
846 | "dependencies": {
847 | "flatted": "^3.1.0",
848 | "rimraf": "^3.0.2"
849 | },
850 | "engines": {
851 | "node": "^10.12.0 || >=12.0.0"
852 | }
853 | },
854 | "node_modules/flatted": {
855 | "version": "3.2.7",
856 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
857 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
858 | "dev": true
859 | },
860 | "node_modules/fs.realpath": {
861 | "version": "1.0.0",
862 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
863 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
864 | "dev": true
865 | },
866 | "node_modules/fsevents": {
867 | "version": "2.3.2",
868 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
869 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
870 | "dev": true,
871 | "hasInstallScript": true,
872 | "optional": true,
873 | "os": [
874 | "darwin"
875 | ],
876 | "engines": {
877 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
878 | }
879 | },
880 | "node_modules/get-caller-file": {
881 | "version": "2.0.5",
882 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
883 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
884 | "dev": true,
885 | "engines": {
886 | "node": "6.* || 8.* || >= 10.*"
887 | }
888 | },
889 | "node_modules/glob": {
890 | "version": "7.2.0",
891 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
892 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
893 | "dev": true,
894 | "dependencies": {
895 | "fs.realpath": "^1.0.0",
896 | "inflight": "^1.0.4",
897 | "inherits": "2",
898 | "minimatch": "^3.0.4",
899 | "once": "^1.3.0",
900 | "path-is-absolute": "^1.0.0"
901 | },
902 | "engines": {
903 | "node": "*"
904 | },
905 | "funding": {
906 | "url": "https://github.com/sponsors/isaacs"
907 | }
908 | },
909 | "node_modules/glob-parent": {
910 | "version": "6.0.2",
911 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
912 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
913 | "dev": true,
914 | "dependencies": {
915 | "is-glob": "^4.0.3"
916 | },
917 | "engines": {
918 | "node": ">=10.13.0"
919 | }
920 | },
921 | "node_modules/globals": {
922 | "version": "13.17.0",
923 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
924 | "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
925 | "dev": true,
926 | "dependencies": {
927 | "type-fest": "^0.20.2"
928 | },
929 | "engines": {
930 | "node": ">=8"
931 | },
932 | "funding": {
933 | "url": "https://github.com/sponsors/sindresorhus"
934 | }
935 | },
936 | "node_modules/globby": {
937 | "version": "11.1.0",
938 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
939 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
940 | "dev": true,
941 | "dependencies": {
942 | "array-union": "^2.1.0",
943 | "dir-glob": "^3.0.1",
944 | "fast-glob": "^3.2.9",
945 | "ignore": "^5.2.0",
946 | "merge2": "^1.4.1",
947 | "slash": "^3.0.0"
948 | },
949 | "engines": {
950 | "node": ">=10"
951 | },
952 | "funding": {
953 | "url": "https://github.com/sponsors/sindresorhus"
954 | }
955 | },
956 | "node_modules/grapheme-splitter": {
957 | "version": "1.0.4",
958 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
959 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
960 | "dev": true
961 | },
962 | "node_modules/has-flag": {
963 | "version": "4.0.0",
964 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
965 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
966 | "dev": true,
967 | "engines": {
968 | "node": ">=8"
969 | }
970 | },
971 | "node_modules/he": {
972 | "version": "1.2.0",
973 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
974 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
975 | "dev": true,
976 | "bin": {
977 | "he": "bin/he"
978 | }
979 | },
980 | "node_modules/ignore": {
981 | "version": "5.2.0",
982 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
983 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
984 | "dev": true,
985 | "engines": {
986 | "node": ">= 4"
987 | }
988 | },
989 | "node_modules/import-fresh": {
990 | "version": "3.3.0",
991 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
992 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
993 | "dev": true,
994 | "dependencies": {
995 | "parent-module": "^1.0.0",
996 | "resolve-from": "^4.0.0"
997 | },
998 | "engines": {
999 | "node": ">=6"
1000 | },
1001 | "funding": {
1002 | "url": "https://github.com/sponsors/sindresorhus"
1003 | }
1004 | },
1005 | "node_modules/imurmurhash": {
1006 | "version": "0.1.4",
1007 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1008 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1009 | "dev": true,
1010 | "engines": {
1011 | "node": ">=0.8.19"
1012 | }
1013 | },
1014 | "node_modules/inflight": {
1015 | "version": "1.0.6",
1016 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1017 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1018 | "dev": true,
1019 | "dependencies": {
1020 | "once": "^1.3.0",
1021 | "wrappy": "1"
1022 | }
1023 | },
1024 | "node_modules/inherits": {
1025 | "version": "2.0.4",
1026 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1027 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1028 | "dev": true
1029 | },
1030 | "node_modules/is-binary-path": {
1031 | "version": "2.1.0",
1032 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1033 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1034 | "dev": true,
1035 | "dependencies": {
1036 | "binary-extensions": "^2.0.0"
1037 | },
1038 | "engines": {
1039 | "node": ">=8"
1040 | }
1041 | },
1042 | "node_modules/is-extglob": {
1043 | "version": "2.1.1",
1044 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1045 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1046 | "dev": true,
1047 | "engines": {
1048 | "node": ">=0.10.0"
1049 | }
1050 | },
1051 | "node_modules/is-fullwidth-code-point": {
1052 | "version": "3.0.0",
1053 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1054 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1055 | "dev": true,
1056 | "engines": {
1057 | "node": ">=8"
1058 | }
1059 | },
1060 | "node_modules/is-glob": {
1061 | "version": "4.0.3",
1062 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1063 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1064 | "dev": true,
1065 | "dependencies": {
1066 | "is-extglob": "^2.1.1"
1067 | },
1068 | "engines": {
1069 | "node": ">=0.10.0"
1070 | }
1071 | },
1072 | "node_modules/is-number": {
1073 | "version": "7.0.0",
1074 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1075 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1076 | "dev": true,
1077 | "license": "MIT",
1078 | "engines": {
1079 | "node": ">=0.12.0"
1080 | }
1081 | },
1082 | "node_modules/is-plain-obj": {
1083 | "version": "2.1.0",
1084 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1085 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1086 | "dev": true,
1087 | "engines": {
1088 | "node": ">=8"
1089 | }
1090 | },
1091 | "node_modules/is-unicode-supported": {
1092 | "version": "0.1.0",
1093 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
1094 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
1095 | "dev": true,
1096 | "engines": {
1097 | "node": ">=10"
1098 | },
1099 | "funding": {
1100 | "url": "https://github.com/sponsors/sindresorhus"
1101 | }
1102 | },
1103 | "node_modules/isexe": {
1104 | "version": "2.0.0",
1105 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1106 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1107 | "dev": true
1108 | },
1109 | "node_modules/js-sdsl": {
1110 | "version": "4.1.4",
1111 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
1112 | "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
1113 | "dev": true
1114 | },
1115 | "node_modules/js-yaml": {
1116 | "version": "4.1.0",
1117 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1118 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1119 | "dev": true,
1120 | "dependencies": {
1121 | "argparse": "^2.0.1"
1122 | },
1123 | "bin": {
1124 | "js-yaml": "bin/js-yaml.js"
1125 | }
1126 | },
1127 | "node_modules/jsdoc-type-pratt-parser": {
1128 | "version": "3.1.0",
1129 | "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz",
1130 | "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==",
1131 | "dev": true,
1132 | "engines": {
1133 | "node": ">=12.0.0"
1134 | }
1135 | },
1136 | "node_modules/json-schema-traverse": {
1137 | "version": "0.4.1",
1138 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1139 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1140 | "dev": true
1141 | },
1142 | "node_modules/json-stable-stringify-without-jsonify": {
1143 | "version": "1.0.1",
1144 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1145 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1146 | "dev": true
1147 | },
1148 | "node_modules/levn": {
1149 | "version": "0.4.1",
1150 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
1151 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
1152 | "dev": true,
1153 | "dependencies": {
1154 | "prelude-ls": "^1.2.1",
1155 | "type-check": "~0.4.0"
1156 | },
1157 | "engines": {
1158 | "node": ">= 0.8.0"
1159 | }
1160 | },
1161 | "node_modules/locate-path": {
1162 | "version": "6.0.0",
1163 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
1164 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
1165 | "dev": true,
1166 | "dependencies": {
1167 | "p-locate": "^5.0.0"
1168 | },
1169 | "engines": {
1170 | "node": ">=10"
1171 | },
1172 | "funding": {
1173 | "url": "https://github.com/sponsors/sindresorhus"
1174 | }
1175 | },
1176 | "node_modules/lodash.merge": {
1177 | "version": "4.6.2",
1178 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1179 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1180 | "dev": true
1181 | },
1182 | "node_modules/log-symbols": {
1183 | "version": "4.1.0",
1184 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
1185 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
1186 | "dev": true,
1187 | "dependencies": {
1188 | "chalk": "^4.1.0",
1189 | "is-unicode-supported": "^0.1.0"
1190 | },
1191 | "engines": {
1192 | "node": ">=10"
1193 | },
1194 | "funding": {
1195 | "url": "https://github.com/sponsors/sindresorhus"
1196 | }
1197 | },
1198 | "node_modules/log-symbols/node_modules/chalk": {
1199 | "version": "4.1.2",
1200 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1201 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1202 | "dev": true,
1203 | "license": "MIT",
1204 | "dependencies": {
1205 | "ansi-styles": "^4.1.0",
1206 | "supports-color": "^7.1.0"
1207 | },
1208 | "engines": {
1209 | "node": ">=10"
1210 | },
1211 | "funding": {
1212 | "url": "https://github.com/chalk/chalk?sponsor=1"
1213 | }
1214 | },
1215 | "node_modules/merge2": {
1216 | "version": "1.4.1",
1217 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1218 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1219 | "dev": true,
1220 | "engines": {
1221 | "node": ">= 8"
1222 | }
1223 | },
1224 | "node_modules/micromatch": {
1225 | "version": "4.0.8",
1226 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1227 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1228 | "dev": true,
1229 | "license": "MIT",
1230 | "dependencies": {
1231 | "braces": "^3.0.3",
1232 | "picomatch": "^2.3.1"
1233 | },
1234 | "engines": {
1235 | "node": ">=8.6"
1236 | }
1237 | },
1238 | "node_modules/minimatch": {
1239 | "version": "3.1.2",
1240 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1241 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1242 | "dev": true,
1243 | "dependencies": {
1244 | "brace-expansion": "^1.1.7"
1245 | },
1246 | "engines": {
1247 | "node": "*"
1248 | }
1249 | },
1250 | "node_modules/mocha": {
1251 | "version": "10.8.2",
1252 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
1253 | "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
1254 | "dev": true,
1255 | "license": "MIT",
1256 | "dependencies": {
1257 | "ansi-colors": "^4.1.3",
1258 | "browser-stdout": "^1.3.1",
1259 | "chokidar": "^3.5.3",
1260 | "debug": "^4.3.5",
1261 | "diff": "^5.2.0",
1262 | "escape-string-regexp": "^4.0.0",
1263 | "find-up": "^5.0.0",
1264 | "glob": "^8.1.0",
1265 | "he": "^1.2.0",
1266 | "js-yaml": "^4.1.0",
1267 | "log-symbols": "^4.1.0",
1268 | "minimatch": "^5.1.6",
1269 | "ms": "^2.1.3",
1270 | "serialize-javascript": "^6.0.2",
1271 | "strip-json-comments": "^3.1.1",
1272 | "supports-color": "^8.1.1",
1273 | "workerpool": "^6.5.1",
1274 | "yargs": "^16.2.0",
1275 | "yargs-parser": "^20.2.9",
1276 | "yargs-unparser": "^2.0.0"
1277 | },
1278 | "bin": {
1279 | "_mocha": "bin/_mocha",
1280 | "mocha": "bin/mocha.js"
1281 | },
1282 | "engines": {
1283 | "node": ">= 14.0.0"
1284 | }
1285 | },
1286 | "node_modules/mocha/node_modules/brace-expansion": {
1287 | "version": "2.0.1",
1288 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1289 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1290 | "dev": true,
1291 | "license": "MIT",
1292 | "dependencies": {
1293 | "balanced-match": "^1.0.0"
1294 | }
1295 | },
1296 | "node_modules/mocha/node_modules/glob": {
1297 | "version": "8.1.0",
1298 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
1299 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
1300 | "deprecated": "Glob versions prior to v9 are no longer supported",
1301 | "dev": true,
1302 | "license": "ISC",
1303 | "dependencies": {
1304 | "fs.realpath": "^1.0.0",
1305 | "inflight": "^1.0.4",
1306 | "inherits": "2",
1307 | "minimatch": "^5.0.1",
1308 | "once": "^1.3.0"
1309 | },
1310 | "engines": {
1311 | "node": ">=12"
1312 | },
1313 | "funding": {
1314 | "url": "https://github.com/sponsors/isaacs"
1315 | }
1316 | },
1317 | "node_modules/mocha/node_modules/minimatch": {
1318 | "version": "5.1.6",
1319 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
1320 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
1321 | "dev": true,
1322 | "license": "ISC",
1323 | "dependencies": {
1324 | "brace-expansion": "^2.0.1"
1325 | },
1326 | "engines": {
1327 | "node": ">=10"
1328 | }
1329 | },
1330 | "node_modules/mocha/node_modules/supports-color": {
1331 | "version": "8.1.1",
1332 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
1333 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
1334 | "dev": true,
1335 | "dependencies": {
1336 | "has-flag": "^4.0.0"
1337 | },
1338 | "engines": {
1339 | "node": ">=10"
1340 | },
1341 | "funding": {
1342 | "url": "https://github.com/chalk/supports-color?sponsor=1"
1343 | }
1344 | },
1345 | "node_modules/ms": {
1346 | "version": "2.1.3",
1347 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1348 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1349 | "dev": true,
1350 | "license": "MIT"
1351 | },
1352 | "node_modules/natural-compare": {
1353 | "version": "1.4.0",
1354 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1355 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
1356 | "dev": true
1357 | },
1358 | "node_modules/normalize-path": {
1359 | "version": "3.0.0",
1360 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1361 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1362 | "dev": true,
1363 | "engines": {
1364 | "node": ">=0.10.0"
1365 | }
1366 | },
1367 | "node_modules/once": {
1368 | "version": "1.4.0",
1369 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1370 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1371 | "dev": true,
1372 | "dependencies": {
1373 | "wrappy": "1"
1374 | }
1375 | },
1376 | "node_modules/optionator": {
1377 | "version": "0.9.1",
1378 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
1379 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
1380 | "dev": true,
1381 | "dependencies": {
1382 | "deep-is": "^0.1.3",
1383 | "fast-levenshtein": "^2.0.6",
1384 | "levn": "^0.4.1",
1385 | "prelude-ls": "^1.2.1",
1386 | "type-check": "^0.4.0",
1387 | "word-wrap": "^1.2.3"
1388 | },
1389 | "engines": {
1390 | "node": ">= 0.8.0"
1391 | }
1392 | },
1393 | "node_modules/p-limit": {
1394 | "version": "3.1.0",
1395 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
1396 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
1397 | "dev": true,
1398 | "dependencies": {
1399 | "yocto-queue": "^0.1.0"
1400 | },
1401 | "engines": {
1402 | "node": ">=10"
1403 | },
1404 | "funding": {
1405 | "url": "https://github.com/sponsors/sindresorhus"
1406 | }
1407 | },
1408 | "node_modules/p-locate": {
1409 | "version": "5.0.0",
1410 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
1411 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
1412 | "dev": true,
1413 | "dependencies": {
1414 | "p-limit": "^3.0.2"
1415 | },
1416 | "engines": {
1417 | "node": ">=10"
1418 | },
1419 | "funding": {
1420 | "url": "https://github.com/sponsors/sindresorhus"
1421 | }
1422 | },
1423 | "node_modules/parent-module": {
1424 | "version": "1.0.1",
1425 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1426 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1427 | "dev": true,
1428 | "dependencies": {
1429 | "callsites": "^3.0.0"
1430 | },
1431 | "engines": {
1432 | "node": ">=6"
1433 | }
1434 | },
1435 | "node_modules/path-exists": {
1436 | "version": "4.0.0",
1437 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1438 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1439 | "dev": true,
1440 | "engines": {
1441 | "node": ">=8"
1442 | }
1443 | },
1444 | "node_modules/path-is-absolute": {
1445 | "version": "1.0.1",
1446 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1447 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1448 | "dev": true,
1449 | "engines": {
1450 | "node": ">=0.10.0"
1451 | }
1452 | },
1453 | "node_modules/path-key": {
1454 | "version": "3.1.1",
1455 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1456 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1457 | "dev": true,
1458 | "engines": {
1459 | "node": ">=8"
1460 | }
1461 | },
1462 | "node_modules/path-type": {
1463 | "version": "4.0.0",
1464 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1465 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
1466 | "dev": true,
1467 | "engines": {
1468 | "node": ">=8"
1469 | }
1470 | },
1471 | "node_modules/picomatch": {
1472 | "version": "2.3.1",
1473 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1474 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1475 | "dev": true,
1476 | "engines": {
1477 | "node": ">=8.6"
1478 | },
1479 | "funding": {
1480 | "url": "https://github.com/sponsors/jonschlinkert"
1481 | }
1482 | },
1483 | "node_modules/prelude-ls": {
1484 | "version": "1.2.1",
1485 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
1486 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1487 | "dev": true,
1488 | "engines": {
1489 | "node": ">= 0.8.0"
1490 | }
1491 | },
1492 | "node_modules/prettier": {
1493 | "version": "2.7.1",
1494 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
1495 | "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
1496 | "dev": true,
1497 | "bin": {
1498 | "prettier": "bin-prettier.js"
1499 | },
1500 | "engines": {
1501 | "node": ">=10.13.0"
1502 | },
1503 | "funding": {
1504 | "url": "https://github.com/prettier/prettier?sponsor=1"
1505 | }
1506 | },
1507 | "node_modules/prettier-linter-helpers": {
1508 | "version": "1.0.0",
1509 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
1510 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
1511 | "dev": true,
1512 | "dependencies": {
1513 | "fast-diff": "^1.1.2"
1514 | },
1515 | "engines": {
1516 | "node": ">=6.0.0"
1517 | }
1518 | },
1519 | "node_modules/punycode": {
1520 | "version": "2.1.1",
1521 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1522 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1523 | "dev": true,
1524 | "engines": {
1525 | "node": ">=6"
1526 | }
1527 | },
1528 | "node_modules/queue-microtask": {
1529 | "version": "1.2.3",
1530 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1531 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1532 | "dev": true,
1533 | "funding": [
1534 | {
1535 | "type": "github",
1536 | "url": "https://github.com/sponsors/feross"
1537 | },
1538 | {
1539 | "type": "patreon",
1540 | "url": "https://www.patreon.com/feross"
1541 | },
1542 | {
1543 | "type": "consulting",
1544 | "url": "https://feross.org/support"
1545 | }
1546 | ]
1547 | },
1548 | "node_modules/randombytes": {
1549 | "version": "2.1.0",
1550 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1551 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1552 | "dev": true,
1553 | "license": "MIT",
1554 | "dependencies": {
1555 | "safe-buffer": "^5.1.0"
1556 | }
1557 | },
1558 | "node_modules/readdirp": {
1559 | "version": "3.6.0",
1560 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1561 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1562 | "dev": true,
1563 | "dependencies": {
1564 | "picomatch": "^2.2.1"
1565 | },
1566 | "engines": {
1567 | "node": ">=8.10.0"
1568 | }
1569 | },
1570 | "node_modules/regexpp": {
1571 | "version": "3.2.0",
1572 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
1573 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
1574 | "dev": true,
1575 | "engines": {
1576 | "node": ">=8"
1577 | },
1578 | "funding": {
1579 | "url": "https://github.com/sponsors/mysticatea"
1580 | }
1581 | },
1582 | "node_modules/require-directory": {
1583 | "version": "2.1.1",
1584 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1585 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
1586 | "dev": true,
1587 | "engines": {
1588 | "node": ">=0.10.0"
1589 | }
1590 | },
1591 | "node_modules/resolve-from": {
1592 | "version": "4.0.0",
1593 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1594 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1595 | "dev": true,
1596 | "engines": {
1597 | "node": ">=4"
1598 | }
1599 | },
1600 | "node_modules/reusify": {
1601 | "version": "1.0.4",
1602 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1603 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1604 | "dev": true,
1605 | "engines": {
1606 | "iojs": ">=1.0.0",
1607 | "node": ">=0.10.0"
1608 | }
1609 | },
1610 | "node_modules/rimraf": {
1611 | "version": "3.0.2",
1612 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1613 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1614 | "dev": true,
1615 | "dependencies": {
1616 | "glob": "^7.1.3"
1617 | },
1618 | "bin": {
1619 | "rimraf": "bin.js"
1620 | },
1621 | "funding": {
1622 | "url": "https://github.com/sponsors/isaacs"
1623 | }
1624 | },
1625 | "node_modules/run-parallel": {
1626 | "version": "1.2.0",
1627 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1628 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1629 | "dev": true,
1630 | "funding": [
1631 | {
1632 | "type": "github",
1633 | "url": "https://github.com/sponsors/feross"
1634 | },
1635 | {
1636 | "type": "patreon",
1637 | "url": "https://www.patreon.com/feross"
1638 | },
1639 | {
1640 | "type": "consulting",
1641 | "url": "https://feross.org/support"
1642 | }
1643 | ],
1644 | "dependencies": {
1645 | "queue-microtask": "^1.2.2"
1646 | }
1647 | },
1648 | "node_modules/safe-buffer": {
1649 | "version": "5.2.1",
1650 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1651 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1652 | "dev": true,
1653 | "funding": [
1654 | {
1655 | "type": "github",
1656 | "url": "https://github.com/sponsors/feross"
1657 | },
1658 | {
1659 | "type": "patreon",
1660 | "url": "https://www.patreon.com/feross"
1661 | },
1662 | {
1663 | "type": "consulting",
1664 | "url": "https://feross.org/support"
1665 | }
1666 | ],
1667 | "license": "MIT"
1668 | },
1669 | "node_modules/semver": {
1670 | "version": "7.6.3",
1671 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
1672 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
1673 | "dev": true,
1674 | "license": "ISC",
1675 | "bin": {
1676 | "semver": "bin/semver.js"
1677 | },
1678 | "engines": {
1679 | "node": ">=10"
1680 | }
1681 | },
1682 | "node_modules/serialize-javascript": {
1683 | "version": "6.0.2",
1684 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
1685 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
1686 | "dev": true,
1687 | "license": "BSD-3-Clause",
1688 | "dependencies": {
1689 | "randombytes": "^2.1.0"
1690 | }
1691 | },
1692 | "node_modules/shebang-command": {
1693 | "version": "2.0.0",
1694 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1695 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1696 | "dev": true,
1697 | "dependencies": {
1698 | "shebang-regex": "^3.0.0"
1699 | },
1700 | "engines": {
1701 | "node": ">=8"
1702 | }
1703 | },
1704 | "node_modules/shebang-regex": {
1705 | "version": "3.0.0",
1706 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1707 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1708 | "dev": true,
1709 | "engines": {
1710 | "node": ">=8"
1711 | }
1712 | },
1713 | "node_modules/slash": {
1714 | "version": "3.0.0",
1715 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
1716 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
1717 | "dev": true,
1718 | "engines": {
1719 | "node": ">=8"
1720 | }
1721 | },
1722 | "node_modules/spdx-exceptions": {
1723 | "version": "2.3.0",
1724 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
1725 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
1726 | "dev": true
1727 | },
1728 | "node_modules/spdx-expression-parse": {
1729 | "version": "3.0.1",
1730 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
1731 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
1732 | "dev": true,
1733 | "dependencies": {
1734 | "spdx-exceptions": "^2.1.0",
1735 | "spdx-license-ids": "^3.0.0"
1736 | }
1737 | },
1738 | "node_modules/spdx-license-ids": {
1739 | "version": "3.0.12",
1740 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
1741 | "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
1742 | "dev": true
1743 | },
1744 | "node_modules/string-width": {
1745 | "version": "4.2.3",
1746 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1747 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1748 | "dev": true,
1749 | "dependencies": {
1750 | "emoji-regex": "^8.0.0",
1751 | "is-fullwidth-code-point": "^3.0.0",
1752 | "strip-ansi": "^6.0.1"
1753 | },
1754 | "engines": {
1755 | "node": ">=8"
1756 | }
1757 | },
1758 | "node_modules/strip-ansi": {
1759 | "version": "6.0.1",
1760 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1761 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1762 | "dev": true,
1763 | "dependencies": {
1764 | "ansi-regex": "^5.0.1"
1765 | },
1766 | "engines": {
1767 | "node": ">=8"
1768 | }
1769 | },
1770 | "node_modules/strip-json-comments": {
1771 | "version": "3.1.1",
1772 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1773 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1774 | "dev": true,
1775 | "engines": {
1776 | "node": ">=8"
1777 | },
1778 | "funding": {
1779 | "url": "https://github.com/sponsors/sindresorhus"
1780 | }
1781 | },
1782 | "node_modules/supports-color": {
1783 | "version": "7.2.0",
1784 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1785 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1786 | "dev": true,
1787 | "license": "MIT",
1788 | "dependencies": {
1789 | "has-flag": "^4.0.0"
1790 | },
1791 | "engines": {
1792 | "node": ">=8"
1793 | }
1794 | },
1795 | "node_modules/text-table": {
1796 | "version": "0.2.0",
1797 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1798 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
1799 | "dev": true
1800 | },
1801 | "node_modules/to-regex-range": {
1802 | "version": "5.0.1",
1803 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1804 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1805 | "dev": true,
1806 | "license": "MIT",
1807 | "dependencies": {
1808 | "is-number": "^7.0.0"
1809 | },
1810 | "engines": {
1811 | "node": ">=8.0"
1812 | }
1813 | },
1814 | "node_modules/type-check": {
1815 | "version": "0.4.0",
1816 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
1817 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
1818 | "dev": true,
1819 | "dependencies": {
1820 | "prelude-ls": "^1.2.1"
1821 | },
1822 | "engines": {
1823 | "node": ">= 0.8.0"
1824 | }
1825 | },
1826 | "node_modules/type-fest": {
1827 | "version": "0.20.2",
1828 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
1829 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
1830 | "dev": true,
1831 | "engines": {
1832 | "node": ">=10"
1833 | },
1834 | "funding": {
1835 | "url": "https://github.com/sponsors/sindresorhus"
1836 | }
1837 | },
1838 | "node_modules/uglify-js": {
1839 | "version": "3.17.1",
1840 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.1.tgz",
1841 | "integrity": "sha512-+juFBsLLw7AqMaqJ0GFvlsGZwdQfI2ooKQB39PSBgMnMakcFosi9O8jCwE+2/2nMNcc0z63r9mwjoDG8zr+q0Q==",
1842 | "dev": true,
1843 | "bin": {
1844 | "uglifyjs": "bin/uglifyjs"
1845 | },
1846 | "engines": {
1847 | "node": ">=0.8.0"
1848 | }
1849 | },
1850 | "node_modules/uri-js": {
1851 | "version": "4.4.1",
1852 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1853 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1854 | "dev": true,
1855 | "dependencies": {
1856 | "punycode": "^2.1.0"
1857 | }
1858 | },
1859 | "node_modules/which": {
1860 | "version": "2.0.2",
1861 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1862 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1863 | "dev": true,
1864 | "dependencies": {
1865 | "isexe": "^2.0.0"
1866 | },
1867 | "bin": {
1868 | "node-which": "bin/node-which"
1869 | },
1870 | "engines": {
1871 | "node": ">= 8"
1872 | }
1873 | },
1874 | "node_modules/word-wrap": {
1875 | "version": "1.2.5",
1876 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
1877 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
1878 | "dev": true,
1879 | "license": "MIT",
1880 | "engines": {
1881 | "node": ">=0.10.0"
1882 | }
1883 | },
1884 | "node_modules/workerpool": {
1885 | "version": "6.5.1",
1886 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
1887 | "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
1888 | "dev": true,
1889 | "license": "Apache-2.0"
1890 | },
1891 | "node_modules/wrap-ansi": {
1892 | "version": "7.0.0",
1893 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1894 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1895 | "dev": true,
1896 | "dependencies": {
1897 | "ansi-styles": "^4.0.0",
1898 | "string-width": "^4.1.0",
1899 | "strip-ansi": "^6.0.0"
1900 | },
1901 | "engines": {
1902 | "node": ">=10"
1903 | },
1904 | "funding": {
1905 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1906 | }
1907 | },
1908 | "node_modules/wrappy": {
1909 | "version": "1.0.2",
1910 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1911 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
1912 | "dev": true
1913 | },
1914 | "node_modules/y18n": {
1915 | "version": "5.0.8",
1916 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
1917 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
1918 | "dev": true,
1919 | "engines": {
1920 | "node": ">=10"
1921 | }
1922 | },
1923 | "node_modules/yargs": {
1924 | "version": "16.2.0",
1925 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
1926 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
1927 | "dev": true,
1928 | "dependencies": {
1929 | "cliui": "^7.0.2",
1930 | "escalade": "^3.1.1",
1931 | "get-caller-file": "^2.0.5",
1932 | "require-directory": "^2.1.1",
1933 | "string-width": "^4.2.0",
1934 | "y18n": "^5.0.5",
1935 | "yargs-parser": "^20.2.2"
1936 | },
1937 | "engines": {
1938 | "node": ">=10"
1939 | }
1940 | },
1941 | "node_modules/yargs-parser": {
1942 | "version": "20.2.9",
1943 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
1944 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
1945 | "dev": true,
1946 | "license": "ISC",
1947 | "engines": {
1948 | "node": ">=10"
1949 | }
1950 | },
1951 | "node_modules/yargs-unparser": {
1952 | "version": "2.0.0",
1953 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
1954 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
1955 | "dev": true,
1956 | "dependencies": {
1957 | "camelcase": "^6.0.0",
1958 | "decamelize": "^4.0.0",
1959 | "flat": "^5.0.2",
1960 | "is-plain-obj": "^2.1.0"
1961 | },
1962 | "engines": {
1963 | "node": ">=10"
1964 | }
1965 | },
1966 | "node_modules/yocto-queue": {
1967 | "version": "0.1.0",
1968 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
1969 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
1970 | "dev": true,
1971 | "engines": {
1972 | "node": ">=10"
1973 | },
1974 | "funding": {
1975 | "url": "https://github.com/sponsors/sindresorhus"
1976 | }
1977 | }
1978 | },
1979 | "dependencies": {
1980 | "@es-joy/jsdoccomment": {
1981 | "version": "0.31.0",
1982 | "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz",
1983 | "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==",
1984 | "dev": true,
1985 | "requires": {
1986 | "comment-parser": "1.3.1",
1987 | "esquery": "^1.4.0",
1988 | "jsdoc-type-pratt-parser": "~3.1.0"
1989 | }
1990 | },
1991 | "@eslint/eslintrc": {
1992 | "version": "1.3.2",
1993 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
1994 | "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
1995 | "dev": true,
1996 | "requires": {
1997 | "ajv": "^6.12.4",
1998 | "debug": "^4.3.2",
1999 | "espree": "^9.4.0",
2000 | "globals": "^13.15.0",
2001 | "ignore": "^5.2.0",
2002 | "import-fresh": "^3.2.1",
2003 | "js-yaml": "^4.1.0",
2004 | "minimatch": "^3.1.2",
2005 | "strip-json-comments": "^3.1.1"
2006 | }
2007 | },
2008 | "@humanwhocodes/config-array": {
2009 | "version": "0.10.5",
2010 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.5.tgz",
2011 | "integrity": "sha512-XVVDtp+dVvRxMoxSiSfasYaG02VEe1qH5cKgMQJWhol6HwzbcqoCMJi8dAGoYAO57jhUyhI6cWuRiTcRaDaYug==",
2012 | "dev": true,
2013 | "requires": {
2014 | "@humanwhocodes/object-schema": "^1.2.1",
2015 | "debug": "^4.1.1",
2016 | "minimatch": "^3.0.4"
2017 | }
2018 | },
2019 | "@humanwhocodes/gitignore-to-minimatch": {
2020 | "version": "1.0.2",
2021 | "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
2022 | "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
2023 | "dev": true
2024 | },
2025 | "@humanwhocodes/module-importer": {
2026 | "version": "1.0.1",
2027 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
2028 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
2029 | "dev": true
2030 | },
2031 | "@humanwhocodes/object-schema": {
2032 | "version": "1.2.1",
2033 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
2034 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
2035 | "dev": true
2036 | },
2037 | "@nodelib/fs.scandir": {
2038 | "version": "2.1.5",
2039 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
2040 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
2041 | "dev": true,
2042 | "requires": {
2043 | "@nodelib/fs.stat": "2.0.5",
2044 | "run-parallel": "^1.1.9"
2045 | }
2046 | },
2047 | "@nodelib/fs.stat": {
2048 | "version": "2.0.5",
2049 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
2050 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
2051 | "dev": true
2052 | },
2053 | "@nodelib/fs.walk": {
2054 | "version": "1.2.8",
2055 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
2056 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
2057 | "dev": true,
2058 | "requires": {
2059 | "@nodelib/fs.scandir": "2.1.5",
2060 | "fastq": "^1.6.0"
2061 | }
2062 | },
2063 | "acorn": {
2064 | "version": "8.8.0",
2065 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
2066 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
2067 | "dev": true
2068 | },
2069 | "acorn-jsx": {
2070 | "version": "5.3.2",
2071 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
2072 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
2073 | "dev": true,
2074 | "requires": {}
2075 | },
2076 | "ajv": {
2077 | "version": "6.12.6",
2078 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
2079 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
2080 | "dev": true,
2081 | "requires": {
2082 | "fast-deep-equal": "^3.1.1",
2083 | "fast-json-stable-stringify": "^2.0.0",
2084 | "json-schema-traverse": "^0.4.1",
2085 | "uri-js": "^4.2.2"
2086 | }
2087 | },
2088 | "ansi-colors": {
2089 | "version": "4.1.3",
2090 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
2091 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
2092 | "dev": true
2093 | },
2094 | "ansi-regex": {
2095 | "version": "5.0.1",
2096 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2097 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2098 | "dev": true
2099 | },
2100 | "ansi-styles": {
2101 | "version": "4.3.0",
2102 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2103 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2104 | "dev": true,
2105 | "requires": {
2106 | "color-convert": "^2.0.1"
2107 | }
2108 | },
2109 | "anymatch": {
2110 | "version": "3.1.2",
2111 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
2112 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
2113 | "dev": true,
2114 | "requires": {
2115 | "normalize-path": "^3.0.0",
2116 | "picomatch": "^2.0.4"
2117 | }
2118 | },
2119 | "argparse": {
2120 | "version": "2.0.1",
2121 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2122 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2123 | "dev": true
2124 | },
2125 | "array-union": {
2126 | "version": "2.1.0",
2127 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
2128 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
2129 | "dev": true
2130 | },
2131 | "balanced-match": {
2132 | "version": "1.0.2",
2133 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
2134 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
2135 | "dev": true
2136 | },
2137 | "binary-extensions": {
2138 | "version": "2.2.0",
2139 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
2140 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
2141 | "dev": true
2142 | },
2143 | "brace-expansion": {
2144 | "version": "1.1.11",
2145 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2146 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2147 | "dev": true,
2148 | "requires": {
2149 | "balanced-match": "^1.0.0",
2150 | "concat-map": "0.0.1"
2151 | }
2152 | },
2153 | "braces": {
2154 | "version": "3.0.3",
2155 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
2156 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
2157 | "dev": true,
2158 | "requires": {
2159 | "fill-range": "^7.1.1"
2160 | }
2161 | },
2162 | "browser-stdout": {
2163 | "version": "1.3.1",
2164 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
2165 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
2166 | "dev": true
2167 | },
2168 | "callsites": {
2169 | "version": "3.1.0",
2170 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
2171 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
2172 | "dev": true
2173 | },
2174 | "camelcase": {
2175 | "version": "6.3.0",
2176 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
2177 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
2178 | "dev": true
2179 | },
2180 | "chokidar": {
2181 | "version": "3.5.3",
2182 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
2183 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
2184 | "dev": true,
2185 | "requires": {
2186 | "anymatch": "~3.1.2",
2187 | "braces": "~3.0.2",
2188 | "fsevents": "~2.3.2",
2189 | "glob-parent": "~5.1.2",
2190 | "is-binary-path": "~2.1.0",
2191 | "is-glob": "~4.0.1",
2192 | "normalize-path": "~3.0.0",
2193 | "readdirp": "~3.6.0"
2194 | },
2195 | "dependencies": {
2196 | "glob-parent": {
2197 | "version": "5.1.2",
2198 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2199 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2200 | "dev": true,
2201 | "requires": {
2202 | "is-glob": "^4.0.1"
2203 | }
2204 | }
2205 | }
2206 | },
2207 | "cliui": {
2208 | "version": "7.0.4",
2209 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
2210 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
2211 | "dev": true,
2212 | "requires": {
2213 | "string-width": "^4.2.0",
2214 | "strip-ansi": "^6.0.0",
2215 | "wrap-ansi": "^7.0.0"
2216 | }
2217 | },
2218 | "color-convert": {
2219 | "version": "2.0.1",
2220 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2221 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2222 | "dev": true,
2223 | "requires": {
2224 | "color-name": "~1.1.4"
2225 | }
2226 | },
2227 | "color-name": {
2228 | "version": "1.1.4",
2229 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2230 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2231 | "dev": true
2232 | },
2233 | "comment-parser": {
2234 | "version": "1.3.1",
2235 | "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
2236 | "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
2237 | "dev": true
2238 | },
2239 | "concat-map": {
2240 | "version": "0.0.1",
2241 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2242 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
2243 | "dev": true
2244 | },
2245 | "cross-spawn": {
2246 | "version": "7.0.6",
2247 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
2248 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
2249 | "dev": true,
2250 | "requires": {
2251 | "path-key": "^3.1.0",
2252 | "shebang-command": "^2.0.0",
2253 | "which": "^2.0.1"
2254 | }
2255 | },
2256 | "debug": {
2257 | "version": "4.4.0",
2258 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
2259 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
2260 | "dev": true,
2261 | "requires": {
2262 | "ms": "^2.1.3"
2263 | }
2264 | },
2265 | "decamelize": {
2266 | "version": "4.0.0",
2267 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
2268 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
2269 | "dev": true
2270 | },
2271 | "deep-is": {
2272 | "version": "0.1.4",
2273 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
2274 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
2275 | "dev": true
2276 | },
2277 | "diff": {
2278 | "version": "5.2.0",
2279 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
2280 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
2281 | "dev": true
2282 | },
2283 | "dir-glob": {
2284 | "version": "3.0.1",
2285 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
2286 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
2287 | "dev": true,
2288 | "requires": {
2289 | "path-type": "^4.0.0"
2290 | }
2291 | },
2292 | "doctrine": {
2293 | "version": "3.0.0",
2294 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
2295 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
2296 | "dev": true,
2297 | "requires": {
2298 | "esutils": "^2.0.2"
2299 | }
2300 | },
2301 | "emoji-regex": {
2302 | "version": "8.0.0",
2303 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2304 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2305 | "dev": true
2306 | },
2307 | "escalade": {
2308 | "version": "3.1.1",
2309 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2310 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2311 | "dev": true
2312 | },
2313 | "escape-string-regexp": {
2314 | "version": "4.0.0",
2315 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2316 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
2317 | "dev": true
2318 | },
2319 | "eslint": {
2320 | "version": "8.23.1",
2321 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz",
2322 | "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==",
2323 | "dev": true,
2324 | "requires": {
2325 | "@eslint/eslintrc": "^1.3.2",
2326 | "@humanwhocodes/config-array": "^0.10.4",
2327 | "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
2328 | "@humanwhocodes/module-importer": "^1.0.1",
2329 | "ajv": "^6.10.0",
2330 | "chalk": "^4.0.0",
2331 | "cross-spawn": "^7.0.2",
2332 | "debug": "^4.3.2",
2333 | "doctrine": "^3.0.0",
2334 | "escape-string-regexp": "^4.0.0",
2335 | "eslint-scope": "^7.1.1",
2336 | "eslint-utils": "^3.0.0",
2337 | "eslint-visitor-keys": "^3.3.0",
2338 | "espree": "^9.4.0",
2339 | "esquery": "^1.4.0",
2340 | "esutils": "^2.0.2",
2341 | "fast-deep-equal": "^3.1.3",
2342 | "file-entry-cache": "^6.0.1",
2343 | "find-up": "^5.0.0",
2344 | "glob-parent": "^6.0.1",
2345 | "globals": "^13.15.0",
2346 | "globby": "^11.1.0",
2347 | "grapheme-splitter": "^1.0.4",
2348 | "ignore": "^5.2.0",
2349 | "import-fresh": "^3.0.0",
2350 | "imurmurhash": "^0.1.4",
2351 | "is-glob": "^4.0.0",
2352 | "js-sdsl": "^4.1.4",
2353 | "js-yaml": "^4.1.0",
2354 | "json-stable-stringify-without-jsonify": "^1.0.1",
2355 | "levn": "^0.4.1",
2356 | "lodash.merge": "^4.6.2",
2357 | "minimatch": "^3.1.2",
2358 | "natural-compare": "^1.4.0",
2359 | "optionator": "^0.9.1",
2360 | "regexpp": "^3.2.0",
2361 | "strip-ansi": "^6.0.1",
2362 | "strip-json-comments": "^3.1.0",
2363 | "text-table": "^0.2.0"
2364 | },
2365 | "dependencies": {
2366 | "chalk": {
2367 | "version": "4.1.2",
2368 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
2369 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
2370 | "dev": true,
2371 | "requires": {
2372 | "ansi-styles": "^4.1.0",
2373 | "supports-color": "^7.1.0"
2374 | }
2375 | }
2376 | }
2377 | },
2378 | "eslint-config-prettier": {
2379 | "version": "8.5.0",
2380 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
2381 | "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
2382 | "dev": true,
2383 | "requires": {}
2384 | },
2385 | "eslint-plugin-jsdoc": {
2386 | "version": "39.3.6",
2387 | "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz",
2388 | "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==",
2389 | "dev": true,
2390 | "requires": {
2391 | "@es-joy/jsdoccomment": "~0.31.0",
2392 | "comment-parser": "1.3.1",
2393 | "debug": "^4.3.4",
2394 | "escape-string-regexp": "^4.0.0",
2395 | "esquery": "^1.4.0",
2396 | "semver": "^7.3.7",
2397 | "spdx-expression-parse": "^3.0.1"
2398 | }
2399 | },
2400 | "eslint-plugin-prettier": {
2401 | "version": "4.2.1",
2402 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
2403 | "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
2404 | "dev": true,
2405 | "requires": {
2406 | "prettier-linter-helpers": "^1.0.0"
2407 | }
2408 | },
2409 | "eslint-scope": {
2410 | "version": "7.1.1",
2411 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
2412 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
2413 | "dev": true,
2414 | "requires": {
2415 | "esrecurse": "^4.3.0",
2416 | "estraverse": "^5.2.0"
2417 | }
2418 | },
2419 | "eslint-utils": {
2420 | "version": "3.0.0",
2421 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
2422 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
2423 | "dev": true,
2424 | "requires": {
2425 | "eslint-visitor-keys": "^2.0.0"
2426 | },
2427 | "dependencies": {
2428 | "eslint-visitor-keys": {
2429 | "version": "2.1.0",
2430 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
2431 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
2432 | "dev": true
2433 | }
2434 | }
2435 | },
2436 | "eslint-visitor-keys": {
2437 | "version": "3.3.0",
2438 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
2439 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
2440 | "dev": true
2441 | },
2442 | "espree": {
2443 | "version": "9.4.0",
2444 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
2445 | "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
2446 | "dev": true,
2447 | "requires": {
2448 | "acorn": "^8.8.0",
2449 | "acorn-jsx": "^5.3.2",
2450 | "eslint-visitor-keys": "^3.3.0"
2451 | }
2452 | },
2453 | "esquery": {
2454 | "version": "1.4.0",
2455 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
2456 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
2457 | "dev": true,
2458 | "requires": {
2459 | "estraverse": "^5.1.0"
2460 | }
2461 | },
2462 | "esrecurse": {
2463 | "version": "4.3.0",
2464 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
2465 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
2466 | "dev": true,
2467 | "requires": {
2468 | "estraverse": "^5.2.0"
2469 | }
2470 | },
2471 | "estraverse": {
2472 | "version": "5.3.0",
2473 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2474 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2475 | "dev": true
2476 | },
2477 | "esutils": {
2478 | "version": "2.0.3",
2479 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
2480 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
2481 | "dev": true
2482 | },
2483 | "fast-deep-equal": {
2484 | "version": "3.1.3",
2485 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2486 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
2487 | "dev": true
2488 | },
2489 | "fast-diff": {
2490 | "version": "1.2.0",
2491 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
2492 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
2493 | "dev": true
2494 | },
2495 | "fast-glob": {
2496 | "version": "3.2.12",
2497 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
2498 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
2499 | "dev": true,
2500 | "requires": {
2501 | "@nodelib/fs.stat": "^2.0.2",
2502 | "@nodelib/fs.walk": "^1.2.3",
2503 | "glob-parent": "^5.1.2",
2504 | "merge2": "^1.3.0",
2505 | "micromatch": "^4.0.4"
2506 | },
2507 | "dependencies": {
2508 | "glob-parent": {
2509 | "version": "5.1.2",
2510 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2511 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2512 | "dev": true,
2513 | "requires": {
2514 | "is-glob": "^4.0.1"
2515 | }
2516 | }
2517 | }
2518 | },
2519 | "fast-json-stable-stringify": {
2520 | "version": "2.1.0",
2521 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2522 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2523 | "dev": true
2524 | },
2525 | "fast-levenshtein": {
2526 | "version": "2.0.6",
2527 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
2528 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2529 | "dev": true
2530 | },
2531 | "fastq": {
2532 | "version": "1.13.0",
2533 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
2534 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
2535 | "dev": true,
2536 | "requires": {
2537 | "reusify": "^1.0.4"
2538 | }
2539 | },
2540 | "file-entry-cache": {
2541 | "version": "6.0.1",
2542 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
2543 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
2544 | "dev": true,
2545 | "requires": {
2546 | "flat-cache": "^3.0.4"
2547 | }
2548 | },
2549 | "fill-range": {
2550 | "version": "7.1.1",
2551 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
2552 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
2553 | "dev": true,
2554 | "requires": {
2555 | "to-regex-range": "^5.0.1"
2556 | }
2557 | },
2558 | "find-up": {
2559 | "version": "5.0.0",
2560 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
2561 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
2562 | "dev": true,
2563 | "requires": {
2564 | "locate-path": "^6.0.0",
2565 | "path-exists": "^4.0.0"
2566 | }
2567 | },
2568 | "flat": {
2569 | "version": "5.0.2",
2570 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
2571 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
2572 | "dev": true
2573 | },
2574 | "flat-cache": {
2575 | "version": "3.0.4",
2576 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
2577 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
2578 | "dev": true,
2579 | "requires": {
2580 | "flatted": "^3.1.0",
2581 | "rimraf": "^3.0.2"
2582 | }
2583 | },
2584 | "flatted": {
2585 | "version": "3.2.7",
2586 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
2587 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
2588 | "dev": true
2589 | },
2590 | "fs.realpath": {
2591 | "version": "1.0.0",
2592 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2593 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
2594 | "dev": true
2595 | },
2596 | "fsevents": {
2597 | "version": "2.3.2",
2598 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2599 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2600 | "dev": true,
2601 | "optional": true
2602 | },
2603 | "get-caller-file": {
2604 | "version": "2.0.5",
2605 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
2606 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
2607 | "dev": true
2608 | },
2609 | "glob": {
2610 | "version": "7.2.0",
2611 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
2612 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
2613 | "dev": true,
2614 | "requires": {
2615 | "fs.realpath": "^1.0.0",
2616 | "inflight": "^1.0.4",
2617 | "inherits": "2",
2618 | "minimatch": "^3.0.4",
2619 | "once": "^1.3.0",
2620 | "path-is-absolute": "^1.0.0"
2621 | }
2622 | },
2623 | "glob-parent": {
2624 | "version": "6.0.2",
2625 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2626 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2627 | "dev": true,
2628 | "requires": {
2629 | "is-glob": "^4.0.3"
2630 | }
2631 | },
2632 | "globals": {
2633 | "version": "13.17.0",
2634 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
2635 | "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
2636 | "dev": true,
2637 | "requires": {
2638 | "type-fest": "^0.20.2"
2639 | }
2640 | },
2641 | "globby": {
2642 | "version": "11.1.0",
2643 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
2644 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
2645 | "dev": true,
2646 | "requires": {
2647 | "array-union": "^2.1.0",
2648 | "dir-glob": "^3.0.1",
2649 | "fast-glob": "^3.2.9",
2650 | "ignore": "^5.2.0",
2651 | "merge2": "^1.4.1",
2652 | "slash": "^3.0.0"
2653 | }
2654 | },
2655 | "grapheme-splitter": {
2656 | "version": "1.0.4",
2657 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
2658 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
2659 | "dev": true
2660 | },
2661 | "has-flag": {
2662 | "version": "4.0.0",
2663 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2664 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2665 | "dev": true
2666 | },
2667 | "he": {
2668 | "version": "1.2.0",
2669 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
2670 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
2671 | "dev": true
2672 | },
2673 | "ignore": {
2674 | "version": "5.2.0",
2675 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
2676 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
2677 | "dev": true
2678 | },
2679 | "import-fresh": {
2680 | "version": "3.3.0",
2681 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2682 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2683 | "dev": true,
2684 | "requires": {
2685 | "parent-module": "^1.0.0",
2686 | "resolve-from": "^4.0.0"
2687 | }
2688 | },
2689 | "imurmurhash": {
2690 | "version": "0.1.4",
2691 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2692 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2693 | "dev": true
2694 | },
2695 | "inflight": {
2696 | "version": "1.0.6",
2697 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2698 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
2699 | "dev": true,
2700 | "requires": {
2701 | "once": "^1.3.0",
2702 | "wrappy": "1"
2703 | }
2704 | },
2705 | "inherits": {
2706 | "version": "2.0.4",
2707 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2708 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2709 | "dev": true
2710 | },
2711 | "is-binary-path": {
2712 | "version": "2.1.0",
2713 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2714 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2715 | "dev": true,
2716 | "requires": {
2717 | "binary-extensions": "^2.0.0"
2718 | }
2719 | },
2720 | "is-extglob": {
2721 | "version": "2.1.1",
2722 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2723 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2724 | "dev": true
2725 | },
2726 | "is-fullwidth-code-point": {
2727 | "version": "3.0.0",
2728 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2729 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2730 | "dev": true
2731 | },
2732 | "is-glob": {
2733 | "version": "4.0.3",
2734 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2735 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2736 | "dev": true,
2737 | "requires": {
2738 | "is-extglob": "^2.1.1"
2739 | }
2740 | },
2741 | "is-number": {
2742 | "version": "7.0.0",
2743 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2744 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2745 | "dev": true
2746 | },
2747 | "is-plain-obj": {
2748 | "version": "2.1.0",
2749 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
2750 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
2751 | "dev": true
2752 | },
2753 | "is-unicode-supported": {
2754 | "version": "0.1.0",
2755 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
2756 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
2757 | "dev": true
2758 | },
2759 | "isexe": {
2760 | "version": "2.0.0",
2761 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2762 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2763 | "dev": true
2764 | },
2765 | "js-sdsl": {
2766 | "version": "4.1.4",
2767 | "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
2768 | "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
2769 | "dev": true
2770 | },
2771 | "js-yaml": {
2772 | "version": "4.1.0",
2773 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2774 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2775 | "dev": true,
2776 | "requires": {
2777 | "argparse": "^2.0.1"
2778 | }
2779 | },
2780 | "jsdoc-type-pratt-parser": {
2781 | "version": "3.1.0",
2782 | "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz",
2783 | "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==",
2784 | "dev": true
2785 | },
2786 | "json-schema-traverse": {
2787 | "version": "0.4.1",
2788 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2789 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2790 | "dev": true
2791 | },
2792 | "json-stable-stringify-without-jsonify": {
2793 | "version": "1.0.1",
2794 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2795 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2796 | "dev": true
2797 | },
2798 | "levn": {
2799 | "version": "0.4.1",
2800 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2801 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2802 | "dev": true,
2803 | "requires": {
2804 | "prelude-ls": "^1.2.1",
2805 | "type-check": "~0.4.0"
2806 | }
2807 | },
2808 | "locate-path": {
2809 | "version": "6.0.0",
2810 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2811 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2812 | "dev": true,
2813 | "requires": {
2814 | "p-locate": "^5.0.0"
2815 | }
2816 | },
2817 | "lodash.merge": {
2818 | "version": "4.6.2",
2819 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2820 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2821 | "dev": true
2822 | },
2823 | "log-symbols": {
2824 | "version": "4.1.0",
2825 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
2826 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
2827 | "dev": true,
2828 | "requires": {
2829 | "chalk": "^4.1.0",
2830 | "is-unicode-supported": "^0.1.0"
2831 | },
2832 | "dependencies": {
2833 | "chalk": {
2834 | "version": "4.1.2",
2835 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
2836 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
2837 | "dev": true,
2838 | "requires": {
2839 | "ansi-styles": "^4.1.0",
2840 | "supports-color": "^7.1.0"
2841 | }
2842 | }
2843 | }
2844 | },
2845 | "merge2": {
2846 | "version": "1.4.1",
2847 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2848 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2849 | "dev": true
2850 | },
2851 | "micromatch": {
2852 | "version": "4.0.8",
2853 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
2854 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
2855 | "dev": true,
2856 | "requires": {
2857 | "braces": "^3.0.3",
2858 | "picomatch": "^2.3.1"
2859 | }
2860 | },
2861 | "minimatch": {
2862 | "version": "3.1.2",
2863 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2864 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2865 | "dev": true,
2866 | "requires": {
2867 | "brace-expansion": "^1.1.7"
2868 | }
2869 | },
2870 | "mocha": {
2871 | "version": "10.8.2",
2872 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
2873 | "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
2874 | "dev": true,
2875 | "requires": {
2876 | "ansi-colors": "^4.1.3",
2877 | "browser-stdout": "^1.3.1",
2878 | "chokidar": "^3.5.3",
2879 | "debug": "^4.3.5",
2880 | "diff": "^5.2.0",
2881 | "escape-string-regexp": "^4.0.0",
2882 | "find-up": "^5.0.0",
2883 | "glob": "^8.1.0",
2884 | "he": "^1.2.0",
2885 | "js-yaml": "^4.1.0",
2886 | "log-symbols": "^4.1.0",
2887 | "minimatch": "^5.1.6",
2888 | "ms": "^2.1.3",
2889 | "serialize-javascript": "^6.0.2",
2890 | "strip-json-comments": "^3.1.1",
2891 | "supports-color": "^8.1.1",
2892 | "workerpool": "^6.5.1",
2893 | "yargs": "^16.2.0",
2894 | "yargs-parser": "^20.2.9",
2895 | "yargs-unparser": "^2.0.0"
2896 | },
2897 | "dependencies": {
2898 | "brace-expansion": {
2899 | "version": "2.0.1",
2900 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
2901 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
2902 | "dev": true,
2903 | "requires": {
2904 | "balanced-match": "^1.0.0"
2905 | }
2906 | },
2907 | "glob": {
2908 | "version": "8.1.0",
2909 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
2910 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
2911 | "dev": true,
2912 | "requires": {
2913 | "fs.realpath": "^1.0.0",
2914 | "inflight": "^1.0.4",
2915 | "inherits": "2",
2916 | "minimatch": "^5.0.1",
2917 | "once": "^1.3.0"
2918 | }
2919 | },
2920 | "minimatch": {
2921 | "version": "5.1.6",
2922 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
2923 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
2924 | "dev": true,
2925 | "requires": {
2926 | "brace-expansion": "^2.0.1"
2927 | }
2928 | },
2929 | "supports-color": {
2930 | "version": "8.1.1",
2931 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2932 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2933 | "dev": true,
2934 | "requires": {
2935 | "has-flag": "^4.0.0"
2936 | }
2937 | }
2938 | }
2939 | },
2940 | "ms": {
2941 | "version": "2.1.3",
2942 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2943 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2944 | "dev": true
2945 | },
2946 | "natural-compare": {
2947 | "version": "1.4.0",
2948 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2949 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2950 | "dev": true
2951 | },
2952 | "normalize-path": {
2953 | "version": "3.0.0",
2954 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2955 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2956 | "dev": true
2957 | },
2958 | "once": {
2959 | "version": "1.4.0",
2960 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2961 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
2962 | "dev": true,
2963 | "requires": {
2964 | "wrappy": "1"
2965 | }
2966 | },
2967 | "optionator": {
2968 | "version": "0.9.1",
2969 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2970 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2971 | "dev": true,
2972 | "requires": {
2973 | "deep-is": "^0.1.3",
2974 | "fast-levenshtein": "^2.0.6",
2975 | "levn": "^0.4.1",
2976 | "prelude-ls": "^1.2.1",
2977 | "type-check": "^0.4.0",
2978 | "word-wrap": "^1.2.3"
2979 | }
2980 | },
2981 | "p-limit": {
2982 | "version": "3.1.0",
2983 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2984 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2985 | "dev": true,
2986 | "requires": {
2987 | "yocto-queue": "^0.1.0"
2988 | }
2989 | },
2990 | "p-locate": {
2991 | "version": "5.0.0",
2992 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2993 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2994 | "dev": true,
2995 | "requires": {
2996 | "p-limit": "^3.0.2"
2997 | }
2998 | },
2999 | "parent-module": {
3000 | "version": "1.0.1",
3001 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3002 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3003 | "dev": true,
3004 | "requires": {
3005 | "callsites": "^3.0.0"
3006 | }
3007 | },
3008 | "path-exists": {
3009 | "version": "4.0.0",
3010 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
3011 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
3012 | "dev": true
3013 | },
3014 | "path-is-absolute": {
3015 | "version": "1.0.1",
3016 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
3017 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
3018 | "dev": true
3019 | },
3020 | "path-key": {
3021 | "version": "3.1.1",
3022 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3023 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3024 | "dev": true
3025 | },
3026 | "path-type": {
3027 | "version": "4.0.0",
3028 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3029 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
3030 | "dev": true
3031 | },
3032 | "picomatch": {
3033 | "version": "2.3.1",
3034 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3035 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3036 | "dev": true
3037 | },
3038 | "prelude-ls": {
3039 | "version": "1.2.1",
3040 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
3041 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
3042 | "dev": true
3043 | },
3044 | "prettier": {
3045 | "version": "2.7.1",
3046 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
3047 | "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
3048 | "dev": true
3049 | },
3050 | "prettier-linter-helpers": {
3051 | "version": "1.0.0",
3052 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
3053 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
3054 | "dev": true,
3055 | "requires": {
3056 | "fast-diff": "^1.1.2"
3057 | }
3058 | },
3059 | "punycode": {
3060 | "version": "2.1.1",
3061 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
3062 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
3063 | "dev": true
3064 | },
3065 | "queue-microtask": {
3066 | "version": "1.2.3",
3067 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3068 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
3069 | "dev": true
3070 | },
3071 | "randombytes": {
3072 | "version": "2.1.0",
3073 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
3074 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
3075 | "dev": true,
3076 | "requires": {
3077 | "safe-buffer": "^5.1.0"
3078 | }
3079 | },
3080 | "readdirp": {
3081 | "version": "3.6.0",
3082 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3083 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3084 | "dev": true,
3085 | "requires": {
3086 | "picomatch": "^2.2.1"
3087 | }
3088 | },
3089 | "regexpp": {
3090 | "version": "3.2.0",
3091 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
3092 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
3093 | "dev": true
3094 | },
3095 | "require-directory": {
3096 | "version": "2.1.1",
3097 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
3098 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
3099 | "dev": true
3100 | },
3101 | "resolve-from": {
3102 | "version": "4.0.0",
3103 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
3104 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
3105 | "dev": true
3106 | },
3107 | "reusify": {
3108 | "version": "1.0.4",
3109 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
3110 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
3111 | "dev": true
3112 | },
3113 | "rimraf": {
3114 | "version": "3.0.2",
3115 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
3116 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
3117 | "dev": true,
3118 | "requires": {
3119 | "glob": "^7.1.3"
3120 | }
3121 | },
3122 | "run-parallel": {
3123 | "version": "1.2.0",
3124 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
3125 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
3126 | "dev": true,
3127 | "requires": {
3128 | "queue-microtask": "^1.2.2"
3129 | }
3130 | },
3131 | "safe-buffer": {
3132 | "version": "5.2.1",
3133 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
3134 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
3135 | "dev": true
3136 | },
3137 | "semver": {
3138 | "version": "7.6.3",
3139 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
3140 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
3141 | "dev": true
3142 | },
3143 | "serialize-javascript": {
3144 | "version": "6.0.2",
3145 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
3146 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
3147 | "dev": true,
3148 | "requires": {
3149 | "randombytes": "^2.1.0"
3150 | }
3151 | },
3152 | "shebang-command": {
3153 | "version": "2.0.0",
3154 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3155 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3156 | "dev": true,
3157 | "requires": {
3158 | "shebang-regex": "^3.0.0"
3159 | }
3160 | },
3161 | "shebang-regex": {
3162 | "version": "3.0.0",
3163 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3164 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3165 | "dev": true
3166 | },
3167 | "slash": {
3168 | "version": "3.0.0",
3169 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
3170 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
3171 | "dev": true
3172 | },
3173 | "spdx-exceptions": {
3174 | "version": "2.3.0",
3175 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
3176 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
3177 | "dev": true
3178 | },
3179 | "spdx-expression-parse": {
3180 | "version": "3.0.1",
3181 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
3182 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
3183 | "dev": true,
3184 | "requires": {
3185 | "spdx-exceptions": "^2.1.0",
3186 | "spdx-license-ids": "^3.0.0"
3187 | }
3188 | },
3189 | "spdx-license-ids": {
3190 | "version": "3.0.12",
3191 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
3192 | "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
3193 | "dev": true
3194 | },
3195 | "string-width": {
3196 | "version": "4.2.3",
3197 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3198 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3199 | "dev": true,
3200 | "requires": {
3201 | "emoji-regex": "^8.0.0",
3202 | "is-fullwidth-code-point": "^3.0.0",
3203 | "strip-ansi": "^6.0.1"
3204 | }
3205 | },
3206 | "strip-ansi": {
3207 | "version": "6.0.1",
3208 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3209 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3210 | "dev": true,
3211 | "requires": {
3212 | "ansi-regex": "^5.0.1"
3213 | }
3214 | },
3215 | "strip-json-comments": {
3216 | "version": "3.1.1",
3217 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
3218 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
3219 | "dev": true
3220 | },
3221 | "supports-color": {
3222 | "version": "7.2.0",
3223 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3224 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3225 | "dev": true,
3226 | "requires": {
3227 | "has-flag": "^4.0.0"
3228 | }
3229 | },
3230 | "text-table": {
3231 | "version": "0.2.0",
3232 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3233 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
3234 | "dev": true
3235 | },
3236 | "to-regex-range": {
3237 | "version": "5.0.1",
3238 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3239 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3240 | "dev": true,
3241 | "requires": {
3242 | "is-number": "^7.0.0"
3243 | }
3244 | },
3245 | "type-check": {
3246 | "version": "0.4.0",
3247 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3248 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3249 | "dev": true,
3250 | "requires": {
3251 | "prelude-ls": "^1.2.1"
3252 | }
3253 | },
3254 | "type-fest": {
3255 | "version": "0.20.2",
3256 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
3257 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
3258 | "dev": true
3259 | },
3260 | "uglify-js": {
3261 | "version": "3.17.1",
3262 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.1.tgz",
3263 | "integrity": "sha512-+juFBsLLw7AqMaqJ0GFvlsGZwdQfI2ooKQB39PSBgMnMakcFosi9O8jCwE+2/2nMNcc0z63r9mwjoDG8zr+q0Q==",
3264 | "dev": true
3265 | },
3266 | "uri-js": {
3267 | "version": "4.4.1",
3268 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
3269 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
3270 | "dev": true,
3271 | "requires": {
3272 | "punycode": "^2.1.0"
3273 | }
3274 | },
3275 | "which": {
3276 | "version": "2.0.2",
3277 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3278 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3279 | "dev": true,
3280 | "requires": {
3281 | "isexe": "^2.0.0"
3282 | }
3283 | },
3284 | "word-wrap": {
3285 | "version": "1.2.5",
3286 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
3287 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
3288 | "dev": true
3289 | },
3290 | "workerpool": {
3291 | "version": "6.5.1",
3292 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
3293 | "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
3294 | "dev": true
3295 | },
3296 | "wrap-ansi": {
3297 | "version": "7.0.0",
3298 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3299 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3300 | "dev": true,
3301 | "requires": {
3302 | "ansi-styles": "^4.0.0",
3303 | "string-width": "^4.1.0",
3304 | "strip-ansi": "^6.0.0"
3305 | }
3306 | },
3307 | "wrappy": {
3308 | "version": "1.0.2",
3309 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3310 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
3311 | "dev": true
3312 | },
3313 | "y18n": {
3314 | "version": "5.0.8",
3315 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
3316 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
3317 | "dev": true
3318 | },
3319 | "yargs": {
3320 | "version": "16.2.0",
3321 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
3322 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
3323 | "dev": true,
3324 | "requires": {
3325 | "cliui": "^7.0.2",
3326 | "escalade": "^3.1.1",
3327 | "get-caller-file": "^2.0.5",
3328 | "require-directory": "^2.1.1",
3329 | "string-width": "^4.2.0",
3330 | "y18n": "^5.0.5",
3331 | "yargs-parser": "^20.2.2"
3332 | }
3333 | },
3334 | "yargs-parser": {
3335 | "version": "20.2.9",
3336 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
3337 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
3338 | "dev": true
3339 | },
3340 | "yargs-unparser": {
3341 | "version": "2.0.0",
3342 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
3343 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
3344 | "dev": true,
3345 | "requires": {
3346 | "camelcase": "^6.0.0",
3347 | "decamelize": "^4.0.0",
3348 | "flat": "^5.0.2",
3349 | "is-plain-obj": "^2.1.0"
3350 | }
3351 | },
3352 | "yocto-queue": {
3353 | "version": "0.1.0",
3354 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3355 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3356 | "dev": true
3357 | }
3358 | }
3359 | }
3360 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "diffler",
3 | "version": "2.1.2",
4 | "description": "A recursive JSON comparison script for humans",
5 | "main": "./dist/index.js",
6 | "devDependencies": {
7 | "eslint": "^8.23.1",
8 | "eslint-config-prettier": "^8.5.0",
9 | "eslint-plugin-jsdoc": "^39.3.6",
10 | "eslint-plugin-prettier": "^4.2.1",
11 | "mocha": "^10.0.0",
12 | "prettier": "^2.1.2",
13 | "uglify-js": "^3.11.2"
14 | },
15 | "scripts": {
16 | "test": "echo \"Running Mocha Tests\" && mocha ./tests/index.js",
17 | "lint": "eslint .",
18 | "build": "echo \"Running Build\" && uglifyjs ./src/index.js --comments --compress --mangle -o ./dist/index.js",
19 | "bench": "echo \"Running Performance Benchmark\" && node ./tests/performance.js"
20 | },
21 | "repository": {
22 | "type": "git",
23 | "url": "https://github.com/omgaz/diffler.git"
24 | },
25 | "keywords": [
26 | "recursive",
27 | "difference",
28 | "comparison",
29 | "compare",
30 | "diff",
31 | "js-diff",
32 | "deep-diff"
33 | ],
34 | "author": "Gary Chisholm",
35 | "license": "MIT",
36 | "bugs": {
37 | "url": "https://github.com/omgaz/diffler/issues"
38 | },
39 | "homepage": "https://github.com/omgaz/diffler"
40 | }
41 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @license MIT https://github.com/omgaz/diffler
3 | * Author: Gary Chisholm @omgaz
4 | */
5 |
6 | /**
7 | * @typedef {object} DiffResult
8 | * @property {*} from Original value.
9 | * @property {*} to New value.
10 | */
11 |
12 | /**
13 | * @param {any} value Value to check.
14 | * @returns {boolean} True if value is a plain object.
15 | */
16 | const isPlainObject = (value) => value && typeof value === 'object' && !Array.isArray(value);
17 |
18 | /**
19 | * @param {object} obj The object to check.
20 | * @param {string} key The key to check in the object.
21 | * @returns {boolean} True if value is a valid property.
22 | */
23 | const isValidProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] !== 'function';
24 |
25 | /**
26 | * @param {any} val1 First value.
27 | * @param {any} val2 Second value.
28 | * @returns {DiffResult|null} Difference result or null if no change.
29 | */
30 | const compareValues = (val1, val2) => {
31 | // Different types
32 | if (typeof val1 !== typeof val2) {
33 | return { from: val1, to: val2 };
34 | }
35 |
36 | // Handle arrays
37 | if (Array.isArray(val1) && Array.isArray(val2)) {
38 | const arrayDiff = {};
39 | const maxLength = Math.max(val1.length, val2.length);
40 |
41 | for (let i = 0; i < maxLength; i++) {
42 | const diff = compareValues(val1[i], val2[i]);
43 | if (diff) arrayDiff[i] = diff;
44 | }
45 |
46 | return Object.keys(arrayDiff).length ? arrayDiff : null;
47 | }
48 |
49 | // Handle objects
50 | if (isPlainObject(val1) && isPlainObject(val2)) {
51 | const nestedDiff = diffler(val1, val2);
52 | return Object.keys(nestedDiff).length ? nestedDiff : null;
53 | }
54 |
55 | // Compare values
56 | return val1 !== val2 ? { from: val1, to: val2 } : null;
57 | };
58 |
59 | /**.
60 | * Compares two objects and returns their differences
61 | *
62 | * @param {object} originalObj First object to compare
63 | * @param {object} newObj Second object to compare against
64 | * @returns {Object.} Object containing changes
65 | */
66 | function diffler(originalObj, newObj) {
67 | const diff = {};
68 |
69 | // Check for changes and removals
70 | for (const key in originalObj) {
71 | if (!isValidProperty(originalObj, key)) continue;
72 |
73 | if (!(key in newObj)) {
74 | diff[key] = { from: originalObj[key], to: null };
75 | continue;
76 | }
77 |
78 | const difference = compareValues(originalObj[key], newObj[key]);
79 | if (difference) {
80 | diff[key] = difference;
81 | }
82 | }
83 |
84 | // Check for additions
85 | for (const key in newObj) {
86 | if (!isValidProperty(newObj, key)) continue;
87 |
88 | if (!(key in originalObj)) {
89 | diff[key] = { from: null, to: newObj[key] };
90 | }
91 | }
92 |
93 | return diff;
94 | }
95 |
96 | module.exports = diffler;
97 |
--------------------------------------------------------------------------------
/stuff/AppIcon-readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omgaz/diffler/d1a01640e2d47786123c932be0fa7b2e35782d32/stuff/AppIcon-readme.png
--------------------------------------------------------------------------------
/tests/benchmarker.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Runs the provided function as many times as possible.
3 | *
4 | * @param {Function} func - The function to benchmark.
5 | * @returns {number} The number of operations performed.
6 | */
7 | function bench(func) {
8 | let ops = 0;
9 | const startMs = Date.now();
10 | const end = startMs + 1000;
11 | while (Date.now() < end) {
12 | func();
13 | ops++;
14 | }
15 | return ops;
16 | }
17 |
18 | /**
19 | * Runs the provided function 10 times and averages the results.
20 | *
21 | * @param {Function} func - The function to benchmark.
22 | * @returns {number} The average number of operations performed per second.
23 | */
24 | function bench10(func) {
25 | let ops = 0;
26 | for (let i = 0; i < 10; i++) {
27 | ops += exports.bench(func);
28 | }
29 | return ops / 10; // Return the average ops/sec
30 | }
31 |
32 | // Export the benchmarking functions
33 | exports.bench = bench;
34 | exports.bench10 = bench10;
35 |
--------------------------------------------------------------------------------
/tests/data/json-metadata-v1.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | version: 1,
3 | created: '2019-07-23T09:36:20.719Z',
4 | modified: '2019-07-23T09:36:20.719Z',
5 | assetUrl: 'readme.svg',
6 | type: 'image/svg+xml',
7 | author: {
8 | id: 14,
9 | name: 'Gary',
10 | },
11 | keywords: ['app logo', 'logo', 'readme'],
12 | status: 'draft',
13 | };
14 |
--------------------------------------------------------------------------------
/tests/data/json-metadata-v2.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | version: 2,
3 | created: '2019-07-23T09:36:20.719Z',
4 | modified: '2019-07-23T09:36:20.719Z',
5 | assetUrl: 'stuff/Appicon-readme.svg',
6 | type: 'image/svg+xml',
7 | description: 'Readme icon for git repo',
8 | author: {
9 | id: 14,
10 | name: 'Gary',
11 | },
12 | keywords: ['app logo', 'logo', 'readme'],
13 | status: 'pending',
14 | versionHistory: {
15 | 1: {
16 | modified: '2019-07-23T09:36:20.719Z',
17 | assetUrl: 'readme.svg',
18 | type: 'image/svg+xml',
19 | author: {
20 | id: 14,
21 | name: 'Gary',
22 | },
23 | keywords: ['app logo', 'logo', 'readme'],
24 | },
25 | },
26 | };
27 |
--------------------------------------------------------------------------------
/tests/data/json-metadata-v3.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | version: 3,
3 | created: '2019-07-23T09:36:20.719Z',
4 | modified: '2019-07-23T09:39:25.577Z',
5 | assetUrl: 'stuff/Appicon-readme.png',
6 | type: 'image/png',
7 | description: 'Readme icon for git repo',
8 | author: {
9 | id: 14,
10 | name: 'Gary',
11 | },
12 | keywords: ['app logo', 'logo', 'readme'],
13 | status: 'approved',
14 | versionHistory: {
15 | 1: {
16 | modified: '2019-07-23T09:36:20.719Z',
17 | assetUrl: 'readme.svg',
18 | type: 'image/svg+xml',
19 | author: {
20 | id: 14,
21 | name: 'Gary',
22 | },
23 | keywords: ['app logo', 'logo', 'readme'],
24 | },
25 | 2: {
26 | modified: '2019-07-23T09:36:20.719Z',
27 | assetUrl: 'stuff/Appicon-readme.svg',
28 | type: 'image/svg+xml',
29 | description: 'Readme icon for git repo',
30 | author: {
31 | id: 14,
32 | name: 'Gary',
33 | },
34 | keywords: ['app logo', 'logo', 'readme'],
35 | },
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/tests/index.js:
--------------------------------------------------------------------------------
1 | const assert = require('assert');
2 | const diffler = require('../src');
3 |
4 | describe('getDiff', () => {
5 | describe('simple checks', () => {
6 | it('returns false when no changes detected', () => {
7 | const testObjectA = { name: 'gary' };
8 | const testObjectB = { name: 'gary' };
9 | const difference = diffler(testObjectA, testObjectB);
10 | assert.equal(Object.keys(difference).length, 0);
11 | assert.deepEqual(difference, {});
12 | });
13 |
14 | it('detect a single property change', () => {
15 | const testObjectA = { name: 'gary' };
16 | const testObjectB = { name: 'cindy' };
17 | const difference = diffler(testObjectA, testObjectB);
18 |
19 | assert.equal(Object.keys(difference).length, 1);
20 | assert.equal(Object.keys(difference.name).length, 2);
21 |
22 | assert.equal(difference.name.from, 'gary');
23 | assert.equal(difference.name.to, 'cindy');
24 | });
25 |
26 | it('detect no changes', () => {
27 | const testObjectA = { name: 'gary' };
28 | const testObjectB = { name: 'gary' };
29 | const difference = diffler(testObjectA, testObjectB);
30 |
31 | assert.equal(Object.keys(difference).length, 0);
32 | });
33 |
34 | it('detect type changes', () => {
35 | const testObjectA = { name: '1' };
36 | const testObjectB = { name: 1 };
37 | const difference = diffler(testObjectA, testObjectB);
38 |
39 | assert.equal(Object.keys(difference).length, 1);
40 | assert.equal(Object.keys(difference.name).length, 2);
41 |
42 | assert.equal(difference.name.from, '1');
43 | assert.equal(difference.name.to, 1);
44 | });
45 | });
46 |
47 | describe('multiple checks', () => {
48 | it('detect a nested property change', () => {
49 | const testObjectA = {
50 | name: 'gary',
51 | age: 33,
52 | weight: { unit: 'kg', value: 80 },
53 | };
54 | const testObjectB = {
55 | name: 'gary',
56 | age: 33,
57 | weight: { unit: 'kg', value: 79 },
58 | };
59 | const difference = diffler(testObjectA, testObjectB);
60 |
61 | assert.equal(Object.keys(difference).length, 1);
62 | assert.equal(Object.keys(difference.weight.value).length, 2);
63 |
64 | assert.equal(difference.weight.value.from, 80);
65 | assert.equal(difference.weight.value.to, 79);
66 | });
67 |
68 | it('detect multiple nested property change', () => {
69 | const testObjectA = {
70 | name: 'gary',
71 | age: 33,
72 | weight: { unit: 'kg', value: 80 },
73 | };
74 | const testObjectB = {
75 | name: 'gary',
76 | age: 34,
77 | weight: { unit: 'stone', value: 12.4 },
78 | };
79 | const difference = diffler(testObjectA, testObjectB);
80 |
81 | assert.equal(Object.keys(difference).length, 2);
82 | assert.equal(Object.keys(difference.weight).length, 2);
83 |
84 | assert.equal(difference.age.from, 33);
85 | assert.equal(difference.age.to, 34);
86 |
87 | assert.equal(difference.weight.value.from, 80);
88 | assert.equal(difference.weight.value.to, 12.4);
89 |
90 | assert.equal(difference.weight.unit.from, 'kg');
91 | assert.equal(difference.weight.unit.to, 'stone');
92 | });
93 | });
94 |
95 | describe('property removals', () => {
96 | it('detect a single property removal as null', () => {
97 | const testObjectA = { name: 'gary' };
98 | const testObjectB = {};
99 | const difference = diffler(testObjectA, testObjectB);
100 |
101 | assert.equal(Object.keys(difference).length, 1);
102 | assert.equal(Object.keys(difference.name).length, 2);
103 |
104 | assert.equal(difference.name.from, 'gary');
105 | assert.equal(difference.name.to, null);
106 | });
107 |
108 | it('detect a nested property removal as null', () => {
109 | const testObjectA = {
110 | name: 'gary',
111 | age: 33,
112 | weight: { unit: 'kg', value: 80 },
113 | };
114 | const testObjectB = { name: 'gary', age: 33 };
115 | const difference = diffler(testObjectA, testObjectB);
116 |
117 | assert.equal(Object.keys(difference).length, 1);
118 | assert.equal(Object.keys(difference.weight).length, 2);
119 |
120 | assert.deepEqual(difference.weight.from, { unit: 'kg', value: 80 });
121 | assert.equal(difference.weight.to, null);
122 | });
123 |
124 | it('detect comparisons with null', () => {
125 | const differenceFrom = diffler({ a: null, b: 'things' }, { a: 'more', b: 'things' });
126 | const differenceTo = diffler({ a: 'some', b: 'things' }, { a: null, b: 'things' });
127 | const same = diffler({ a: null, b: 'things' }, { a: null, b: 'things' });
128 |
129 | assert.equal(Object.keys(differenceFrom).length, 1);
130 | assert.equal(Object.keys(differenceTo).length, 1);
131 | assert.equal(Object.keys(same).length, 0);
132 |
133 | assert.equal(differenceFrom.a.from, null);
134 | assert.equal(differenceTo.a.to, null);
135 | });
136 |
137 | // https://github.com/omgaz/diffler/issues/31
138 | it('detect comparisons with defined undefined', () => {
139 | const differenceFrom = diffler({ a: undefined, b: 'things' }, { a: 'more', b: 'things' });
140 | const differenceTo = diffler({ a: 'some', b: 'things' }, { a: undefined, b: 'things' });
141 | const same = diffler({ a: undefined, b: 'things' }, { a: undefined, b: 'things' });
142 |
143 | assert.equal(Object.keys(differenceFrom).length, 1);
144 | assert.equal(Object.keys(differenceTo).length, 1);
145 | assert.equal(Object.keys(same).length, 0);
146 |
147 | assert.equal(differenceFrom.a.from, undefined);
148 | assert.equal(differenceTo.a.to, undefined);
149 | });
150 |
151 | // https://github.com/omgaz/diffler/issues/31
152 | it('detect comparisons with arrays of mixed types', () => {
153 | const difference = diffler({ a: [1], b: ['one'] }, { a: ['one'], b: [1] });
154 |
155 | assert.equal(Object.keys(difference).length, 2);
156 |
157 | console.log(difference);
158 |
159 | assert.equal(difference.a[0].from, '1');
160 | assert.equal(difference.a[0].to, 'one');
161 | assert.equal(difference.b[0].from, 'one');
162 | assert.equal(difference.b[0].to, 1);
163 | });
164 |
165 | // https://github.com/omgaz/diffler/issues/31
166 | it('detect comparisons with arrays of mixed primitives and objects', () => {
167 | const difference = diffler(
168 | { a: ['something'], b: [{ b: 'something' }] },
169 | { a: [{ a: 'something' }], b: ['something'] },
170 | );
171 |
172 | assert.equal(Object.keys(difference).length, 2);
173 |
174 | assert.equal(difference.a[0].from, 'something');
175 | assert.deepEqual(difference.a[0].to, {
176 | a: 'something',
177 | });
178 | assert.deepEqual(difference.b[0].from, {
179 | b: 'something',
180 | });
181 | assert.equal(difference.b[0].to, 'something');
182 | });
183 |
184 | it('detect changes in arrays of objects', () => {
185 | const testObjectA = {
186 | items: [
187 | { id: 1, value: 'a' },
188 | { id: 2, value: 'b' },
189 | ],
190 | };
191 | const testObjectB = {
192 | items: [
193 | { id: 1, value: 'a' },
194 | { id: 2, value: 'c' },
195 | ],
196 | };
197 | const difference = diffler(testObjectA, testObjectB);
198 |
199 | assert.equal(Object.keys(difference).length, 1);
200 | assert.equal(Object.keys(difference.items[1]).length, 1);
201 | assert.equal(difference.items[1].value.from, 'b');
202 | assert.equal(difference.items[1].value.to, 'c');
203 | });
204 |
205 | it('detect additions in arrays of objects', () => {
206 | const testObjectA = { items: [{ id: 1, value: 'a' }] };
207 | const testObjectB = {
208 | items: [
209 | { id: 1, value: 'a' },
210 | { id: 2, value: 'b' },
211 | ],
212 | };
213 | const difference = diffler(testObjectA, testObjectB);
214 |
215 | assert.equal(Object.keys(difference).length, 1);
216 | assert.deepEqual(difference.items[1], { from: undefined, to: { id: 2, value: 'b' } });
217 | });
218 |
219 | it('detect removals in arrays of objects', () => {
220 | const testObjectA = {
221 | items: [
222 | { id: 1, value: 'a' },
223 | { id: 2, value: 'b' },
224 | ],
225 | };
226 | const testObjectB = { items: [{ id: 1, value: 'a' }] };
227 | const difference = diffler(testObjectA, testObjectB);
228 |
229 | assert.equal(Object.keys(difference).length, 1);
230 | assert.deepEqual(difference.items[1], { from: { id: 2, value: 'b' }, to: undefined });
231 | });
232 | });
233 | });
234 |
--------------------------------------------------------------------------------
/tests/performance.js:
--------------------------------------------------------------------------------
1 | const benchmarker = require('./benchmarker');
2 | const diffler = require('../src');
3 | const metadatav3 = require('./data/json-metadata-v3');
4 | const metadatav2 = require('./data/json-metadata-v2');
5 |
6 | /**
7 | * Function to run the diffler comparison as a benchmark suite.
8 | */
9 | function suite() {
10 | diffler(metadatav2, metadatav3);
11 | }
12 |
13 | // Run the benchmark suite and get operations per second
14 | const ops = benchmarker.bench10(suite);
15 |
16 | // Set the benchmark value for comparison
17 | const benchmark = 466763; // Update this value to set a new benchmark
18 |
19 | // Log the number of operations per second
20 | console.info(`Executed ${ops} ops/s`);
21 |
22 | // Calculate the difference between the benchmark and the current ops
23 | const opsDiff = benchmark / ops;
24 | const opsDiffAsPercentage = Math.round(opsDiff * 100);
25 | const opsDiffAsPercentageDifference = 100 - opsDiffAsPercentage;
26 |
27 | // Check if the performance has changed
28 | if (opsDiffAsPercentageDifference === 0) {
29 | console.log("Bench complete: Code hasn't changed.");
30 | return;
31 | } else if (opsDiffAsPercentageDifference < -10) {
32 | console.error(
33 | `Bench complete: Code ran ${Math.abs(opsDiffAsPercentageDifference)}% slower, it's time to do something.`,
34 | );
35 | return;
36 | }
37 |
38 | // Determine if the code ran faster or slower than the benchmark
39 | const message = opsDiffAsPercentageDifference > 0 ? 'faster' : 'slower';
40 |
41 | // Log the performance difference
42 | console.info(`Bench complete: Code ran ${Math.abs(opsDiffAsPercentageDifference)}% ${message} than benchmark.`);
43 |
--------------------------------------------------------------------------------