├── .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 | [![npm version](https://badge.fury.io/js/diffler.png)](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 | [![Build Status](https://travis-ci.org/omgaz/diffler.svg?branch=master)](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 | --------------------------------------------------------------------------------