├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github └── FUNDING.yml ├── .gitignore ├── JavaScript ├── 1-memoize.js ├── 2-speed.js ├── 3-cacheSize.js ├── 4-async.js ├── 5-sha.js ├── 6-metasync.js ├── 7-metasync.js ├── package-lock.json └── package.json ├── LICENSE ├── README.md ├── package-lock.json └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | end_of_line = lf 6 | charset = utf-8 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | 10 | [{*.js,*.mjs,*.ts,*.json,*.yml}] 11 | indent_size = 2 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "node": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "parserOptions": { 9 | "ecmaVersion": "latest" 10 | }, 11 | "globals": { 12 | "BigInt": true 13 | }, 14 | "rules": { 15 | "indent": [ 16 | "error", 17 | 2 18 | ], 19 | "linebreak-style": [ 20 | "error", 21 | "unix" 22 | ], 23 | "quotes": [ 24 | "error", 25 | "single" 26 | ], 27 | "semi": [ 28 | "error", 29 | "always" 30 | ], 31 | "no-loop-func": [ 32 | "error" 33 | ], 34 | "block-spacing": [ 35 | "error", 36 | "always" 37 | ], 38 | "camelcase": [ 39 | "error" 40 | ], 41 | "eqeqeq": [ 42 | "error", 43 | "always" 44 | ], 45 | "strict": [ 46 | "error", 47 | "global" 48 | ], 49 | "brace-style": [ 50 | "error", 51 | "1tbs", 52 | { 53 | "allowSingleLine": true 54 | } 55 | ], 56 | "comma-style": [ 57 | "error", 58 | "last" 59 | ], 60 | "comma-spacing": [ 61 | "error", 62 | { 63 | "before": false, 64 | "after": true 65 | } 66 | ], 67 | "eol-last": [ 68 | "error" 69 | ], 70 | "func-call-spacing": [ 71 | "error", 72 | "never" 73 | ], 74 | "key-spacing": [ 75 | "error", 76 | { 77 | "beforeColon": false, 78 | "afterColon": true, 79 | "mode": "minimum" 80 | } 81 | ], 82 | "keyword-spacing": [ 83 | "error", 84 | { 85 | "before": true, 86 | "after": true, 87 | "overrides": { 88 | "function": { 89 | "after": false 90 | } 91 | } 92 | } 93 | ], 94 | "max-len": [ 95 | "error", 96 | { 97 | "code": 80, 98 | "ignoreUrls": true 99 | } 100 | ], 101 | "max-nested-callbacks": [ 102 | "error", 103 | { 104 | "max": 7 105 | } 106 | ], 107 | "new-cap": [ 108 | "error", 109 | { 110 | "newIsCap": true, 111 | "capIsNew": false, 112 | "properties": true 113 | } 114 | ], 115 | "new-parens": [ 116 | "error" 117 | ], 118 | "no-lonely-if": [ 119 | "error" 120 | ], 121 | "no-trailing-spaces": [ 122 | "error" 123 | ], 124 | "no-unneeded-ternary": [ 125 | "error" 126 | ], 127 | "no-whitespace-before-property": [ 128 | "error" 129 | ], 130 | "object-curly-spacing": [ 131 | "error", 132 | "always" 133 | ], 134 | "operator-assignment": [ 135 | "error", 136 | "always" 137 | ], 138 | "operator-linebreak": [ 139 | "error", 140 | "after" 141 | ], 142 | "semi-spacing": [ 143 | "error", 144 | { 145 | "before": false, 146 | "after": true 147 | } 148 | ], 149 | "space-before-blocks": [ 150 | "error", 151 | "always" 152 | ], 153 | "space-before-function-paren": [ 154 | "error", 155 | { 156 | "anonymous": "never", 157 | "named": "never", 158 | "asyncArrow": "always" 159 | } 160 | ], 161 | "space-in-parens": [ 162 | "error", 163 | "never" 164 | ], 165 | "space-infix-ops": [ 166 | "error" 167 | ], 168 | "space-unary-ops": [ 169 | "error", 170 | { 171 | "words": true, 172 | "nonwords": false, 173 | "overrides": { 174 | "typeof": false 175 | } 176 | } 177 | ], 178 | "no-unreachable": [ 179 | "error" 180 | ], 181 | "no-global-assign": [ 182 | "error" 183 | ], 184 | "no-self-compare": [ 185 | "error" 186 | ], 187 | "no-unmodified-loop-condition": [ 188 | "error" 189 | ], 190 | "no-constant-condition": [ 191 | "error", 192 | { 193 | "checkLoops": false 194 | } 195 | ], 196 | "no-console": [ 197 | "off" 198 | ], 199 | "no-useless-concat": [ 200 | "error" 201 | ], 202 | "no-useless-escape": [ 203 | "error" 204 | ], 205 | "no-shadow-restricted-names": [ 206 | "error" 207 | ], 208 | "no-use-before-define": [ 209 | "error", 210 | { 211 | "functions": false 212 | } 213 | ], 214 | "arrow-parens": [ 215 | "error", 216 | "always" 217 | ], 218 | "arrow-body-style": [ 219 | "error", 220 | "as-needed" 221 | ], 222 | "arrow-spacing": [ 223 | "error" 224 | ], 225 | "no-confusing-arrow": [ 226 | "error", 227 | { 228 | "allowParens": true 229 | } 230 | ], 231 | "no-useless-computed-key": [ 232 | "error" 233 | ], 234 | "no-useless-rename": [ 235 | "error" 236 | ], 237 | "no-var": [ 238 | "error" 239 | ], 240 | "object-shorthand": [ 241 | "error", 242 | "always" 243 | ], 244 | "prefer-arrow-callback": [ 245 | "error" 246 | ], 247 | "prefer-const": [ 248 | "error" 249 | ], 250 | "prefer-numeric-literals": [ 251 | "error" 252 | ], 253 | "prefer-rest-params": [ 254 | "error" 255 | ], 256 | "prefer-spread": [ 257 | "error" 258 | ], 259 | "rest-spread-spacing": [ 260 | "error", 261 | "never" 262 | ], 263 | "template-curly-spacing": [ 264 | "error", 265 | "never" 266 | ], 267 | "consistent-return": [ 268 | "error", 269 | { "treatUndefinedAsUnspecified": true } 270 | ] 271 | } 272 | } 273 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: tshemsedinov 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /JavaScript/1-memoize.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const argKey = (x) => x.toString() + ':' + typeof x; 4 | const generateKey = (args) => args.map(argKey).join('|'); 5 | 6 | const memoize = (fn) => { 7 | const cache = Object.create(null); 8 | return (...args) => { 9 | const key = generateKey(args); 10 | const val = cache[key]; 11 | if (val) return val; 12 | const res = fn(...args); 13 | cache[key] = res; 14 | return res; 15 | }; 16 | }; 17 | 18 | // Usage 19 | 20 | const sumSeq = (a, b) => { 21 | console.log('Calculate sum'); 22 | let r = 0; 23 | for (let i = a; i < b; i++) r += i; 24 | return r; 25 | }; 26 | 27 | const mSumSeq = memoize(sumSeq); 28 | 29 | console.log('First call mSumSeq(2, 5)'); 30 | console.log('Value:', mSumSeq(2, 5)); 31 | 32 | console.log('Second call mSumSeq(2, 5)'); 33 | console.log('From cache:', mSumSeq(2, 5)); 34 | 35 | console.log('Call mSumSeq(2, 6)'); 36 | console.log('Calculated:', mSumSeq(2, 6)); 37 | -------------------------------------------------------------------------------- /JavaScript/2-speed.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const argKey = (x) => x.toString() + ':' + typeof x; 4 | const generateKey = (args) => args.map(argKey).join('|'); 5 | 6 | const memoize = (fn) => { 7 | const cache = Object.create(null); 8 | return (...args) => { 9 | const key = generateKey(args); 10 | const val = cache[key]; 11 | if (val) return val; 12 | const res = fn(...args); 13 | cache[key] = res; 14 | return res; 15 | }; 16 | }; 17 | 18 | // Utils 19 | 20 | const LOOP_COUNT = 10000; 21 | 22 | const speedTest = (name, fn, args, count) => { 23 | const tmp = []; 24 | const start = new Date().getTime(); 25 | for (let i = 0; i < count; i++) { 26 | tmp.push(fn(...args)); 27 | } 28 | const end = new Date().getTime(); 29 | const time = end - start; 30 | console.log(`${name} * ${tmp.length} : ${time}`); 31 | }; 32 | 33 | // Usage 34 | 35 | const fib = (n) => (n <= 2 ? 1 : fib(n - 1) + fib(n - 2)); 36 | const mFib = memoize(fib); 37 | 38 | speedTest('fib(20)', fib, [20], LOOP_COUNT); 39 | speedTest('memoized fib(20)', mFib, [20], LOOP_COUNT); 40 | -------------------------------------------------------------------------------- /JavaScript/3-cacheSize.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const argKey = (x) => x.toString() + ':' + typeof x; 4 | const generateKey = (args) => args.map(argKey).join('|'); 5 | 6 | const memoize = (fn, length) => { 7 | const cache = new Map(); 8 | return (...args) => { 9 | const key = generateKey(args); 10 | console.log(`${fn.name}(${key}) call`); 11 | if (cache.has(key)) return cache.get(key); 12 | console.log(`max(${key}) calculate`); 13 | const res = fn(...args); 14 | if (cache.size >= length) { 15 | const firstKey = cache.keys().next().value; 16 | console.log('Delete key:', firstKey); 17 | cache.delete(firstKey); 18 | } 19 | cache.set(key, res); 20 | return res; 21 | }; 22 | }; 23 | 24 | // Usage 25 | 26 | const max = (a, b) => (a > b ? a : b); 27 | const mMax = memoize(max, 3); 28 | 29 | mMax(10, 8); 30 | mMax(10, 8); 31 | mMax(1, 15); 32 | mMax(12, 3); 33 | mMax(15, 2); 34 | mMax(1, 15); 35 | mMax(10, 8); 36 | mMax(0, 0); 37 | mMax(0, 0); 38 | -------------------------------------------------------------------------------- /JavaScript/4-async.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('node:fs'); 4 | 5 | // args[0] - key 6 | // args[args.length-1] - callback 7 | const memoizeAsync = (lib, fnName) => { 8 | const fn = lib[fnName]; 9 | const cache = {}; 10 | console.log('override', fnName); 11 | lib[fnName] = (...args) => { 12 | console.dir({ call: fnName, args, cache }); 13 | const cb = args.pop(); 14 | const key = args[0]; 15 | const record = cache[key]; 16 | console.log('key:', key); 17 | console.log('cached:', record); 18 | if (record) { 19 | console.log('from cache'); 20 | cb(record.err, record.data); 21 | return; 22 | } 23 | fn(...args, (err, data) => { 24 | console.log('from file'); 25 | console.log('Save key:', key); 26 | cache[key] = { err, data }; 27 | console.dir({ cache }); 28 | cb(err, data); 29 | }); 30 | }; 31 | }; 32 | 33 | // Usage 34 | 35 | memoizeAsync(fs, 'readFile'); 36 | 37 | fs.readFile('4-async.js', 'utf8', (err, data) => { 38 | console.log('data length:', data.length); 39 | fs.readFile('4-async.js', 'utf8', (err, data) => { 40 | console.log('data length:', data.length); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /JavaScript/5-sha.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const crypto = require('node:crypto'); 4 | 5 | const argKey = (x) => x.toString() + ':' + typeof x; 6 | 7 | const generateKey = (args) => { 8 | const key = args.map(argKey).join('|'); 9 | return crypto.createHash('sha256').update(key).digest('hex'); 10 | }; 11 | 12 | const memoize = (fn) => { 13 | const cache = {}; 14 | return (...args) => { 15 | const key = generateKey(args); 16 | const val = cache[key]; 17 | if (val) return val; 18 | const res = fn(...args); 19 | cache[key] = res; 20 | return res; 21 | }; 22 | }; 23 | 24 | // Usage 25 | 26 | const sumSeq = (a, b) => { 27 | console.log('Calculate sum'); 28 | let r = 0; 29 | for (let i = a; i < b; i++) r += i; 30 | return r; 31 | }; 32 | 33 | const mSumSeq = memoize(sumSeq); 34 | 35 | console.log('First call mSumSeq(2, 5)'); 36 | console.log('Value:', mSumSeq(2, 5)); 37 | 38 | console.log('Second call mSumSeq(2, 5)'); 39 | console.log('From cache:', mSumSeq(2, 5)); 40 | 41 | console.log('Call mSumSeq(2, 6)'); 42 | console.log('Calculated:', mSumSeq(2, 6)); 43 | -------------------------------------------------------------------------------- /JavaScript/6-metasync.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('node:fs'); 4 | 5 | // Production implementation from Metasync library 6 | // See: https://github.com/metarhia/metasync 7 | 8 | function Memoized() {} 9 | 10 | const memoize = (fn) => { 11 | const cache = new Map(); 12 | 13 | const memoized = function(...args) { 14 | const callback = args.pop(); 15 | const key = args[0]; 16 | const record = cache.get(key); 17 | if (record) { 18 | console.log('Read from cache'); 19 | callback(record.err, record.data); 20 | return; 21 | } 22 | fn(...args, (err, data) => { 23 | cache.set(key, { err, data }); 24 | callback(err, data); 25 | }); 26 | }; 27 | 28 | const fields = { 29 | cache, 30 | timeout: 0, 31 | limit: 0, 32 | size: 0, 33 | maxSize: 0, 34 | }; 35 | 36 | Object.setPrototypeOf(memoized, Memoized.prototype); 37 | return Object.assign(memoized, fields); 38 | }; 39 | 40 | Memoized.prototype.clear = function() { 41 | this.cache.clear(); 42 | }; 43 | 44 | // Usage 45 | 46 | fs.readFile = memoize(fs.readFile); 47 | 48 | fs.readFile('6-metasync.js', 'utf8', (err, data) => { 49 | console.log('data length:', data.length); 50 | fs.readFile('6-metasync.js', 'utf8', (err, data) => { 51 | console.log('data length:', data.length); 52 | fs.readFile.clear(); 53 | fs.readFile('6-metasync.js', 'utf8', (err, data) => { 54 | console.log('data length:', data.length); 55 | }); 56 | }); 57 | }); 58 | -------------------------------------------------------------------------------- /JavaScript/7-metasync.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('node:fs'); 4 | const metasync = require('metasync'); 5 | 6 | // Usage 7 | 8 | fs.readFile = metasync.memoize(fs.readFile); 9 | 10 | fs.readFile('7-metasync.js', 'utf8', (err, data) => { 11 | console.log('data length:', data.length); 12 | fs.readFile('7-metasync.js', 'utf8', (err, data) => { 13 | console.log('data length:', data.length); 14 | fs.readFile.clear(); 15 | fs.readFile('7-metasync.js', 'utf8', (err, data) => { 16 | console.log('data length:', data.length); 17 | }); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /JavaScript/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "metasync-memoize-example", 3 | "version": "1.0.2", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "metasync-memoize-example", 9 | "version": "1.0.2", 10 | "license": "MIT", 11 | "dependencies": { 12 | "metasync": "^0.3.32" 13 | } 14 | }, 15 | "node_modules/@metarhia/common": { 16 | "version": "2.2.2", 17 | "resolved": "https://registry.npmjs.org/@metarhia/common/-/common-2.2.2.tgz", 18 | "integrity": "sha512-iEBNTLsmEQPA+ckJcBVPoBWXAGlF8IzNOX4O71SXB9WIQkegY5CrfGDte5HYA9JKVAmGrI75sFRm0PwhuSUQ0g==", 19 | "engines": { 20 | "node": ">=12.0.0" 21 | } 22 | }, 23 | "node_modules/metasync": { 24 | "version": "0.3.32", 25 | "resolved": "https://registry.npmjs.org/metasync/-/metasync-0.3.32.tgz", 26 | "integrity": "sha512-E+NeMCXhp7oUtTipm2KM4Eq+Fp5ZK5AiezIt0FZX5Vu4mxcaexcmQZ6Z48j/w2SzVoLqX94vcwGXPqeV9r8APA==", 27 | "dependencies": { 28 | "@metarhia/common": "^2.1.0" 29 | }, 30 | "engines": { 31 | "node": ">=10.0.0" 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /JavaScript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "metasync-memoize-example", 3 | "private": true, 4 | "version": "1.0.2", 5 | "description": "Example of async memoization from Metasync", 6 | "main": "7-metasync.js", 7 | "author": "Timur Shemsedinov ", 8 | "license": "MIT", 9 | "dependencies": { 10 | "metasync": "^0.3.32" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2023 How.Programming.Works contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Мемоизация функций: memoize в JavaScript 2 | 3 | [![Мемоизация функций: memoize в JavaScript](https://img.youtube.com/vi/H6S8QJo2Qxg/0.jpg)](https://www.youtube.com/watch?v=H6S8QJo2Qxg) 4 | 5 | Tasks: 6 | - see examples 7 | - implement time expiration cash 8 | - implement memoize with max records count and removing least used 9 | - implement memoize with max total stored data size 10 | - implement universal memoize compatible with both sync and async function 11 | - implement functional object with following properties methods and events: 12 | - `memoized.clear()` - clear cache 13 | - `memoized.add(key, value)` - add value to cach 14 | - `memoized.del(key)` - remove value from cach 15 | - `memoized.get(key)` - returns saved value 16 | - `memoized.timeout: Number` - cache timout 17 | - `memoized.maxSize: Number` - maximum cache size in bytes 18 | - `memoized.maxCount: Number` - maximum cache size in item count 19 | - `memoized.on('add', Function)` 20 | - `memoized.on('del', Function)` 21 | - `memoized.on('clear', Function)` 22 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "1.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "example", 9 | "version": "1.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "eslint": "^8.53.0", 13 | "hpw": "^0.2.2" 14 | } 15 | }, 16 | "node_modules/@aashutoshrathi/word-wrap": { 17 | "version": "1.2.6", 18 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 19 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 20 | "engines": { 21 | "node": ">=0.10.0" 22 | } 23 | }, 24 | "node_modules/@eslint-community/eslint-utils": { 25 | "version": "4.4.0", 26 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 27 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 28 | "dependencies": { 29 | "eslint-visitor-keys": "^3.3.0" 30 | }, 31 | "engines": { 32 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 33 | }, 34 | "peerDependencies": { 35 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 36 | } 37 | }, 38 | "node_modules/@eslint-community/regexpp": { 39 | "version": "4.10.0", 40 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 41 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 42 | "engines": { 43 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 44 | } 45 | }, 46 | "node_modules/@eslint/eslintrc": { 47 | "version": "2.1.3", 48 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", 49 | "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", 50 | "dependencies": { 51 | "ajv": "^6.12.4", 52 | "debug": "^4.3.2", 53 | "espree": "^9.6.0", 54 | "globals": "^13.19.0", 55 | "ignore": "^5.2.0", 56 | "import-fresh": "^3.2.1", 57 | "js-yaml": "^4.1.0", 58 | "minimatch": "^3.1.2", 59 | "strip-json-comments": "^3.1.1" 60 | }, 61 | "engines": { 62 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 63 | }, 64 | "funding": { 65 | "url": "https://opencollective.com/eslint" 66 | } 67 | }, 68 | "node_modules/@eslint/js": { 69 | "version": "8.53.0", 70 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", 71 | "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", 72 | "engines": { 73 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 74 | } 75 | }, 76 | "node_modules/@humanwhocodes/config-array": { 77 | "version": "0.11.13", 78 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", 79 | "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", 80 | "dependencies": { 81 | "@humanwhocodes/object-schema": "^2.0.1", 82 | "debug": "^4.1.1", 83 | "minimatch": "^3.0.5" 84 | }, 85 | "engines": { 86 | "node": ">=10.10.0" 87 | } 88 | }, 89 | "node_modules/@humanwhocodes/module-importer": { 90 | "version": "1.0.1", 91 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 92 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 93 | "engines": { 94 | "node": ">=12.22" 95 | }, 96 | "funding": { 97 | "type": "github", 98 | "url": "https://github.com/sponsors/nzakas" 99 | } 100 | }, 101 | "node_modules/@humanwhocodes/object-schema": { 102 | "version": "2.0.1", 103 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", 104 | "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" 105 | }, 106 | "node_modules/@nodelib/fs.scandir": { 107 | "version": "2.1.5", 108 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 109 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 110 | "dependencies": { 111 | "@nodelib/fs.stat": "2.0.5", 112 | "run-parallel": "^1.1.9" 113 | }, 114 | "engines": { 115 | "node": ">= 8" 116 | } 117 | }, 118 | "node_modules/@nodelib/fs.stat": { 119 | "version": "2.0.5", 120 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 121 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 122 | "engines": { 123 | "node": ">= 8" 124 | } 125 | }, 126 | "node_modules/@nodelib/fs.walk": { 127 | "version": "1.2.8", 128 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 129 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 130 | "dependencies": { 131 | "@nodelib/fs.scandir": "2.1.5", 132 | "fastq": "^1.6.0" 133 | }, 134 | "engines": { 135 | "node": ">= 8" 136 | } 137 | }, 138 | "node_modules/@ungap/structured-clone": { 139 | "version": "1.2.0", 140 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 141 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" 142 | }, 143 | "node_modules/acorn": { 144 | "version": "8.11.2", 145 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", 146 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", 147 | "bin": { 148 | "acorn": "bin/acorn" 149 | }, 150 | "engines": { 151 | "node": ">=0.4.0" 152 | } 153 | }, 154 | "node_modules/acorn-jsx": { 155 | "version": "5.3.2", 156 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 157 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 158 | "peerDependencies": { 159 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 160 | } 161 | }, 162 | "node_modules/ajv": { 163 | "version": "6.12.6", 164 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 165 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 166 | "dependencies": { 167 | "fast-deep-equal": "^3.1.1", 168 | "fast-json-stable-stringify": "^2.0.0", 169 | "json-schema-traverse": "^0.4.1", 170 | "uri-js": "^4.2.2" 171 | }, 172 | "funding": { 173 | "type": "github", 174 | "url": "https://github.com/sponsors/epoberezkin" 175 | } 176 | }, 177 | "node_modules/ansi-regex": { 178 | "version": "5.0.1", 179 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 180 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 181 | "engines": { 182 | "node": ">=8" 183 | } 184 | }, 185 | "node_modules/ansi-styles": { 186 | "version": "4.3.0", 187 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 188 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 189 | "dependencies": { 190 | "color-convert": "^2.0.1" 191 | }, 192 | "engines": { 193 | "node": ">=8" 194 | }, 195 | "funding": { 196 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 197 | } 198 | }, 199 | "node_modules/argparse": { 200 | "version": "2.0.1", 201 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 202 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 203 | }, 204 | "node_modules/balanced-match": { 205 | "version": "1.0.2", 206 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 207 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 208 | }, 209 | "node_modules/brace-expansion": { 210 | "version": "1.1.11", 211 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 212 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 213 | "dependencies": { 214 | "balanced-match": "^1.0.0", 215 | "concat-map": "0.0.1" 216 | } 217 | }, 218 | "node_modules/callsites": { 219 | "version": "3.1.0", 220 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 221 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 222 | "engines": { 223 | "node": ">=6" 224 | } 225 | }, 226 | "node_modules/chalk": { 227 | "version": "4.1.2", 228 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 229 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 230 | "dependencies": { 231 | "ansi-styles": "^4.1.0", 232 | "supports-color": "^7.1.0" 233 | }, 234 | "engines": { 235 | "node": ">=10" 236 | }, 237 | "funding": { 238 | "url": "https://github.com/chalk/chalk?sponsor=1" 239 | } 240 | }, 241 | "node_modules/color-convert": { 242 | "version": "2.0.1", 243 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 244 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 245 | "dependencies": { 246 | "color-name": "~1.1.4" 247 | }, 248 | "engines": { 249 | "node": ">=7.0.0" 250 | } 251 | }, 252 | "node_modules/color-name": { 253 | "version": "1.1.4", 254 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 255 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 256 | }, 257 | "node_modules/concat-map": { 258 | "version": "0.0.1", 259 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 260 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 261 | }, 262 | "node_modules/concolor": { 263 | "version": "1.1.0", 264 | "resolved": "https://registry.npmjs.org/concolor/-/concolor-1.1.0.tgz", 265 | "integrity": "sha512-+3Fv9sVckhuzfksFU3e0lONmWKiL+Z88/R01KpAIqW2gVsmL8Ojw/KhkVcyAEeQeVBZcbb9zoDFbVcfVj4Pg9A==", 266 | "engines": { 267 | "node": "18 || 20" 268 | }, 269 | "funding": { 270 | "type": "patreon", 271 | "url": "https://www.patreon.com/tshemsedinov" 272 | } 273 | }, 274 | "node_modules/cross-spawn": { 275 | "version": "7.0.3", 276 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 277 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 278 | "dependencies": { 279 | "path-key": "^3.1.0", 280 | "shebang-command": "^2.0.0", 281 | "which": "^2.0.1" 282 | }, 283 | "engines": { 284 | "node": ">= 8" 285 | } 286 | }, 287 | "node_modules/debug": { 288 | "version": "4.3.4", 289 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 290 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 291 | "dependencies": { 292 | "ms": "2.1.2" 293 | }, 294 | "engines": { 295 | "node": ">=6.0" 296 | }, 297 | "peerDependenciesMeta": { 298 | "supports-color": { 299 | "optional": true 300 | } 301 | } 302 | }, 303 | "node_modules/deep-is": { 304 | "version": "0.1.4", 305 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 306 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" 307 | }, 308 | "node_modules/doctrine": { 309 | "version": "3.0.0", 310 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 311 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 312 | "dependencies": { 313 | "esutils": "^2.0.2" 314 | }, 315 | "engines": { 316 | "node": ">=6.0.0" 317 | } 318 | }, 319 | "node_modules/escape-string-regexp": { 320 | "version": "4.0.0", 321 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 322 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 323 | "engines": { 324 | "node": ">=10" 325 | }, 326 | "funding": { 327 | "url": "https://github.com/sponsors/sindresorhus" 328 | } 329 | }, 330 | "node_modules/eslint": { 331 | "version": "8.53.0", 332 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", 333 | "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", 334 | "dependencies": { 335 | "@eslint-community/eslint-utils": "^4.2.0", 336 | "@eslint-community/regexpp": "^4.6.1", 337 | "@eslint/eslintrc": "^2.1.3", 338 | "@eslint/js": "8.53.0", 339 | "@humanwhocodes/config-array": "^0.11.13", 340 | "@humanwhocodes/module-importer": "^1.0.1", 341 | "@nodelib/fs.walk": "^1.2.8", 342 | "@ungap/structured-clone": "^1.2.0", 343 | "ajv": "^6.12.4", 344 | "chalk": "^4.0.0", 345 | "cross-spawn": "^7.0.2", 346 | "debug": "^4.3.2", 347 | "doctrine": "^3.0.0", 348 | "escape-string-regexp": "^4.0.0", 349 | "eslint-scope": "^7.2.2", 350 | "eslint-visitor-keys": "^3.4.3", 351 | "espree": "^9.6.1", 352 | "esquery": "^1.4.2", 353 | "esutils": "^2.0.2", 354 | "fast-deep-equal": "^3.1.3", 355 | "file-entry-cache": "^6.0.1", 356 | "find-up": "^5.0.0", 357 | "glob-parent": "^6.0.2", 358 | "globals": "^13.19.0", 359 | "graphemer": "^1.4.0", 360 | "ignore": "^5.2.0", 361 | "imurmurhash": "^0.1.4", 362 | "is-glob": "^4.0.0", 363 | "is-path-inside": "^3.0.3", 364 | "js-yaml": "^4.1.0", 365 | "json-stable-stringify-without-jsonify": "^1.0.1", 366 | "levn": "^0.4.1", 367 | "lodash.merge": "^4.6.2", 368 | "minimatch": "^3.1.2", 369 | "natural-compare": "^1.4.0", 370 | "optionator": "^0.9.3", 371 | "strip-ansi": "^6.0.1", 372 | "text-table": "^0.2.0" 373 | }, 374 | "bin": { 375 | "eslint": "bin/eslint.js" 376 | }, 377 | "engines": { 378 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 379 | }, 380 | "funding": { 381 | "url": "https://opencollective.com/eslint" 382 | } 383 | }, 384 | "node_modules/eslint-scope": { 385 | "version": "7.2.2", 386 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 387 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 388 | "dependencies": { 389 | "esrecurse": "^4.3.0", 390 | "estraverse": "^5.2.0" 391 | }, 392 | "engines": { 393 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 394 | }, 395 | "funding": { 396 | "url": "https://opencollective.com/eslint" 397 | } 398 | }, 399 | "node_modules/eslint-visitor-keys": { 400 | "version": "3.4.3", 401 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 402 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 403 | "engines": { 404 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 405 | }, 406 | "funding": { 407 | "url": "https://opencollective.com/eslint" 408 | } 409 | }, 410 | "node_modules/espree": { 411 | "version": "9.6.1", 412 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 413 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 414 | "dependencies": { 415 | "acorn": "^8.9.0", 416 | "acorn-jsx": "^5.3.2", 417 | "eslint-visitor-keys": "^3.4.1" 418 | }, 419 | "engines": { 420 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 421 | }, 422 | "funding": { 423 | "url": "https://opencollective.com/eslint" 424 | } 425 | }, 426 | "node_modules/esquery": { 427 | "version": "1.5.0", 428 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 429 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 430 | "dependencies": { 431 | "estraverse": "^5.1.0" 432 | }, 433 | "engines": { 434 | "node": ">=0.10" 435 | } 436 | }, 437 | "node_modules/esrecurse": { 438 | "version": "4.3.0", 439 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 440 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 441 | "dependencies": { 442 | "estraverse": "^5.2.0" 443 | }, 444 | "engines": { 445 | "node": ">=4.0" 446 | } 447 | }, 448 | "node_modules/estraverse": { 449 | "version": "5.3.0", 450 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 451 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 452 | "engines": { 453 | "node": ">=4.0" 454 | } 455 | }, 456 | "node_modules/esutils": { 457 | "version": "2.0.3", 458 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 459 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 460 | "engines": { 461 | "node": ">=0.10.0" 462 | } 463 | }, 464 | "node_modules/fast-deep-equal": { 465 | "version": "3.1.3", 466 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 467 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 468 | }, 469 | "node_modules/fast-json-stable-stringify": { 470 | "version": "2.1.0", 471 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 472 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 473 | }, 474 | "node_modules/fast-levenshtein": { 475 | "version": "2.0.6", 476 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 477 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" 478 | }, 479 | "node_modules/fastq": { 480 | "version": "1.15.0", 481 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 482 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 483 | "dependencies": { 484 | "reusify": "^1.0.4" 485 | } 486 | }, 487 | "node_modules/file-entry-cache": { 488 | "version": "6.0.1", 489 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 490 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 491 | "dependencies": { 492 | "flat-cache": "^3.0.4" 493 | }, 494 | "engines": { 495 | "node": "^10.12.0 || >=12.0.0" 496 | } 497 | }, 498 | "node_modules/find-up": { 499 | "version": "5.0.0", 500 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 501 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 502 | "dependencies": { 503 | "locate-path": "^6.0.0", 504 | "path-exists": "^4.0.0" 505 | }, 506 | "engines": { 507 | "node": ">=10" 508 | }, 509 | "funding": { 510 | "url": "https://github.com/sponsors/sindresorhus" 511 | } 512 | }, 513 | "node_modules/flat-cache": { 514 | "version": "3.1.1", 515 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", 516 | "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", 517 | "dependencies": { 518 | "flatted": "^3.2.9", 519 | "keyv": "^4.5.3", 520 | "rimraf": "^3.0.2" 521 | }, 522 | "engines": { 523 | "node": ">=12.0.0" 524 | } 525 | }, 526 | "node_modules/flatted": { 527 | "version": "3.2.9", 528 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", 529 | "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" 530 | }, 531 | "node_modules/fs.realpath": { 532 | "version": "1.0.0", 533 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 534 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 535 | }, 536 | "node_modules/glob": { 537 | "version": "7.2.3", 538 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 539 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 540 | "dependencies": { 541 | "fs.realpath": "^1.0.0", 542 | "inflight": "^1.0.4", 543 | "inherits": "2", 544 | "minimatch": "^3.1.1", 545 | "once": "^1.3.0", 546 | "path-is-absolute": "^1.0.0" 547 | }, 548 | "engines": { 549 | "node": "*" 550 | }, 551 | "funding": { 552 | "url": "https://github.com/sponsors/isaacs" 553 | } 554 | }, 555 | "node_modules/glob-parent": { 556 | "version": "6.0.2", 557 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 558 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 559 | "dependencies": { 560 | "is-glob": "^4.0.3" 561 | }, 562 | "engines": { 563 | "node": ">=10.13.0" 564 | } 565 | }, 566 | "node_modules/globals": { 567 | "version": "13.23.0", 568 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", 569 | "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", 570 | "dependencies": { 571 | "type-fest": "^0.20.2" 572 | }, 573 | "engines": { 574 | "node": ">=8" 575 | }, 576 | "funding": { 577 | "url": "https://github.com/sponsors/sindresorhus" 578 | } 579 | }, 580 | "node_modules/graphemer": { 581 | "version": "1.4.0", 582 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 583 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" 584 | }, 585 | "node_modules/has-flag": { 586 | "version": "4.0.0", 587 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 588 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 589 | "engines": { 590 | "node": ">=8" 591 | } 592 | }, 593 | "node_modules/hpw": { 594 | "version": "0.2.2", 595 | "resolved": "https://registry.npmjs.org/hpw/-/hpw-0.2.2.tgz", 596 | "integrity": "sha512-E+fEOV8XqUbJP2XWvzl7+lhFxSUEkBJLK6aZTGTEX/rrK1yCeAEXbSp2PpcX61OO+IOlhaLJk505uY95rjbfgw==", 597 | "dependencies": { 598 | "concolor": "^1.0.6" 599 | }, 600 | "bin": { 601 | "hpw": "bin/hpw.js" 602 | }, 603 | "engines": { 604 | "node": ">=18.0.0" 605 | }, 606 | "funding": { 607 | "url": "https://www.patreon.com/tshemsedinov" 608 | } 609 | }, 610 | "node_modules/ignore": { 611 | "version": "5.2.4", 612 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 613 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 614 | "engines": { 615 | "node": ">= 4" 616 | } 617 | }, 618 | "node_modules/import-fresh": { 619 | "version": "3.3.0", 620 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 621 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 622 | "dependencies": { 623 | "parent-module": "^1.0.0", 624 | "resolve-from": "^4.0.0" 625 | }, 626 | "engines": { 627 | "node": ">=6" 628 | }, 629 | "funding": { 630 | "url": "https://github.com/sponsors/sindresorhus" 631 | } 632 | }, 633 | "node_modules/imurmurhash": { 634 | "version": "0.1.4", 635 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 636 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 637 | "engines": { 638 | "node": ">=0.8.19" 639 | } 640 | }, 641 | "node_modules/inflight": { 642 | "version": "1.0.6", 643 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 644 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 645 | "dependencies": { 646 | "once": "^1.3.0", 647 | "wrappy": "1" 648 | } 649 | }, 650 | "node_modules/inherits": { 651 | "version": "2.0.4", 652 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 653 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 654 | }, 655 | "node_modules/is-extglob": { 656 | "version": "2.1.1", 657 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 658 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 659 | "engines": { 660 | "node": ">=0.10.0" 661 | } 662 | }, 663 | "node_modules/is-glob": { 664 | "version": "4.0.3", 665 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 666 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 667 | "dependencies": { 668 | "is-extglob": "^2.1.1" 669 | }, 670 | "engines": { 671 | "node": ">=0.10.0" 672 | } 673 | }, 674 | "node_modules/is-path-inside": { 675 | "version": "3.0.3", 676 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 677 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 678 | "engines": { 679 | "node": ">=8" 680 | } 681 | }, 682 | "node_modules/isexe": { 683 | "version": "2.0.0", 684 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 685 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 686 | }, 687 | "node_modules/js-yaml": { 688 | "version": "4.1.0", 689 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 690 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 691 | "dependencies": { 692 | "argparse": "^2.0.1" 693 | }, 694 | "bin": { 695 | "js-yaml": "bin/js-yaml.js" 696 | } 697 | }, 698 | "node_modules/json-buffer": { 699 | "version": "3.0.1", 700 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 701 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 702 | }, 703 | "node_modules/json-schema-traverse": { 704 | "version": "0.4.1", 705 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 706 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 707 | }, 708 | "node_modules/json-stable-stringify-without-jsonify": { 709 | "version": "1.0.1", 710 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 711 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" 712 | }, 713 | "node_modules/keyv": { 714 | "version": "4.5.4", 715 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 716 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 717 | "dependencies": { 718 | "json-buffer": "3.0.1" 719 | } 720 | }, 721 | "node_modules/levn": { 722 | "version": "0.4.1", 723 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 724 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 725 | "dependencies": { 726 | "prelude-ls": "^1.2.1", 727 | "type-check": "~0.4.0" 728 | }, 729 | "engines": { 730 | "node": ">= 0.8.0" 731 | } 732 | }, 733 | "node_modules/locate-path": { 734 | "version": "6.0.0", 735 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 736 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 737 | "dependencies": { 738 | "p-locate": "^5.0.0" 739 | }, 740 | "engines": { 741 | "node": ">=10" 742 | }, 743 | "funding": { 744 | "url": "https://github.com/sponsors/sindresorhus" 745 | } 746 | }, 747 | "node_modules/lodash.merge": { 748 | "version": "4.6.2", 749 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 750 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 751 | }, 752 | "node_modules/minimatch": { 753 | "version": "3.1.2", 754 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 755 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 756 | "dependencies": { 757 | "brace-expansion": "^1.1.7" 758 | }, 759 | "engines": { 760 | "node": "*" 761 | } 762 | }, 763 | "node_modules/ms": { 764 | "version": "2.1.2", 765 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 766 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 767 | }, 768 | "node_modules/natural-compare": { 769 | "version": "1.4.0", 770 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 771 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" 772 | }, 773 | "node_modules/once": { 774 | "version": "1.4.0", 775 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 776 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 777 | "dependencies": { 778 | "wrappy": "1" 779 | } 780 | }, 781 | "node_modules/optionator": { 782 | "version": "0.9.3", 783 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 784 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 785 | "dependencies": { 786 | "@aashutoshrathi/word-wrap": "^1.2.3", 787 | "deep-is": "^0.1.3", 788 | "fast-levenshtein": "^2.0.6", 789 | "levn": "^0.4.1", 790 | "prelude-ls": "^1.2.1", 791 | "type-check": "^0.4.0" 792 | }, 793 | "engines": { 794 | "node": ">= 0.8.0" 795 | } 796 | }, 797 | "node_modules/p-limit": { 798 | "version": "3.1.0", 799 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 800 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 801 | "dependencies": { 802 | "yocto-queue": "^0.1.0" 803 | }, 804 | "engines": { 805 | "node": ">=10" 806 | }, 807 | "funding": { 808 | "url": "https://github.com/sponsors/sindresorhus" 809 | } 810 | }, 811 | "node_modules/p-locate": { 812 | "version": "5.0.0", 813 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 814 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 815 | "dependencies": { 816 | "p-limit": "^3.0.2" 817 | }, 818 | "engines": { 819 | "node": ">=10" 820 | }, 821 | "funding": { 822 | "url": "https://github.com/sponsors/sindresorhus" 823 | } 824 | }, 825 | "node_modules/parent-module": { 826 | "version": "1.0.1", 827 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 828 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 829 | "dependencies": { 830 | "callsites": "^3.0.0" 831 | }, 832 | "engines": { 833 | "node": ">=6" 834 | } 835 | }, 836 | "node_modules/path-exists": { 837 | "version": "4.0.0", 838 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 839 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 840 | "engines": { 841 | "node": ">=8" 842 | } 843 | }, 844 | "node_modules/path-is-absolute": { 845 | "version": "1.0.1", 846 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 847 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 848 | "engines": { 849 | "node": ">=0.10.0" 850 | } 851 | }, 852 | "node_modules/path-key": { 853 | "version": "3.1.1", 854 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 855 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 856 | "engines": { 857 | "node": ">=8" 858 | } 859 | }, 860 | "node_modules/prelude-ls": { 861 | "version": "1.2.1", 862 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 863 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 864 | "engines": { 865 | "node": ">= 0.8.0" 866 | } 867 | }, 868 | "node_modules/punycode": { 869 | "version": "2.3.1", 870 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 871 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 872 | "engines": { 873 | "node": ">=6" 874 | } 875 | }, 876 | "node_modules/queue-microtask": { 877 | "version": "1.2.3", 878 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 879 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 880 | "funding": [ 881 | { 882 | "type": "github", 883 | "url": "https://github.com/sponsors/feross" 884 | }, 885 | { 886 | "type": "patreon", 887 | "url": "https://www.patreon.com/feross" 888 | }, 889 | { 890 | "type": "consulting", 891 | "url": "https://feross.org/support" 892 | } 893 | ] 894 | }, 895 | "node_modules/resolve-from": { 896 | "version": "4.0.0", 897 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 898 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 899 | "engines": { 900 | "node": ">=4" 901 | } 902 | }, 903 | "node_modules/reusify": { 904 | "version": "1.0.4", 905 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 906 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 907 | "engines": { 908 | "iojs": ">=1.0.0", 909 | "node": ">=0.10.0" 910 | } 911 | }, 912 | "node_modules/rimraf": { 913 | "version": "3.0.2", 914 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 915 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 916 | "dependencies": { 917 | "glob": "^7.1.3" 918 | }, 919 | "bin": { 920 | "rimraf": "bin.js" 921 | }, 922 | "funding": { 923 | "url": "https://github.com/sponsors/isaacs" 924 | } 925 | }, 926 | "node_modules/run-parallel": { 927 | "version": "1.2.0", 928 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 929 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 930 | "funding": [ 931 | { 932 | "type": "github", 933 | "url": "https://github.com/sponsors/feross" 934 | }, 935 | { 936 | "type": "patreon", 937 | "url": "https://www.patreon.com/feross" 938 | }, 939 | { 940 | "type": "consulting", 941 | "url": "https://feross.org/support" 942 | } 943 | ], 944 | "dependencies": { 945 | "queue-microtask": "^1.2.2" 946 | } 947 | }, 948 | "node_modules/shebang-command": { 949 | "version": "2.0.0", 950 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 951 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 952 | "dependencies": { 953 | "shebang-regex": "^3.0.0" 954 | }, 955 | "engines": { 956 | "node": ">=8" 957 | } 958 | }, 959 | "node_modules/shebang-regex": { 960 | "version": "3.0.0", 961 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 962 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 963 | "engines": { 964 | "node": ">=8" 965 | } 966 | }, 967 | "node_modules/strip-ansi": { 968 | "version": "6.0.1", 969 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 970 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 971 | "dependencies": { 972 | "ansi-regex": "^5.0.1" 973 | }, 974 | "engines": { 975 | "node": ">=8" 976 | } 977 | }, 978 | "node_modules/strip-json-comments": { 979 | "version": "3.1.1", 980 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 981 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 982 | "engines": { 983 | "node": ">=8" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/sponsors/sindresorhus" 987 | } 988 | }, 989 | "node_modules/supports-color": { 990 | "version": "7.2.0", 991 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 992 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 993 | "dependencies": { 994 | "has-flag": "^4.0.0" 995 | }, 996 | "engines": { 997 | "node": ">=8" 998 | } 999 | }, 1000 | "node_modules/text-table": { 1001 | "version": "0.2.0", 1002 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1003 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" 1004 | }, 1005 | "node_modules/type-check": { 1006 | "version": "0.4.0", 1007 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1008 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1009 | "dependencies": { 1010 | "prelude-ls": "^1.2.1" 1011 | }, 1012 | "engines": { 1013 | "node": ">= 0.8.0" 1014 | } 1015 | }, 1016 | "node_modules/type-fest": { 1017 | "version": "0.20.2", 1018 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1019 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1020 | "engines": { 1021 | "node": ">=10" 1022 | }, 1023 | "funding": { 1024 | "url": "https://github.com/sponsors/sindresorhus" 1025 | } 1026 | }, 1027 | "node_modules/uri-js": { 1028 | "version": "4.4.1", 1029 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1030 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1031 | "dependencies": { 1032 | "punycode": "^2.1.0" 1033 | } 1034 | }, 1035 | "node_modules/which": { 1036 | "version": "2.0.2", 1037 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1038 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1039 | "dependencies": { 1040 | "isexe": "^2.0.0" 1041 | }, 1042 | "bin": { 1043 | "node-which": "bin/node-which" 1044 | }, 1045 | "engines": { 1046 | "node": ">= 8" 1047 | } 1048 | }, 1049 | "node_modules/wrappy": { 1050 | "version": "1.0.2", 1051 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1052 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1053 | }, 1054 | "node_modules/yocto-queue": { 1055 | "version": "0.1.0", 1056 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1057 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1058 | "engines": { 1059 | "node": ">=10" 1060 | }, 1061 | "funding": { 1062 | "url": "https://github.com/sponsors/sindresorhus" 1063 | } 1064 | } 1065 | } 1066 | } 1067 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "private": true, 4 | "version": "1.1.0", 5 | "author": "Timur Shemsedinov ", 6 | "license": "MIT", 7 | "scripts": { 8 | "test": "eslint ./Exercises; hpw" 9 | }, 10 | "dependencies": { 11 | "eslint": "^8.53.0", 12 | "hpw": "^0.2.2" 13 | } 14 | } 15 | --------------------------------------------------------------------------------