├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ └── test.yml ├── .gitignore ├── Exercises.ru.md ├── Exercises ├── 1-seq.js ├── 1-seq.test ├── 2-array.js └── 2-array.test ├── JavaScript ├── 1-context.js ├── 2-chain.js ├── 3-closure.js ├── 4-closure-recursive.js ├── 5-logger.js ├── 6-functor.js ├── 7-functor-short.js ├── 8-adder.js ├── 9-adder-methods.js ├── a-adder-line.js └── b-adder-on.js ├── LICENSE ├── README.md ├── Solutions ├── 1-seq.js └── 2-array.js ├── eslint.config.js ├── package-lock.json ├── package.json └── prettier.config.js /.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 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: tshemsedinov 2 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Check labs 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - name: Node.js 11 | uses: actions/setup-node@v1 12 | with: 13 | node-version: 18 14 | - uses: actions/cache@v2 15 | with: 16 | path: ~/.npm 17 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 18 | restore-keys: | 19 | ${{ runner.os }}-node- 20 | - run: npm ci 21 | - run: npm t 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /Exercises.ru.md: -------------------------------------------------------------------------------- 1 | # Замыкания и чеининг 2 | 3 | 1. Реализуйте функцию `seq(...args)` с использованием замыканий и чеининга, 4 | которая может быть вызвана по цепочке с произвольным количеством функций, а 5 | первый вызов со значением типа `Number` приведет к исполнению переданных ранее 6 | функций и возвращаемый результат должен быть, как в приведенных примерах: 7 | 8 | ```js 9 | seq(x => x + 7) 10 | (x => x * 2)(5) 11 | 12 | // Результат: 17 13 | ``` 14 | 15 | ```js 16 | seq(x => x * 2) 17 | (x => x + 7)(5) 18 | 19 | // Результат: 24 20 | ``` 21 | 22 | ```js 23 | seq(x => x + 1) 24 | (x => x * 2) 25 | (x => x / 3) 26 | (x => x - 4)(7) 27 | 28 | // Результат: 3 29 | ``` 30 | 31 | 2. Реализуйте функцию `array()` создающую функциональный объект, который 32 | содержит массив в своем замыкании и обеспечивает следующий интерфейс доступа 33 | к нему: 34 | - Создание нового экземпляра `const a = array();` 35 | - Получение элемента по индексу `a(i)` 36 | - Добавление элемента в конец `a.push(value)` 37 | - Удаление последнего элемента и получение его значения `a.pop()` 38 | 39 | Пример использования: 40 | ```js 41 | const arr = array(); 42 | 43 | arr.push('first'); 44 | arr.push('second'); 45 | arr.push('third'); 46 | 47 | console.log(arr(0)); // Выводит: first 48 | console.log(arr(1)); // Выводит: second 49 | console.log(arr(2)); // Выводит: third 50 | 51 | console.log(arr.pop()); // Выводит: third 52 | console.log(arr.pop()); // Выводит: second 53 | console.log(arr.pop()); // Выводит: first 54 | 55 | console.log(arr.pop()); // Выводит: undefined 56 | ``` 57 | -------------------------------------------------------------------------------- /Exercises/1-seq.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const seq = (f) => (g) => (x) => 0; 4 | 5 | module.exports = { seq }; 6 | -------------------------------------------------------------------------------- /Exercises/1-seq.test: -------------------------------------------------------------------------------- 1 | ({ 2 | name: 'seq', 3 | length: [10, 100], 4 | test: seq => { 5 | { 6 | const f1 = x => x + 7; 7 | const f2 = x => x * 2; 8 | const f = seq(f1)(f2); 9 | const x = 0; 10 | const y = f(x); 11 | const expected = 7; 12 | if (y !== expected) { 13 | const msg = `seq(${f1})(${f2})(${x})`; 14 | throw new Error(`${msg} === ${y} expected: ${expected}`); 15 | } 16 | } 17 | { 18 | const f1 = x => x + 7; 19 | const f2 = x => x * 2; 20 | const f = seq(f1)(f2); 21 | const x = 5; 22 | const y = f(x); 23 | const expected = 17; 24 | if (y !== expected) { 25 | const msg = `seq(${f1})(${f2})(${x})`; 26 | throw new Error(`${msg} === ${y} expected: ${expected}`); 27 | } 28 | } 29 | { 30 | const f1 = x => x * 2; 31 | const f2 = x => x + 7; 32 | const f = seq(f1)(f2); 33 | const x = 5; 34 | const y = f(x); 35 | const expected = 24; 36 | if (y !== expected) { 37 | const msg = `seq(${f1})(${f2})(${x})`; 38 | throw new Error(`${msg} === ${y} expected: ${expected}`); 39 | } 40 | } 41 | { 42 | const f1 = x => x + 1; 43 | const f2 = x => x * 2; 44 | const f3 = x => x / 3; 45 | const f4 = x => x - 4; 46 | const f = seq(f1)(f2)(f3)(f4); 47 | const x = 7; 48 | const y = f(x); 49 | const expected = 3; 50 | if (y !== expected) { 51 | const msg = `seq(${f1})(${f2})(${f3})(${f4})(${x})`; 52 | throw new Error(`${msg} === ${y} expected: ${expected}`); 53 | } 54 | } 55 | } 56 | }) 57 | -------------------------------------------------------------------------------- /Exercises/2-array.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const array = () => null; 4 | 5 | module.exports = { array }; 6 | -------------------------------------------------------------------------------- /Exercises/2-array.test: -------------------------------------------------------------------------------- 1 | ({ 2 | name: 'array', 3 | length: [100, 200], 4 | test: array => { 5 | { 6 | const arr = array(); 7 | arr.push('first'); 8 | arr.push('second'); 9 | arr.push('third'); 10 | if (arr(0) !== 'first') { 11 | throw new Error(`arr(0) === ${arr(0)} expected: 'first'`); 12 | } 13 | if (arr(1) !== 'second') { 14 | throw new Error(`arr(1) === ${arr(1)} expected: 'second'`); 15 | } 16 | if (arr(2) !== 'third') { 17 | throw new Error(`arr(2) === ${arr(2)} expected: 'third'`); 18 | } 19 | const value = arr.pop(); 20 | if (value !== 'third') { 21 | throw new Error(`arr.pop() === ${value} expected: 'third'`); 22 | } 23 | } 24 | { 25 | const arr = array(); 26 | if (typeof arr(0) !== 'undefined') { 27 | throw new Error(`arr(0) === ${arr(0)} expected: undefined`); 28 | } 29 | } 30 | { 31 | const arr = array(); 32 | const value = arr.pop(); 33 | if (typeof value !== 'undefined') { 34 | throw new Error(`arr.pop() === ${value} expected: undefined`); 35 | } 36 | } 37 | } 38 | }) 39 | -------------------------------------------------------------------------------- /JavaScript/1-context.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const hash = () => { 4 | const data = {}; 5 | let counter = 0; 6 | return (key, value) => { 7 | data[key] = value; 8 | counter++; 9 | console.dir({ counter }); 10 | return data; 11 | }; 12 | }; 13 | 14 | // Usage 15 | 16 | const h1 = hash(); 17 | h1('name', 'Marcus'); 18 | h1('city', 'Roma'); 19 | const obj1 = h1('born', 121); 20 | console.dir({ obj1 }); 21 | -------------------------------------------------------------------------------- /JavaScript/2-chain.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const hash = () => { 4 | const data = {}; 5 | Object.defineProperty(data, 'add', { 6 | enumerable: false, 7 | value(key, value) { 8 | data[key] = value; 9 | return data; 10 | }, 11 | }); 12 | return data; 13 | }; 14 | 15 | // Usage 16 | 17 | console.dir( 18 | hash() 19 | .add('name', 'Marcus') 20 | .add('city', 'Roma') 21 | .add('born', 121), 22 | ); 23 | -------------------------------------------------------------------------------- /JavaScript/3-closure.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const add = (x) => (y) => { 4 | const z = x + y; 5 | console.log(`${x} + ${y} = ${z}`); 6 | return z; 7 | }; 8 | 9 | // const add = x => y => x + y; 10 | 11 | // Usage 12 | 13 | const res = add(3)(6); 14 | console.log(res); 15 | -------------------------------------------------------------------------------- /JavaScript/4-closure-recursive.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const add = (x) => { 4 | const internalAdd = (y) => { 5 | const z = x + y; 6 | console.log(`${x} + ${y} = ${z}`); 7 | return add(z); 8 | }; 9 | return internalAdd; 10 | }; 11 | 12 | // const add = x => y => add(x + y); 13 | 14 | // Usage 15 | 16 | const a1 = add(5); 17 | const a2 = a1(2); 18 | const a3 = a2(3); 19 | const a4 = a1(1); 20 | const a5 = a2(10); 21 | console.log(a1, a2, a3, a4, a5); 22 | 23 | const res = add(5)(2)(3)(7); 24 | console.log(res); 25 | -------------------------------------------------------------------------------- /JavaScript/5-logger.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const logger = (kind) => { 4 | const color = logger.colors[kind] || logger.colors.info; 5 | return (s) => { 6 | const date = new Date().toISOString(); 7 | console.log(color + date + '\t' + s); 8 | }; 9 | }; 10 | 11 | logger.colors = { 12 | warning: '\x1b[1;33m', 13 | error: '\x1b[0;31m', 14 | info: '\x1b[1;37m', 15 | }; 16 | 17 | // Usage 18 | 19 | const warning = logger('warning'); 20 | const error = logger('error'); 21 | const debug = logger('debug'); 22 | const slow = logger('slow'); 23 | 24 | slow('I am slow logger'); 25 | warning('Hello'); 26 | error('World'); 27 | debug('Bye!'); 28 | -------------------------------------------------------------------------------- /JavaScript/6-functor.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const add = (x) => { 4 | const f = (y) => { 5 | const z = x + y; 6 | console.log(`${x} + ${y} = ${z}`); 7 | return add(z); 8 | }; 9 | f.map = (fn) => fn(x); 10 | return f; 11 | }; 12 | 13 | // Usage 14 | 15 | const a1 = add(5); 16 | const a2 = a1(2); 17 | const a3 = a2(3); 18 | const a4 = a1(1); 19 | const a5 = a2(10); 20 | console.log('a3 sum is:'); 21 | a3.map(console.log); 22 | 23 | console.log('\nAll functors:'); 24 | [a1, a2, a3, a4, a5].map((fn) => fn.map(console.log)); 25 | -------------------------------------------------------------------------------- /JavaScript/7-functor-short.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const add = (x) => { 4 | const f = (y) => add(x + y); 5 | f.map = (fn) => fn(x); 6 | return f; 7 | }; 8 | 9 | // Usage 10 | 11 | add(2)(7)(1).map((x) => { 12 | console.log({ x }); 13 | }); 14 | -------------------------------------------------------------------------------- /JavaScript/8-adder.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const adder = (a) => { 4 | const value = () => a; 5 | const add = (b) => adder(a + b); 6 | return { add, value }; 7 | }; 8 | 9 | // Usage 10 | 11 | const v = adder(3).add(-9).add(12).value(); 12 | console.log(v); 13 | -------------------------------------------------------------------------------- /JavaScript/9-adder-methods.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const adder = (a) => ({ 4 | value() { 5 | return a; 6 | }, 7 | add(b) { 8 | a += b; 9 | return this; 10 | }, 11 | }); 12 | 13 | // Usage 14 | 15 | const v = adder(3).add(-9).add(12).value(); 16 | console.log(v); 17 | -------------------------------------------------------------------------------- /JavaScript/a-adder-line.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const adder = (a) => ({ value: () => a, add: (b) => adder(a + b) }); 4 | 5 | // Usage 6 | 7 | const v = adder(3).add(-9).add(12).value(); 8 | console.log(v); 9 | -------------------------------------------------------------------------------- /JavaScript/b-adder-on.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const adder = (a) => { 4 | let onZerro = null; 5 | const obj = {}; 6 | const value = () => a; 7 | const add = (b) => { 8 | let x = a + b; 9 | if (x < 0) { 10 | x = 0; 11 | if (onZerro) onZerro(); 12 | } 13 | return adder(x); 14 | }; 15 | const on = (name, callback) => { 16 | if (name === 'zero') onZerro = callback; 17 | return obj; 18 | }; 19 | return Object.assign(obj, { add, value, on }); 20 | }; 21 | 22 | // Usage 23 | 24 | const res = adder(3) 25 | .on('zero', () => console.log('Less than zero')) 26 | .add(-9) 27 | .add(12) 28 | .add(5) 29 | .value(); 30 | 31 | console.log({ res }); 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2024 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 | # Function closures and storing data in function scope 2 | 3 | [![Функции, лямбды, контексты, замыкания](https://img.youtube.com/vi/pn5myCmpV2U/0.jpg)](https://www.youtube.com/watch?v=pn5myCmpV2U) 4 | -------------------------------------------------------------------------------- /Solutions/1-seq.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const seq = (f) => (g) => (typeof g === 'number' ? f(g) : seq((x) => f(g(x)))); 4 | 5 | module.exports = { seq }; 6 | -------------------------------------------------------------------------------- /Solutions/2-array.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const array = () => { 4 | const data = []; 5 | const get = (i) => data[i]; 6 | get.push = (x) => data.push(x); 7 | get.pop = () => data.pop(); 8 | return get; 9 | }; 10 | 11 | module.exports = { array }; 12 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const init = require('eslint-config-metarhia'); 4 | 5 | module.exports = init; 6 | -------------------------------------------------------------------------------- /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": "^9.12.0", 13 | "eslint-config-metarhia": "^9.1.1", 14 | "hpw": "^0.2.4", 15 | "prettier": "^3.3.3" 16 | } 17 | }, 18 | "node_modules/@eslint-community/eslint-utils": { 19 | "version": "4.4.0", 20 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 21 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 22 | "license": "MIT", 23 | "dependencies": { 24 | "eslint-visitor-keys": "^3.3.0" 25 | }, 26 | "engines": { 27 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 28 | }, 29 | "peerDependencies": { 30 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 31 | } 32 | }, 33 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 34 | "version": "3.4.3", 35 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 36 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 37 | "license": "Apache-2.0", 38 | "engines": { 39 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 40 | }, 41 | "funding": { 42 | "url": "https://opencollective.com/eslint" 43 | } 44 | }, 45 | "node_modules/@eslint-community/regexpp": { 46 | "version": "4.11.1", 47 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", 48 | "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", 49 | "license": "MIT", 50 | "engines": { 51 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 52 | } 53 | }, 54 | "node_modules/@eslint/config-array": { 55 | "version": "0.18.0", 56 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", 57 | "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", 58 | "license": "Apache-2.0", 59 | "dependencies": { 60 | "@eslint/object-schema": "^2.1.4", 61 | "debug": "^4.3.1", 62 | "minimatch": "^3.1.2" 63 | }, 64 | "engines": { 65 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 66 | } 67 | }, 68 | "node_modules/@eslint/core": { 69 | "version": "0.7.0", 70 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", 71 | "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", 72 | "license": "Apache-2.0", 73 | "engines": { 74 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 75 | } 76 | }, 77 | "node_modules/@eslint/eslintrc": { 78 | "version": "3.1.0", 79 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", 80 | "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", 81 | "license": "MIT", 82 | "dependencies": { 83 | "ajv": "^6.12.4", 84 | "debug": "^4.3.2", 85 | "espree": "^10.0.1", 86 | "globals": "^14.0.0", 87 | "ignore": "^5.2.0", 88 | "import-fresh": "^3.2.1", 89 | "js-yaml": "^4.1.0", 90 | "minimatch": "^3.1.2", 91 | "strip-json-comments": "^3.1.1" 92 | }, 93 | "engines": { 94 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 95 | }, 96 | "funding": { 97 | "url": "https://opencollective.com/eslint" 98 | } 99 | }, 100 | "node_modules/@eslint/js": { 101 | "version": "9.13.0", 102 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", 103 | "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", 104 | "license": "MIT", 105 | "engines": { 106 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 107 | } 108 | }, 109 | "node_modules/@eslint/object-schema": { 110 | "version": "2.1.4", 111 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", 112 | "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", 113 | "license": "Apache-2.0", 114 | "engines": { 115 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 116 | } 117 | }, 118 | "node_modules/@eslint/plugin-kit": { 119 | "version": "0.2.1", 120 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.1.tgz", 121 | "integrity": "sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==", 122 | "license": "Apache-2.0", 123 | "dependencies": { 124 | "levn": "^0.4.1" 125 | }, 126 | "engines": { 127 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 128 | } 129 | }, 130 | "node_modules/@humanfs/core": { 131 | "version": "0.19.0", 132 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", 133 | "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", 134 | "license": "Apache-2.0", 135 | "engines": { 136 | "node": ">=18.18.0" 137 | } 138 | }, 139 | "node_modules/@humanfs/node": { 140 | "version": "0.16.5", 141 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", 142 | "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", 143 | "license": "Apache-2.0", 144 | "dependencies": { 145 | "@humanfs/core": "^0.19.0", 146 | "@humanwhocodes/retry": "^0.3.0" 147 | }, 148 | "engines": { 149 | "node": ">=18.18.0" 150 | } 151 | }, 152 | "node_modules/@humanwhocodes/module-importer": { 153 | "version": "1.0.1", 154 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 155 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 156 | "license": "Apache-2.0", 157 | "engines": { 158 | "node": ">=12.22" 159 | }, 160 | "funding": { 161 | "type": "github", 162 | "url": "https://github.com/sponsors/nzakas" 163 | } 164 | }, 165 | "node_modules/@humanwhocodes/retry": { 166 | "version": "0.3.1", 167 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 168 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 169 | "license": "Apache-2.0", 170 | "engines": { 171 | "node": ">=18.18" 172 | }, 173 | "funding": { 174 | "type": "github", 175 | "url": "https://github.com/sponsors/nzakas" 176 | } 177 | }, 178 | "node_modules/@pkgr/core": { 179 | "version": "0.1.1", 180 | "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", 181 | "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", 182 | "license": "MIT", 183 | "engines": { 184 | "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 185 | }, 186 | "funding": { 187 | "url": "https://opencollective.com/unts" 188 | } 189 | }, 190 | "node_modules/@types/estree": { 191 | "version": "1.0.6", 192 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 193 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 194 | "license": "MIT" 195 | }, 196 | "node_modules/@types/json-schema": { 197 | "version": "7.0.15", 198 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 199 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 200 | "license": "MIT" 201 | }, 202 | "node_modules/acorn": { 203 | "version": "8.13.0", 204 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", 205 | "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", 206 | "license": "MIT", 207 | "bin": { 208 | "acorn": "bin/acorn" 209 | }, 210 | "engines": { 211 | "node": ">=0.4.0" 212 | } 213 | }, 214 | "node_modules/acorn-jsx": { 215 | "version": "5.3.2", 216 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 217 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 218 | "license": "MIT", 219 | "peerDependencies": { 220 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 221 | } 222 | }, 223 | "node_modules/ajv": { 224 | "version": "6.12.6", 225 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 226 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 227 | "license": "MIT", 228 | "dependencies": { 229 | "fast-deep-equal": "^3.1.1", 230 | "fast-json-stable-stringify": "^2.0.0", 231 | "json-schema-traverse": "^0.4.1", 232 | "uri-js": "^4.2.2" 233 | }, 234 | "funding": { 235 | "type": "github", 236 | "url": "https://github.com/sponsors/epoberezkin" 237 | } 238 | }, 239 | "node_modules/ansi-styles": { 240 | "version": "4.3.0", 241 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 242 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 243 | "license": "MIT", 244 | "dependencies": { 245 | "color-convert": "^2.0.1" 246 | }, 247 | "engines": { 248 | "node": ">=8" 249 | }, 250 | "funding": { 251 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 252 | } 253 | }, 254 | "node_modules/argparse": { 255 | "version": "2.0.1", 256 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 257 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 258 | "license": "Python-2.0" 259 | }, 260 | "node_modules/balanced-match": { 261 | "version": "1.0.2", 262 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 263 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 264 | "license": "MIT" 265 | }, 266 | "node_modules/brace-expansion": { 267 | "version": "1.1.11", 268 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 269 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 270 | "license": "MIT", 271 | "dependencies": { 272 | "balanced-match": "^1.0.0", 273 | "concat-map": "0.0.1" 274 | } 275 | }, 276 | "node_modules/callsites": { 277 | "version": "3.1.0", 278 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 279 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 280 | "license": "MIT", 281 | "engines": { 282 | "node": ">=6" 283 | } 284 | }, 285 | "node_modules/chalk": { 286 | "version": "4.1.2", 287 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 288 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 289 | "license": "MIT", 290 | "dependencies": { 291 | "ansi-styles": "^4.1.0", 292 | "supports-color": "^7.1.0" 293 | }, 294 | "engines": { 295 | "node": ">=10" 296 | }, 297 | "funding": { 298 | "url": "https://github.com/chalk/chalk?sponsor=1" 299 | } 300 | }, 301 | "node_modules/color-convert": { 302 | "version": "2.0.1", 303 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 304 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 305 | "license": "MIT", 306 | "dependencies": { 307 | "color-name": "~1.1.4" 308 | }, 309 | "engines": { 310 | "node": ">=7.0.0" 311 | } 312 | }, 313 | "node_modules/color-name": { 314 | "version": "1.1.4", 315 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 316 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 317 | "license": "MIT" 318 | }, 319 | "node_modules/concat-map": { 320 | "version": "0.0.1", 321 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 322 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 323 | "license": "MIT" 324 | }, 325 | "node_modules/concolor": { 326 | "version": "1.1.0", 327 | "resolved": "https://registry.npmjs.org/concolor/-/concolor-1.1.0.tgz", 328 | "integrity": "sha512-+3Fv9sVckhuzfksFU3e0lONmWKiL+Z88/R01KpAIqW2gVsmL8Ojw/KhkVcyAEeQeVBZcbb9zoDFbVcfVj4Pg9A==", 329 | "license": "MIT", 330 | "engines": { 331 | "node": "18 || 20" 332 | }, 333 | "funding": { 334 | "type": "patreon", 335 | "url": "https://www.patreon.com/tshemsedinov" 336 | } 337 | }, 338 | "node_modules/cross-spawn": { 339 | "version": "7.0.3", 340 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 341 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 342 | "license": "MIT", 343 | "dependencies": { 344 | "path-key": "^3.1.0", 345 | "shebang-command": "^2.0.0", 346 | "which": "^2.0.1" 347 | }, 348 | "engines": { 349 | "node": ">= 8" 350 | } 351 | }, 352 | "node_modules/debug": { 353 | "version": "4.3.7", 354 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 355 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 356 | "license": "MIT", 357 | "dependencies": { 358 | "ms": "^2.1.3" 359 | }, 360 | "engines": { 361 | "node": ">=6.0" 362 | }, 363 | "peerDependenciesMeta": { 364 | "supports-color": { 365 | "optional": true 366 | } 367 | } 368 | }, 369 | "node_modules/deep-is": { 370 | "version": "0.1.4", 371 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 372 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 373 | "license": "MIT" 374 | }, 375 | "node_modules/escape-string-regexp": { 376 | "version": "4.0.0", 377 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 378 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 379 | "license": "MIT", 380 | "engines": { 381 | "node": ">=10" 382 | }, 383 | "funding": { 384 | "url": "https://github.com/sponsors/sindresorhus" 385 | } 386 | }, 387 | "node_modules/eslint": { 388 | "version": "9.13.0", 389 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", 390 | "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", 391 | "license": "MIT", 392 | "dependencies": { 393 | "@eslint-community/eslint-utils": "^4.2.0", 394 | "@eslint-community/regexpp": "^4.11.0", 395 | "@eslint/config-array": "^0.18.0", 396 | "@eslint/core": "^0.7.0", 397 | "@eslint/eslintrc": "^3.1.0", 398 | "@eslint/js": "9.13.0", 399 | "@eslint/plugin-kit": "^0.2.0", 400 | "@humanfs/node": "^0.16.5", 401 | "@humanwhocodes/module-importer": "^1.0.1", 402 | "@humanwhocodes/retry": "^0.3.1", 403 | "@types/estree": "^1.0.6", 404 | "@types/json-schema": "^7.0.15", 405 | "ajv": "^6.12.4", 406 | "chalk": "^4.0.0", 407 | "cross-spawn": "^7.0.2", 408 | "debug": "^4.3.2", 409 | "escape-string-regexp": "^4.0.0", 410 | "eslint-scope": "^8.1.0", 411 | "eslint-visitor-keys": "^4.1.0", 412 | "espree": "^10.2.0", 413 | "esquery": "^1.5.0", 414 | "esutils": "^2.0.2", 415 | "fast-deep-equal": "^3.1.3", 416 | "file-entry-cache": "^8.0.0", 417 | "find-up": "^5.0.0", 418 | "glob-parent": "^6.0.2", 419 | "ignore": "^5.2.0", 420 | "imurmurhash": "^0.1.4", 421 | "is-glob": "^4.0.0", 422 | "json-stable-stringify-without-jsonify": "^1.0.1", 423 | "lodash.merge": "^4.6.2", 424 | "minimatch": "^3.1.2", 425 | "natural-compare": "^1.4.0", 426 | "optionator": "^0.9.3", 427 | "text-table": "^0.2.0" 428 | }, 429 | "bin": { 430 | "eslint": "bin/eslint.js" 431 | }, 432 | "engines": { 433 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 434 | }, 435 | "funding": { 436 | "url": "https://eslint.org/donate" 437 | }, 438 | "peerDependencies": { 439 | "jiti": "*" 440 | }, 441 | "peerDependenciesMeta": { 442 | "jiti": { 443 | "optional": true 444 | } 445 | } 446 | }, 447 | "node_modules/eslint-config-metarhia": { 448 | "version": "9.1.1", 449 | "resolved": "https://registry.npmjs.org/eslint-config-metarhia/-/eslint-config-metarhia-9.1.1.tgz", 450 | "integrity": "sha512-PPJBiv+kFg7+0kkjHWp1k37TovG5prxIwiryiX8vQ6m2Jt4u4yIBjEjDd3P/RGXK7yrbMiiSyI2Z/GTWDS0C/Q==", 451 | "license": "MIT", 452 | "dependencies": { 453 | "eslint": "^9.10.0", 454 | "eslint-config-prettier": "^9.1.0", 455 | "eslint-plugin-prettier": "^5.2.1", 456 | "prettier": "^3.3.3" 457 | }, 458 | "engines": { 459 | "node": "18 || 20 || 21 || 22 || 23" 460 | }, 461 | "funding": { 462 | "type": "patreon", 463 | "url": "https://www.patreon.com/tshemsedinov" 464 | } 465 | }, 466 | "node_modules/eslint-config-prettier": { 467 | "version": "9.1.0", 468 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", 469 | "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", 470 | "license": "MIT", 471 | "bin": { 472 | "eslint-config-prettier": "bin/cli.js" 473 | }, 474 | "peerDependencies": { 475 | "eslint": ">=7.0.0" 476 | } 477 | }, 478 | "node_modules/eslint-plugin-prettier": { 479 | "version": "5.2.1", 480 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", 481 | "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", 482 | "license": "MIT", 483 | "dependencies": { 484 | "prettier-linter-helpers": "^1.0.0", 485 | "synckit": "^0.9.1" 486 | }, 487 | "engines": { 488 | "node": "^14.18.0 || >=16.0.0" 489 | }, 490 | "funding": { 491 | "url": "https://opencollective.com/eslint-plugin-prettier" 492 | }, 493 | "peerDependencies": { 494 | "@types/eslint": ">=8.0.0", 495 | "eslint": ">=8.0.0", 496 | "eslint-config-prettier": "*", 497 | "prettier": ">=3.0.0" 498 | }, 499 | "peerDependenciesMeta": { 500 | "@types/eslint": { 501 | "optional": true 502 | }, 503 | "eslint-config-prettier": { 504 | "optional": true 505 | } 506 | } 507 | }, 508 | "node_modules/eslint-scope": { 509 | "version": "8.1.0", 510 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", 511 | "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", 512 | "license": "BSD-2-Clause", 513 | "dependencies": { 514 | "esrecurse": "^4.3.0", 515 | "estraverse": "^5.2.0" 516 | }, 517 | "engines": { 518 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 519 | }, 520 | "funding": { 521 | "url": "https://opencollective.com/eslint" 522 | } 523 | }, 524 | "node_modules/eslint-visitor-keys": { 525 | "version": "4.1.0", 526 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", 527 | "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", 528 | "license": "Apache-2.0", 529 | "engines": { 530 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 531 | }, 532 | "funding": { 533 | "url": "https://opencollective.com/eslint" 534 | } 535 | }, 536 | "node_modules/espree": { 537 | "version": "10.2.0", 538 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", 539 | "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", 540 | "license": "BSD-2-Clause", 541 | "dependencies": { 542 | "acorn": "^8.12.0", 543 | "acorn-jsx": "^5.3.2", 544 | "eslint-visitor-keys": "^4.1.0" 545 | }, 546 | "engines": { 547 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 548 | }, 549 | "funding": { 550 | "url": "https://opencollective.com/eslint" 551 | } 552 | }, 553 | "node_modules/esquery": { 554 | "version": "1.6.0", 555 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 556 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 557 | "license": "BSD-3-Clause", 558 | "dependencies": { 559 | "estraverse": "^5.1.0" 560 | }, 561 | "engines": { 562 | "node": ">=0.10" 563 | } 564 | }, 565 | "node_modules/esrecurse": { 566 | "version": "4.3.0", 567 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 568 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 569 | "license": "BSD-2-Clause", 570 | "dependencies": { 571 | "estraverse": "^5.2.0" 572 | }, 573 | "engines": { 574 | "node": ">=4.0" 575 | } 576 | }, 577 | "node_modules/estraverse": { 578 | "version": "5.3.0", 579 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 580 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 581 | "license": "BSD-2-Clause", 582 | "engines": { 583 | "node": ">=4.0" 584 | } 585 | }, 586 | "node_modules/esutils": { 587 | "version": "2.0.3", 588 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 589 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 590 | "license": "BSD-2-Clause", 591 | "engines": { 592 | "node": ">=0.10.0" 593 | } 594 | }, 595 | "node_modules/fast-deep-equal": { 596 | "version": "3.1.3", 597 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 598 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 599 | "license": "MIT" 600 | }, 601 | "node_modules/fast-diff": { 602 | "version": "1.3.0", 603 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", 604 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", 605 | "license": "Apache-2.0" 606 | }, 607 | "node_modules/fast-json-stable-stringify": { 608 | "version": "2.1.0", 609 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 610 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 611 | "license": "MIT" 612 | }, 613 | "node_modules/fast-levenshtein": { 614 | "version": "2.0.6", 615 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 616 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 617 | "license": "MIT" 618 | }, 619 | "node_modules/file-entry-cache": { 620 | "version": "8.0.0", 621 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 622 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 623 | "license": "MIT", 624 | "dependencies": { 625 | "flat-cache": "^4.0.0" 626 | }, 627 | "engines": { 628 | "node": ">=16.0.0" 629 | } 630 | }, 631 | "node_modules/find-up": { 632 | "version": "5.0.0", 633 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 634 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 635 | "license": "MIT", 636 | "dependencies": { 637 | "locate-path": "^6.0.0", 638 | "path-exists": "^4.0.0" 639 | }, 640 | "engines": { 641 | "node": ">=10" 642 | }, 643 | "funding": { 644 | "url": "https://github.com/sponsors/sindresorhus" 645 | } 646 | }, 647 | "node_modules/flat-cache": { 648 | "version": "4.0.1", 649 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 650 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 651 | "license": "MIT", 652 | "dependencies": { 653 | "flatted": "^3.2.9", 654 | "keyv": "^4.5.4" 655 | }, 656 | "engines": { 657 | "node": ">=16" 658 | } 659 | }, 660 | "node_modules/flatted": { 661 | "version": "3.3.1", 662 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 663 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 664 | "license": "ISC" 665 | }, 666 | "node_modules/glob-parent": { 667 | "version": "6.0.2", 668 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 669 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 670 | "license": "ISC", 671 | "dependencies": { 672 | "is-glob": "^4.0.3" 673 | }, 674 | "engines": { 675 | "node": ">=10.13.0" 676 | } 677 | }, 678 | "node_modules/globals": { 679 | "version": "14.0.0", 680 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 681 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 682 | "license": "MIT", 683 | "engines": { 684 | "node": ">=18" 685 | }, 686 | "funding": { 687 | "url": "https://github.com/sponsors/sindresorhus" 688 | } 689 | }, 690 | "node_modules/has-flag": { 691 | "version": "4.0.0", 692 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 693 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 694 | "license": "MIT", 695 | "engines": { 696 | "node": ">=8" 697 | } 698 | }, 699 | "node_modules/hpw": { 700 | "version": "0.2.4", 701 | "resolved": "https://registry.npmjs.org/hpw/-/hpw-0.2.4.tgz", 702 | "integrity": "sha512-u+um7velrF+MPZLwLvY0+Yh5pSxwxWIZxW6fAhrwLNkRDPNCFekBO1+qNJegcjJ5L0B1Wk8101GHwDwEqFbgYw==", 703 | "license": "MIT", 704 | "dependencies": { 705 | "concolor": "^1.0.6" 706 | }, 707 | "bin": { 708 | "hpw": "bin/hpw.js" 709 | }, 710 | "engines": { 711 | "node": ">=18.0.0" 712 | }, 713 | "funding": { 714 | "url": "https://www.patreon.com/tshemsedinov" 715 | } 716 | }, 717 | "node_modules/ignore": { 718 | "version": "5.3.2", 719 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 720 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 721 | "license": "MIT", 722 | "engines": { 723 | "node": ">= 4" 724 | } 725 | }, 726 | "node_modules/import-fresh": { 727 | "version": "3.3.0", 728 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 729 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 730 | "license": "MIT", 731 | "dependencies": { 732 | "parent-module": "^1.0.0", 733 | "resolve-from": "^4.0.0" 734 | }, 735 | "engines": { 736 | "node": ">=6" 737 | }, 738 | "funding": { 739 | "url": "https://github.com/sponsors/sindresorhus" 740 | } 741 | }, 742 | "node_modules/imurmurhash": { 743 | "version": "0.1.4", 744 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 745 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 746 | "license": "MIT", 747 | "engines": { 748 | "node": ">=0.8.19" 749 | } 750 | }, 751 | "node_modules/is-extglob": { 752 | "version": "2.1.1", 753 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 754 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 755 | "license": "MIT", 756 | "engines": { 757 | "node": ">=0.10.0" 758 | } 759 | }, 760 | "node_modules/is-glob": { 761 | "version": "4.0.3", 762 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 763 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 764 | "license": "MIT", 765 | "dependencies": { 766 | "is-extglob": "^2.1.1" 767 | }, 768 | "engines": { 769 | "node": ">=0.10.0" 770 | } 771 | }, 772 | "node_modules/isexe": { 773 | "version": "2.0.0", 774 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 775 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 776 | "license": "ISC" 777 | }, 778 | "node_modules/js-yaml": { 779 | "version": "4.1.0", 780 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 781 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 782 | "license": "MIT", 783 | "dependencies": { 784 | "argparse": "^2.0.1" 785 | }, 786 | "bin": { 787 | "js-yaml": "bin/js-yaml.js" 788 | } 789 | }, 790 | "node_modules/json-buffer": { 791 | "version": "3.0.1", 792 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 793 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 794 | "license": "MIT" 795 | }, 796 | "node_modules/json-schema-traverse": { 797 | "version": "0.4.1", 798 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 799 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 800 | "license": "MIT" 801 | }, 802 | "node_modules/json-stable-stringify-without-jsonify": { 803 | "version": "1.0.1", 804 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 805 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 806 | "license": "MIT" 807 | }, 808 | "node_modules/keyv": { 809 | "version": "4.5.4", 810 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 811 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 812 | "license": "MIT", 813 | "dependencies": { 814 | "json-buffer": "3.0.1" 815 | } 816 | }, 817 | "node_modules/levn": { 818 | "version": "0.4.1", 819 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 820 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 821 | "license": "MIT", 822 | "dependencies": { 823 | "prelude-ls": "^1.2.1", 824 | "type-check": "~0.4.0" 825 | }, 826 | "engines": { 827 | "node": ">= 0.8.0" 828 | } 829 | }, 830 | "node_modules/locate-path": { 831 | "version": "6.0.0", 832 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 833 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 834 | "license": "MIT", 835 | "dependencies": { 836 | "p-locate": "^5.0.0" 837 | }, 838 | "engines": { 839 | "node": ">=10" 840 | }, 841 | "funding": { 842 | "url": "https://github.com/sponsors/sindresorhus" 843 | } 844 | }, 845 | "node_modules/lodash.merge": { 846 | "version": "4.6.2", 847 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 848 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 849 | "license": "MIT" 850 | }, 851 | "node_modules/minimatch": { 852 | "version": "3.1.2", 853 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 854 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 855 | "license": "ISC", 856 | "dependencies": { 857 | "brace-expansion": "^1.1.7" 858 | }, 859 | "engines": { 860 | "node": "*" 861 | } 862 | }, 863 | "node_modules/ms": { 864 | "version": "2.1.3", 865 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 866 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 867 | "license": "MIT" 868 | }, 869 | "node_modules/natural-compare": { 870 | "version": "1.4.0", 871 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 872 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 873 | "license": "MIT" 874 | }, 875 | "node_modules/optionator": { 876 | "version": "0.9.4", 877 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 878 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 879 | "license": "MIT", 880 | "dependencies": { 881 | "deep-is": "^0.1.3", 882 | "fast-levenshtein": "^2.0.6", 883 | "levn": "^0.4.1", 884 | "prelude-ls": "^1.2.1", 885 | "type-check": "^0.4.0", 886 | "word-wrap": "^1.2.5" 887 | }, 888 | "engines": { 889 | "node": ">= 0.8.0" 890 | } 891 | }, 892 | "node_modules/p-limit": { 893 | "version": "3.1.0", 894 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 895 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 896 | "license": "MIT", 897 | "dependencies": { 898 | "yocto-queue": "^0.1.0" 899 | }, 900 | "engines": { 901 | "node": ">=10" 902 | }, 903 | "funding": { 904 | "url": "https://github.com/sponsors/sindresorhus" 905 | } 906 | }, 907 | "node_modules/p-locate": { 908 | "version": "5.0.0", 909 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 910 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 911 | "license": "MIT", 912 | "dependencies": { 913 | "p-limit": "^3.0.2" 914 | }, 915 | "engines": { 916 | "node": ">=10" 917 | }, 918 | "funding": { 919 | "url": "https://github.com/sponsors/sindresorhus" 920 | } 921 | }, 922 | "node_modules/parent-module": { 923 | "version": "1.0.1", 924 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 925 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 926 | "license": "MIT", 927 | "dependencies": { 928 | "callsites": "^3.0.0" 929 | }, 930 | "engines": { 931 | "node": ">=6" 932 | } 933 | }, 934 | "node_modules/path-exists": { 935 | "version": "4.0.0", 936 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 937 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 938 | "license": "MIT", 939 | "engines": { 940 | "node": ">=8" 941 | } 942 | }, 943 | "node_modules/path-key": { 944 | "version": "3.1.1", 945 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 946 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 947 | "license": "MIT", 948 | "engines": { 949 | "node": ">=8" 950 | } 951 | }, 952 | "node_modules/prelude-ls": { 953 | "version": "1.2.1", 954 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 955 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 956 | "license": "MIT", 957 | "engines": { 958 | "node": ">= 0.8.0" 959 | } 960 | }, 961 | "node_modules/prettier": { 962 | "version": "3.3.3", 963 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", 964 | "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", 965 | "license": "MIT", 966 | "bin": { 967 | "prettier": "bin/prettier.cjs" 968 | }, 969 | "engines": { 970 | "node": ">=14" 971 | }, 972 | "funding": { 973 | "url": "https://github.com/prettier/prettier?sponsor=1" 974 | } 975 | }, 976 | "node_modules/prettier-linter-helpers": { 977 | "version": "1.0.0", 978 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 979 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 980 | "license": "MIT", 981 | "dependencies": { 982 | "fast-diff": "^1.1.2" 983 | }, 984 | "engines": { 985 | "node": ">=6.0.0" 986 | } 987 | }, 988 | "node_modules/punycode": { 989 | "version": "2.3.1", 990 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 991 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 992 | "license": "MIT", 993 | "engines": { 994 | "node": ">=6" 995 | } 996 | }, 997 | "node_modules/resolve-from": { 998 | "version": "4.0.0", 999 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1000 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1001 | "license": "MIT", 1002 | "engines": { 1003 | "node": ">=4" 1004 | } 1005 | }, 1006 | "node_modules/shebang-command": { 1007 | "version": "2.0.0", 1008 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1009 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1010 | "license": "MIT", 1011 | "dependencies": { 1012 | "shebang-regex": "^3.0.0" 1013 | }, 1014 | "engines": { 1015 | "node": ">=8" 1016 | } 1017 | }, 1018 | "node_modules/shebang-regex": { 1019 | "version": "3.0.0", 1020 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1021 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1022 | "license": "MIT", 1023 | "engines": { 1024 | "node": ">=8" 1025 | } 1026 | }, 1027 | "node_modules/strip-json-comments": { 1028 | "version": "3.1.1", 1029 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1030 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1031 | "license": "MIT", 1032 | "engines": { 1033 | "node": ">=8" 1034 | }, 1035 | "funding": { 1036 | "url": "https://github.com/sponsors/sindresorhus" 1037 | } 1038 | }, 1039 | "node_modules/supports-color": { 1040 | "version": "7.2.0", 1041 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1042 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1043 | "license": "MIT", 1044 | "dependencies": { 1045 | "has-flag": "^4.0.0" 1046 | }, 1047 | "engines": { 1048 | "node": ">=8" 1049 | } 1050 | }, 1051 | "node_modules/synckit": { 1052 | "version": "0.9.2", 1053 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", 1054 | "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", 1055 | "license": "MIT", 1056 | "dependencies": { 1057 | "@pkgr/core": "^0.1.0", 1058 | "tslib": "^2.6.2" 1059 | }, 1060 | "engines": { 1061 | "node": "^14.18.0 || >=16.0.0" 1062 | }, 1063 | "funding": { 1064 | "url": "https://opencollective.com/unts" 1065 | } 1066 | }, 1067 | "node_modules/text-table": { 1068 | "version": "0.2.0", 1069 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1070 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1071 | "license": "MIT" 1072 | }, 1073 | "node_modules/tslib": { 1074 | "version": "2.8.0", 1075 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", 1076 | "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", 1077 | "license": "0BSD" 1078 | }, 1079 | "node_modules/type-check": { 1080 | "version": "0.4.0", 1081 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1082 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1083 | "license": "MIT", 1084 | "dependencies": { 1085 | "prelude-ls": "^1.2.1" 1086 | }, 1087 | "engines": { 1088 | "node": ">= 0.8.0" 1089 | } 1090 | }, 1091 | "node_modules/uri-js": { 1092 | "version": "4.4.1", 1093 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1094 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1095 | "license": "BSD-2-Clause", 1096 | "dependencies": { 1097 | "punycode": "^2.1.0" 1098 | } 1099 | }, 1100 | "node_modules/which": { 1101 | "version": "2.0.2", 1102 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1103 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1104 | "license": "ISC", 1105 | "dependencies": { 1106 | "isexe": "^2.0.0" 1107 | }, 1108 | "bin": { 1109 | "node-which": "bin/node-which" 1110 | }, 1111 | "engines": { 1112 | "node": ">= 8" 1113 | } 1114 | }, 1115 | "node_modules/word-wrap": { 1116 | "version": "1.2.5", 1117 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 1118 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 1119 | "license": "MIT", 1120 | "engines": { 1121 | "node": ">=0.10.0" 1122 | } 1123 | }, 1124 | "node_modules/yocto-queue": { 1125 | "version": "0.1.0", 1126 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1127 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1128 | "license": "MIT", 1129 | "engines": { 1130 | "node": ">=10" 1131 | }, 1132 | "funding": { 1133 | "url": "https://github.com/sponsors/sindresorhus" 1134 | } 1135 | } 1136 | } 1137 | } 1138 | -------------------------------------------------------------------------------- /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 | "ci": "eslint ./Exercises && hpw", 10 | "lint": "eslint . && prettier -c \"**/*.js\"", 11 | "fix": "eslint . --fix && prettier --write \"**/*.js\"" 12 | }, 13 | "dependencies": { 14 | "hpw": "^0.2.4", 15 | "eslint": "^9.12.0", 16 | "eslint-config-metarhia": "^9.1.1", 17 | "prettier": "^3.3.3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | printWidth: 80, 5 | singleQuote: true, 6 | trailingComma: 'all', 7 | tabWidth: 2, 8 | useTabs: false, 9 | semi: true, 10 | }; 11 | --------------------------------------------------------------------------------