├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── jest.config.js ├── package-lock.json ├── package.json ├── src ├── Cache.test.ts └── Cache.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .history 2 | node_modules 3 | .npmrc 4 | dist 5 | coverage -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | *.log 3 | npm-debug.log* 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by coverage tools 11 | coverage 12 | .nyc_output 13 | 14 | # Dependency directory 15 | node_modules/ 16 | 17 | # Optional eslint cache 18 | .eslintcache 19 | 20 | # Environment files 21 | .env 22 | 23 | # Temp files 24 | tmp 25 | *.tgz 26 | 27 | .history 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # ISC License 2 | 3 | Copyright (c) 2024 Ebenezer Don 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 10 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 12 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 14 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 | PERFORMANCE OF THIS SOFTWARE. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TS-Node-Cache 2 | 3 | TS-Node-Cache is a TypeScript-based caching solution that's simple and lightweight. It supports data caching with optional expiration and callbacks. Similar to [memory-cache](https://www.npmjs.com/package/memory-cache) but with modern implementation and TypeScript support. 4 | 5 | [![npm version](https://badge.fury.io/js/%40ebenezerdon%2Fts-node-cache.svg)](https://badge.fury.io/js/%40ebenezerdon%2Fts-node-cache) 6 | [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC) 7 | 8 | ## Features 9 | 10 | - Stores any data type. 11 | - Allows setting expiration time for entries. 12 | - Supports custom callbacks on expiration. 13 | - Debug mode for tracking cache activity. 14 | - Serialize cache to/from JSON. 15 | 16 | ## Installation 17 | 18 | ```bash 19 | npm install @ebenezerdon/ts-node-cache 20 | ``` 21 | 22 | ## Usage 23 | 24 | ### Import and Create Cache 25 | 26 | ```typescript 27 | import { Cache } from '@ebenezerdon/ts-node-cache' 28 | const cache = new Cache() 29 | ``` 30 | 31 | ### Store Data 32 | 33 | ```typescript 34 | cache.put('myKey', 'myValue', 5000, () => console.log('Expired')) 35 | ``` 36 | 37 | ### Retrieve Data 38 | 39 | ```typescript 40 | let value = cache.get('myKey') 41 | ``` 42 | 43 | ### Delete Data 44 | 45 | ```typescript 46 | cache.del('myKey') 47 | ``` 48 | 49 | ### Clear Cache 50 | 51 | ```typescript 52 | cache.clear() 53 | ``` 54 | 55 | ### Enable Debugging 56 | 57 | ```typescript 58 | cache.debug(true) 59 | ``` 60 | 61 | ## Methods 62 | 63 | - `put(key: string, value: T, time?: number, timeoutCallback?: (key: string, value: T) => void): T` 64 | - `get(key: string): T | null` 65 | - `del(key: string): boolean` 66 | - `clear(): void` 67 | - `size(): number` 68 | - `debug(bool: boolean): void` 69 | - `hits(): number` 70 | - `misses(): number` 71 | - `keys(): string[]` 72 | - `exportJson(): string` 73 | - `importJson(jsonToImport: string, options?: { skipDuplicates?: boolean }): number` 74 | 75 | ## Contributing 76 | 77 | To contribute: 78 | 79 | 1. **Fork & Clone**: Fork the repo and clone it locally. 80 | 2. **Make Changes**: Work on your changes. 81 | 3. **Build**: Run `npm run build` to build the project. 82 | 4. **Test**: Ensure your changes don't break anything. 83 | 5. **Submit a PR**: Push your changes and submit a pull request. 84 | 85 | ## License 86 | 87 | This project is licensed under the ISC License - see the LICENSE file for details. 88 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'node', 4 | collectCoverage: true, 5 | collectCoverageFrom: ['src/**/*.ts'], 6 | coverageDirectory: 'coverage', 7 | coverageReporters: ['json', 'lcov', 'text', 'clover'], 8 | } 9 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-memory-cache", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "node-memory-cache", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@types/jest": "^29.5.12", 13 | "@types/node": "^20.12.6", 14 | "jest": "^29.7.0", 15 | "ts-jest": "^29.1.2", 16 | "typescript": "^5.4.4" 17 | } 18 | }, 19 | "node_modules/@ampproject/remapping": { 20 | "version": "2.3.0", 21 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 22 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 23 | "dev": true, 24 | "dependencies": { 25 | "@jridgewell/gen-mapping": "^0.3.5", 26 | "@jridgewell/trace-mapping": "^0.3.24" 27 | }, 28 | "engines": { 29 | "node": ">=6.0.0" 30 | } 31 | }, 32 | "node_modules/@babel/code-frame": { 33 | "version": "7.24.2", 34 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", 35 | "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", 36 | "dev": true, 37 | "dependencies": { 38 | "@babel/highlight": "^7.24.2", 39 | "picocolors": "^1.0.0" 40 | }, 41 | "engines": { 42 | "node": ">=6.9.0" 43 | } 44 | }, 45 | "node_modules/@babel/compat-data": { 46 | "version": "7.24.4", 47 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", 48 | "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", 49 | "dev": true, 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@babel/core": { 55 | "version": "7.24.4", 56 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", 57 | "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", 58 | "dev": true, 59 | "dependencies": { 60 | "@ampproject/remapping": "^2.2.0", 61 | "@babel/code-frame": "^7.24.2", 62 | "@babel/generator": "^7.24.4", 63 | "@babel/helper-compilation-targets": "^7.23.6", 64 | "@babel/helper-module-transforms": "^7.23.3", 65 | "@babel/helpers": "^7.24.4", 66 | "@babel/parser": "^7.24.4", 67 | "@babel/template": "^7.24.0", 68 | "@babel/traverse": "^7.24.1", 69 | "@babel/types": "^7.24.0", 70 | "convert-source-map": "^2.0.0", 71 | "debug": "^4.1.0", 72 | "gensync": "^1.0.0-beta.2", 73 | "json5": "^2.2.3", 74 | "semver": "^6.3.1" 75 | }, 76 | "engines": { 77 | "node": ">=6.9.0" 78 | }, 79 | "funding": { 80 | "type": "opencollective", 81 | "url": "https://opencollective.com/babel" 82 | } 83 | }, 84 | "node_modules/@babel/generator": { 85 | "version": "7.24.4", 86 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", 87 | "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", 88 | "dev": true, 89 | "dependencies": { 90 | "@babel/types": "^7.24.0", 91 | "@jridgewell/gen-mapping": "^0.3.5", 92 | "@jridgewell/trace-mapping": "^0.3.25", 93 | "jsesc": "^2.5.1" 94 | }, 95 | "engines": { 96 | "node": ">=6.9.0" 97 | } 98 | }, 99 | "node_modules/@babel/helper-compilation-targets": { 100 | "version": "7.23.6", 101 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", 102 | "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", 103 | "dev": true, 104 | "dependencies": { 105 | "@babel/compat-data": "^7.23.5", 106 | "@babel/helper-validator-option": "^7.23.5", 107 | "browserslist": "^4.22.2", 108 | "lru-cache": "^5.1.1", 109 | "semver": "^6.3.1" 110 | }, 111 | "engines": { 112 | "node": ">=6.9.0" 113 | } 114 | }, 115 | "node_modules/@babel/helper-environment-visitor": { 116 | "version": "7.22.20", 117 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 118 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 119 | "dev": true, 120 | "engines": { 121 | "node": ">=6.9.0" 122 | } 123 | }, 124 | "node_modules/@babel/helper-function-name": { 125 | "version": "7.23.0", 126 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 127 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 128 | "dev": true, 129 | "dependencies": { 130 | "@babel/template": "^7.22.15", 131 | "@babel/types": "^7.23.0" 132 | }, 133 | "engines": { 134 | "node": ">=6.9.0" 135 | } 136 | }, 137 | "node_modules/@babel/helper-hoist-variables": { 138 | "version": "7.22.5", 139 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 140 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 141 | "dev": true, 142 | "dependencies": { 143 | "@babel/types": "^7.22.5" 144 | }, 145 | "engines": { 146 | "node": ">=6.9.0" 147 | } 148 | }, 149 | "node_modules/@babel/helper-module-imports": { 150 | "version": "7.24.3", 151 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", 152 | "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", 153 | "dev": true, 154 | "dependencies": { 155 | "@babel/types": "^7.24.0" 156 | }, 157 | "engines": { 158 | "node": ">=6.9.0" 159 | } 160 | }, 161 | "node_modules/@babel/helper-module-transforms": { 162 | "version": "7.23.3", 163 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", 164 | "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", 165 | "dev": true, 166 | "dependencies": { 167 | "@babel/helper-environment-visitor": "^7.22.20", 168 | "@babel/helper-module-imports": "^7.22.15", 169 | "@babel/helper-simple-access": "^7.22.5", 170 | "@babel/helper-split-export-declaration": "^7.22.6", 171 | "@babel/helper-validator-identifier": "^7.22.20" 172 | }, 173 | "engines": { 174 | "node": ">=6.9.0" 175 | }, 176 | "peerDependencies": { 177 | "@babel/core": "^7.0.0" 178 | } 179 | }, 180 | "node_modules/@babel/helper-plugin-utils": { 181 | "version": "7.24.0", 182 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", 183 | "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", 184 | "dev": true, 185 | "engines": { 186 | "node": ">=6.9.0" 187 | } 188 | }, 189 | "node_modules/@babel/helper-simple-access": { 190 | "version": "7.22.5", 191 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 192 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 193 | "dev": true, 194 | "dependencies": { 195 | "@babel/types": "^7.22.5" 196 | }, 197 | "engines": { 198 | "node": ">=6.9.0" 199 | } 200 | }, 201 | "node_modules/@babel/helper-split-export-declaration": { 202 | "version": "7.22.6", 203 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 204 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 205 | "dev": true, 206 | "dependencies": { 207 | "@babel/types": "^7.22.5" 208 | }, 209 | "engines": { 210 | "node": ">=6.9.0" 211 | } 212 | }, 213 | "node_modules/@babel/helper-string-parser": { 214 | "version": "7.24.1", 215 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", 216 | "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", 217 | "dev": true, 218 | "engines": { 219 | "node": ">=6.9.0" 220 | } 221 | }, 222 | "node_modules/@babel/helper-validator-identifier": { 223 | "version": "7.22.20", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 225 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 226 | "dev": true, 227 | "engines": { 228 | "node": ">=6.9.0" 229 | } 230 | }, 231 | "node_modules/@babel/helper-validator-option": { 232 | "version": "7.23.5", 233 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", 234 | "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=6.9.0" 238 | } 239 | }, 240 | "node_modules/@babel/helpers": { 241 | "version": "7.24.4", 242 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", 243 | "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", 244 | "dev": true, 245 | "dependencies": { 246 | "@babel/template": "^7.24.0", 247 | "@babel/traverse": "^7.24.1", 248 | "@babel/types": "^7.24.0" 249 | }, 250 | "engines": { 251 | "node": ">=6.9.0" 252 | } 253 | }, 254 | "node_modules/@babel/highlight": { 255 | "version": "7.24.2", 256 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", 257 | "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", 258 | "dev": true, 259 | "dependencies": { 260 | "@babel/helper-validator-identifier": "^7.22.20", 261 | "chalk": "^2.4.2", 262 | "js-tokens": "^4.0.0", 263 | "picocolors": "^1.0.0" 264 | }, 265 | "engines": { 266 | "node": ">=6.9.0" 267 | } 268 | }, 269 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 270 | "version": "3.2.1", 271 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 272 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 273 | "dev": true, 274 | "dependencies": { 275 | "color-convert": "^1.9.0" 276 | }, 277 | "engines": { 278 | "node": ">=4" 279 | } 280 | }, 281 | "node_modules/@babel/highlight/node_modules/chalk": { 282 | "version": "2.4.2", 283 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 284 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 285 | "dev": true, 286 | "dependencies": { 287 | "ansi-styles": "^3.2.1", 288 | "escape-string-regexp": "^1.0.5", 289 | "supports-color": "^5.3.0" 290 | }, 291 | "engines": { 292 | "node": ">=4" 293 | } 294 | }, 295 | "node_modules/@babel/highlight/node_modules/color-convert": { 296 | "version": "1.9.3", 297 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 298 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 299 | "dev": true, 300 | "dependencies": { 301 | "color-name": "1.1.3" 302 | } 303 | }, 304 | "node_modules/@babel/highlight/node_modules/color-name": { 305 | "version": "1.1.3", 306 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 307 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 308 | "dev": true 309 | }, 310 | "node_modules/@babel/highlight/node_modules/escape-string-regexp": { 311 | "version": "1.0.5", 312 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 313 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 314 | "dev": true, 315 | "engines": { 316 | "node": ">=0.8.0" 317 | } 318 | }, 319 | "node_modules/@babel/highlight/node_modules/has-flag": { 320 | "version": "3.0.0", 321 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 322 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 323 | "dev": true, 324 | "engines": { 325 | "node": ">=4" 326 | } 327 | }, 328 | "node_modules/@babel/highlight/node_modules/supports-color": { 329 | "version": "5.5.0", 330 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 331 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 332 | "dev": true, 333 | "dependencies": { 334 | "has-flag": "^3.0.0" 335 | }, 336 | "engines": { 337 | "node": ">=4" 338 | } 339 | }, 340 | "node_modules/@babel/parser": { 341 | "version": "7.24.4", 342 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", 343 | "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", 344 | "dev": true, 345 | "bin": { 346 | "parser": "bin/babel-parser.js" 347 | }, 348 | "engines": { 349 | "node": ">=6.0.0" 350 | } 351 | }, 352 | "node_modules/@babel/plugin-syntax-async-generators": { 353 | "version": "7.8.4", 354 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 355 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 356 | "dev": true, 357 | "dependencies": { 358 | "@babel/helper-plugin-utils": "^7.8.0" 359 | }, 360 | "peerDependencies": { 361 | "@babel/core": "^7.0.0-0" 362 | } 363 | }, 364 | "node_modules/@babel/plugin-syntax-bigint": { 365 | "version": "7.8.3", 366 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", 367 | "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", 368 | "dev": true, 369 | "dependencies": { 370 | "@babel/helper-plugin-utils": "^7.8.0" 371 | }, 372 | "peerDependencies": { 373 | "@babel/core": "^7.0.0-0" 374 | } 375 | }, 376 | "node_modules/@babel/plugin-syntax-class-properties": { 377 | "version": "7.12.13", 378 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", 379 | "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", 380 | "dev": true, 381 | "dependencies": { 382 | "@babel/helper-plugin-utils": "^7.12.13" 383 | }, 384 | "peerDependencies": { 385 | "@babel/core": "^7.0.0-0" 386 | } 387 | }, 388 | "node_modules/@babel/plugin-syntax-import-meta": { 389 | "version": "7.10.4", 390 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", 391 | "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", 392 | "dev": true, 393 | "dependencies": { 394 | "@babel/helper-plugin-utils": "^7.10.4" 395 | }, 396 | "peerDependencies": { 397 | "@babel/core": "^7.0.0-0" 398 | } 399 | }, 400 | "node_modules/@babel/plugin-syntax-json-strings": { 401 | "version": "7.8.3", 402 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 403 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 404 | "dev": true, 405 | "dependencies": { 406 | "@babel/helper-plugin-utils": "^7.8.0" 407 | }, 408 | "peerDependencies": { 409 | "@babel/core": "^7.0.0-0" 410 | } 411 | }, 412 | "node_modules/@babel/plugin-syntax-jsx": { 413 | "version": "7.24.1", 414 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", 415 | "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", 416 | "dev": true, 417 | "dependencies": { 418 | "@babel/helper-plugin-utils": "^7.24.0" 419 | }, 420 | "engines": { 421 | "node": ">=6.9.0" 422 | }, 423 | "peerDependencies": { 424 | "@babel/core": "^7.0.0-0" 425 | } 426 | }, 427 | "node_modules/@babel/plugin-syntax-logical-assignment-operators": { 428 | "version": "7.10.4", 429 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 430 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 431 | "dev": true, 432 | "dependencies": { 433 | "@babel/helper-plugin-utils": "^7.10.4" 434 | }, 435 | "peerDependencies": { 436 | "@babel/core": "^7.0.0-0" 437 | } 438 | }, 439 | "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { 440 | "version": "7.8.3", 441 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 442 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 443 | "dev": true, 444 | "dependencies": { 445 | "@babel/helper-plugin-utils": "^7.8.0" 446 | }, 447 | "peerDependencies": { 448 | "@babel/core": "^7.0.0-0" 449 | } 450 | }, 451 | "node_modules/@babel/plugin-syntax-numeric-separator": { 452 | "version": "7.10.4", 453 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 454 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 455 | "dev": true, 456 | "dependencies": { 457 | "@babel/helper-plugin-utils": "^7.10.4" 458 | }, 459 | "peerDependencies": { 460 | "@babel/core": "^7.0.0-0" 461 | } 462 | }, 463 | "node_modules/@babel/plugin-syntax-object-rest-spread": { 464 | "version": "7.8.3", 465 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 466 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 467 | "dev": true, 468 | "dependencies": { 469 | "@babel/helper-plugin-utils": "^7.8.0" 470 | }, 471 | "peerDependencies": { 472 | "@babel/core": "^7.0.0-0" 473 | } 474 | }, 475 | "node_modules/@babel/plugin-syntax-optional-catch-binding": { 476 | "version": "7.8.3", 477 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 478 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 479 | "dev": true, 480 | "dependencies": { 481 | "@babel/helper-plugin-utils": "^7.8.0" 482 | }, 483 | "peerDependencies": { 484 | "@babel/core": "^7.0.0-0" 485 | } 486 | }, 487 | "node_modules/@babel/plugin-syntax-optional-chaining": { 488 | "version": "7.8.3", 489 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 490 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 491 | "dev": true, 492 | "dependencies": { 493 | "@babel/helper-plugin-utils": "^7.8.0" 494 | }, 495 | "peerDependencies": { 496 | "@babel/core": "^7.0.0-0" 497 | } 498 | }, 499 | "node_modules/@babel/plugin-syntax-top-level-await": { 500 | "version": "7.14.5", 501 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", 502 | "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", 503 | "dev": true, 504 | "dependencies": { 505 | "@babel/helper-plugin-utils": "^7.14.5" 506 | }, 507 | "engines": { 508 | "node": ">=6.9.0" 509 | }, 510 | "peerDependencies": { 511 | "@babel/core": "^7.0.0-0" 512 | } 513 | }, 514 | "node_modules/@babel/plugin-syntax-typescript": { 515 | "version": "7.24.1", 516 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", 517 | "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", 518 | "dev": true, 519 | "dependencies": { 520 | "@babel/helper-plugin-utils": "^7.24.0" 521 | }, 522 | "engines": { 523 | "node": ">=6.9.0" 524 | }, 525 | "peerDependencies": { 526 | "@babel/core": "^7.0.0-0" 527 | } 528 | }, 529 | "node_modules/@babel/template": { 530 | "version": "7.24.0", 531 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", 532 | "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", 533 | "dev": true, 534 | "dependencies": { 535 | "@babel/code-frame": "^7.23.5", 536 | "@babel/parser": "^7.24.0", 537 | "@babel/types": "^7.24.0" 538 | }, 539 | "engines": { 540 | "node": ">=6.9.0" 541 | } 542 | }, 543 | "node_modules/@babel/traverse": { 544 | "version": "7.24.1", 545 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", 546 | "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", 547 | "dev": true, 548 | "dependencies": { 549 | "@babel/code-frame": "^7.24.1", 550 | "@babel/generator": "^7.24.1", 551 | "@babel/helper-environment-visitor": "^7.22.20", 552 | "@babel/helper-function-name": "^7.23.0", 553 | "@babel/helper-hoist-variables": "^7.22.5", 554 | "@babel/helper-split-export-declaration": "^7.22.6", 555 | "@babel/parser": "^7.24.1", 556 | "@babel/types": "^7.24.0", 557 | "debug": "^4.3.1", 558 | "globals": "^11.1.0" 559 | }, 560 | "engines": { 561 | "node": ">=6.9.0" 562 | } 563 | }, 564 | "node_modules/@babel/types": { 565 | "version": "7.24.0", 566 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", 567 | "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", 568 | "dev": true, 569 | "dependencies": { 570 | "@babel/helper-string-parser": "^7.23.4", 571 | "@babel/helper-validator-identifier": "^7.22.20", 572 | "to-fast-properties": "^2.0.0" 573 | }, 574 | "engines": { 575 | "node": ">=6.9.0" 576 | } 577 | }, 578 | "node_modules/@bcoe/v8-coverage": { 579 | "version": "0.2.3", 580 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 581 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 582 | "dev": true 583 | }, 584 | "node_modules/@istanbuljs/load-nyc-config": { 585 | "version": "1.1.0", 586 | "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", 587 | "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", 588 | "dev": true, 589 | "dependencies": { 590 | "camelcase": "^5.3.1", 591 | "find-up": "^4.1.0", 592 | "get-package-type": "^0.1.0", 593 | "js-yaml": "^3.13.1", 594 | "resolve-from": "^5.0.0" 595 | }, 596 | "engines": { 597 | "node": ">=8" 598 | } 599 | }, 600 | "node_modules/@istanbuljs/schema": { 601 | "version": "0.1.3", 602 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 603 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 604 | "dev": true, 605 | "engines": { 606 | "node": ">=8" 607 | } 608 | }, 609 | "node_modules/@jest/console": { 610 | "version": "29.7.0", 611 | "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", 612 | "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", 613 | "dev": true, 614 | "dependencies": { 615 | "@jest/types": "^29.6.3", 616 | "@types/node": "*", 617 | "chalk": "^4.0.0", 618 | "jest-message-util": "^29.7.0", 619 | "jest-util": "^29.7.0", 620 | "slash": "^3.0.0" 621 | }, 622 | "engines": { 623 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 624 | } 625 | }, 626 | "node_modules/@jest/core": { 627 | "version": "29.7.0", 628 | "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", 629 | "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", 630 | "dev": true, 631 | "dependencies": { 632 | "@jest/console": "^29.7.0", 633 | "@jest/reporters": "^29.7.0", 634 | "@jest/test-result": "^29.7.0", 635 | "@jest/transform": "^29.7.0", 636 | "@jest/types": "^29.6.3", 637 | "@types/node": "*", 638 | "ansi-escapes": "^4.2.1", 639 | "chalk": "^4.0.0", 640 | "ci-info": "^3.2.0", 641 | "exit": "^0.1.2", 642 | "graceful-fs": "^4.2.9", 643 | "jest-changed-files": "^29.7.0", 644 | "jest-config": "^29.7.0", 645 | "jest-haste-map": "^29.7.0", 646 | "jest-message-util": "^29.7.0", 647 | "jest-regex-util": "^29.6.3", 648 | "jest-resolve": "^29.7.0", 649 | "jest-resolve-dependencies": "^29.7.0", 650 | "jest-runner": "^29.7.0", 651 | "jest-runtime": "^29.7.0", 652 | "jest-snapshot": "^29.7.0", 653 | "jest-util": "^29.7.0", 654 | "jest-validate": "^29.7.0", 655 | "jest-watcher": "^29.7.0", 656 | "micromatch": "^4.0.4", 657 | "pretty-format": "^29.7.0", 658 | "slash": "^3.0.0", 659 | "strip-ansi": "^6.0.0" 660 | }, 661 | "engines": { 662 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 663 | }, 664 | "peerDependencies": { 665 | "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 666 | }, 667 | "peerDependenciesMeta": { 668 | "node-notifier": { 669 | "optional": true 670 | } 671 | } 672 | }, 673 | "node_modules/@jest/environment": { 674 | "version": "29.7.0", 675 | "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", 676 | "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", 677 | "dev": true, 678 | "dependencies": { 679 | "@jest/fake-timers": "^29.7.0", 680 | "@jest/types": "^29.6.3", 681 | "@types/node": "*", 682 | "jest-mock": "^29.7.0" 683 | }, 684 | "engines": { 685 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 686 | } 687 | }, 688 | "node_modules/@jest/expect": { 689 | "version": "29.7.0", 690 | "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", 691 | "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", 692 | "dev": true, 693 | "dependencies": { 694 | "expect": "^29.7.0", 695 | "jest-snapshot": "^29.7.0" 696 | }, 697 | "engines": { 698 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 699 | } 700 | }, 701 | "node_modules/@jest/expect-utils": { 702 | "version": "29.7.0", 703 | "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", 704 | "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", 705 | "dev": true, 706 | "dependencies": { 707 | "jest-get-type": "^29.6.3" 708 | }, 709 | "engines": { 710 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 711 | } 712 | }, 713 | "node_modules/@jest/fake-timers": { 714 | "version": "29.7.0", 715 | "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", 716 | "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", 717 | "dev": true, 718 | "dependencies": { 719 | "@jest/types": "^29.6.3", 720 | "@sinonjs/fake-timers": "^10.0.2", 721 | "@types/node": "*", 722 | "jest-message-util": "^29.7.0", 723 | "jest-mock": "^29.7.0", 724 | "jest-util": "^29.7.0" 725 | }, 726 | "engines": { 727 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 728 | } 729 | }, 730 | "node_modules/@jest/globals": { 731 | "version": "29.7.0", 732 | "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", 733 | "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", 734 | "dev": true, 735 | "dependencies": { 736 | "@jest/environment": "^29.7.0", 737 | "@jest/expect": "^29.7.0", 738 | "@jest/types": "^29.6.3", 739 | "jest-mock": "^29.7.0" 740 | }, 741 | "engines": { 742 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 743 | } 744 | }, 745 | "node_modules/@jest/reporters": { 746 | "version": "29.7.0", 747 | "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", 748 | "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", 749 | "dev": true, 750 | "dependencies": { 751 | "@bcoe/v8-coverage": "^0.2.3", 752 | "@jest/console": "^29.7.0", 753 | "@jest/test-result": "^29.7.0", 754 | "@jest/transform": "^29.7.0", 755 | "@jest/types": "^29.6.3", 756 | "@jridgewell/trace-mapping": "^0.3.18", 757 | "@types/node": "*", 758 | "chalk": "^4.0.0", 759 | "collect-v8-coverage": "^1.0.0", 760 | "exit": "^0.1.2", 761 | "glob": "^7.1.3", 762 | "graceful-fs": "^4.2.9", 763 | "istanbul-lib-coverage": "^3.0.0", 764 | "istanbul-lib-instrument": "^6.0.0", 765 | "istanbul-lib-report": "^3.0.0", 766 | "istanbul-lib-source-maps": "^4.0.0", 767 | "istanbul-reports": "^3.1.3", 768 | "jest-message-util": "^29.7.0", 769 | "jest-util": "^29.7.0", 770 | "jest-worker": "^29.7.0", 771 | "slash": "^3.0.0", 772 | "string-length": "^4.0.1", 773 | "strip-ansi": "^6.0.0", 774 | "v8-to-istanbul": "^9.0.1" 775 | }, 776 | "engines": { 777 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 778 | }, 779 | "peerDependencies": { 780 | "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 781 | }, 782 | "peerDependenciesMeta": { 783 | "node-notifier": { 784 | "optional": true 785 | } 786 | } 787 | }, 788 | "node_modules/@jest/schemas": { 789 | "version": "29.6.3", 790 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 791 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 792 | "dev": true, 793 | "dependencies": { 794 | "@sinclair/typebox": "^0.27.8" 795 | }, 796 | "engines": { 797 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 798 | } 799 | }, 800 | "node_modules/@jest/source-map": { 801 | "version": "29.6.3", 802 | "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", 803 | "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", 804 | "dev": true, 805 | "dependencies": { 806 | "@jridgewell/trace-mapping": "^0.3.18", 807 | "callsites": "^3.0.0", 808 | "graceful-fs": "^4.2.9" 809 | }, 810 | "engines": { 811 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 812 | } 813 | }, 814 | "node_modules/@jest/test-result": { 815 | "version": "29.7.0", 816 | "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", 817 | "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", 818 | "dev": true, 819 | "dependencies": { 820 | "@jest/console": "^29.7.0", 821 | "@jest/types": "^29.6.3", 822 | "@types/istanbul-lib-coverage": "^2.0.0", 823 | "collect-v8-coverage": "^1.0.0" 824 | }, 825 | "engines": { 826 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 827 | } 828 | }, 829 | "node_modules/@jest/test-sequencer": { 830 | "version": "29.7.0", 831 | "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", 832 | "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", 833 | "dev": true, 834 | "dependencies": { 835 | "@jest/test-result": "^29.7.0", 836 | "graceful-fs": "^4.2.9", 837 | "jest-haste-map": "^29.7.0", 838 | "slash": "^3.0.0" 839 | }, 840 | "engines": { 841 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 842 | } 843 | }, 844 | "node_modules/@jest/transform": { 845 | "version": "29.7.0", 846 | "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", 847 | "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", 848 | "dev": true, 849 | "dependencies": { 850 | "@babel/core": "^7.11.6", 851 | "@jest/types": "^29.6.3", 852 | "@jridgewell/trace-mapping": "^0.3.18", 853 | "babel-plugin-istanbul": "^6.1.1", 854 | "chalk": "^4.0.0", 855 | "convert-source-map": "^2.0.0", 856 | "fast-json-stable-stringify": "^2.1.0", 857 | "graceful-fs": "^4.2.9", 858 | "jest-haste-map": "^29.7.0", 859 | "jest-regex-util": "^29.6.3", 860 | "jest-util": "^29.7.0", 861 | "micromatch": "^4.0.4", 862 | "pirates": "^4.0.4", 863 | "slash": "^3.0.0", 864 | "write-file-atomic": "^4.0.2" 865 | }, 866 | "engines": { 867 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 868 | } 869 | }, 870 | "node_modules/@jest/types": { 871 | "version": "29.6.3", 872 | "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", 873 | "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", 874 | "dev": true, 875 | "dependencies": { 876 | "@jest/schemas": "^29.6.3", 877 | "@types/istanbul-lib-coverage": "^2.0.0", 878 | "@types/istanbul-reports": "^3.0.0", 879 | "@types/node": "*", 880 | "@types/yargs": "^17.0.8", 881 | "chalk": "^4.0.0" 882 | }, 883 | "engines": { 884 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 885 | } 886 | }, 887 | "node_modules/@jridgewell/gen-mapping": { 888 | "version": "0.3.5", 889 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 890 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 891 | "dev": true, 892 | "dependencies": { 893 | "@jridgewell/set-array": "^1.2.1", 894 | "@jridgewell/sourcemap-codec": "^1.4.10", 895 | "@jridgewell/trace-mapping": "^0.3.24" 896 | }, 897 | "engines": { 898 | "node": ">=6.0.0" 899 | } 900 | }, 901 | "node_modules/@jridgewell/resolve-uri": { 902 | "version": "3.1.2", 903 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 904 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 905 | "dev": true, 906 | "engines": { 907 | "node": ">=6.0.0" 908 | } 909 | }, 910 | "node_modules/@jridgewell/set-array": { 911 | "version": "1.2.1", 912 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 913 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 914 | "dev": true, 915 | "engines": { 916 | "node": ">=6.0.0" 917 | } 918 | }, 919 | "node_modules/@jridgewell/sourcemap-codec": { 920 | "version": "1.4.15", 921 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 922 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 923 | "dev": true 924 | }, 925 | "node_modules/@jridgewell/trace-mapping": { 926 | "version": "0.3.25", 927 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 928 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 929 | "dev": true, 930 | "dependencies": { 931 | "@jridgewell/resolve-uri": "^3.1.0", 932 | "@jridgewell/sourcemap-codec": "^1.4.14" 933 | } 934 | }, 935 | "node_modules/@sinclair/typebox": { 936 | "version": "0.27.8", 937 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 938 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 939 | "dev": true 940 | }, 941 | "node_modules/@sinonjs/commons": { 942 | "version": "3.0.1", 943 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", 944 | "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", 945 | "dev": true, 946 | "dependencies": { 947 | "type-detect": "4.0.8" 948 | } 949 | }, 950 | "node_modules/@sinonjs/fake-timers": { 951 | "version": "10.3.0", 952 | "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", 953 | "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", 954 | "dev": true, 955 | "dependencies": { 956 | "@sinonjs/commons": "^3.0.0" 957 | } 958 | }, 959 | "node_modules/@types/babel__core": { 960 | "version": "7.20.5", 961 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 962 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 963 | "dev": true, 964 | "dependencies": { 965 | "@babel/parser": "^7.20.7", 966 | "@babel/types": "^7.20.7", 967 | "@types/babel__generator": "*", 968 | "@types/babel__template": "*", 969 | "@types/babel__traverse": "*" 970 | } 971 | }, 972 | "node_modules/@types/babel__generator": { 973 | "version": "7.6.8", 974 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", 975 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", 976 | "dev": true, 977 | "dependencies": { 978 | "@babel/types": "^7.0.0" 979 | } 980 | }, 981 | "node_modules/@types/babel__template": { 982 | "version": "7.4.4", 983 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 984 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 985 | "dev": true, 986 | "dependencies": { 987 | "@babel/parser": "^7.1.0", 988 | "@babel/types": "^7.0.0" 989 | } 990 | }, 991 | "node_modules/@types/babel__traverse": { 992 | "version": "7.20.5", 993 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", 994 | "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", 995 | "dev": true, 996 | "dependencies": { 997 | "@babel/types": "^7.20.7" 998 | } 999 | }, 1000 | "node_modules/@types/graceful-fs": { 1001 | "version": "4.1.9", 1002 | "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", 1003 | "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", 1004 | "dev": true, 1005 | "dependencies": { 1006 | "@types/node": "*" 1007 | } 1008 | }, 1009 | "node_modules/@types/istanbul-lib-coverage": { 1010 | "version": "2.0.6", 1011 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", 1012 | "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", 1013 | "dev": true 1014 | }, 1015 | "node_modules/@types/istanbul-lib-report": { 1016 | "version": "3.0.3", 1017 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", 1018 | "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", 1019 | "dev": true, 1020 | "dependencies": { 1021 | "@types/istanbul-lib-coverage": "*" 1022 | } 1023 | }, 1024 | "node_modules/@types/istanbul-reports": { 1025 | "version": "3.0.4", 1026 | "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", 1027 | "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", 1028 | "dev": true, 1029 | "dependencies": { 1030 | "@types/istanbul-lib-report": "*" 1031 | } 1032 | }, 1033 | "node_modules/@types/jest": { 1034 | "version": "29.5.12", 1035 | "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", 1036 | "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", 1037 | "dev": true, 1038 | "dependencies": { 1039 | "expect": "^29.0.0", 1040 | "pretty-format": "^29.0.0" 1041 | } 1042 | }, 1043 | "node_modules/@types/node": { 1044 | "version": "20.12.6", 1045 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", 1046 | "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", 1047 | "dev": true, 1048 | "dependencies": { 1049 | "undici-types": "~5.26.4" 1050 | } 1051 | }, 1052 | "node_modules/@types/stack-utils": { 1053 | "version": "2.0.3", 1054 | "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", 1055 | "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", 1056 | "dev": true 1057 | }, 1058 | "node_modules/@types/yargs": { 1059 | "version": "17.0.32", 1060 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", 1061 | "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "@types/yargs-parser": "*" 1065 | } 1066 | }, 1067 | "node_modules/@types/yargs-parser": { 1068 | "version": "21.0.3", 1069 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", 1070 | "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", 1071 | "dev": true 1072 | }, 1073 | "node_modules/ansi-escapes": { 1074 | "version": "4.3.2", 1075 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 1076 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 1077 | "dev": true, 1078 | "dependencies": { 1079 | "type-fest": "^0.21.3" 1080 | }, 1081 | "engines": { 1082 | "node": ">=8" 1083 | }, 1084 | "funding": { 1085 | "url": "https://github.com/sponsors/sindresorhus" 1086 | } 1087 | }, 1088 | "node_modules/ansi-regex": { 1089 | "version": "5.0.1", 1090 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1091 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1092 | "dev": true, 1093 | "engines": { 1094 | "node": ">=8" 1095 | } 1096 | }, 1097 | "node_modules/ansi-styles": { 1098 | "version": "4.3.0", 1099 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1100 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1101 | "dev": true, 1102 | "dependencies": { 1103 | "color-convert": "^2.0.1" 1104 | }, 1105 | "engines": { 1106 | "node": ">=8" 1107 | }, 1108 | "funding": { 1109 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1110 | } 1111 | }, 1112 | "node_modules/anymatch": { 1113 | "version": "3.1.3", 1114 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1115 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1116 | "dev": true, 1117 | "dependencies": { 1118 | "normalize-path": "^3.0.0", 1119 | "picomatch": "^2.0.4" 1120 | }, 1121 | "engines": { 1122 | "node": ">= 8" 1123 | } 1124 | }, 1125 | "node_modules/argparse": { 1126 | "version": "1.0.10", 1127 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1128 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1129 | "dev": true, 1130 | "dependencies": { 1131 | "sprintf-js": "~1.0.2" 1132 | } 1133 | }, 1134 | "node_modules/babel-jest": { 1135 | "version": "29.7.0", 1136 | "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", 1137 | "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", 1138 | "dev": true, 1139 | "dependencies": { 1140 | "@jest/transform": "^29.7.0", 1141 | "@types/babel__core": "^7.1.14", 1142 | "babel-plugin-istanbul": "^6.1.1", 1143 | "babel-preset-jest": "^29.6.3", 1144 | "chalk": "^4.0.0", 1145 | "graceful-fs": "^4.2.9", 1146 | "slash": "^3.0.0" 1147 | }, 1148 | "engines": { 1149 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1150 | }, 1151 | "peerDependencies": { 1152 | "@babel/core": "^7.8.0" 1153 | } 1154 | }, 1155 | "node_modules/babel-plugin-istanbul": { 1156 | "version": "6.1.1", 1157 | "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", 1158 | "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", 1159 | "dev": true, 1160 | "dependencies": { 1161 | "@babel/helper-plugin-utils": "^7.0.0", 1162 | "@istanbuljs/load-nyc-config": "^1.0.0", 1163 | "@istanbuljs/schema": "^0.1.2", 1164 | "istanbul-lib-instrument": "^5.0.4", 1165 | "test-exclude": "^6.0.0" 1166 | }, 1167 | "engines": { 1168 | "node": ">=8" 1169 | } 1170 | }, 1171 | "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { 1172 | "version": "5.2.1", 1173 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", 1174 | "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", 1175 | "dev": true, 1176 | "dependencies": { 1177 | "@babel/core": "^7.12.3", 1178 | "@babel/parser": "^7.14.7", 1179 | "@istanbuljs/schema": "^0.1.2", 1180 | "istanbul-lib-coverage": "^3.2.0", 1181 | "semver": "^6.3.0" 1182 | }, 1183 | "engines": { 1184 | "node": ">=8" 1185 | } 1186 | }, 1187 | "node_modules/babel-plugin-jest-hoist": { 1188 | "version": "29.6.3", 1189 | "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", 1190 | "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", 1191 | "dev": true, 1192 | "dependencies": { 1193 | "@babel/template": "^7.3.3", 1194 | "@babel/types": "^7.3.3", 1195 | "@types/babel__core": "^7.1.14", 1196 | "@types/babel__traverse": "^7.0.6" 1197 | }, 1198 | "engines": { 1199 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1200 | } 1201 | }, 1202 | "node_modules/babel-preset-current-node-syntax": { 1203 | "version": "1.0.1", 1204 | "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", 1205 | "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", 1206 | "dev": true, 1207 | "dependencies": { 1208 | "@babel/plugin-syntax-async-generators": "^7.8.4", 1209 | "@babel/plugin-syntax-bigint": "^7.8.3", 1210 | "@babel/plugin-syntax-class-properties": "^7.8.3", 1211 | "@babel/plugin-syntax-import-meta": "^7.8.3", 1212 | "@babel/plugin-syntax-json-strings": "^7.8.3", 1213 | "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", 1214 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", 1215 | "@babel/plugin-syntax-numeric-separator": "^7.8.3", 1216 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 1217 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", 1218 | "@babel/plugin-syntax-optional-chaining": "^7.8.3", 1219 | "@babel/plugin-syntax-top-level-await": "^7.8.3" 1220 | }, 1221 | "peerDependencies": { 1222 | "@babel/core": "^7.0.0" 1223 | } 1224 | }, 1225 | "node_modules/babel-preset-jest": { 1226 | "version": "29.6.3", 1227 | "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", 1228 | "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", 1229 | "dev": true, 1230 | "dependencies": { 1231 | "babel-plugin-jest-hoist": "^29.6.3", 1232 | "babel-preset-current-node-syntax": "^1.0.0" 1233 | }, 1234 | "engines": { 1235 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1236 | }, 1237 | "peerDependencies": { 1238 | "@babel/core": "^7.0.0" 1239 | } 1240 | }, 1241 | "node_modules/balanced-match": { 1242 | "version": "1.0.2", 1243 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1244 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1245 | "dev": true 1246 | }, 1247 | "node_modules/brace-expansion": { 1248 | "version": "1.1.11", 1249 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1250 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1251 | "dev": true, 1252 | "dependencies": { 1253 | "balanced-match": "^1.0.0", 1254 | "concat-map": "0.0.1" 1255 | } 1256 | }, 1257 | "node_modules/braces": { 1258 | "version": "3.0.2", 1259 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1260 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1261 | "dev": true, 1262 | "dependencies": { 1263 | "fill-range": "^7.0.1" 1264 | }, 1265 | "engines": { 1266 | "node": ">=8" 1267 | } 1268 | }, 1269 | "node_modules/browserslist": { 1270 | "version": "4.23.0", 1271 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", 1272 | "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", 1273 | "dev": true, 1274 | "funding": [ 1275 | { 1276 | "type": "opencollective", 1277 | "url": "https://opencollective.com/browserslist" 1278 | }, 1279 | { 1280 | "type": "tidelift", 1281 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1282 | }, 1283 | { 1284 | "type": "github", 1285 | "url": "https://github.com/sponsors/ai" 1286 | } 1287 | ], 1288 | "dependencies": { 1289 | "caniuse-lite": "^1.0.30001587", 1290 | "electron-to-chromium": "^1.4.668", 1291 | "node-releases": "^2.0.14", 1292 | "update-browserslist-db": "^1.0.13" 1293 | }, 1294 | "bin": { 1295 | "browserslist": "cli.js" 1296 | }, 1297 | "engines": { 1298 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1299 | } 1300 | }, 1301 | "node_modules/bs-logger": { 1302 | "version": "0.2.6", 1303 | "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", 1304 | "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", 1305 | "dev": true, 1306 | "dependencies": { 1307 | "fast-json-stable-stringify": "2.x" 1308 | }, 1309 | "engines": { 1310 | "node": ">= 6" 1311 | } 1312 | }, 1313 | "node_modules/bser": { 1314 | "version": "2.1.1", 1315 | "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", 1316 | "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", 1317 | "dev": true, 1318 | "dependencies": { 1319 | "node-int64": "^0.4.0" 1320 | } 1321 | }, 1322 | "node_modules/buffer-from": { 1323 | "version": "1.1.2", 1324 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1325 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1326 | "dev": true 1327 | }, 1328 | "node_modules/callsites": { 1329 | "version": "3.1.0", 1330 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1331 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1332 | "dev": true, 1333 | "engines": { 1334 | "node": ">=6" 1335 | } 1336 | }, 1337 | "node_modules/camelcase": { 1338 | "version": "5.3.1", 1339 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1340 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1341 | "dev": true, 1342 | "engines": { 1343 | "node": ">=6" 1344 | } 1345 | }, 1346 | "node_modules/caniuse-lite": { 1347 | "version": "1.0.30001607", 1348 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz", 1349 | "integrity": "sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==", 1350 | "dev": true, 1351 | "funding": [ 1352 | { 1353 | "type": "opencollective", 1354 | "url": "https://opencollective.com/browserslist" 1355 | }, 1356 | { 1357 | "type": "tidelift", 1358 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1359 | }, 1360 | { 1361 | "type": "github", 1362 | "url": "https://github.com/sponsors/ai" 1363 | } 1364 | ] 1365 | }, 1366 | "node_modules/chalk": { 1367 | "version": "4.1.2", 1368 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1369 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1370 | "dev": true, 1371 | "dependencies": { 1372 | "ansi-styles": "^4.1.0", 1373 | "supports-color": "^7.1.0" 1374 | }, 1375 | "engines": { 1376 | "node": ">=10" 1377 | }, 1378 | "funding": { 1379 | "url": "https://github.com/chalk/chalk?sponsor=1" 1380 | } 1381 | }, 1382 | "node_modules/char-regex": { 1383 | "version": "1.0.2", 1384 | "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", 1385 | "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", 1386 | "dev": true, 1387 | "engines": { 1388 | "node": ">=10" 1389 | } 1390 | }, 1391 | "node_modules/ci-info": { 1392 | "version": "3.9.0", 1393 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", 1394 | "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", 1395 | "dev": true, 1396 | "funding": [ 1397 | { 1398 | "type": "github", 1399 | "url": "https://github.com/sponsors/sibiraj-s" 1400 | } 1401 | ], 1402 | "engines": { 1403 | "node": ">=8" 1404 | } 1405 | }, 1406 | "node_modules/cjs-module-lexer": { 1407 | "version": "1.2.3", 1408 | "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", 1409 | "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", 1410 | "dev": true 1411 | }, 1412 | "node_modules/cliui": { 1413 | "version": "8.0.1", 1414 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1415 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1416 | "dev": true, 1417 | "dependencies": { 1418 | "string-width": "^4.2.0", 1419 | "strip-ansi": "^6.0.1", 1420 | "wrap-ansi": "^7.0.0" 1421 | }, 1422 | "engines": { 1423 | "node": ">=12" 1424 | } 1425 | }, 1426 | "node_modules/co": { 1427 | "version": "4.6.0", 1428 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1429 | "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", 1430 | "dev": true, 1431 | "engines": { 1432 | "iojs": ">= 1.0.0", 1433 | "node": ">= 0.12.0" 1434 | } 1435 | }, 1436 | "node_modules/collect-v8-coverage": { 1437 | "version": "1.0.2", 1438 | "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", 1439 | "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", 1440 | "dev": true 1441 | }, 1442 | "node_modules/color-convert": { 1443 | "version": "2.0.1", 1444 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1445 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1446 | "dev": true, 1447 | "dependencies": { 1448 | "color-name": "~1.1.4" 1449 | }, 1450 | "engines": { 1451 | "node": ">=7.0.0" 1452 | } 1453 | }, 1454 | "node_modules/color-name": { 1455 | "version": "1.1.4", 1456 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1457 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1458 | "dev": true 1459 | }, 1460 | "node_modules/concat-map": { 1461 | "version": "0.0.1", 1462 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1463 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1464 | "dev": true 1465 | }, 1466 | "node_modules/convert-source-map": { 1467 | "version": "2.0.0", 1468 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1469 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1470 | "dev": true 1471 | }, 1472 | "node_modules/create-jest": { 1473 | "version": "29.7.0", 1474 | "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", 1475 | "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", 1476 | "dev": true, 1477 | "dependencies": { 1478 | "@jest/types": "^29.6.3", 1479 | "chalk": "^4.0.0", 1480 | "exit": "^0.1.2", 1481 | "graceful-fs": "^4.2.9", 1482 | "jest-config": "^29.7.0", 1483 | "jest-util": "^29.7.0", 1484 | "prompts": "^2.0.1" 1485 | }, 1486 | "bin": { 1487 | "create-jest": "bin/create-jest.js" 1488 | }, 1489 | "engines": { 1490 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1491 | } 1492 | }, 1493 | "node_modules/cross-spawn": { 1494 | "version": "7.0.3", 1495 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1496 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1497 | "dev": true, 1498 | "dependencies": { 1499 | "path-key": "^3.1.0", 1500 | "shebang-command": "^2.0.0", 1501 | "which": "^2.0.1" 1502 | }, 1503 | "engines": { 1504 | "node": ">= 8" 1505 | } 1506 | }, 1507 | "node_modules/debug": { 1508 | "version": "4.3.4", 1509 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1510 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1511 | "dev": true, 1512 | "dependencies": { 1513 | "ms": "2.1.2" 1514 | }, 1515 | "engines": { 1516 | "node": ">=6.0" 1517 | }, 1518 | "peerDependenciesMeta": { 1519 | "supports-color": { 1520 | "optional": true 1521 | } 1522 | } 1523 | }, 1524 | "node_modules/dedent": { 1525 | "version": "1.5.1", 1526 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", 1527 | "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", 1528 | "dev": true, 1529 | "peerDependencies": { 1530 | "babel-plugin-macros": "^3.1.0" 1531 | }, 1532 | "peerDependenciesMeta": { 1533 | "babel-plugin-macros": { 1534 | "optional": true 1535 | } 1536 | } 1537 | }, 1538 | "node_modules/deepmerge": { 1539 | "version": "4.3.1", 1540 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1541 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1542 | "dev": true, 1543 | "engines": { 1544 | "node": ">=0.10.0" 1545 | } 1546 | }, 1547 | "node_modules/detect-newline": { 1548 | "version": "3.1.0", 1549 | "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", 1550 | "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", 1551 | "dev": true, 1552 | "engines": { 1553 | "node": ">=8" 1554 | } 1555 | }, 1556 | "node_modules/diff-sequences": { 1557 | "version": "29.6.3", 1558 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 1559 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 1560 | "dev": true, 1561 | "engines": { 1562 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1563 | } 1564 | }, 1565 | "node_modules/electron-to-chromium": { 1566 | "version": "1.4.730", 1567 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.730.tgz", 1568 | "integrity": "sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==", 1569 | "dev": true 1570 | }, 1571 | "node_modules/emittery": { 1572 | "version": "0.13.1", 1573 | "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", 1574 | "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", 1575 | "dev": true, 1576 | "engines": { 1577 | "node": ">=12" 1578 | }, 1579 | "funding": { 1580 | "url": "https://github.com/sindresorhus/emittery?sponsor=1" 1581 | } 1582 | }, 1583 | "node_modules/emoji-regex": { 1584 | "version": "8.0.0", 1585 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1586 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1587 | "dev": true 1588 | }, 1589 | "node_modules/error-ex": { 1590 | "version": "1.3.2", 1591 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1592 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1593 | "dev": true, 1594 | "dependencies": { 1595 | "is-arrayish": "^0.2.1" 1596 | } 1597 | }, 1598 | "node_modules/escalade": { 1599 | "version": "3.1.2", 1600 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 1601 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 1602 | "dev": true, 1603 | "engines": { 1604 | "node": ">=6" 1605 | } 1606 | }, 1607 | "node_modules/escape-string-regexp": { 1608 | "version": "2.0.0", 1609 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 1610 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 1611 | "dev": true, 1612 | "engines": { 1613 | "node": ">=8" 1614 | } 1615 | }, 1616 | "node_modules/esprima": { 1617 | "version": "4.0.1", 1618 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1619 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1620 | "dev": true, 1621 | "bin": { 1622 | "esparse": "bin/esparse.js", 1623 | "esvalidate": "bin/esvalidate.js" 1624 | }, 1625 | "engines": { 1626 | "node": ">=4" 1627 | } 1628 | }, 1629 | "node_modules/execa": { 1630 | "version": "5.1.1", 1631 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1632 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1633 | "dev": true, 1634 | "dependencies": { 1635 | "cross-spawn": "^7.0.3", 1636 | "get-stream": "^6.0.0", 1637 | "human-signals": "^2.1.0", 1638 | "is-stream": "^2.0.0", 1639 | "merge-stream": "^2.0.0", 1640 | "npm-run-path": "^4.0.1", 1641 | "onetime": "^5.1.2", 1642 | "signal-exit": "^3.0.3", 1643 | "strip-final-newline": "^2.0.0" 1644 | }, 1645 | "engines": { 1646 | "node": ">=10" 1647 | }, 1648 | "funding": { 1649 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1650 | } 1651 | }, 1652 | "node_modules/exit": { 1653 | "version": "0.1.2", 1654 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 1655 | "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", 1656 | "dev": true, 1657 | "engines": { 1658 | "node": ">= 0.8.0" 1659 | } 1660 | }, 1661 | "node_modules/expect": { 1662 | "version": "29.7.0", 1663 | "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", 1664 | "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", 1665 | "dev": true, 1666 | "dependencies": { 1667 | "@jest/expect-utils": "^29.7.0", 1668 | "jest-get-type": "^29.6.3", 1669 | "jest-matcher-utils": "^29.7.0", 1670 | "jest-message-util": "^29.7.0", 1671 | "jest-util": "^29.7.0" 1672 | }, 1673 | "engines": { 1674 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1675 | } 1676 | }, 1677 | "node_modules/fast-json-stable-stringify": { 1678 | "version": "2.1.0", 1679 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1680 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1681 | "dev": true 1682 | }, 1683 | "node_modules/fb-watchman": { 1684 | "version": "2.0.2", 1685 | "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", 1686 | "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", 1687 | "dev": true, 1688 | "dependencies": { 1689 | "bser": "2.1.1" 1690 | } 1691 | }, 1692 | "node_modules/fill-range": { 1693 | "version": "7.0.1", 1694 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1695 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1696 | "dev": true, 1697 | "dependencies": { 1698 | "to-regex-range": "^5.0.1" 1699 | }, 1700 | "engines": { 1701 | "node": ">=8" 1702 | } 1703 | }, 1704 | "node_modules/find-up": { 1705 | "version": "4.1.0", 1706 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1707 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1708 | "dev": true, 1709 | "dependencies": { 1710 | "locate-path": "^5.0.0", 1711 | "path-exists": "^4.0.0" 1712 | }, 1713 | "engines": { 1714 | "node": ">=8" 1715 | } 1716 | }, 1717 | "node_modules/fs.realpath": { 1718 | "version": "1.0.0", 1719 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1720 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1721 | "dev": true 1722 | }, 1723 | "node_modules/fsevents": { 1724 | "version": "2.3.3", 1725 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1726 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1727 | "dev": true, 1728 | "hasInstallScript": true, 1729 | "optional": true, 1730 | "os": [ 1731 | "darwin" 1732 | ], 1733 | "engines": { 1734 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1735 | } 1736 | }, 1737 | "node_modules/function-bind": { 1738 | "version": "1.1.2", 1739 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1740 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1741 | "dev": true, 1742 | "funding": { 1743 | "url": "https://github.com/sponsors/ljharb" 1744 | } 1745 | }, 1746 | "node_modules/gensync": { 1747 | "version": "1.0.0-beta.2", 1748 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1749 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1750 | "dev": true, 1751 | "engines": { 1752 | "node": ">=6.9.0" 1753 | } 1754 | }, 1755 | "node_modules/get-caller-file": { 1756 | "version": "2.0.5", 1757 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1758 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1759 | "dev": true, 1760 | "engines": { 1761 | "node": "6.* || 8.* || >= 10.*" 1762 | } 1763 | }, 1764 | "node_modules/get-package-type": { 1765 | "version": "0.1.0", 1766 | "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", 1767 | "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", 1768 | "dev": true, 1769 | "engines": { 1770 | "node": ">=8.0.0" 1771 | } 1772 | }, 1773 | "node_modules/get-stream": { 1774 | "version": "6.0.1", 1775 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1776 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1777 | "dev": true, 1778 | "engines": { 1779 | "node": ">=10" 1780 | }, 1781 | "funding": { 1782 | "url": "https://github.com/sponsors/sindresorhus" 1783 | } 1784 | }, 1785 | "node_modules/glob": { 1786 | "version": "7.2.3", 1787 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1788 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1789 | "dev": true, 1790 | "dependencies": { 1791 | "fs.realpath": "^1.0.0", 1792 | "inflight": "^1.0.4", 1793 | "inherits": "2", 1794 | "minimatch": "^3.1.1", 1795 | "once": "^1.3.0", 1796 | "path-is-absolute": "^1.0.0" 1797 | }, 1798 | "engines": { 1799 | "node": "*" 1800 | }, 1801 | "funding": { 1802 | "url": "https://github.com/sponsors/isaacs" 1803 | } 1804 | }, 1805 | "node_modules/globals": { 1806 | "version": "11.12.0", 1807 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1808 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1809 | "dev": true, 1810 | "engines": { 1811 | "node": ">=4" 1812 | } 1813 | }, 1814 | "node_modules/graceful-fs": { 1815 | "version": "4.2.11", 1816 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1817 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1818 | "dev": true 1819 | }, 1820 | "node_modules/has-flag": { 1821 | "version": "4.0.0", 1822 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1823 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1824 | "dev": true, 1825 | "engines": { 1826 | "node": ">=8" 1827 | } 1828 | }, 1829 | "node_modules/hasown": { 1830 | "version": "2.0.2", 1831 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1832 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1833 | "dev": true, 1834 | "dependencies": { 1835 | "function-bind": "^1.1.2" 1836 | }, 1837 | "engines": { 1838 | "node": ">= 0.4" 1839 | } 1840 | }, 1841 | "node_modules/html-escaper": { 1842 | "version": "2.0.2", 1843 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1844 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1845 | "dev": true 1846 | }, 1847 | "node_modules/human-signals": { 1848 | "version": "2.1.0", 1849 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1850 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1851 | "dev": true, 1852 | "engines": { 1853 | "node": ">=10.17.0" 1854 | } 1855 | }, 1856 | "node_modules/import-local": { 1857 | "version": "3.1.0", 1858 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", 1859 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", 1860 | "dev": true, 1861 | "dependencies": { 1862 | "pkg-dir": "^4.2.0", 1863 | "resolve-cwd": "^3.0.0" 1864 | }, 1865 | "bin": { 1866 | "import-local-fixture": "fixtures/cli.js" 1867 | }, 1868 | "engines": { 1869 | "node": ">=8" 1870 | }, 1871 | "funding": { 1872 | "url": "https://github.com/sponsors/sindresorhus" 1873 | } 1874 | }, 1875 | "node_modules/imurmurhash": { 1876 | "version": "0.1.4", 1877 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1878 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1879 | "dev": true, 1880 | "engines": { 1881 | "node": ">=0.8.19" 1882 | } 1883 | }, 1884 | "node_modules/inflight": { 1885 | "version": "1.0.6", 1886 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1887 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1888 | "dev": true, 1889 | "dependencies": { 1890 | "once": "^1.3.0", 1891 | "wrappy": "1" 1892 | } 1893 | }, 1894 | "node_modules/inherits": { 1895 | "version": "2.0.4", 1896 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1897 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1898 | "dev": true 1899 | }, 1900 | "node_modules/is-arrayish": { 1901 | "version": "0.2.1", 1902 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1903 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1904 | "dev": true 1905 | }, 1906 | "node_modules/is-core-module": { 1907 | "version": "2.13.1", 1908 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 1909 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 1910 | "dev": true, 1911 | "dependencies": { 1912 | "hasown": "^2.0.0" 1913 | }, 1914 | "funding": { 1915 | "url": "https://github.com/sponsors/ljharb" 1916 | } 1917 | }, 1918 | "node_modules/is-fullwidth-code-point": { 1919 | "version": "3.0.0", 1920 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1921 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1922 | "dev": true, 1923 | "engines": { 1924 | "node": ">=8" 1925 | } 1926 | }, 1927 | "node_modules/is-generator-fn": { 1928 | "version": "2.1.0", 1929 | "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", 1930 | "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", 1931 | "dev": true, 1932 | "engines": { 1933 | "node": ">=6" 1934 | } 1935 | }, 1936 | "node_modules/is-number": { 1937 | "version": "7.0.0", 1938 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1939 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1940 | "dev": true, 1941 | "engines": { 1942 | "node": ">=0.12.0" 1943 | } 1944 | }, 1945 | "node_modules/is-stream": { 1946 | "version": "2.0.1", 1947 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1948 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1949 | "dev": true, 1950 | "engines": { 1951 | "node": ">=8" 1952 | }, 1953 | "funding": { 1954 | "url": "https://github.com/sponsors/sindresorhus" 1955 | } 1956 | }, 1957 | "node_modules/isexe": { 1958 | "version": "2.0.0", 1959 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1960 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1961 | "dev": true 1962 | }, 1963 | "node_modules/istanbul-lib-coverage": { 1964 | "version": "3.2.2", 1965 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", 1966 | "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", 1967 | "dev": true, 1968 | "engines": { 1969 | "node": ">=8" 1970 | } 1971 | }, 1972 | "node_modules/istanbul-lib-instrument": { 1973 | "version": "6.0.2", 1974 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", 1975 | "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", 1976 | "dev": true, 1977 | "dependencies": { 1978 | "@babel/core": "^7.23.9", 1979 | "@babel/parser": "^7.23.9", 1980 | "@istanbuljs/schema": "^0.1.3", 1981 | "istanbul-lib-coverage": "^3.2.0", 1982 | "semver": "^7.5.4" 1983 | }, 1984 | "engines": { 1985 | "node": ">=10" 1986 | } 1987 | }, 1988 | "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { 1989 | "version": "6.0.0", 1990 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1991 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1992 | "dev": true, 1993 | "dependencies": { 1994 | "yallist": "^4.0.0" 1995 | }, 1996 | "engines": { 1997 | "node": ">=10" 1998 | } 1999 | }, 2000 | "node_modules/istanbul-lib-instrument/node_modules/semver": { 2001 | "version": "7.6.0", 2002 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 2003 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 2004 | "dev": true, 2005 | "dependencies": { 2006 | "lru-cache": "^6.0.0" 2007 | }, 2008 | "bin": { 2009 | "semver": "bin/semver.js" 2010 | }, 2011 | "engines": { 2012 | "node": ">=10" 2013 | } 2014 | }, 2015 | "node_modules/istanbul-lib-instrument/node_modules/yallist": { 2016 | "version": "4.0.0", 2017 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2018 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2019 | "dev": true 2020 | }, 2021 | "node_modules/istanbul-lib-report": { 2022 | "version": "3.0.1", 2023 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 2024 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 2025 | "dev": true, 2026 | "dependencies": { 2027 | "istanbul-lib-coverage": "^3.0.0", 2028 | "make-dir": "^4.0.0", 2029 | "supports-color": "^7.1.0" 2030 | }, 2031 | "engines": { 2032 | "node": ">=10" 2033 | } 2034 | }, 2035 | "node_modules/istanbul-lib-source-maps": { 2036 | "version": "4.0.1", 2037 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", 2038 | "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", 2039 | "dev": true, 2040 | "dependencies": { 2041 | "debug": "^4.1.1", 2042 | "istanbul-lib-coverage": "^3.0.0", 2043 | "source-map": "^0.6.1" 2044 | }, 2045 | "engines": { 2046 | "node": ">=10" 2047 | } 2048 | }, 2049 | "node_modules/istanbul-reports": { 2050 | "version": "3.1.7", 2051 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", 2052 | "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", 2053 | "dev": true, 2054 | "dependencies": { 2055 | "html-escaper": "^2.0.0", 2056 | "istanbul-lib-report": "^3.0.0" 2057 | }, 2058 | "engines": { 2059 | "node": ">=8" 2060 | } 2061 | }, 2062 | "node_modules/jest": { 2063 | "version": "29.7.0", 2064 | "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", 2065 | "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", 2066 | "dev": true, 2067 | "dependencies": { 2068 | "@jest/core": "^29.7.0", 2069 | "@jest/types": "^29.6.3", 2070 | "import-local": "^3.0.2", 2071 | "jest-cli": "^29.7.0" 2072 | }, 2073 | "bin": { 2074 | "jest": "bin/jest.js" 2075 | }, 2076 | "engines": { 2077 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2078 | }, 2079 | "peerDependencies": { 2080 | "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 2081 | }, 2082 | "peerDependenciesMeta": { 2083 | "node-notifier": { 2084 | "optional": true 2085 | } 2086 | } 2087 | }, 2088 | "node_modules/jest-changed-files": { 2089 | "version": "29.7.0", 2090 | "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", 2091 | "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", 2092 | "dev": true, 2093 | "dependencies": { 2094 | "execa": "^5.0.0", 2095 | "jest-util": "^29.7.0", 2096 | "p-limit": "^3.1.0" 2097 | }, 2098 | "engines": { 2099 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2100 | } 2101 | }, 2102 | "node_modules/jest-circus": { 2103 | "version": "29.7.0", 2104 | "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", 2105 | "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", 2106 | "dev": true, 2107 | "dependencies": { 2108 | "@jest/environment": "^29.7.0", 2109 | "@jest/expect": "^29.7.0", 2110 | "@jest/test-result": "^29.7.0", 2111 | "@jest/types": "^29.6.3", 2112 | "@types/node": "*", 2113 | "chalk": "^4.0.0", 2114 | "co": "^4.6.0", 2115 | "dedent": "^1.0.0", 2116 | "is-generator-fn": "^2.0.0", 2117 | "jest-each": "^29.7.0", 2118 | "jest-matcher-utils": "^29.7.0", 2119 | "jest-message-util": "^29.7.0", 2120 | "jest-runtime": "^29.7.0", 2121 | "jest-snapshot": "^29.7.0", 2122 | "jest-util": "^29.7.0", 2123 | "p-limit": "^3.1.0", 2124 | "pretty-format": "^29.7.0", 2125 | "pure-rand": "^6.0.0", 2126 | "slash": "^3.0.0", 2127 | "stack-utils": "^2.0.3" 2128 | }, 2129 | "engines": { 2130 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2131 | } 2132 | }, 2133 | "node_modules/jest-cli": { 2134 | "version": "29.7.0", 2135 | "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", 2136 | "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", 2137 | "dev": true, 2138 | "dependencies": { 2139 | "@jest/core": "^29.7.0", 2140 | "@jest/test-result": "^29.7.0", 2141 | "@jest/types": "^29.6.3", 2142 | "chalk": "^4.0.0", 2143 | "create-jest": "^29.7.0", 2144 | "exit": "^0.1.2", 2145 | "import-local": "^3.0.2", 2146 | "jest-config": "^29.7.0", 2147 | "jest-util": "^29.7.0", 2148 | "jest-validate": "^29.7.0", 2149 | "yargs": "^17.3.1" 2150 | }, 2151 | "bin": { 2152 | "jest": "bin/jest.js" 2153 | }, 2154 | "engines": { 2155 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2156 | }, 2157 | "peerDependencies": { 2158 | "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" 2159 | }, 2160 | "peerDependenciesMeta": { 2161 | "node-notifier": { 2162 | "optional": true 2163 | } 2164 | } 2165 | }, 2166 | "node_modules/jest-config": { 2167 | "version": "29.7.0", 2168 | "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", 2169 | "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", 2170 | "dev": true, 2171 | "dependencies": { 2172 | "@babel/core": "^7.11.6", 2173 | "@jest/test-sequencer": "^29.7.0", 2174 | "@jest/types": "^29.6.3", 2175 | "babel-jest": "^29.7.0", 2176 | "chalk": "^4.0.0", 2177 | "ci-info": "^3.2.0", 2178 | "deepmerge": "^4.2.2", 2179 | "glob": "^7.1.3", 2180 | "graceful-fs": "^4.2.9", 2181 | "jest-circus": "^29.7.0", 2182 | "jest-environment-node": "^29.7.0", 2183 | "jest-get-type": "^29.6.3", 2184 | "jest-regex-util": "^29.6.3", 2185 | "jest-resolve": "^29.7.0", 2186 | "jest-runner": "^29.7.0", 2187 | "jest-util": "^29.7.0", 2188 | "jest-validate": "^29.7.0", 2189 | "micromatch": "^4.0.4", 2190 | "parse-json": "^5.2.0", 2191 | "pretty-format": "^29.7.0", 2192 | "slash": "^3.0.0", 2193 | "strip-json-comments": "^3.1.1" 2194 | }, 2195 | "engines": { 2196 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2197 | }, 2198 | "peerDependencies": { 2199 | "@types/node": "*", 2200 | "ts-node": ">=9.0.0" 2201 | }, 2202 | "peerDependenciesMeta": { 2203 | "@types/node": { 2204 | "optional": true 2205 | }, 2206 | "ts-node": { 2207 | "optional": true 2208 | } 2209 | } 2210 | }, 2211 | "node_modules/jest-diff": { 2212 | "version": "29.7.0", 2213 | "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", 2214 | "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", 2215 | "dev": true, 2216 | "dependencies": { 2217 | "chalk": "^4.0.0", 2218 | "diff-sequences": "^29.6.3", 2219 | "jest-get-type": "^29.6.3", 2220 | "pretty-format": "^29.7.0" 2221 | }, 2222 | "engines": { 2223 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2224 | } 2225 | }, 2226 | "node_modules/jest-docblock": { 2227 | "version": "29.7.0", 2228 | "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", 2229 | "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", 2230 | "dev": true, 2231 | "dependencies": { 2232 | "detect-newline": "^3.0.0" 2233 | }, 2234 | "engines": { 2235 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2236 | } 2237 | }, 2238 | "node_modules/jest-each": { 2239 | "version": "29.7.0", 2240 | "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", 2241 | "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", 2242 | "dev": true, 2243 | "dependencies": { 2244 | "@jest/types": "^29.6.3", 2245 | "chalk": "^4.0.0", 2246 | "jest-get-type": "^29.6.3", 2247 | "jest-util": "^29.7.0", 2248 | "pretty-format": "^29.7.0" 2249 | }, 2250 | "engines": { 2251 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2252 | } 2253 | }, 2254 | "node_modules/jest-environment-node": { 2255 | "version": "29.7.0", 2256 | "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", 2257 | "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", 2258 | "dev": true, 2259 | "dependencies": { 2260 | "@jest/environment": "^29.7.0", 2261 | "@jest/fake-timers": "^29.7.0", 2262 | "@jest/types": "^29.6.3", 2263 | "@types/node": "*", 2264 | "jest-mock": "^29.7.0", 2265 | "jest-util": "^29.7.0" 2266 | }, 2267 | "engines": { 2268 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2269 | } 2270 | }, 2271 | "node_modules/jest-get-type": { 2272 | "version": "29.6.3", 2273 | "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", 2274 | "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", 2275 | "dev": true, 2276 | "engines": { 2277 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2278 | } 2279 | }, 2280 | "node_modules/jest-haste-map": { 2281 | "version": "29.7.0", 2282 | "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", 2283 | "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", 2284 | "dev": true, 2285 | "dependencies": { 2286 | "@jest/types": "^29.6.3", 2287 | "@types/graceful-fs": "^4.1.3", 2288 | "@types/node": "*", 2289 | "anymatch": "^3.0.3", 2290 | "fb-watchman": "^2.0.0", 2291 | "graceful-fs": "^4.2.9", 2292 | "jest-regex-util": "^29.6.3", 2293 | "jest-util": "^29.7.0", 2294 | "jest-worker": "^29.7.0", 2295 | "micromatch": "^4.0.4", 2296 | "walker": "^1.0.8" 2297 | }, 2298 | "engines": { 2299 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2300 | }, 2301 | "optionalDependencies": { 2302 | "fsevents": "^2.3.2" 2303 | } 2304 | }, 2305 | "node_modules/jest-leak-detector": { 2306 | "version": "29.7.0", 2307 | "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", 2308 | "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", 2309 | "dev": true, 2310 | "dependencies": { 2311 | "jest-get-type": "^29.6.3", 2312 | "pretty-format": "^29.7.0" 2313 | }, 2314 | "engines": { 2315 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2316 | } 2317 | }, 2318 | "node_modules/jest-matcher-utils": { 2319 | "version": "29.7.0", 2320 | "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", 2321 | "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", 2322 | "dev": true, 2323 | "dependencies": { 2324 | "chalk": "^4.0.0", 2325 | "jest-diff": "^29.7.0", 2326 | "jest-get-type": "^29.6.3", 2327 | "pretty-format": "^29.7.0" 2328 | }, 2329 | "engines": { 2330 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2331 | } 2332 | }, 2333 | "node_modules/jest-message-util": { 2334 | "version": "29.7.0", 2335 | "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", 2336 | "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", 2337 | "dev": true, 2338 | "dependencies": { 2339 | "@babel/code-frame": "^7.12.13", 2340 | "@jest/types": "^29.6.3", 2341 | "@types/stack-utils": "^2.0.0", 2342 | "chalk": "^4.0.0", 2343 | "graceful-fs": "^4.2.9", 2344 | "micromatch": "^4.0.4", 2345 | "pretty-format": "^29.7.0", 2346 | "slash": "^3.0.0", 2347 | "stack-utils": "^2.0.3" 2348 | }, 2349 | "engines": { 2350 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2351 | } 2352 | }, 2353 | "node_modules/jest-mock": { 2354 | "version": "29.7.0", 2355 | "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", 2356 | "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", 2357 | "dev": true, 2358 | "dependencies": { 2359 | "@jest/types": "^29.6.3", 2360 | "@types/node": "*", 2361 | "jest-util": "^29.7.0" 2362 | }, 2363 | "engines": { 2364 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2365 | } 2366 | }, 2367 | "node_modules/jest-pnp-resolver": { 2368 | "version": "1.2.3", 2369 | "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", 2370 | "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", 2371 | "dev": true, 2372 | "engines": { 2373 | "node": ">=6" 2374 | }, 2375 | "peerDependencies": { 2376 | "jest-resolve": "*" 2377 | }, 2378 | "peerDependenciesMeta": { 2379 | "jest-resolve": { 2380 | "optional": true 2381 | } 2382 | } 2383 | }, 2384 | "node_modules/jest-regex-util": { 2385 | "version": "29.6.3", 2386 | "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", 2387 | "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", 2388 | "dev": true, 2389 | "engines": { 2390 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2391 | } 2392 | }, 2393 | "node_modules/jest-resolve": { 2394 | "version": "29.7.0", 2395 | "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", 2396 | "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", 2397 | "dev": true, 2398 | "dependencies": { 2399 | "chalk": "^4.0.0", 2400 | "graceful-fs": "^4.2.9", 2401 | "jest-haste-map": "^29.7.0", 2402 | "jest-pnp-resolver": "^1.2.2", 2403 | "jest-util": "^29.7.0", 2404 | "jest-validate": "^29.7.0", 2405 | "resolve": "^1.20.0", 2406 | "resolve.exports": "^2.0.0", 2407 | "slash": "^3.0.0" 2408 | }, 2409 | "engines": { 2410 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2411 | } 2412 | }, 2413 | "node_modules/jest-resolve-dependencies": { 2414 | "version": "29.7.0", 2415 | "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", 2416 | "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", 2417 | "dev": true, 2418 | "dependencies": { 2419 | "jest-regex-util": "^29.6.3", 2420 | "jest-snapshot": "^29.7.0" 2421 | }, 2422 | "engines": { 2423 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2424 | } 2425 | }, 2426 | "node_modules/jest-runner": { 2427 | "version": "29.7.0", 2428 | "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", 2429 | "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", 2430 | "dev": true, 2431 | "dependencies": { 2432 | "@jest/console": "^29.7.0", 2433 | "@jest/environment": "^29.7.0", 2434 | "@jest/test-result": "^29.7.0", 2435 | "@jest/transform": "^29.7.0", 2436 | "@jest/types": "^29.6.3", 2437 | "@types/node": "*", 2438 | "chalk": "^4.0.0", 2439 | "emittery": "^0.13.1", 2440 | "graceful-fs": "^4.2.9", 2441 | "jest-docblock": "^29.7.0", 2442 | "jest-environment-node": "^29.7.0", 2443 | "jest-haste-map": "^29.7.0", 2444 | "jest-leak-detector": "^29.7.0", 2445 | "jest-message-util": "^29.7.0", 2446 | "jest-resolve": "^29.7.0", 2447 | "jest-runtime": "^29.7.0", 2448 | "jest-util": "^29.7.0", 2449 | "jest-watcher": "^29.7.0", 2450 | "jest-worker": "^29.7.0", 2451 | "p-limit": "^3.1.0", 2452 | "source-map-support": "0.5.13" 2453 | }, 2454 | "engines": { 2455 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2456 | } 2457 | }, 2458 | "node_modules/jest-runtime": { 2459 | "version": "29.7.0", 2460 | "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", 2461 | "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", 2462 | "dev": true, 2463 | "dependencies": { 2464 | "@jest/environment": "^29.7.0", 2465 | "@jest/fake-timers": "^29.7.0", 2466 | "@jest/globals": "^29.7.0", 2467 | "@jest/source-map": "^29.6.3", 2468 | "@jest/test-result": "^29.7.0", 2469 | "@jest/transform": "^29.7.0", 2470 | "@jest/types": "^29.6.3", 2471 | "@types/node": "*", 2472 | "chalk": "^4.0.0", 2473 | "cjs-module-lexer": "^1.0.0", 2474 | "collect-v8-coverage": "^1.0.0", 2475 | "glob": "^7.1.3", 2476 | "graceful-fs": "^4.2.9", 2477 | "jest-haste-map": "^29.7.0", 2478 | "jest-message-util": "^29.7.0", 2479 | "jest-mock": "^29.7.0", 2480 | "jest-regex-util": "^29.6.3", 2481 | "jest-resolve": "^29.7.0", 2482 | "jest-snapshot": "^29.7.0", 2483 | "jest-util": "^29.7.0", 2484 | "slash": "^3.0.0", 2485 | "strip-bom": "^4.0.0" 2486 | }, 2487 | "engines": { 2488 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2489 | } 2490 | }, 2491 | "node_modules/jest-snapshot": { 2492 | "version": "29.7.0", 2493 | "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", 2494 | "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", 2495 | "dev": true, 2496 | "dependencies": { 2497 | "@babel/core": "^7.11.6", 2498 | "@babel/generator": "^7.7.2", 2499 | "@babel/plugin-syntax-jsx": "^7.7.2", 2500 | "@babel/plugin-syntax-typescript": "^7.7.2", 2501 | "@babel/types": "^7.3.3", 2502 | "@jest/expect-utils": "^29.7.0", 2503 | "@jest/transform": "^29.7.0", 2504 | "@jest/types": "^29.6.3", 2505 | "babel-preset-current-node-syntax": "^1.0.0", 2506 | "chalk": "^4.0.0", 2507 | "expect": "^29.7.0", 2508 | "graceful-fs": "^4.2.9", 2509 | "jest-diff": "^29.7.0", 2510 | "jest-get-type": "^29.6.3", 2511 | "jest-matcher-utils": "^29.7.0", 2512 | "jest-message-util": "^29.7.0", 2513 | "jest-util": "^29.7.0", 2514 | "natural-compare": "^1.4.0", 2515 | "pretty-format": "^29.7.0", 2516 | "semver": "^7.5.3" 2517 | }, 2518 | "engines": { 2519 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2520 | } 2521 | }, 2522 | "node_modules/jest-snapshot/node_modules/lru-cache": { 2523 | "version": "6.0.0", 2524 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2525 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2526 | "dev": true, 2527 | "dependencies": { 2528 | "yallist": "^4.0.0" 2529 | }, 2530 | "engines": { 2531 | "node": ">=10" 2532 | } 2533 | }, 2534 | "node_modules/jest-snapshot/node_modules/semver": { 2535 | "version": "7.6.0", 2536 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 2537 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 2538 | "dev": true, 2539 | "dependencies": { 2540 | "lru-cache": "^6.0.0" 2541 | }, 2542 | "bin": { 2543 | "semver": "bin/semver.js" 2544 | }, 2545 | "engines": { 2546 | "node": ">=10" 2547 | } 2548 | }, 2549 | "node_modules/jest-snapshot/node_modules/yallist": { 2550 | "version": "4.0.0", 2551 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2552 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2553 | "dev": true 2554 | }, 2555 | "node_modules/jest-util": { 2556 | "version": "29.7.0", 2557 | "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", 2558 | "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", 2559 | "dev": true, 2560 | "dependencies": { 2561 | "@jest/types": "^29.6.3", 2562 | "@types/node": "*", 2563 | "chalk": "^4.0.0", 2564 | "ci-info": "^3.2.0", 2565 | "graceful-fs": "^4.2.9", 2566 | "picomatch": "^2.2.3" 2567 | }, 2568 | "engines": { 2569 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2570 | } 2571 | }, 2572 | "node_modules/jest-validate": { 2573 | "version": "29.7.0", 2574 | "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", 2575 | "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", 2576 | "dev": true, 2577 | "dependencies": { 2578 | "@jest/types": "^29.6.3", 2579 | "camelcase": "^6.2.0", 2580 | "chalk": "^4.0.0", 2581 | "jest-get-type": "^29.6.3", 2582 | "leven": "^3.1.0", 2583 | "pretty-format": "^29.7.0" 2584 | }, 2585 | "engines": { 2586 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2587 | } 2588 | }, 2589 | "node_modules/jest-validate/node_modules/camelcase": { 2590 | "version": "6.3.0", 2591 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 2592 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 2593 | "dev": true, 2594 | "engines": { 2595 | "node": ">=10" 2596 | }, 2597 | "funding": { 2598 | "url": "https://github.com/sponsors/sindresorhus" 2599 | } 2600 | }, 2601 | "node_modules/jest-watcher": { 2602 | "version": "29.7.0", 2603 | "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", 2604 | "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", 2605 | "dev": true, 2606 | "dependencies": { 2607 | "@jest/test-result": "^29.7.0", 2608 | "@jest/types": "^29.6.3", 2609 | "@types/node": "*", 2610 | "ansi-escapes": "^4.2.1", 2611 | "chalk": "^4.0.0", 2612 | "emittery": "^0.13.1", 2613 | "jest-util": "^29.7.0", 2614 | "string-length": "^4.0.1" 2615 | }, 2616 | "engines": { 2617 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2618 | } 2619 | }, 2620 | "node_modules/jest-worker": { 2621 | "version": "29.7.0", 2622 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", 2623 | "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", 2624 | "dev": true, 2625 | "dependencies": { 2626 | "@types/node": "*", 2627 | "jest-util": "^29.7.0", 2628 | "merge-stream": "^2.0.0", 2629 | "supports-color": "^8.0.0" 2630 | }, 2631 | "engines": { 2632 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 2633 | } 2634 | }, 2635 | "node_modules/jest-worker/node_modules/supports-color": { 2636 | "version": "8.1.1", 2637 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2638 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2639 | "dev": true, 2640 | "dependencies": { 2641 | "has-flag": "^4.0.0" 2642 | }, 2643 | "engines": { 2644 | "node": ">=10" 2645 | }, 2646 | "funding": { 2647 | "url": "https://github.com/chalk/supports-color?sponsor=1" 2648 | } 2649 | }, 2650 | "node_modules/js-tokens": { 2651 | "version": "4.0.0", 2652 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2653 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2654 | "dev": true 2655 | }, 2656 | "node_modules/js-yaml": { 2657 | "version": "3.14.1", 2658 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 2659 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 2660 | "dev": true, 2661 | "dependencies": { 2662 | "argparse": "^1.0.7", 2663 | "esprima": "^4.0.0" 2664 | }, 2665 | "bin": { 2666 | "js-yaml": "bin/js-yaml.js" 2667 | } 2668 | }, 2669 | "node_modules/jsesc": { 2670 | "version": "2.5.2", 2671 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2672 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2673 | "dev": true, 2674 | "bin": { 2675 | "jsesc": "bin/jsesc" 2676 | }, 2677 | "engines": { 2678 | "node": ">=4" 2679 | } 2680 | }, 2681 | "node_modules/json-parse-even-better-errors": { 2682 | "version": "2.3.1", 2683 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2684 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2685 | "dev": true 2686 | }, 2687 | "node_modules/json5": { 2688 | "version": "2.2.3", 2689 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2690 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2691 | "dev": true, 2692 | "bin": { 2693 | "json5": "lib/cli.js" 2694 | }, 2695 | "engines": { 2696 | "node": ">=6" 2697 | } 2698 | }, 2699 | "node_modules/kleur": { 2700 | "version": "3.0.3", 2701 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 2702 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", 2703 | "dev": true, 2704 | "engines": { 2705 | "node": ">=6" 2706 | } 2707 | }, 2708 | "node_modules/leven": { 2709 | "version": "3.1.0", 2710 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 2711 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 2712 | "dev": true, 2713 | "engines": { 2714 | "node": ">=6" 2715 | } 2716 | }, 2717 | "node_modules/lines-and-columns": { 2718 | "version": "1.2.4", 2719 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2720 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2721 | "dev": true 2722 | }, 2723 | "node_modules/locate-path": { 2724 | "version": "5.0.0", 2725 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2726 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2727 | "dev": true, 2728 | "dependencies": { 2729 | "p-locate": "^4.1.0" 2730 | }, 2731 | "engines": { 2732 | "node": ">=8" 2733 | } 2734 | }, 2735 | "node_modules/lodash.memoize": { 2736 | "version": "4.1.2", 2737 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 2738 | "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", 2739 | "dev": true 2740 | }, 2741 | "node_modules/lru-cache": { 2742 | "version": "5.1.1", 2743 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2744 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2745 | "dev": true, 2746 | "dependencies": { 2747 | "yallist": "^3.0.2" 2748 | } 2749 | }, 2750 | "node_modules/make-dir": { 2751 | "version": "4.0.0", 2752 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 2753 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 2754 | "dev": true, 2755 | "dependencies": { 2756 | "semver": "^7.5.3" 2757 | }, 2758 | "engines": { 2759 | "node": ">=10" 2760 | }, 2761 | "funding": { 2762 | "url": "https://github.com/sponsors/sindresorhus" 2763 | } 2764 | }, 2765 | "node_modules/make-dir/node_modules/lru-cache": { 2766 | "version": "6.0.0", 2767 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2768 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2769 | "dev": true, 2770 | "dependencies": { 2771 | "yallist": "^4.0.0" 2772 | }, 2773 | "engines": { 2774 | "node": ">=10" 2775 | } 2776 | }, 2777 | "node_modules/make-dir/node_modules/semver": { 2778 | "version": "7.6.0", 2779 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 2780 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 2781 | "dev": true, 2782 | "dependencies": { 2783 | "lru-cache": "^6.0.0" 2784 | }, 2785 | "bin": { 2786 | "semver": "bin/semver.js" 2787 | }, 2788 | "engines": { 2789 | "node": ">=10" 2790 | } 2791 | }, 2792 | "node_modules/make-dir/node_modules/yallist": { 2793 | "version": "4.0.0", 2794 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2795 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2796 | "dev": true 2797 | }, 2798 | "node_modules/make-error": { 2799 | "version": "1.3.6", 2800 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 2801 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 2802 | "dev": true 2803 | }, 2804 | "node_modules/makeerror": { 2805 | "version": "1.0.12", 2806 | "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", 2807 | "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", 2808 | "dev": true, 2809 | "dependencies": { 2810 | "tmpl": "1.0.5" 2811 | } 2812 | }, 2813 | "node_modules/merge-stream": { 2814 | "version": "2.0.0", 2815 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2816 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2817 | "dev": true 2818 | }, 2819 | "node_modules/micromatch": { 2820 | "version": "4.0.5", 2821 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2822 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2823 | "dev": true, 2824 | "dependencies": { 2825 | "braces": "^3.0.2", 2826 | "picomatch": "^2.3.1" 2827 | }, 2828 | "engines": { 2829 | "node": ">=8.6" 2830 | } 2831 | }, 2832 | "node_modules/mimic-fn": { 2833 | "version": "2.1.0", 2834 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2835 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2836 | "dev": true, 2837 | "engines": { 2838 | "node": ">=6" 2839 | } 2840 | }, 2841 | "node_modules/minimatch": { 2842 | "version": "3.1.2", 2843 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2844 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2845 | "dev": true, 2846 | "dependencies": { 2847 | "brace-expansion": "^1.1.7" 2848 | }, 2849 | "engines": { 2850 | "node": "*" 2851 | } 2852 | }, 2853 | "node_modules/ms": { 2854 | "version": "2.1.2", 2855 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2856 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2857 | "dev": true 2858 | }, 2859 | "node_modules/natural-compare": { 2860 | "version": "1.4.0", 2861 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2862 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2863 | "dev": true 2864 | }, 2865 | "node_modules/node-int64": { 2866 | "version": "0.4.0", 2867 | "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", 2868 | "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", 2869 | "dev": true 2870 | }, 2871 | "node_modules/node-releases": { 2872 | "version": "2.0.14", 2873 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 2874 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 2875 | "dev": true 2876 | }, 2877 | "node_modules/normalize-path": { 2878 | "version": "3.0.0", 2879 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2880 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2881 | "dev": true, 2882 | "engines": { 2883 | "node": ">=0.10.0" 2884 | } 2885 | }, 2886 | "node_modules/npm-run-path": { 2887 | "version": "4.0.1", 2888 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2889 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2890 | "dev": true, 2891 | "dependencies": { 2892 | "path-key": "^3.0.0" 2893 | }, 2894 | "engines": { 2895 | "node": ">=8" 2896 | } 2897 | }, 2898 | "node_modules/once": { 2899 | "version": "1.4.0", 2900 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2901 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2902 | "dev": true, 2903 | "dependencies": { 2904 | "wrappy": "1" 2905 | } 2906 | }, 2907 | "node_modules/onetime": { 2908 | "version": "5.1.2", 2909 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2910 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2911 | "dev": true, 2912 | "dependencies": { 2913 | "mimic-fn": "^2.1.0" 2914 | }, 2915 | "engines": { 2916 | "node": ">=6" 2917 | }, 2918 | "funding": { 2919 | "url": "https://github.com/sponsors/sindresorhus" 2920 | } 2921 | }, 2922 | "node_modules/p-limit": { 2923 | "version": "3.1.0", 2924 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2925 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2926 | "dev": true, 2927 | "dependencies": { 2928 | "yocto-queue": "^0.1.0" 2929 | }, 2930 | "engines": { 2931 | "node": ">=10" 2932 | }, 2933 | "funding": { 2934 | "url": "https://github.com/sponsors/sindresorhus" 2935 | } 2936 | }, 2937 | "node_modules/p-locate": { 2938 | "version": "4.1.0", 2939 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2940 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2941 | "dev": true, 2942 | "dependencies": { 2943 | "p-limit": "^2.2.0" 2944 | }, 2945 | "engines": { 2946 | "node": ">=8" 2947 | } 2948 | }, 2949 | "node_modules/p-locate/node_modules/p-limit": { 2950 | "version": "2.3.0", 2951 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2952 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2953 | "dev": true, 2954 | "dependencies": { 2955 | "p-try": "^2.0.0" 2956 | }, 2957 | "engines": { 2958 | "node": ">=6" 2959 | }, 2960 | "funding": { 2961 | "url": "https://github.com/sponsors/sindresorhus" 2962 | } 2963 | }, 2964 | "node_modules/p-try": { 2965 | "version": "2.2.0", 2966 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2967 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2968 | "dev": true, 2969 | "engines": { 2970 | "node": ">=6" 2971 | } 2972 | }, 2973 | "node_modules/parse-json": { 2974 | "version": "5.2.0", 2975 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2976 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2977 | "dev": true, 2978 | "dependencies": { 2979 | "@babel/code-frame": "^7.0.0", 2980 | "error-ex": "^1.3.1", 2981 | "json-parse-even-better-errors": "^2.3.0", 2982 | "lines-and-columns": "^1.1.6" 2983 | }, 2984 | "engines": { 2985 | "node": ">=8" 2986 | }, 2987 | "funding": { 2988 | "url": "https://github.com/sponsors/sindresorhus" 2989 | } 2990 | }, 2991 | "node_modules/path-exists": { 2992 | "version": "4.0.0", 2993 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2994 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2995 | "dev": true, 2996 | "engines": { 2997 | "node": ">=8" 2998 | } 2999 | }, 3000 | "node_modules/path-is-absolute": { 3001 | "version": "1.0.1", 3002 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3003 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3004 | "dev": true, 3005 | "engines": { 3006 | "node": ">=0.10.0" 3007 | } 3008 | }, 3009 | "node_modules/path-key": { 3010 | "version": "3.1.1", 3011 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3012 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3013 | "dev": true, 3014 | "engines": { 3015 | "node": ">=8" 3016 | } 3017 | }, 3018 | "node_modules/path-parse": { 3019 | "version": "1.0.7", 3020 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3021 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3022 | "dev": true 3023 | }, 3024 | "node_modules/picocolors": { 3025 | "version": "1.0.0", 3026 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3027 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 3028 | "dev": true 3029 | }, 3030 | "node_modules/picomatch": { 3031 | "version": "2.3.1", 3032 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3033 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3034 | "dev": true, 3035 | "engines": { 3036 | "node": ">=8.6" 3037 | }, 3038 | "funding": { 3039 | "url": "https://github.com/sponsors/jonschlinkert" 3040 | } 3041 | }, 3042 | "node_modules/pirates": { 3043 | "version": "4.0.6", 3044 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 3045 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 3046 | "dev": true, 3047 | "engines": { 3048 | "node": ">= 6" 3049 | } 3050 | }, 3051 | "node_modules/pkg-dir": { 3052 | "version": "4.2.0", 3053 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 3054 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 3055 | "dev": true, 3056 | "dependencies": { 3057 | "find-up": "^4.0.0" 3058 | }, 3059 | "engines": { 3060 | "node": ">=8" 3061 | } 3062 | }, 3063 | "node_modules/pretty-format": { 3064 | "version": "29.7.0", 3065 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 3066 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 3067 | "dev": true, 3068 | "dependencies": { 3069 | "@jest/schemas": "^29.6.3", 3070 | "ansi-styles": "^5.0.0", 3071 | "react-is": "^18.0.0" 3072 | }, 3073 | "engines": { 3074 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 3075 | } 3076 | }, 3077 | "node_modules/pretty-format/node_modules/ansi-styles": { 3078 | "version": "5.2.0", 3079 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 3080 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 3081 | "dev": true, 3082 | "engines": { 3083 | "node": ">=10" 3084 | }, 3085 | "funding": { 3086 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3087 | } 3088 | }, 3089 | "node_modules/prompts": { 3090 | "version": "2.4.2", 3091 | "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", 3092 | "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", 3093 | "dev": true, 3094 | "dependencies": { 3095 | "kleur": "^3.0.3", 3096 | "sisteransi": "^1.0.5" 3097 | }, 3098 | "engines": { 3099 | "node": ">= 6" 3100 | } 3101 | }, 3102 | "node_modules/pure-rand": { 3103 | "version": "6.1.0", 3104 | "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", 3105 | "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", 3106 | "dev": true, 3107 | "funding": [ 3108 | { 3109 | "type": "individual", 3110 | "url": "https://github.com/sponsors/dubzzz" 3111 | }, 3112 | { 3113 | "type": "opencollective", 3114 | "url": "https://opencollective.com/fast-check" 3115 | } 3116 | ] 3117 | }, 3118 | "node_modules/react-is": { 3119 | "version": "18.2.0", 3120 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 3121 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 3122 | "dev": true 3123 | }, 3124 | "node_modules/require-directory": { 3125 | "version": "2.1.1", 3126 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3127 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 3128 | "dev": true, 3129 | "engines": { 3130 | "node": ">=0.10.0" 3131 | } 3132 | }, 3133 | "node_modules/resolve": { 3134 | "version": "1.22.8", 3135 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 3136 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 3137 | "dev": true, 3138 | "dependencies": { 3139 | "is-core-module": "^2.13.0", 3140 | "path-parse": "^1.0.7", 3141 | "supports-preserve-symlinks-flag": "^1.0.0" 3142 | }, 3143 | "bin": { 3144 | "resolve": "bin/resolve" 3145 | }, 3146 | "funding": { 3147 | "url": "https://github.com/sponsors/ljharb" 3148 | } 3149 | }, 3150 | "node_modules/resolve-cwd": { 3151 | "version": "3.0.0", 3152 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 3153 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 3154 | "dev": true, 3155 | "dependencies": { 3156 | "resolve-from": "^5.0.0" 3157 | }, 3158 | "engines": { 3159 | "node": ">=8" 3160 | } 3161 | }, 3162 | "node_modules/resolve-from": { 3163 | "version": "5.0.0", 3164 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 3165 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 3166 | "dev": true, 3167 | "engines": { 3168 | "node": ">=8" 3169 | } 3170 | }, 3171 | "node_modules/resolve.exports": { 3172 | "version": "2.0.2", 3173 | "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", 3174 | "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", 3175 | "dev": true, 3176 | "engines": { 3177 | "node": ">=10" 3178 | } 3179 | }, 3180 | "node_modules/semver": { 3181 | "version": "6.3.1", 3182 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3183 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3184 | "dev": true, 3185 | "bin": { 3186 | "semver": "bin/semver.js" 3187 | } 3188 | }, 3189 | "node_modules/shebang-command": { 3190 | "version": "2.0.0", 3191 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3192 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3193 | "dev": true, 3194 | "dependencies": { 3195 | "shebang-regex": "^3.0.0" 3196 | }, 3197 | "engines": { 3198 | "node": ">=8" 3199 | } 3200 | }, 3201 | "node_modules/shebang-regex": { 3202 | "version": "3.0.0", 3203 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3204 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3205 | "dev": true, 3206 | "engines": { 3207 | "node": ">=8" 3208 | } 3209 | }, 3210 | "node_modules/signal-exit": { 3211 | "version": "3.0.7", 3212 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3213 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 3214 | "dev": true 3215 | }, 3216 | "node_modules/sisteransi": { 3217 | "version": "1.0.5", 3218 | "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", 3219 | "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", 3220 | "dev": true 3221 | }, 3222 | "node_modules/slash": { 3223 | "version": "3.0.0", 3224 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3225 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3226 | "dev": true, 3227 | "engines": { 3228 | "node": ">=8" 3229 | } 3230 | }, 3231 | "node_modules/source-map": { 3232 | "version": "0.6.1", 3233 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3234 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3235 | "dev": true, 3236 | "engines": { 3237 | "node": ">=0.10.0" 3238 | } 3239 | }, 3240 | "node_modules/source-map-support": { 3241 | "version": "0.5.13", 3242 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", 3243 | "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", 3244 | "dev": true, 3245 | "dependencies": { 3246 | "buffer-from": "^1.0.0", 3247 | "source-map": "^0.6.0" 3248 | } 3249 | }, 3250 | "node_modules/sprintf-js": { 3251 | "version": "1.0.3", 3252 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3253 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 3254 | "dev": true 3255 | }, 3256 | "node_modules/stack-utils": { 3257 | "version": "2.0.6", 3258 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", 3259 | "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", 3260 | "dev": true, 3261 | "dependencies": { 3262 | "escape-string-regexp": "^2.0.0" 3263 | }, 3264 | "engines": { 3265 | "node": ">=10" 3266 | } 3267 | }, 3268 | "node_modules/string-length": { 3269 | "version": "4.0.2", 3270 | "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", 3271 | "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", 3272 | "dev": true, 3273 | "dependencies": { 3274 | "char-regex": "^1.0.2", 3275 | "strip-ansi": "^6.0.0" 3276 | }, 3277 | "engines": { 3278 | "node": ">=10" 3279 | } 3280 | }, 3281 | "node_modules/string-width": { 3282 | "version": "4.2.3", 3283 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3284 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3285 | "dev": true, 3286 | "dependencies": { 3287 | "emoji-regex": "^8.0.0", 3288 | "is-fullwidth-code-point": "^3.0.0", 3289 | "strip-ansi": "^6.0.1" 3290 | }, 3291 | "engines": { 3292 | "node": ">=8" 3293 | } 3294 | }, 3295 | "node_modules/strip-ansi": { 3296 | "version": "6.0.1", 3297 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3298 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3299 | "dev": true, 3300 | "dependencies": { 3301 | "ansi-regex": "^5.0.1" 3302 | }, 3303 | "engines": { 3304 | "node": ">=8" 3305 | } 3306 | }, 3307 | "node_modules/strip-bom": { 3308 | "version": "4.0.0", 3309 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 3310 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 3311 | "dev": true, 3312 | "engines": { 3313 | "node": ">=8" 3314 | } 3315 | }, 3316 | "node_modules/strip-final-newline": { 3317 | "version": "2.0.0", 3318 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 3319 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 3320 | "dev": true, 3321 | "engines": { 3322 | "node": ">=6" 3323 | } 3324 | }, 3325 | "node_modules/strip-json-comments": { 3326 | "version": "3.1.1", 3327 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3328 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3329 | "dev": true, 3330 | "engines": { 3331 | "node": ">=8" 3332 | }, 3333 | "funding": { 3334 | "url": "https://github.com/sponsors/sindresorhus" 3335 | } 3336 | }, 3337 | "node_modules/supports-color": { 3338 | "version": "7.2.0", 3339 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3340 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3341 | "dev": true, 3342 | "dependencies": { 3343 | "has-flag": "^4.0.0" 3344 | }, 3345 | "engines": { 3346 | "node": ">=8" 3347 | } 3348 | }, 3349 | "node_modules/supports-preserve-symlinks-flag": { 3350 | "version": "1.0.0", 3351 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3352 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3353 | "dev": true, 3354 | "engines": { 3355 | "node": ">= 0.4" 3356 | }, 3357 | "funding": { 3358 | "url": "https://github.com/sponsors/ljharb" 3359 | } 3360 | }, 3361 | "node_modules/test-exclude": { 3362 | "version": "6.0.0", 3363 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 3364 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 3365 | "dev": true, 3366 | "dependencies": { 3367 | "@istanbuljs/schema": "^0.1.2", 3368 | "glob": "^7.1.4", 3369 | "minimatch": "^3.0.4" 3370 | }, 3371 | "engines": { 3372 | "node": ">=8" 3373 | } 3374 | }, 3375 | "node_modules/tmpl": { 3376 | "version": "1.0.5", 3377 | "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", 3378 | "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", 3379 | "dev": true 3380 | }, 3381 | "node_modules/to-fast-properties": { 3382 | "version": "2.0.0", 3383 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3384 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3385 | "dev": true, 3386 | "engines": { 3387 | "node": ">=4" 3388 | } 3389 | }, 3390 | "node_modules/to-regex-range": { 3391 | "version": "5.0.1", 3392 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3393 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3394 | "dev": true, 3395 | "dependencies": { 3396 | "is-number": "^7.0.0" 3397 | }, 3398 | "engines": { 3399 | "node": ">=8.0" 3400 | } 3401 | }, 3402 | "node_modules/ts-jest": { 3403 | "version": "29.1.2", 3404 | "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", 3405 | "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", 3406 | "dev": true, 3407 | "dependencies": { 3408 | "bs-logger": "0.x", 3409 | "fast-json-stable-stringify": "2.x", 3410 | "jest-util": "^29.0.0", 3411 | "json5": "^2.2.3", 3412 | "lodash.memoize": "4.x", 3413 | "make-error": "1.x", 3414 | "semver": "^7.5.3", 3415 | "yargs-parser": "^21.0.1" 3416 | }, 3417 | "bin": { 3418 | "ts-jest": "cli.js" 3419 | }, 3420 | "engines": { 3421 | "node": "^16.10.0 || ^18.0.0 || >=20.0.0" 3422 | }, 3423 | "peerDependencies": { 3424 | "@babel/core": ">=7.0.0-beta.0 <8", 3425 | "@jest/types": "^29.0.0", 3426 | "babel-jest": "^29.0.0", 3427 | "jest": "^29.0.0", 3428 | "typescript": ">=4.3 <6" 3429 | }, 3430 | "peerDependenciesMeta": { 3431 | "@babel/core": { 3432 | "optional": true 3433 | }, 3434 | "@jest/types": { 3435 | "optional": true 3436 | }, 3437 | "babel-jest": { 3438 | "optional": true 3439 | }, 3440 | "esbuild": { 3441 | "optional": true 3442 | } 3443 | } 3444 | }, 3445 | "node_modules/ts-jest/node_modules/lru-cache": { 3446 | "version": "6.0.0", 3447 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3448 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3449 | "dev": true, 3450 | "dependencies": { 3451 | "yallist": "^4.0.0" 3452 | }, 3453 | "engines": { 3454 | "node": ">=10" 3455 | } 3456 | }, 3457 | "node_modules/ts-jest/node_modules/semver": { 3458 | "version": "7.6.0", 3459 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 3460 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 3461 | "dev": true, 3462 | "dependencies": { 3463 | "lru-cache": "^6.0.0" 3464 | }, 3465 | "bin": { 3466 | "semver": "bin/semver.js" 3467 | }, 3468 | "engines": { 3469 | "node": ">=10" 3470 | } 3471 | }, 3472 | "node_modules/ts-jest/node_modules/yallist": { 3473 | "version": "4.0.0", 3474 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3475 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3476 | "dev": true 3477 | }, 3478 | "node_modules/type-detect": { 3479 | "version": "4.0.8", 3480 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3481 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3482 | "dev": true, 3483 | "engines": { 3484 | "node": ">=4" 3485 | } 3486 | }, 3487 | "node_modules/type-fest": { 3488 | "version": "0.21.3", 3489 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 3490 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 3491 | "dev": true, 3492 | "engines": { 3493 | "node": ">=10" 3494 | }, 3495 | "funding": { 3496 | "url": "https://github.com/sponsors/sindresorhus" 3497 | } 3498 | }, 3499 | "node_modules/typescript": { 3500 | "version": "5.4.4", 3501 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", 3502 | "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", 3503 | "dev": true, 3504 | "bin": { 3505 | "tsc": "bin/tsc", 3506 | "tsserver": "bin/tsserver" 3507 | }, 3508 | "engines": { 3509 | "node": ">=14.17" 3510 | } 3511 | }, 3512 | "node_modules/undici-types": { 3513 | "version": "5.26.5", 3514 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 3515 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 3516 | "dev": true 3517 | }, 3518 | "node_modules/update-browserslist-db": { 3519 | "version": "1.0.13", 3520 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 3521 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 3522 | "dev": true, 3523 | "funding": [ 3524 | { 3525 | "type": "opencollective", 3526 | "url": "https://opencollective.com/browserslist" 3527 | }, 3528 | { 3529 | "type": "tidelift", 3530 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3531 | }, 3532 | { 3533 | "type": "github", 3534 | "url": "https://github.com/sponsors/ai" 3535 | } 3536 | ], 3537 | "dependencies": { 3538 | "escalade": "^3.1.1", 3539 | "picocolors": "^1.0.0" 3540 | }, 3541 | "bin": { 3542 | "update-browserslist-db": "cli.js" 3543 | }, 3544 | "peerDependencies": { 3545 | "browserslist": ">= 4.21.0" 3546 | } 3547 | }, 3548 | "node_modules/v8-to-istanbul": { 3549 | "version": "9.2.0", 3550 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", 3551 | "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", 3552 | "dev": true, 3553 | "dependencies": { 3554 | "@jridgewell/trace-mapping": "^0.3.12", 3555 | "@types/istanbul-lib-coverage": "^2.0.1", 3556 | "convert-source-map": "^2.0.0" 3557 | }, 3558 | "engines": { 3559 | "node": ">=10.12.0" 3560 | } 3561 | }, 3562 | "node_modules/walker": { 3563 | "version": "1.0.8", 3564 | "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", 3565 | "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", 3566 | "dev": true, 3567 | "dependencies": { 3568 | "makeerror": "1.0.12" 3569 | } 3570 | }, 3571 | "node_modules/which": { 3572 | "version": "2.0.2", 3573 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3574 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3575 | "dev": true, 3576 | "dependencies": { 3577 | "isexe": "^2.0.0" 3578 | }, 3579 | "bin": { 3580 | "node-which": "bin/node-which" 3581 | }, 3582 | "engines": { 3583 | "node": ">= 8" 3584 | } 3585 | }, 3586 | "node_modules/wrap-ansi": { 3587 | "version": "7.0.0", 3588 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3589 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3590 | "dev": true, 3591 | "dependencies": { 3592 | "ansi-styles": "^4.0.0", 3593 | "string-width": "^4.1.0", 3594 | "strip-ansi": "^6.0.0" 3595 | }, 3596 | "engines": { 3597 | "node": ">=10" 3598 | }, 3599 | "funding": { 3600 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3601 | } 3602 | }, 3603 | "node_modules/wrappy": { 3604 | "version": "1.0.2", 3605 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3606 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3607 | "dev": true 3608 | }, 3609 | "node_modules/write-file-atomic": { 3610 | "version": "4.0.2", 3611 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", 3612 | "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", 3613 | "dev": true, 3614 | "dependencies": { 3615 | "imurmurhash": "^0.1.4", 3616 | "signal-exit": "^3.0.7" 3617 | }, 3618 | "engines": { 3619 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 3620 | } 3621 | }, 3622 | "node_modules/y18n": { 3623 | "version": "5.0.8", 3624 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3625 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3626 | "dev": true, 3627 | "engines": { 3628 | "node": ">=10" 3629 | } 3630 | }, 3631 | "node_modules/yallist": { 3632 | "version": "3.1.1", 3633 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3634 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3635 | "dev": true 3636 | }, 3637 | "node_modules/yargs": { 3638 | "version": "17.7.2", 3639 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3640 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3641 | "dev": true, 3642 | "dependencies": { 3643 | "cliui": "^8.0.1", 3644 | "escalade": "^3.1.1", 3645 | "get-caller-file": "^2.0.5", 3646 | "require-directory": "^2.1.1", 3647 | "string-width": "^4.2.3", 3648 | "y18n": "^5.0.5", 3649 | "yargs-parser": "^21.1.1" 3650 | }, 3651 | "engines": { 3652 | "node": ">=12" 3653 | } 3654 | }, 3655 | "node_modules/yargs-parser": { 3656 | "version": "21.1.1", 3657 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3658 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3659 | "dev": true, 3660 | "engines": { 3661 | "node": ">=12" 3662 | } 3663 | }, 3664 | "node_modules/yocto-queue": { 3665 | "version": "0.1.0", 3666 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3667 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3668 | "dev": true, 3669 | "engines": { 3670 | "node": ">=10" 3671 | }, 3672 | "funding": { 3673 | "url": "https://github.com/sponsors/sindresorhus" 3674 | } 3675 | } 3676 | } 3677 | } 3678 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ebenezerdon/ts-node-cache", 3 | "version": "1.0.11", 4 | "description": "in-memory cache for nodejs", 5 | "main": "dist/Cache.js", 6 | "types": "dist/Cache.d.ts", 7 | "scripts": { 8 | "build": "tsc", 9 | "test": "jest --coverage" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/ebenezerdon/ts-node-cache.git" 14 | }, 15 | "keywords": [ 16 | "in-memory cache", 17 | "nodejs cache", 18 | "cache", 19 | "memory cache", 20 | "nodejs", 21 | "npm package", 22 | "typescript", 23 | "ts", 24 | "caching", 25 | "ts-cache" 26 | ], 27 | "author": "Ebenezer Don", 28 | "license": "ISC", 29 | "devDependencies": { 30 | "@types/jest": "^29.5.12", 31 | "@types/node": "^20.12.6", 32 | "jest": "^29.7.0", 33 | "ts-jest": "^29.1.2", 34 | "typescript": "^5.4.4" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Cache.test.ts: -------------------------------------------------------------------------------- 1 | import { Cache } from './Cache' 2 | 3 | describe('Cache Class Tests', () => { 4 | let cache: Cache 5 | 6 | beforeEach(() => { 7 | cache = new Cache() 8 | }) 9 | 10 | test('should store and retrieve an item', () => { 11 | cache.put('key', 'value') 12 | expect(cache.get('key')).toBe('value') 13 | }) 14 | 15 | test('should override an existing item with the same key', () => { 16 | cache.put('key', 'value1') 17 | cache.put('key', 'value2') 18 | expect(cache.get('key')).toBe('value2') 19 | }) 20 | 21 | test('should not retrieve expired items', (done) => { 22 | cache.put('key', 'value', 1) // expires in 1ms 23 | setTimeout(() => { 24 | expect(cache.get('key')).toBeNull() 25 | done() 26 | }, 10) // check after 10ms to ensure the item has expired 27 | }) 28 | 29 | test('should invoke timeout callback when an item expires', (done) => { 30 | const callback = jest.fn() 31 | cache.put('key', 'value', 1, callback) // expires in 1ms 32 | 33 | setTimeout(() => { 34 | expect(callback).toHaveBeenCalledWith('key', 'value') 35 | done() 36 | }, 10) // check after 10ms to ensure the callback has been invoked 37 | }) 38 | 39 | test('should return null for missing items', () => { 40 | expect(cache.get('missing')).toBeNull() 41 | }) 42 | 43 | test('should remove an item explicitly', () => { 44 | cache.put('key', 'value') 45 | cache.del('key') 46 | expect(cache.get('key')).toBeNull() 47 | }) 48 | 49 | test('should clear all items', () => { 50 | cache.put('key1', 'value1') 51 | cache.put('key2', 'value2') 52 | cache.clear() 53 | expect(cache.size()).toBe(0) 54 | }) 55 | 56 | test('should not decrease size when deleting non-existing key', () => { 57 | cache.put('key', 'value') 58 | cache.del('nonExistingKey') 59 | expect(cache.size()).toBe(1) 60 | }) 61 | 62 | test('should correctly report the cache size', () => { 63 | cache.put('key1', 'value1') 64 | cache.put('key2', 'value2') 65 | expect(cache.size()).toBe(2) 66 | }) 67 | 68 | test('should export and import cache correctly', () => { 69 | cache.put('key1', 'value1') 70 | cache.put('key2', 'value2', 1000) // this entry will have an expire time 71 | const exportedCache = cache.exportJson() 72 | 73 | const newCache = new Cache() 74 | newCache.importJson(exportedCache) 75 | 76 | expect(newCache.get('key1')).toBe('value1') 77 | expect(newCache.size()).toBe(2) 78 | }) 79 | 80 | test('imported cache should not contain expired items', (done) => { 81 | cache.put('key', 'value', 1) // expires in 1ms 82 | setTimeout(() => { 83 | const exportedCache = cache.exportJson() 84 | const newCache = new Cache() 85 | newCache.importJson(exportedCache) 86 | expect(newCache.size()).toBe(0) 87 | done() 88 | }, 10) // check after 10ms to ensure the item has expired 89 | }) 90 | 91 | test('should throw an error if the time is not a positive number', () => { 92 | expect(() => cache.put('key', 'value', -1)).toThrow('Cache timeout must be a positive number') 93 | }) 94 | 95 | test('should throw an error if the timeoutCallback is not a function', () => { 96 | expect(() => 97 | cache.put('key', 'value', 1000, 'notAFunction' as unknown as (key: string, value: any) => void), 98 | ).toThrow('Cache timeout callback must be a function') 99 | }) 100 | 101 | test('debug mode should log hits and misses', () => { 102 | cache.debug(true) 103 | cache.put('key1', 'value1') 104 | cache.get('key1') // hit 105 | cache.get('key2') // miss 106 | expect(cache.hits()).toBe(1) 107 | expect(cache.misses()).toBe(1) 108 | }) 109 | 110 | test('keys method should return all current cache keys', () => { 111 | cache.put('key1', 'value1') 112 | cache.put('key2', 'value2') 113 | expect(cache.keys()).toEqual(['key1', 'key2']) 114 | }) 115 | 116 | test('size should not increase when adding a key that already exists', () => { 117 | cache.put('key', 'value1') 118 | cache.put('key', 'value2') // override the existing key 119 | expect(cache.size()).toBe(1) 120 | }) 121 | 122 | // Test for importJson and exportJson 123 | test('should accurately export and import cache, maintaining data integrity', () => { 124 | cache.put('key1', 'value1', 5000) 125 | cache.put('key2', 'value2') 126 | 127 | const exportedJson = cache.exportJson() 128 | const newCache = new Cache() 129 | newCache.importJson(exportedJson) 130 | 131 | expect(newCache.get('key1')).toBe('value1') 132 | expect(newCache.get('key2')).toBe('value2') 133 | expect(newCache.size()).toBe(2) 134 | }) 135 | 136 | test('importJson should skip duplicate keys when skipDuplicates is true', () => { 137 | cache.put('key1', 'value1') 138 | const exportedJson = cache.exportJson() 139 | 140 | const newCache = new Cache() 141 | newCache.put('key1', 'newValue1') // Existing key with different value 142 | newCache.importJson(exportedJson, { skipDuplicates: true }) 143 | 144 | // The value should remain unchanged as the duplicate was skipped 145 | expect(newCache.get('key1')).toBe('newValue1') 146 | }) 147 | }) 148 | -------------------------------------------------------------------------------- /src/Cache.ts: -------------------------------------------------------------------------------- 1 | /** Defines the structure for each cache record. */ 2 | type CacheRecord = { 3 | value: T 4 | expire: number 5 | timeout?: NodeJS.Timeout 6 | } 7 | 8 | /** Implements a generic cache system with optional expiration for each key-value pair. */ 9 | class Cache { 10 | /** Object to store cache data. */ 11 | private _cache: Record> = Object.create(null) 12 | /** Counter for cache hits. */ 13 | private _hitCount = 0 14 | /** Counter for cache misses. */ 15 | private _missCount = 0 16 | /** Current size of the cache. */ 17 | private _size = 0 18 | /** Debug flag to enable logging. */ 19 | private _debug = false 20 | 21 | /** 22 | * Adds or updates a cache record with a key, value, optional expiration time, and an optional expiration callback. 23 | * @param key The key under which to store the value. 24 | * @param value The value to store. 25 | * @param time Optional time in milliseconds until the record expires. 26 | * @param timeoutCallback Optional callback to execute upon expiration of the cache record. 27 | * @returns The stored value. 28 | */ 29 | put(key: string, value: T, time?: number, timeoutCallback?: (key: string, value: T) => void): T { 30 | if (this._debug) { 31 | console.log(`Caching: ${key} = ${JSON.stringify(value)} (@${time})`) 32 | } 33 | 34 | // Validates expiration time and timeout callback function. 35 | if (time !== undefined) { 36 | if (typeof time !== 'number' || isNaN(time) || time <= 0) { 37 | throw new Error('Cache timeout must be a positive number') 38 | } 39 | } 40 | if (timeoutCallback !== undefined && typeof timeoutCallback !== 'function') { 41 | throw new Error('Cache timeout callback must be a function') 42 | } 43 | 44 | // Clears existing timeout if updating an existing record. 45 | const oldRecord = this._cache[key] 46 | if (oldRecord) { 47 | clearTimeout(oldRecord.timeout) 48 | } else { 49 | this._size++ 50 | } 51 | 52 | // Sets expiration time and schedules timeout callback if provided. 53 | const expire = time !== undefined ? time + Date.now() : Infinity 54 | const timeout = 55 | time !== undefined 56 | ? setTimeout(() => { 57 | this._del(key) 58 | timeoutCallback?.(key, value) 59 | }, time) 60 | : undefined 61 | 62 | // Updates the cache record. 63 | this._cache[key] = { value, expire, timeout } 64 | 65 | return value 66 | } 67 | 68 | /** 69 | * Deletes a cache record by key. 70 | * @param key The key of the cache record to delete. 71 | * @returns True if the record was found and deleted, false otherwise. 72 | */ 73 | del(key: string): boolean { 74 | const record = this._cache[key] 75 | if (!record) return false 76 | 77 | clearTimeout(record.timeout) 78 | this._del(key) 79 | return true 80 | } 81 | 82 | /** 83 | * Deletes a cache record by key. Used internally. 84 | * @param key The key of the cache record to delete. 85 | */ 86 | private _del(key: string): void { 87 | delete this._cache[key] 88 | this._size-- 89 | } 90 | 91 | /** Clears all cache records. */ 92 | clear(): void { 93 | Object.values(this._cache).forEach((record) => clearTimeout(record.timeout)) 94 | this._cache = Object.create(null) 95 | this._size = 0 96 | if (this._debug) { 97 | this._hitCount = 0 98 | this._missCount = 0 99 | } 100 | } 101 | 102 | /** 103 | * Retrieves the value of a cache record by key. 104 | * @param key The key of the cache record to retrieve. 105 | * @returns The value of the cache record, or null if not found or expired. 106 | */ 107 | get(key: string): T | null { 108 | const record = this._cache[key] 109 | if (!record || record.expire < Date.now()) { 110 | if (this._debug) this._missCount++ 111 | return null 112 | } 113 | 114 | if (this._debug) this._hitCount++ 115 | return record.value 116 | } 117 | 118 | /** @returns The current size of the cache. */ 119 | size(): number { 120 | return this._size 121 | } 122 | 123 | /** 124 | * Enables or disables debug mode. 125 | * @param bool True to enable debug mode, false to disable. 126 | */ 127 | debug(bool: boolean): void { 128 | this._debug = bool 129 | } 130 | 131 | /** @returns The number of cache hits since the last clear. */ 132 | hits(): number { 133 | return this._hitCount 134 | } 135 | 136 | /** @returns The number of cache misses since the last clear. */ 137 | misses(): number { 138 | return this._missCount 139 | } 140 | 141 | /** @returns An array of all current cache keys. */ 142 | keys(): string[] { 143 | return Object.keys(this._cache) 144 | } 145 | 146 | /** 147 | * Exports the current cache to a JSON string. 148 | * @returns A JSON string representing the cache. 149 | */ 150 | exportJson(): string { 151 | const plainJsCache: Record = {} 152 | for (const key in this._cache) { 153 | const { value, expire } = this._cache[key] 154 | plainJsCache[key] = { value, expire: isFinite(expire) ? expire : 'NaN' } 155 | } 156 | 157 | return JSON.stringify(plainJsCache) 158 | } 159 | 160 | /** 161 | * Imports cache records from a JSON string. 162 | * @param jsonToImport A JSON string representing the cache to import. 163 | * @param options Optional settings for the import, such as whether to skip duplicate keys. 164 | * @returns The new size of the cache. 165 | */ 166 | importJson(jsonToImport: string, options?: { skipDuplicates?: boolean }): number { 167 | const cacheToImport: Record = JSON.parse(jsonToImport) 168 | const currTime = Date.now() 169 | 170 | for (const key in cacheToImport) { 171 | if (!cacheToImport.hasOwnProperty(key)) continue 172 | 173 | const { value, expire } = cacheToImport[key] 174 | const remainingTime = typeof expire === 'number' ? expire - currTime : Infinity 175 | 176 | if (remainingTime <= 0 || (options?.skipDuplicates && this._cache[key])) continue 177 | 178 | this.put(key, value, remainingTime > 0 ? remainingTime : undefined) 179 | } 180 | 181 | return this.size() 182 | } 183 | } 184 | 185 | /** Exports an instance of the Cache class. */ 186 | const cacheInstance = new Cache() 187 | export default cacheInstance 188 | export { Cache } 189 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", // Specify ECMAScript target version to ES2016 4 | "module": "commonjs", // Specify module code generation 5 | "lib": ["es2016"], // Include ES2016 library features 6 | "outDir": "./dist", // Redirect output structure to the directory 7 | "rootDir": "./src", // Specify the root directory of input files 8 | "strict": true, // Enable all strict type-checking options 9 | "esModuleInterop": true, // Enables emit interoperability between CommonJS and ES Modules 10 | "skipLibCheck": true, // Skip type checking of all declaration files (*.d.ts) 11 | "forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file 12 | 13 | /* Module Resolution Options */ 14 | "moduleResolution": "node", // Resolve modules using Node.js style 15 | "resolveJsonModule": true, // Include modules imported with '.json' extension 16 | "baseUrl": "./", // Base directory to resolve non-absolute module names 17 | "paths": { 18 | // A series of entries which re-map imports to lookup locations relative to the 'baseUrl' 19 | "*": ["node_modules/*"] 20 | }, 21 | 22 | /* Source Map Options */ 23 | "sourceMap": true, // Generates corresponding '.map' file 24 | 25 | /* Experimental Options */ 26 | "experimentalDecorators": true, // Enables experimental support for ES decorators 27 | "emitDecoratorMetadata": true, // Enables experimental support for emitting type metadata for decorators 28 | 29 | /* Advanced Options */ 30 | "declaration": true, // Generates corresponding '.d.ts' file 31 | "declarationMap": true, // Generates a sourcemap for each corresponding '.d.ts' file 32 | "importHelpers": true, // Import emit helpers from 'tslib' 33 | "noImplicitAny": true, // Raise error on expressions and declarations with an implied 'any' type 34 | "removeComments": false // Do not emit comments to output 35 | }, 36 | "include": ["src/**/*"], // Include all files in the src directory 37 | "exclude": ["node_modules", "dist"] // Exclude node_modules and dist directories 38 | } 39 | --------------------------------------------------------------------------------