├── csv.csv ├── .gitattributes ├── .npmignore ├── src ├── index.ts ├── types.ts ├── cli.ts └── lib.ts ├── tsconfig.json ├── jest.config.js ├── .vscode └── launch.json ├── .github └── workflows │ └── nodejs.yml ├── deprecated.md ├── package.json ├── .gitignore ├── README.md ├── __tests__ ├── ohlcv.ts └── ticks.ts ├── COPYING └── pnpm-lock.yaml /csv.csv: -------------------------------------------------------------------------------- 1 | 1,2,3,5,6 2 | 1,5,4,6,7 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .babelrc 2 | .eslintignore 3 | .eslintrc.json 4 | .gitignore 5 | .lintstagedrc.json 6 | .nycrc 7 | .prettierrc.json 8 | .coveralls.yml 9 | 10 | tsconfig.json 11 | jest.config.js 12 | coverage 13 | src 14 | __tests__ 15 | examples -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as lib from './lib'; 2 | export * from './lib'; 3 | 4 | export default { 5 | resample_ohlcv: lib.resampleOhlcv, 6 | array: lib.resampleOhlcv, 7 | json: lib.resampleOhlcv, 8 | trade_to_candle: lib.resampleTicksByTime, 9 | tick_chart: lib.resampleTicksByCount 10 | }; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "sourceMap": true, 7 | "outDir": "./dist", 8 | "rootDir": "./src", 9 | "strict": true, 10 | "alwaysStrict": true, 11 | "esModuleInterop": true 12 | }, 13 | "include": [ 14 | "src/**/*.ts" 15 | ] 16 | } -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | collectCoverage: true, 3 | coveragePathIgnorePatterns: ['/node_modules|dist/'], 4 | collectCoverageFrom: ['src/**/*.ts'], 5 | transform: { 6 | '.(ts|tsx)': ['ts-jest', { 7 | diagnostics: { 8 | ignoreCodes: [2345] 9 | } 10 | }] 11 | }, 12 | testRegex: '(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$', 13 | moduleFileExtensions: ['ts', 'tsx', 'js'], 14 | }; -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Debug Jest Tests", 6 | "type": "node", 7 | "request": "launch", 8 | "runtimeArgs": [ 9 | "--inspect-brk", 10 | "${workspaceRoot}/node_modules/.bin/jest", 11 | "--runInBand" 12 | ], 13 | "cwd": "${workspaceFolder}/src", 14 | "console": "integratedTerminal", 15 | "internalConsoleOptions": "neverOpen", 16 | "port": 9229 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export type IOHLCV = { 2 | time: number; 3 | open: number; 4 | high: number; 5 | low: number; 6 | close: number; 7 | volume: number; 8 | } 9 | 10 | export type OHLCV = [ 11 | number, 12 | number, 13 | number, 14 | number, 15 | number, 16 | number, 17 | ] 18 | 19 | export type TradeTick = { 20 | time: number; 21 | price: number; 22 | quantity: number; 23 | } 24 | 25 | export enum OHLCVField { 26 | TIME = 0, 27 | OPEN = 1, 28 | HIGH = 2, 29 | LOW = 3, 30 | CLOSE = 4, 31 | VOLUME = 5 32 | } 33 | 34 | export type Trade = TradeTick; -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [10.x, 12.x] 20 | 21 | steps: 22 | - uses: actions/checkout@v2 23 | - name: Use Node.js ${{ matrix.node-version }} 24 | uses: actions/setup-node@v1 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | - run: npm ci 28 | - run: npm run build 29 | - run: npm test 30 | -------------------------------------------------------------------------------- /deprecated.md: -------------------------------------------------------------------------------- 1 | # Deprecated stuff that need attention 2 | 3 | ## Result of clean npm install with no package-lock.json 4 | 5 | ```sh 6 | $ npm i 7 | npm WARN deprecated har-validator@5.1.5: this library is no longer supported 8 | npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known 9 | to be problematic. See https://v8.dev/blog/math-random for details. 10 | npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 11 | ``` 12 | 13 | ```sh 14 | /ohlc-resample 15 | └─┬ coveralls@3.1.1 16 | └─┬ request@2.88.2 17 | └── uuid@3.4.0 18 | ``` 19 | 20 | ```sh 21 | /ohlc-resample 22 | └─┬ coveralls@3.1.1 23 | └─┬ request@2.88.2 24 | └── har-validator@5.1.5 25 | ``` 26 | 27 | ### Result of npm outdated 28 | 29 | ```sh 30 | $ npm outdated 31 | Package Current Wanted Latest Location Depended by 32 | typescript 3.9.10 3.9.10 4.4.3 node_modules/typescript ohlc-resample (updated to 4.4.3) 33 | ``` 34 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as fs from 'fs'; 3 | import { program } from 'commander'; 4 | import * as csv from 'fast-csv'; 5 | import { OHLCV, IOHLCV } from './types'; 6 | 7 | program 8 | .description('Resample OHLCV between timeframes and file formats') 9 | .option('-i, --input ', 'Input file path (csv, json)') 10 | .option('-n, --name ', 'Output file name') 11 | .option('-f, --format ', 'Output file format (csv, json)') 12 | .option('-p, --placeholder', '') 13 | ; 14 | 15 | program.parse(); 16 | program.showHelpAfterError(); 17 | 18 | const options = program.opts(); 19 | 20 | (() => { 21 | 22 | const inFormat = path.extname(options.input).slice(1).toLowerCase(); 23 | const inPath = path.resolve(options.input); 24 | 25 | if (!['csv', 'json'].includes(inFormat)) { 26 | program.error('Only CSV and JSON files are accepted as input'); 27 | return; 28 | } 29 | 30 | const inBuffer = fs.readFileSync(inPath); 31 | const inStream = fs.createReadStream(inPath, { 32 | start: 0 33 | }); 34 | 35 | if (inFormat === 'csv') { 36 | csv.parseStream(inStream) 37 | .on('data', (row) => { 38 | console.log(row); 39 | }) 40 | .end(() => { 41 | console.log("end"); 42 | }); 43 | 44 | // const data = inStream 45 | // .pipe(csv.parse({ headers: true })); 46 | } 47 | if (inFormat === 'json') { 48 | //@ts-ignore 49 | const data: IOHLCV[] = JSON.parse(inBuffer); 50 | } 51 | })(); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ohlc-resample", 3 | "version": "1.2.1", 4 | "description": "Resample (inter-convert) trade, ticks or OHLCV data to different time frames, includes CLI", 5 | "main": "dist/index.js", 6 | "engines": { 7 | "node": ">=20.12.2" 8 | }, 9 | "files": [ 10 | "dist" 11 | ], 12 | "scripts": { 13 | "prebuild": "rimraf build", 14 | "build": "tsc --build", 15 | "build:check": "node -e \"require('./dist')\"", 16 | "prepublishOnly": "npm test && npm run build && npm run coveralls && npm run build && npm run build:check", 17 | "test": "jest", 18 | "coveralls": "jest --coverage --coverageReporters=text-lcov | coveralls" 19 | }, 20 | "bin": { 21 | "ohlc": "./src/cli.ts" 22 | }, 23 | "keywords": [ 24 | "ohlc", 25 | "ohlcv", 26 | "resample", 27 | "tickchart", 28 | "candlestick", 29 | "ccxt", 30 | "stock", 31 | "chart", 32 | "analysis", 33 | "cli" 34 | ], 35 | "repository": { 36 | "type": "git", 37 | "url": "git+https://github.com/adiled/ohlc-resample" 38 | }, 39 | "author": "Adil Shaikh (http://www.adils.me)", 40 | "license": "LGPL-3.0", 41 | "bugs": { 42 | "url": "https://github.com/adiled/ohlc-resample/issues" 43 | }, 44 | "homepage": "https://github.com/adiled/ohlc-resample#readme", 45 | "devDependencies": { 46 | "@types/jest": "^29.5.14", 47 | "@types/lodash": "^4.14.173", 48 | "coveralls": "^3.1.1", 49 | "jest": "^30.0.0", 50 | "rimraf": "^6.0.1", 51 | "ts-jest": "^29.4.0", 52 | "typescript": "^5.8.3" 53 | }, 54 | "dependencies": { 55 | "commander": "^14.0.0", 56 | "fast-csv": "^5.0.2", 57 | "lodash": "^4.17.21", 58 | "ts-node": "^10.9.2" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | dist/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # TypeScript v1 declaration files 46 | typings/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional REPL history 58 | .node_repl_history 59 | 60 | # Output of 'npm pack' 61 | *.tgz 62 | 63 | # Yarn Integrity file 64 | .yarn-integrity 65 | 66 | # dotenv environment variables file 67 | .env 68 | .env.test 69 | 70 | # parcel-bundler cache (https://parceljs.org/) 71 | .cache 72 | 73 | # next.js build output 74 | .next 75 | 76 | # nuxt.js build output 77 | .nuxt 78 | 79 | # vuepress build output 80 | .vuepress/dist 81 | 82 | # Serverless directories 83 | .serverless/ 84 | 85 | # FuseBox cache 86 | .fusebox/ 87 | 88 | # DynamoDB Local files 89 | .dynamodb/ 90 | build/ 91 | dist/ 92 | .coveralls.yml 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

ohlc-resample 🕯️

2 |

3 | Resample (inter-convert) trade, ticks or OHLCV data to different time frames 4 |

5 |

6 | 7 | Version 8 | 9 | Downloads 10 | 11 | Documentation 12 | 13 | 14 | Maintenance 15 | 16 | 17 | Coverage Status 18 | 19 | 20 | License: LGPL--3.0 21 | 22 |

23 | 24 | - Typescript support 25 | - CCXT support 26 | - Single dependency 27 | - Low time complexity grouping based aggregations 28 | - Optional gap filling 29 | 30 | ## Install 31 | 32 | ```sh 33 | npm install --save ohlc-resample 34 | ``` 35 | 36 | ## Supported formats 37 | 38 | - OHLCV (CCXT format) `[[time,open,high,low,close,volume]]` 39 | - OHLCV JSON `[{time: number, open: number, high: number, low: number close: number, volume: number}]` 40 | - Trade JSON `[{time: number, price: number, quantity: number}]` 41 | 42 | ## Reference 43 | 44 | ```typescript 45 | import { 46 | resampleOhlcv, 47 | resampleTicksByTime, 48 | resampleTicksByCount, 49 | } from "ohlc-resample"; 50 | 51 | // OHLCV resampled from 1 minute to 5 minute 52 | 53 | resampleOhlcv(objectOhlcv as IOHLCV[], { 54 | baseTimeframe: 60, 55 | newTimeframe: 5 * 60, 56 | }); // return IOHLCV[] 57 | resampleOhlcv(arrayOhlcv as OHLCV[], { 58 | baseTimeframe: 60, 59 | newTimeframe: 5 * 60, 60 | }); // return OHLCV[] 61 | 62 | // Ticks grouped and resampled to 1m OHCLV 63 | // option.includeLatestCandle is by default `true` 64 | // options.fillGaps is by default `false` 65 | 66 | resampleTicksByTime(tickData as TradeTick[], { 67 | timeframe: 60, 68 | includeLatestCandle: false, 69 | fillGaps: true, 70 | }); // return IOHLCV[] 71 | 72 | // Ticks grouped and resampled by every 5 ticks 73 | 74 | resampleTicksByCount(tickData as TradeTick[], { tickCount: 5 }); // return IOHLCV[] 75 | ``` 76 | 77 | ## Types 78 | 79 | ```typescript 80 | export type IOHLCV = { 81 | time: number; 82 | open: number; 83 | high: number; 84 | low: number; 85 | close: number; 86 | volume: number; 87 | }; 88 | 89 | export type OHLCV = [number, number, number, number, number, number]; 90 | 91 | export type TradeTick = { 92 | price: number; 93 | quantity: number; 94 | time: number; 95 | }; 96 | ``` 97 | 98 | **Note:** Input time for all above types must be in milliseconds 99 | 100 | ## Examples 101 | 102 | **Resample CCXT (Object) OHLCV based on timeframe** 103 | 104 | ```typescript 105 | import { resampleOhlcv } from "ohlc-resample"; 106 | 107 | const link_btc_1m = [ 108 | { 109 | time: 1563625680000, 110 | open: 0.00024824, 111 | high: 0.00024851, 112 | low: 0.00024798, 113 | close: 0.00024831, 114 | volume: 2264, 115 | }, 116 | { 117 | time: 1563625740000, 118 | open: 0.00024817, 119 | high: 0.00024832, 120 | low: 0.00024795, 121 | close: 0.00024828, 122 | volume: 3145, 123 | }, 124 | ]; 125 | 126 | const baseTimeframe = 60; // 60 seconds 127 | const newTimeframe = 120; // 120 seconds 128 | 129 | // Candles made up of ticks within 2 minute timeframes 130 | 131 | const link_btc_2m = resampleOhlcv(link_btc_1m, { 132 | baseTimeframe, 133 | newTimeframe, 134 | }); 135 | ``` 136 | 137 | **Resample ticks to OHLCV based on tick count** 138 | 139 | ```typescript 140 | import { resampleTicksByCount, TradeTick } from "ohlc-resample"; 141 | 142 | const adabnb_trades = [ 143 | { 144 | time: "1564502620356", 145 | side: "sell", 146 | quantity: "4458", 147 | price: "0.00224", 148 | tradeId: "1221272", 149 | }, 150 | { 151 | time: "1564503133949", 152 | side: "sell", 153 | quantity: "3480", 154 | price: "0.002242", 155 | tradeId: "1221273", 156 | }, 157 | { 158 | time: "1564503134553", 159 | side: "buy", 160 | quantity: "51", 161 | price: "0.002248", 162 | tradeId: "1221274", 163 | }, 164 | ]; 165 | 166 | const airbnb_ticks: TradeTick[] = adabnb_trades.map((trade: any) => ({ 167 | time: Number(trade.time), 168 | quantity: Number(trade.quantity), 169 | price: Number(trade.price), 170 | })); 171 | 172 | // Candles made up of two ticks 173 | 174 | const tickChart = resampleTicksByCount(airbnb_ticks, { 175 | tickCount: 2, 176 | }); 177 | ``` 178 | 179 | ## Contributors 180 | 181 | 👤 **Adil Shaikh (https://adils.me)** 182 | 183 | - Website: https://adils.me 184 | - Github: [@adiled](https://github.com/adiled) 185 | 186 | 👤 Past authors of `candlestick-convert` 187 | 188 | ## 🤝 Contributing 189 | 190 | Contributions, issues and feature requests are welcome!
Feel free to check [issues page](https://github.com/adiled/ohlc-resample/issues). You can also take a look at the [contributing guide](https://github.com/adiled/ohlc-resample/blob/master/CONTRIBUTING.md). 191 | 192 | ### Run tests 193 | 194 | ```sh 195 | yarn test 196 | ``` 197 | 198 | ## Show your support 199 | 200 | Give a ⭐️ if this project helped you! 201 | 202 | ## 📝 License 203 | 204 | Copyright © 2022 [Adil Shaikh (https://adils.me)](https://github.com/adiled).
205 | This project is [LGPL--3.0](https://github.com/adiled/ohlc-resample/blob/master/LICENSE) licensed. 206 | -------------------------------------------------------------------------------- /__tests__/ohlcv.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import CConverter, { resampleOhlcv } from "../src/index"; 4 | import type { IOHLCV, OHLCV } from "../src/types"; 5 | 6 | // From Binance 7 | const btc_usdt_1m: OHLCV[] = [ 8 | [1589177580000,8695.81000000,8700.00000000,8695.41000000,8698.29000000,20.87075000], 9 | [1589177640000,8697.93000000,8698.91000000,8687.90000000,8695.01000000,41.31395400], 10 | [1589177700000,8696.02000000,8709.53000000,8691.46000000,8708.06000000,71.01759000], 11 | [1589177760000,8708.35000000,8721.21000000,8706.53000000,8721.21000000,75.89262100], 12 | [1589177820000,8721.21000000,8721.21000000,8709.35000000,8713.14000000,72.30884200], 13 | [1589177880000,8713.14000000,8714.63000000,8707.43000000,8710.20000000,25.58165100], 14 | [1589177940000,8710.21000000,8718.87000000,8710.21000000,8711.90000000,51.24403600], 15 | [1589178000000,8711.89000000,8711.89000000,8703.20000000,8704.39000000,26.06257900], 16 | [1589178060000,8704.39000000,8711.47000000,8704.38000000,8708.11000000,41.12362700], 17 | [1589178120000,8708.11000000,8710.00000000,8707.23000000,8707.33000000,9.77713500], 18 | [1589178180000,8707.32000000,8716.25000000,8705.00000000,8713.38000000,44.29994700], 19 | [1589178240000,8713.23000000,8719.43000000,8710.57000000,8717.09000000,59.07193000], 20 | [1589178300000,8717.09000000,8721.00000000,8710.03000000,8720.13000000,26.42055700], 21 | [1589178360000,8719.70000000,8730.32000000,8718.25000000,8724.50000000,51.52744300], 22 | [1589178420000,8726.75000000,8732.23000000,8718.29000000,8723.77000000,55.48570400], 23 | [1589178480000,8722.17000000,8725.06000000,8718.32000000,8718.53000000,23.427228000], 24 | [1589178540000,8718.53000000,8721.81000000,8716.76000000,8720.00000000,25.014032000], 25 | [1589178600000,8719.53000000,8724.19000000,8715.00000000,8717.38000000,23.25855600], 26 | [1589178660000,8717.57000000,8717.84000000,8709.05000000,8710.92000000,21.16394900], 27 | [1589178720000,8710.92000000,8711.66000000,8700.00000000,8706.24000000,42.016462000], 28 | [1589178780000,8706.24000000,8712.18000000,8704.68000000,8710.80000000,23.80623900], 29 | [1589178840000,8710.53000000,8719.98000000,8710.00000000,8717.76000000,29.30366800], 30 | [1589178900000,8717.76000000,8717.77000000,8707.89000000,8709.86000000,42.12065600], 31 | [1589178960000,8709.86000000,8714.88000000,8709.86000000,8710.06000000,39.54340500], 32 | [1589179020000,8710.06000000,8711.75000000,8701.65000000,8703.08000000,36.669774000], 33 | [1589179080000,8703.04000000,8707.08000000,8701.06000000,8702.90000000,30.41817000], 34 | [1589179140000,8702.18000000,8702.76000000,8695.00000000,8700.95000000,69.63675100], 35 | [1589179200000,8700.95000000,8700.96000000,8692.83000000,8694.83000000,25.87920200], 36 | [1589179260000,8695.00000000,8699.70000000,8692.64000000,8695.98000000,15.01325400], 37 | [1589179320000,8695.98000000,8698.00000000,8695.08000000,8695.08000000,17.99716300] 38 | ]; 39 | 40 | // From Binance 41 | const btc_usdt_5m: OHLCV[] = [ 42 | [1589178600000,8719.53000000,8724.19000000,8700.00000000,8717.76000000,139.54887399999998] 43 | ] 44 | 45 | test("OHLCV Resample - 1m to 5m", () => { 46 | const result = resampleOhlcv(btc_usdt_1m, { 47 | baseTimeframe: 60, 48 | newTimeframe: 5 * 60 49 | }); 50 | 51 | expect(result[4]).toEqual(btc_usdt_5m[0]); 52 | expect(result).toHaveLength(6); 53 | }); 54 | 55 | 56 | test("OHLCV Resample - 1m to 5m with missing values", () => { 57 | 58 | const incompleteArray = [...btc_usdt_1m]; 59 | 60 | incompleteArray.splice(6,1); 61 | incompleteArray.splice(13,1); 62 | incompleteArray.splice(22,1); 63 | 64 | const result = resampleOhlcv(incompleteArray, { 65 | baseTimeframe: 60, 66 | newTimeframe: 5 * 60 67 | }); 68 | 69 | expect(incompleteArray.length).toBeLessThan(btc_usdt_1m.length); 70 | expect(result).toHaveLength(6); 71 | }); 72 | 73 | 74 | const candle4h: OHLCV[] = [ 75 | [1588204800000, 215.42830423, 226.35514441, 214.31875445, 225.57612125, 12046.65930005], 76 | [1588219200000, 225.54010584, 227.13385486, 216.3234, 220.36815671, 14595.39307772], 77 | [1588233600000, 220.35179971, 220.805, 202.19405314, 211.74182454, 15729.63045946], 78 | [1588248000000, 211.74, 213.1836997, 206.35780003, 208.22505329, 8436.43548563], 79 | [1588262400000, 208.05120001, 212.68949134, 202.0834746, 211.5, 15277.35560464], 80 | [1588276800000, 211.50302713, 212.29, 205.29320752, 206.35436145, 7487.72388672], 81 | ] 82 | 83 | test("OHLCV Resample - 4h to 1d", () => { 84 | let result = resampleOhlcv(candle4h, { 85 | baseTimeframe: 4 * 60 * 60, 86 | newTimeframe: 24 * 60 * 60 87 | }); 88 | 89 | expect(result[0]).toEqual([ 90 | 1588204800000, 91 | 215.42830423, 92 | 227.13385486, 93 | 202.0834746, 94 | 206.35436145, 95 | 73573.19781422001, 96 | ]); 97 | }); 98 | 99 | const link_btc_1m: Array = [ 100 | { 101 | time: 1563625680000, 102 | open: 0.00024824, 103 | high: 0.00024851, 104 | low: 0.00024798, 105 | close: 0.00024831, 106 | volume: 2264 107 | }, 108 | { 109 | time: 1563625740000, 110 | open: 0.00024817, 111 | high: 0.00024832, 112 | low: 0.00024795, 113 | close: 0.00024828, 114 | volume: 3145 115 | }, 116 | { 117 | time: 1563625800000, 118 | open: 0.00024824, 119 | high: 0.00024831, 120 | low: 0.00024789, 121 | close: 0.00024825, 122 | volume: 2956 123 | }, 124 | { 125 | time: 1563625860000, 126 | open: 0.00024829, 127 | high: 0.00024841, 128 | low: 0.0002479, 129 | close: 0.00024841, 130 | volume: 3742 131 | }, 132 | { 133 | time: 1563625920000, 134 | open: 0.00024831, 135 | high: 0.0002488, 136 | low: 0.00024771, 137 | close: 0.00024843, 138 | volume: 8768 139 | }, 140 | { 141 | time: 1563625980000, 142 | open: 0.00024829, 143 | high: 0.00024868, 144 | low: 0.00024773, 145 | close: 0.00024849, 146 | volume: 7555 147 | }, 148 | { 149 | time: 1563626100000, 150 | open: 0.00024894, 151 | high: 0.00024935, 152 | low: 0.00024873, 153 | close: 0.00024935, 154 | volume: 4309 155 | }, 156 | { 157 | time: 1563626040000, 158 | open: 0.00024857, 159 | high: 0.00024903, 160 | low: 0.00024828, 161 | close: 0.00024903, 162 | volume: 5071 163 | } 164 | ]; 165 | 166 | test("Resample OHLCV in object format - 1m to 2m", () => { 167 | let result = CConverter.json(link_btc_1m, { 168 | baseTimeframe: 60, 169 | newTimeframe: 120 170 | }); 171 | 172 | expect(result[0]).toEqual({ 173 | close: 0.00024828, 174 | high: 0.00024851, 175 | low: 0.00024795, 176 | open: 0.00024824, 177 | time: 1563625680000, 178 | volume: 5409 179 | }); 180 | 181 | expect(result[1]).toEqual({ 182 | close: 0.00024841, 183 | high: 0.00024841, 184 | low: 0.00024789, 185 | open: 0.00024824, 186 | time: 1563625800000, 187 | volume: 6698 188 | }); 189 | }); 190 | -------------------------------------------------------------------------------- /src/lib.ts: -------------------------------------------------------------------------------- 1 | import type { IOHLCV, OHLCV, TradeTick, Trade } from './types'; 2 | import { OHLCVField } from './types'; 3 | 4 | import sum from "lodash/sum"; 5 | import max from "lodash/max"; 6 | import min from "lodash/min"; 7 | import isPlainObject from "lodash/isPlainObject"; 8 | import groupBy from "lodash/groupBy"; 9 | import sortBy from "lodash/sortBy"; 10 | import chunk from "lodash/chunk"; 11 | 12 | /** 13 | * Resample OHLCV to different timeframe 14 | * @param ohlcvData 15 | * @param options 16 | * @param options.baseTimeframe 17 | * @param options.newTimeframe 18 | */ 19 | 20 | export const resampleOhlcv = ( 21 | ohlcvData: OHLCV[] | IOHLCV[], 22 | { baseTimeframe = 60, newTimeframe = 300 }: { baseTimeframe: number, newTimeframe: number } 23 | ): OHLCV[] | IOHLCV[] => { 24 | 25 | if (ohlcvData.length === 0) { 26 | throw new Error("input OHLCV data has no candles"); 27 | } 28 | 29 | if (isPlainObject(ohlcvData[0])) { 30 | const data = ohlcvData as IOHLCV[]; 31 | const candledata: OHLCV[] = data.map(e => [e.time, e.open, e.high, e.low, e.close, e.volume]); 32 | const result = resampleOhlcvArray(candledata, baseTimeframe, newTimeframe); 33 | return result.map(candle => ({ 34 | time: candle[OHLCVField.TIME], 35 | open: candle[OHLCVField.OPEN], 36 | high: candle[OHLCVField.HIGH], 37 | low: candle[OHLCVField.LOW], 38 | close: candle[OHLCVField.CLOSE], 39 | volume: candle[OHLCVField.VOLUME], 40 | })); 41 | } else { 42 | const candledata: OHLCV[] = ohlcvData as OHLCV[]; 43 | return resampleOhlcvArray(candledata, baseTimeframe, newTimeframe); 44 | } 45 | } 46 | 47 | /** 48 | * Resample OHLCV in object format to different timeframe 49 | * @param candledata 50 | * @param baseFrame 51 | * @param newFrame 52 | */ 53 | 54 | export const resampleOhlcvArray = ( 55 | candledata: OHLCV[] | ReadableStream, 56 | baseFrame: number = 60, 57 | newFrame: number = 300 58 | ): OHLCV[] => { 59 | 60 | const result: OHLCV[] = []; 61 | baseFrame *= 1000; 62 | newFrame *= 1000; 63 | 64 | const convertRatio = Math.floor(newFrame / baseFrame); 65 | 66 | if (convertRatio % 1 !== 0) { 67 | throw new Error("Convert ratio should integer an >= 2"); 68 | } 69 | 70 | if (Array.isArray(candledata)) { 71 | if (candledata.length == 0 || candledata.length < convertRatio) { 72 | return result; 73 | } 74 | } else { 75 | throw new Error("Candledata is empty or not an array!"); 76 | } 77 | 78 | // Sort Data to ascending by Time 79 | candledata.sort((a, b) => a[OHLCVField.TIME] - b[OHLCVField.TIME]); 80 | 81 | // Buffer values 82 | let open = 0; 83 | let high = 0; 84 | let close = 0; 85 | let low = 0; 86 | let volume = 0; 87 | let timeOpen = null; 88 | let j = 0; 89 | 90 | for (let i = 0; i < candledata.length; i++) { 91 | const candle = candledata[i]; 92 | 93 | // Type convert 94 | candle[OHLCVField.TIME] = Number(candle[OHLCVField.TIME]); 95 | candle[OHLCVField.OPEN] = Number(candle[OHLCVField.OPEN]); 96 | candle[OHLCVField.HIGH] = Number(candle[OHLCVField.HIGH]); 97 | candle[OHLCVField.LOW] = Number(candle[OHLCVField.LOW]); 98 | candle[OHLCVField.CLOSE] = Number(candle[OHLCVField.CLOSE]); 99 | candle[OHLCVField.VOLUME] = Number(candle[OHLCVField.VOLUME]); 100 | 101 | // First / Force New Candle 102 | if (timeOpen === null) { 103 | timeOpen = candle[OHLCVField.TIME]; 104 | 105 | if (candle[OHLCVField.TIME] % newFrame > 0) { 106 | timeOpen = candle[OHLCVField.TIME] - candle[OHLCVField.TIME] % newFrame; 107 | } 108 | 109 | open = candle[OHLCVField.OPEN]; 110 | high = candle[OHLCVField.HIGH]; 111 | low = candle[OHLCVField.LOW]; 112 | close = candle[OHLCVField.CLOSE]; 113 | volume = 0; 114 | j = 1; 115 | } 116 | 117 | // New Candle 118 | if (candle[OHLCVField.TIME] - candle[OHLCVField.TIME] % newFrame !== timeOpen) { 119 | 120 | result.push([timeOpen, open, high, low, close, volume]); 121 | 122 | timeOpen = candle[OHLCVField.TIME] - candle[OHLCVField.TIME] % newFrame; 123 | open = candle[OHLCVField.OPEN]; 124 | high = candle[OHLCVField.HIGH]; 125 | low = candle[OHLCVField.LOW]; 126 | close = candle[OHLCVField.CLOSE]; 127 | volume = 0; 128 | j = 1; 129 | } 130 | 131 | high = Math.max(candle[OHLCVField.HIGH], high); 132 | low = Math.min(candle[OHLCVField.LOW], low); 133 | close = candle[OHLCVField.CLOSE]; 134 | volume = volume + candle[OHLCVField.VOLUME]; 135 | 136 | // Batch counter 137 | if (j === convertRatio) { 138 | result.push([timeOpen, open, high, low, close, volume]); 139 | timeOpen = null; 140 | } 141 | 142 | j = j + 1; 143 | } 144 | 145 | return result; 146 | } 147 | 148 | /** 149 | * Aggregate group of ticks to one OHLCV object 150 | * @param time 151 | * @param ticks 152 | */ 153 | 154 | export const tickGroupToOhlcv = ( 155 | time: number, 156 | ticks: Array 157 | ) => { 158 | 159 | const prices = ticks.map(tick => Number(tick.price)); 160 | const volume = sum(ticks.map(tick => Number(tick.quantity))) || 0; 161 | return { 162 | time, 163 | open: prices[0] || 0, 164 | high: max(prices) || 0, 165 | low: min(prices) || 0, 166 | close: prices[prices.length - 1] || 0, 167 | volume 168 | } 169 | } 170 | 171 | /** 172 | * Make gap candles from boundary candles if needed 173 | * @param lastCandle 174 | * @param nextCandle 175 | * @param options 176 | * @param options.method 177 | * @param options.msTimeframe 178 | */ 179 | 180 | export const makeGapCandles = ( 181 | lastCandle: IOHLCV, 182 | nextCandle: IOHLCV, 183 | { method, msTimeframe }: { method?: string, msTimeframe: number } 184 | ): IOHLCV[] => { 185 | 186 | const gapCandles = []; 187 | const intervalGap = (nextCandle.time - lastCandle.time - msTimeframe) / msTimeframe; 188 | if (intervalGap > 0 && lastCandle && nextCandle) { 189 | for (let i = 1; i <= intervalGap; i++) { 190 | gapCandles.push({ 191 | time: lastCandle.time + (i * msTimeframe), 192 | open: lastCandle.close, 193 | high: lastCandle.close, 194 | low: lastCandle.close, 195 | close: lastCandle.close, 196 | volume: 0 197 | }); 198 | } 199 | } 200 | return gapCandles; 201 | } 202 | 203 | /** 204 | * Convert ticks for candles grouped by intervals in seconds or tick count 205 | * @param tickData 206 | * @param options 207 | * @param options.timeframe 208 | * @param options.includeLatestCandle 209 | * @param options.fillGaps 210 | */ 211 | 212 | export const resampleTicksByTime = ( 213 | tickData: Trade[], 214 | { timeframe = 60, includeLatestCandle = true, fillGaps = false }: 215 | { timeframe?: number, includeLatestCandle?: boolean, fillGaps?: boolean } = {} 216 | ): IOHLCV[] => { 217 | 218 | timeframe *= Math.floor(1000); 219 | const tickGroups = groupBy(tickData, (tick) => tick.time - (tick.time % timeframe)); 220 | const candles: IOHLCV[] = []; 221 | Object.keys(tickGroups).forEach(timeOpen => { 222 | const ticks = tickGroups[timeOpen]; 223 | const candle = tickGroupToOhlcv(Number(timeOpen), ticks); 224 | if (fillGaps && candles.length) { 225 | const lastCandle = candles[candles.length - 1]; 226 | candles.push(...makeGapCandles(lastCandle, candle, { msTimeframe: timeframe })); 227 | } 228 | candles.push(candle); 229 | }); 230 | const sortedCandles = sortBy(candles, (candle) => candle.time); 231 | 232 | if (includeLatestCandle === false) { 233 | sortedCandles.pop(); 234 | } 235 | return sortedCandles; 236 | } 237 | 238 | /** 239 | * Covert ticks to candles by linear groups 240 | * @param tickData 241 | * @param options 242 | * @param options.tickCount 243 | */ 244 | 245 | export const resampleTicksByCount = (tickData: Trade[], 246 | { tickCount = 5 }: { tickCount?: number } = {} 247 | ): IOHLCV[] => { 248 | 249 | if (tickCount < 1) { 250 | throw new Error("Convert cannot be smaller than 1"); 251 | } 252 | const candles: IOHLCV[] = []; 253 | const tickGroups = chunk(tickData, tickCount); 254 | tickGroups.forEach(ticks => { 255 | candles.push(tickGroupToOhlcv(Number(ticks[ticks.length - 1].time), ticks)); 256 | }); 257 | return candles; 258 | } 259 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /__tests__/ticks.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import Converter from "../src/index"; 4 | import type { Trade } from "../src/types"; 5 | 6 | const adabnb_trades = [ 7 | { 8 | time: "1564502620356", 9 | side: "sell", 10 | quantity: "4458", 11 | price: "0.00224", 12 | tradeId: "1221272" 13 | }, 14 | { 15 | time: "1564503133949", 16 | side: "sell", 17 | quantity: "3480", 18 | price: "0.002242", 19 | tradeId: "1221273" 20 | }, 21 | { 22 | time: "1564503134553", 23 | side: "buy", 24 | quantity: "51", 25 | price: "0.002248", 26 | tradeId: "1221274" 27 | }, 28 | { 29 | time: "1564503137460", 30 | side: "buy", 31 | quantity: "52", 32 | price: "0.002248", 33 | tradeId: "1221275" 34 | }, 35 | { 36 | time: "1564503137490", 37 | side: "sell", 38 | quantity: "1366", 39 | price: "0.002248", 40 | tradeId: "1221276" 41 | }, 42 | { 43 | time: "1564503320756", 44 | side: "sell", 45 | quantity: "16991", 46 | price: "0.002244", 47 | tradeId: "1221277" 48 | }, 49 | { 50 | time: "1564503321803", 51 | side: "sell", 52 | quantity: "2164", 53 | price: "0.002244", 54 | tradeId: "1221278" 55 | }, 56 | { 57 | time: "1564503324289", 58 | side: "sell", 59 | quantity: "1966", 60 | price: "0.002243", 61 | tradeId: "1221279" 62 | }, 63 | { 64 | time: "1564503456291", 65 | side: "buy", 66 | quantity: "5277", 67 | price: "0.002249", 68 | tradeId: "1221280" 69 | }, 70 | { 71 | time: "1564503468749", 72 | side: "buy", 73 | quantity: "1169", 74 | price: "0.002248", 75 | tradeId: "1221281" 76 | }, 77 | { 78 | time: "1564503547676", 79 | side: "buy", 80 | quantity: "652", 81 | price: "0.00225", 82 | tradeId: "1221282" 83 | }, 84 | { 85 | time: "1564503891110", 86 | side: "sell", 87 | quantity: "712", 88 | price: "0.002245", 89 | tradeId: "1221283" 90 | }, 91 | { 92 | time: "1564504355614", 93 | side: "buy", 94 | quantity: "327", 95 | price: "0.00225", 96 | tradeId: "1221284" 97 | }, 98 | { 99 | time: "1564504451680", 100 | side: "buy", 101 | quantity: "1055", 102 | price: "0.00225", 103 | tradeId: "1221285" 104 | }, 105 | { 106 | time: "1564504631987", 107 | side: "sell", 108 | quantity: "1522", 109 | price: "0.002247", 110 | tradeId: "1221286" 111 | }, 112 | { 113 | time: "1564504713188", 114 | side: "sell", 115 | quantity: "79", 116 | price: "0.002246", 117 | tradeId: "1221287" 118 | }, 119 | { 120 | time: "1564504713223", 121 | side: "buy", 122 | quantity: "1160", 123 | price: "0.002246", 124 | tradeId: "1221288" 125 | }, 126 | { 127 | time: "1564504713227", 128 | side: "buy", 129 | quantity: "1623", 130 | price: "0.002246", 131 | tradeId: "1221289" 132 | }, 133 | { 134 | time: "1564504724336", 135 | side: "buy", 136 | quantity: "89", 137 | price: "0.002246", 138 | tradeId: "1221290" 139 | }, 140 | { 141 | time: "1564504753820", 142 | side: "buy", 143 | quantity: "269", 144 | price: "0.002246", 145 | tradeId: "1221291" 146 | }, 147 | { 148 | time: "1564504794001", 149 | side: "sell", 150 | quantity: "1781", 151 | price: "0.002245", 152 | tradeId: "1221292" 153 | }, 154 | { 155 | time: "1564505361033", 156 | side: "sell", 157 | quantity: "218", 158 | price: "0.002246", 159 | tradeId: "1221293" 160 | }, 161 | { 162 | time: "1564505487939", 163 | side: "buy", 164 | quantity: "60", 165 | price: "0.002251", 166 | tradeId: "1221294" 167 | }, 168 | { 169 | time: "1564505490350", 170 | side: "sell", 171 | quantity: "224", 172 | price: "0.002251", 173 | tradeId: "1221295" 174 | }, 175 | { 176 | time: "1564505762661", 177 | side: "buy", 178 | quantity: "1054", 179 | price: "0.002251", 180 | tradeId: "1221296" 181 | }, 182 | { 183 | time: "1564505771404", 184 | side: "buy", 185 | quantity: "5519", 186 | price: "0.002251", 187 | tradeId: "1221297" 188 | }, 189 | { 190 | time: "1564506180490", 191 | side: "sell", 192 | quantity: "238", 193 | price: "0.002241", 194 | tradeId: "1221298" 195 | }, 196 | { 197 | time: "1564506627951", 198 | side: "sell", 199 | quantity: "7249", 200 | price: "0.00224", 201 | tradeId: "1221299" 202 | }, 203 | { 204 | time: "1564506666840", 205 | side: "sell", 206 | quantity: "60", 207 | price: "0.002239", 208 | tradeId: "1221300" 209 | }, 210 | { 211 | time: "1564506666840", 212 | side: "sell", 213 | quantity: "7443", 214 | price: "0.002238", 215 | tradeId: "1221301" 216 | }, 217 | { 218 | time: "1564506666866", 219 | side: "buy", 220 | quantity: "724", 221 | price: "0.002237", 222 | tradeId: "1221302" 223 | }, 224 | { 225 | time: "1564507605470", 226 | side: "sell", 227 | quantity: "706", 228 | price: "0.002244", 229 | tradeId: "1221303" 230 | }, 231 | { 232 | time: "1564508193610", 233 | side: "buy", 234 | quantity: "1621", 235 | price: "0.00225", 236 | tradeId: "1221304" 237 | }, 238 | { 239 | time: "1564508200723", 240 | side: "buy", 241 | quantity: "533", 242 | price: "0.00225", 243 | tradeId: "1221305" 244 | }, 245 | { 246 | time: "1564508212153", 247 | side: "sell", 248 | quantity: "4322", 249 | price: "0.002248", 250 | tradeId: "1221306" 251 | }, 252 | { 253 | time: "1564508212158", 254 | side: "sell", 255 | quantity: "6239", 256 | price: "0.002248", 257 | tradeId: "1221307" 258 | }, 259 | { 260 | time: "1564508212163", 261 | side: "sell", 262 | quantity: "2784", 263 | price: "0.002248", 264 | tradeId: "1221308" 265 | }, 266 | { 267 | time: "1564508495720", 268 | side: "buy", 269 | quantity: "5150", 270 | price: "0.002246", 271 | tradeId: "1221309" 272 | }, 273 | { 274 | time: "1564508495720", 275 | side: "buy", 276 | quantity: "7328", 277 | price: "0.002247", 278 | tradeId: "1221310" 279 | }, 280 | { 281 | time: "1564508585720", 282 | side: "buy", 283 | quantity: "120", 284 | price: "0.002245", 285 | tradeId: "1221311" 286 | }, 287 | { 288 | time: "1564508625642", 289 | side: "buy", 290 | quantity: "200", 291 | price: "0.002249", 292 | tradeId: "1221312" 293 | }, 294 | { 295 | time: "1564509238524", 296 | side: "buy", 297 | quantity: "60", 298 | price: "0.002251", 299 | tradeId: "1221313" 300 | }, 301 | { 302 | time: "1564509271956", 303 | side: "buy", 304 | quantity: "55", 305 | price: "0.002254", 306 | tradeId: "1221314" 307 | }, 308 | { 309 | time: "1564509333026", 310 | side: "buy", 311 | quantity: "1407", 312 | price: "0.002254", 313 | tradeId: "1221315" 314 | }, 315 | { 316 | time: "1564509465425", 317 | side: "sell", 318 | quantity: "3097", 319 | price: "0.002246", 320 | tradeId: "1221317" 321 | }, 322 | { 323 | time: "1564509465425", 324 | side: "sell", 325 | quantity: "1903", 326 | price: "0.00225", 327 | tradeId: "1221316" 328 | }, 329 | { 330 | time: "1564509510570", 331 | side: "sell", 332 | quantity: "2485", 333 | price: "0.002247", 334 | tradeId: "1221318" 335 | }, 336 | { 337 | time: "1564509510570", 338 | side: "sell", 339 | quantity: "2515", 340 | price: "0.002246", 341 | tradeId: "1221319" 342 | }, 343 | { 344 | time: "1564509559380", 345 | side: "sell", 346 | quantity: "3645", 347 | price: "0.002251", 348 | tradeId: "1221320" 349 | }, 350 | { 351 | time: "1564509559380", 352 | side: "sell", 353 | quantity: "6513", 354 | price: "0.002249", 355 | tradeId: "1221321" 356 | }, 357 | { 358 | time: "1564509797843", 359 | side: "buy", 360 | quantity: "50", 361 | price: "0.002254", 362 | tradeId: "1221322" 363 | } 364 | ]; 365 | 366 | const filtered_adabnb_trades: Trade[] = adabnb_trades.map((trade: any) => ({ 367 | time: trade.time, 368 | quantity: trade.quantity, 369 | price: trade.price 370 | })); 371 | 372 | test("Tick Chart Convert 5 tick", () => { 373 | let result = Converter.tick_chart(filtered_adabnb_trades, { 374 | tickCount: 5 375 | }); 376 | 377 | expect(result[0]).toEqual({ 378 | time: 1564503137490, 379 | open: 0.00224, 380 | high: 0.002248, 381 | low: 0.00224, 382 | close: 0.002248, 383 | volume: 9407 384 | }); 385 | }); 386 | 387 | test("Resample ticks / trades to OHLCV", () => { 388 | let result = Converter.trade_to_candle(filtered_adabnb_trades, { 389 | timeframe: 60, 390 | includeLatestCandle: false 391 | }); 392 | 393 | expect(result[0]).toEqual({ 394 | time: 1564502580000, // 2019-07-30T16:03:00.000Z 395 | open: 0.00224, 396 | high: 0.00224, 397 | low: 0.00224, 398 | close: 0.00224, 399 | volume: 4458 400 | }); 401 | 402 | // 27 candles, without open (unfinished) candle 403 | expect(result.length).toBe(27); 404 | 405 | expect(result[26].time).toEqual(1564509540000); // 2019-07-30T17:59:00.000Z 406 | }); 407 | 408 | test("Resample ticks / trades to OHLCV – including open candle", () => { 409 | let result = Converter.trade_to_candle(filtered_adabnb_trades, { 410 | timeframe: 60 411 | }); 412 | 413 | // 27+1 candles, including open (unfinished) candle 414 | expect(result.length).toBe(28); 415 | 416 | expect(result[27].time).toEqual(1564509780000); // 2019-07-30T18:03:00.000Z 417 | }); 418 | 419 | test("Resample ticks / trades to OHLCV - with gaps filled", () => { 420 | let result = Converter.trade_to_candle(filtered_adabnb_trades, { 421 | timeframe: 60, 422 | fillGaps: true 423 | }); 424 | 425 | const first = result[0]; 426 | 427 | // 2 hours + 1 minute candles, including open (unfinished) candle 428 | expect(result.length).toBe(121); 429 | expect(result[2]).toEqual({ 430 | time: first.time + (60*1000*2), 431 | open: first.close, 432 | high: first.close, 433 | low: first.close, 434 | close: first.close, 435 | volume: 0 436 | }); 437 | }); -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | commander: 12 | specifier: ^14.0.0 13 | version: 14.0.0 14 | fast-csv: 15 | specifier: ^5.0.2 16 | version: 5.0.2 17 | lodash: 18 | specifier: ^4.17.21 19 | version: 4.17.21 20 | ts-node: 21 | specifier: ^10.9.2 22 | version: 10.9.2(@types/node@24.0.1)(typescript@5.8.3) 23 | devDependencies: 24 | '@types/jest': 25 | specifier: ^29.5.14 26 | version: 29.5.14 27 | '@types/lodash': 28 | specifier: ^4.14.173 29 | version: 4.17.17 30 | coveralls: 31 | specifier: ^3.1.1 32 | version: 3.1.1 33 | jest: 34 | specifier: ^30.0.0 35 | version: 30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 36 | rimraf: 37 | specifier: ^6.0.1 38 | version: 6.0.1 39 | ts-jest: 40 | specifier: ^29.4.0 41 | version: 29.4.0(@babel/core@7.27.4)(@jest/transform@30.0.0)(@jest/types@30.0.0)(babel-jest@30.0.0(@babel/core@7.27.4))(jest-util@30.0.0)(jest@30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)))(typescript@5.8.3) 42 | typescript: 43 | specifier: ^5.8.3 44 | version: 5.8.3 45 | 46 | packages: 47 | 48 | '@ampproject/remapping@2.3.0': 49 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 50 | engines: {node: '>=6.0.0'} 51 | 52 | '@babel/code-frame@7.27.1': 53 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 54 | engines: {node: '>=6.9.0'} 55 | 56 | '@babel/compat-data@7.27.5': 57 | resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/core@7.27.4': 61 | resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} 62 | engines: {node: '>=6.9.0'} 63 | 64 | '@babel/generator@7.27.5': 65 | resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} 66 | engines: {node: '>=6.9.0'} 67 | 68 | '@babel/helper-compilation-targets@7.27.2': 69 | resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 70 | engines: {node: '>=6.9.0'} 71 | 72 | '@babel/helper-module-imports@7.27.1': 73 | resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 74 | engines: {node: '>=6.9.0'} 75 | 76 | '@babel/helper-module-transforms@7.27.3': 77 | resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} 78 | engines: {node: '>=6.9.0'} 79 | peerDependencies: 80 | '@babel/core': ^7.0.0 81 | 82 | '@babel/helper-plugin-utils@7.27.1': 83 | resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 84 | engines: {node: '>=6.9.0'} 85 | 86 | '@babel/helper-string-parser@7.27.1': 87 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 88 | engines: {node: '>=6.9.0'} 89 | 90 | '@babel/helper-validator-identifier@7.27.1': 91 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 92 | engines: {node: '>=6.9.0'} 93 | 94 | '@babel/helper-validator-option@7.27.1': 95 | resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 96 | engines: {node: '>=6.9.0'} 97 | 98 | '@babel/helpers@7.27.6': 99 | resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} 100 | engines: {node: '>=6.9.0'} 101 | 102 | '@babel/parser@7.27.5': 103 | resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} 104 | engines: {node: '>=6.0.0'} 105 | hasBin: true 106 | 107 | '@babel/plugin-syntax-async-generators@7.8.4': 108 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 109 | peerDependencies: 110 | '@babel/core': ^7.0.0-0 111 | 112 | '@babel/plugin-syntax-bigint@7.8.3': 113 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 114 | peerDependencies: 115 | '@babel/core': ^7.0.0-0 116 | 117 | '@babel/plugin-syntax-class-properties@7.12.13': 118 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 119 | peerDependencies: 120 | '@babel/core': ^7.0.0-0 121 | 122 | '@babel/plugin-syntax-class-static-block@7.14.5': 123 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 124 | engines: {node: '>=6.9.0'} 125 | peerDependencies: 126 | '@babel/core': ^7.0.0-0 127 | 128 | '@babel/plugin-syntax-import-attributes@7.27.1': 129 | resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} 130 | engines: {node: '>=6.9.0'} 131 | peerDependencies: 132 | '@babel/core': ^7.0.0-0 133 | 134 | '@babel/plugin-syntax-import-meta@7.10.4': 135 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 136 | peerDependencies: 137 | '@babel/core': ^7.0.0-0 138 | 139 | '@babel/plugin-syntax-json-strings@7.8.3': 140 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 141 | peerDependencies: 142 | '@babel/core': ^7.0.0-0 143 | 144 | '@babel/plugin-syntax-jsx@7.27.1': 145 | resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} 146 | engines: {node: '>=6.9.0'} 147 | peerDependencies: 148 | '@babel/core': ^7.0.0-0 149 | 150 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4': 151 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 152 | peerDependencies: 153 | '@babel/core': ^7.0.0-0 154 | 155 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': 156 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 157 | peerDependencies: 158 | '@babel/core': ^7.0.0-0 159 | 160 | '@babel/plugin-syntax-numeric-separator@7.10.4': 161 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 162 | peerDependencies: 163 | '@babel/core': ^7.0.0-0 164 | 165 | '@babel/plugin-syntax-object-rest-spread@7.8.3': 166 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 167 | peerDependencies: 168 | '@babel/core': ^7.0.0-0 169 | 170 | '@babel/plugin-syntax-optional-catch-binding@7.8.3': 171 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 172 | peerDependencies: 173 | '@babel/core': ^7.0.0-0 174 | 175 | '@babel/plugin-syntax-optional-chaining@7.8.3': 176 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 177 | peerDependencies: 178 | '@babel/core': ^7.0.0-0 179 | 180 | '@babel/plugin-syntax-private-property-in-object@7.14.5': 181 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 182 | engines: {node: '>=6.9.0'} 183 | peerDependencies: 184 | '@babel/core': ^7.0.0-0 185 | 186 | '@babel/plugin-syntax-top-level-await@7.14.5': 187 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 188 | engines: {node: '>=6.9.0'} 189 | peerDependencies: 190 | '@babel/core': ^7.0.0-0 191 | 192 | '@babel/plugin-syntax-typescript@7.27.1': 193 | resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} 194 | engines: {node: '>=6.9.0'} 195 | peerDependencies: 196 | '@babel/core': ^7.0.0-0 197 | 198 | '@babel/template@7.27.2': 199 | resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 200 | engines: {node: '>=6.9.0'} 201 | 202 | '@babel/traverse@7.27.4': 203 | resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} 204 | engines: {node: '>=6.9.0'} 205 | 206 | '@babel/types@7.27.6': 207 | resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} 208 | engines: {node: '>=6.9.0'} 209 | 210 | '@bcoe/v8-coverage@0.2.3': 211 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 212 | 213 | '@cspotcode/source-map-support@0.8.1': 214 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 215 | engines: {node: '>=12'} 216 | 217 | '@emnapi/core@1.4.3': 218 | resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} 219 | 220 | '@emnapi/runtime@1.4.3': 221 | resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} 222 | 223 | '@emnapi/wasi-threads@1.0.2': 224 | resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} 225 | 226 | '@fast-csv/format@5.0.2': 227 | resolution: {integrity: sha512-fRYcWvI8vs0Zxa/8fXd/QlmQYWWkJqKZPAXM+vksnplb3owQFKTPPh9JqOtD0L3flQw/AZjjXdPkD7Kp/uHm8g==} 228 | 229 | '@fast-csv/parse@5.0.2': 230 | resolution: {integrity: sha512-gMu1Btmm99TP+wc0tZnlH30E/F1Gw1Tah3oMDBHNPe9W8S68ixVHjt89Wg5lh7d9RuQMtwN+sGl5kxR891+fzw==} 231 | 232 | '@isaacs/balanced-match@4.0.1': 233 | resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} 234 | engines: {node: 20 || >=22} 235 | 236 | '@isaacs/brace-expansion@5.0.0': 237 | resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} 238 | engines: {node: 20 || >=22} 239 | 240 | '@isaacs/cliui@8.0.2': 241 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 242 | engines: {node: '>=12'} 243 | 244 | '@istanbuljs/load-nyc-config@1.1.0': 245 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 246 | engines: {node: '>=8'} 247 | 248 | '@istanbuljs/schema@0.1.3': 249 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 250 | engines: {node: '>=8'} 251 | 252 | '@jest/console@30.0.0': 253 | resolution: {integrity: sha512-vfpJap6JZQ3I8sUN8dsFqNAKJYO4KIGxkcB+3Fw7Q/BJiWY5HwtMMiuT1oP0avsiDhjE/TCLaDgbGfHwDdBVeg==} 254 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 255 | 256 | '@jest/core@30.0.0': 257 | resolution: {integrity: sha512-1zU39zFtWSl5ZuDK3Rd6P8S28MmS4F11x6Z4CURrgJ99iaAJg68hmdJ2SAHEEO6ociaNk43UhUYtHxWKEWoNYw==} 258 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 259 | peerDependencies: 260 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 261 | peerDependenciesMeta: 262 | node-notifier: 263 | optional: true 264 | 265 | '@jest/diff-sequences@30.0.0': 266 | resolution: {integrity: sha512-xMbtoCeKJDto86GW6AiwVv7M4QAuI56R7dVBr1RNGYbOT44M2TIzOiske2RxopBqkumDY+A1H55pGvuribRY9A==} 267 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 268 | 269 | '@jest/environment@30.0.0': 270 | resolution: {integrity: sha512-09sFbMMgS5JxYnvgmmtwIHhvoyzvR5fUPrVl8nOCrC5KdzmmErTcAxfWyAhJ2bv3rvHNQaKiS+COSG+O7oNbXw==} 271 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 272 | 273 | '@jest/expect-utils@29.7.0': 274 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 275 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 276 | 277 | '@jest/expect-utils@30.0.0': 278 | resolution: {integrity: sha512-UiWfsqNi/+d7xepfOv8KDcbbzcYtkWBe3a3kVDtg6M1kuN6CJ7b4HzIp5e1YHrSaQaVS8sdCoyCMCZClTLNKFQ==} 279 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 280 | 281 | '@jest/expect@30.0.0': 282 | resolution: {integrity: sha512-XZ3j6syhMeKiBknmmc8V3mNIb44kxLTbOQtaXA4IFdHy+vEN0cnXRzbRjdGBtrp4k1PWyMWNU3Fjz3iejrhpQg==} 283 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 284 | 285 | '@jest/fake-timers@30.0.0': 286 | resolution: {integrity: sha512-yzBmJcrMHAMcAEbV2w1kbxmx8WFpEz8Cth3wjLMSkq+LO8VeGKRhpr5+BUp7PPK+x4njq/b6mVnDR8e/tPL5ng==} 287 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 288 | 289 | '@jest/get-type@30.0.0': 290 | resolution: {integrity: sha512-VZWMjrBzqfDKngQ7sUctKeLxanAbsBFoZnPxNIG6CmxK7Gv6K44yqd0nzveNIBfuhGZMmk1n5PGbvdSTOu0yTg==} 291 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 292 | 293 | '@jest/globals@30.0.0': 294 | resolution: {integrity: sha512-OEzYes5A1xwBJVMPqFRa8NCao8Vr42nsUZuf/SpaJWoLE+4kyl6nCQZ1zqfipmCrIXQVALC5qJwKy/7NQQLPhw==} 295 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 296 | 297 | '@jest/pattern@30.0.0': 298 | resolution: {integrity: sha512-k+TpEThzLVXMkbdxf8KHjZ83Wl+G54ytVJoDIGWwS96Ql4xyASRjc6SU1hs5jHVql+hpyK9G8N7WuFhLpGHRpQ==} 299 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 300 | 301 | '@jest/reporters@30.0.0': 302 | resolution: {integrity: sha512-5WHNlLO0Ok+/o6ML5IzgVm1qyERtLHBNhwn67PAq92H4hZ+n5uW/BYj1VVwmTdxIcNrZLxdV9qtpdZkXf16HxA==} 303 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 304 | peerDependencies: 305 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 306 | peerDependenciesMeta: 307 | node-notifier: 308 | optional: true 309 | 310 | '@jest/schemas@29.6.3': 311 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 312 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 313 | 314 | '@jest/schemas@30.0.0': 315 | resolution: {integrity: sha512-NID2VRyaEkevCRz6badhfqYwri/RvMbiHY81rk3AkK/LaiB0LSxi1RdVZ7MpZdTjNugtZeGfpL0mLs9Kp3MrQw==} 316 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 317 | 318 | '@jest/snapshot-utils@30.0.0': 319 | resolution: {integrity: sha512-C/QSFUmvZEYptg2Vin84FggAphwHvj6la39vkw1CNOZQORWZ7O/H0BXmdeeeGnvlXDYY8TlFM5jgFnxLAxpFjA==} 320 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 321 | 322 | '@jest/source-map@30.0.0': 323 | resolution: {integrity: sha512-oYBJ4d/NF4ZY3/7iq1VaeoERHRvlwKtrGClgescaXMIa1mmb+vfJd0xMgbW9yrI80IUA7qGbxpBWxlITrHkWoA==} 324 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 325 | 326 | '@jest/test-result@30.0.0': 327 | resolution: {integrity: sha512-685zco9HdgBaaWiB9T4xjLtBuN0Q795wgaQPpmuAeZPHwHZSoKFAUnozUtU+ongfi4l5VCz8AclOE5LAQdyjxQ==} 328 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 329 | 330 | '@jest/test-sequencer@30.0.0': 331 | resolution: {integrity: sha512-Hmvv5Yg6UmghXIcVZIydkT0nAK7M/hlXx9WMHR5cLVwdmc14/qUQt3mC72T6GN0olPC6DhmKE6Cd/pHsgDbuqQ==} 332 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 333 | 334 | '@jest/transform@30.0.0': 335 | resolution: {integrity: sha512-8xhpsCGYJsUjqpJOgLyMkeOSSlhqggFZEWAnZquBsvATtueoEs7CkMRxOUmJliF3E5x+mXmZ7gEEsHank029Og==} 336 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 337 | 338 | '@jest/types@29.6.3': 339 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 340 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 341 | 342 | '@jest/types@30.0.0': 343 | resolution: {integrity: sha512-1Nox8mAL52PKPfEnUQWBvKU/bp8FTT6AiDu76bFDEJj/qsRFSAVSldfCH3XYMqialti2zHXKvD5gN0AaHc0yKA==} 344 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 345 | 346 | '@jridgewell/gen-mapping@0.3.8': 347 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 348 | engines: {node: '>=6.0.0'} 349 | 350 | '@jridgewell/resolve-uri@3.1.2': 351 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 352 | engines: {node: '>=6.0.0'} 353 | 354 | '@jridgewell/set-array@1.2.1': 355 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 356 | engines: {node: '>=6.0.0'} 357 | 358 | '@jridgewell/sourcemap-codec@1.5.0': 359 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 360 | 361 | '@jridgewell/trace-mapping@0.3.25': 362 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 363 | 364 | '@jridgewell/trace-mapping@0.3.9': 365 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 366 | 367 | '@napi-rs/wasm-runtime@0.2.11': 368 | resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} 369 | 370 | '@pkgjs/parseargs@0.11.0': 371 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 372 | engines: {node: '>=14'} 373 | 374 | '@pkgr/core@0.2.7': 375 | resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} 376 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 377 | 378 | '@sinclair/typebox@0.27.8': 379 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 380 | 381 | '@sinclair/typebox@0.34.35': 382 | resolution: {integrity: sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==} 383 | 384 | '@sinonjs/commons@3.0.1': 385 | resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} 386 | 387 | '@sinonjs/fake-timers@13.0.5': 388 | resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} 389 | 390 | '@tsconfig/node10@1.0.11': 391 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 392 | 393 | '@tsconfig/node12@1.0.11': 394 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 395 | 396 | '@tsconfig/node14@1.0.3': 397 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 398 | 399 | '@tsconfig/node16@1.0.4': 400 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 401 | 402 | '@tybys/wasm-util@0.9.0': 403 | resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} 404 | 405 | '@types/babel__core@7.20.5': 406 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 407 | 408 | '@types/babel__generator@7.27.0': 409 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 410 | 411 | '@types/babel__template@7.4.4': 412 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 413 | 414 | '@types/babel__traverse@7.20.7': 415 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 416 | 417 | '@types/istanbul-lib-coverage@2.0.6': 418 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 419 | 420 | '@types/istanbul-lib-report@3.0.3': 421 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 422 | 423 | '@types/istanbul-reports@3.0.4': 424 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 425 | 426 | '@types/jest@29.5.14': 427 | resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} 428 | 429 | '@types/lodash@4.17.17': 430 | resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} 431 | 432 | '@types/node@24.0.1': 433 | resolution: {integrity: sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==} 434 | 435 | '@types/stack-utils@2.0.3': 436 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 437 | 438 | '@types/yargs-parser@21.0.3': 439 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 440 | 441 | '@types/yargs@17.0.33': 442 | resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} 443 | 444 | '@ungap/structured-clone@1.3.0': 445 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 446 | 447 | '@unrs/resolver-binding-android-arm-eabi@1.9.0': 448 | resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} 449 | cpu: [arm] 450 | os: [android] 451 | 452 | '@unrs/resolver-binding-android-arm64@1.9.0': 453 | resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} 454 | cpu: [arm64] 455 | os: [android] 456 | 457 | '@unrs/resolver-binding-darwin-arm64@1.9.0': 458 | resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} 459 | cpu: [arm64] 460 | os: [darwin] 461 | 462 | '@unrs/resolver-binding-darwin-x64@1.9.0': 463 | resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} 464 | cpu: [x64] 465 | os: [darwin] 466 | 467 | '@unrs/resolver-binding-freebsd-x64@1.9.0': 468 | resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} 469 | cpu: [x64] 470 | os: [freebsd] 471 | 472 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': 473 | resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} 474 | cpu: [arm] 475 | os: [linux] 476 | 477 | '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': 478 | resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} 479 | cpu: [arm] 480 | os: [linux] 481 | 482 | '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': 483 | resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} 484 | cpu: [arm64] 485 | os: [linux] 486 | 487 | '@unrs/resolver-binding-linux-arm64-musl@1.9.0': 488 | resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} 489 | cpu: [arm64] 490 | os: [linux] 491 | 492 | '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': 493 | resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} 494 | cpu: [ppc64] 495 | os: [linux] 496 | 497 | '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': 498 | resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} 499 | cpu: [riscv64] 500 | os: [linux] 501 | 502 | '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': 503 | resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} 504 | cpu: [riscv64] 505 | os: [linux] 506 | 507 | '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': 508 | resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} 509 | cpu: [s390x] 510 | os: [linux] 511 | 512 | '@unrs/resolver-binding-linux-x64-gnu@1.9.0': 513 | resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} 514 | cpu: [x64] 515 | os: [linux] 516 | 517 | '@unrs/resolver-binding-linux-x64-musl@1.9.0': 518 | resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} 519 | cpu: [x64] 520 | os: [linux] 521 | 522 | '@unrs/resolver-binding-wasm32-wasi@1.9.0': 523 | resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} 524 | engines: {node: '>=14.0.0'} 525 | cpu: [wasm32] 526 | 527 | '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': 528 | resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} 529 | cpu: [arm64] 530 | os: [win32] 531 | 532 | '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': 533 | resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} 534 | cpu: [ia32] 535 | os: [win32] 536 | 537 | '@unrs/resolver-binding-win32-x64-msvc@1.9.0': 538 | resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} 539 | cpu: [x64] 540 | os: [win32] 541 | 542 | acorn-walk@8.3.4: 543 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 544 | engines: {node: '>=0.4.0'} 545 | 546 | acorn@8.15.0: 547 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 548 | engines: {node: '>=0.4.0'} 549 | hasBin: true 550 | 551 | ajv@6.12.6: 552 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 553 | 554 | ansi-escapes@4.3.2: 555 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 556 | engines: {node: '>=8'} 557 | 558 | ansi-regex@5.0.1: 559 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 560 | engines: {node: '>=8'} 561 | 562 | ansi-regex@6.1.0: 563 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 564 | engines: {node: '>=12'} 565 | 566 | ansi-styles@4.3.0: 567 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 568 | engines: {node: '>=8'} 569 | 570 | ansi-styles@5.2.0: 571 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 572 | engines: {node: '>=10'} 573 | 574 | ansi-styles@6.2.1: 575 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 576 | engines: {node: '>=12'} 577 | 578 | anymatch@3.1.3: 579 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 580 | engines: {node: '>= 8'} 581 | 582 | arg@4.1.3: 583 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 584 | 585 | argparse@1.0.10: 586 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 587 | 588 | asn1@0.2.6: 589 | resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} 590 | 591 | assert-plus@1.0.0: 592 | resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} 593 | engines: {node: '>=0.8'} 594 | 595 | async@3.2.6: 596 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 597 | 598 | asynckit@0.4.0: 599 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 600 | 601 | aws-sign2@0.7.0: 602 | resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} 603 | 604 | aws4@1.13.2: 605 | resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} 606 | 607 | babel-jest@30.0.0: 608 | resolution: {integrity: sha512-JQ0DhdFjODbSawDf0026uZuwaqfKkQzk+9mwWkq2XkKFIaMhFVOxlVmbFCOnnC76jATdxrff3IiUAvOAJec6tw==} 609 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 610 | peerDependencies: 611 | '@babel/core': ^7.11.0 612 | 613 | babel-plugin-istanbul@7.0.0: 614 | resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} 615 | engines: {node: '>=12'} 616 | 617 | babel-plugin-jest-hoist@30.0.0: 618 | resolution: {integrity: sha512-DSRm+US/FCB4xPDD6Rnslb6PAF9Bej1DZ+1u4aTiqJnk7ZX12eHsnDiIOqjGvITCq+u6wLqUhgS+faCNbVY8+g==} 619 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 620 | 621 | babel-preset-current-node-syntax@1.1.0: 622 | resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} 623 | peerDependencies: 624 | '@babel/core': ^7.0.0 625 | 626 | babel-preset-jest@30.0.0: 627 | resolution: {integrity: sha512-hgEuu/W7gk8QOWUA9+m3Zk+WpGvKc1Egp6rFQEfYxEoM9Fk/q8nuTXNL65OkhwGrTApauEGgakOoWVXj+UfhKw==} 628 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 629 | peerDependencies: 630 | '@babel/core': ^7.11.0 631 | 632 | balanced-match@1.0.2: 633 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 634 | 635 | bcrypt-pbkdf@1.0.2: 636 | resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} 637 | 638 | brace-expansion@1.1.12: 639 | resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 640 | 641 | brace-expansion@2.0.2: 642 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 643 | 644 | braces@3.0.3: 645 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 646 | engines: {node: '>=8'} 647 | 648 | browserslist@4.25.0: 649 | resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} 650 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 651 | hasBin: true 652 | 653 | bs-logger@0.2.6: 654 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 655 | engines: {node: '>= 6'} 656 | 657 | bser@2.1.1: 658 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 659 | 660 | buffer-from@1.1.2: 661 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 662 | 663 | callsites@3.1.0: 664 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 665 | engines: {node: '>=6'} 666 | 667 | camelcase@5.3.1: 668 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 669 | engines: {node: '>=6'} 670 | 671 | camelcase@6.3.0: 672 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 673 | engines: {node: '>=10'} 674 | 675 | caniuse-lite@1.0.30001723: 676 | resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==} 677 | 678 | caseless@0.12.0: 679 | resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} 680 | 681 | chalk@4.1.2: 682 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 683 | engines: {node: '>=10'} 684 | 685 | char-regex@1.0.2: 686 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 687 | engines: {node: '>=10'} 688 | 689 | ci-info@3.9.0: 690 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 691 | engines: {node: '>=8'} 692 | 693 | ci-info@4.2.0: 694 | resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} 695 | engines: {node: '>=8'} 696 | 697 | cjs-module-lexer@2.1.0: 698 | resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} 699 | 700 | cliui@8.0.1: 701 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 702 | engines: {node: '>=12'} 703 | 704 | co@4.6.0: 705 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 706 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 707 | 708 | collect-v8-coverage@1.0.2: 709 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 710 | 711 | color-convert@2.0.1: 712 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 713 | engines: {node: '>=7.0.0'} 714 | 715 | color-name@1.1.4: 716 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 717 | 718 | combined-stream@1.0.8: 719 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 720 | engines: {node: '>= 0.8'} 721 | 722 | commander@14.0.0: 723 | resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} 724 | engines: {node: '>=20'} 725 | 726 | concat-map@0.0.1: 727 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 728 | 729 | convert-source-map@2.0.0: 730 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 731 | 732 | core-util-is@1.0.2: 733 | resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} 734 | 735 | coveralls@3.1.1: 736 | resolution: {integrity: sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==} 737 | engines: {node: '>=6'} 738 | hasBin: true 739 | 740 | create-require@1.1.1: 741 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 742 | 743 | cross-spawn@7.0.6: 744 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 745 | engines: {node: '>= 8'} 746 | 747 | dashdash@1.14.1: 748 | resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} 749 | engines: {node: '>=0.10'} 750 | 751 | debug@4.4.1: 752 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 753 | engines: {node: '>=6.0'} 754 | peerDependencies: 755 | supports-color: '*' 756 | peerDependenciesMeta: 757 | supports-color: 758 | optional: true 759 | 760 | dedent@1.6.0: 761 | resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} 762 | peerDependencies: 763 | babel-plugin-macros: ^3.1.0 764 | peerDependenciesMeta: 765 | babel-plugin-macros: 766 | optional: true 767 | 768 | deepmerge@4.3.1: 769 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 770 | engines: {node: '>=0.10.0'} 771 | 772 | delayed-stream@1.0.0: 773 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 774 | engines: {node: '>=0.4.0'} 775 | 776 | detect-newline@3.1.0: 777 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 778 | engines: {node: '>=8'} 779 | 780 | diff-sequences@29.6.3: 781 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 782 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 783 | 784 | diff@4.0.2: 785 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 786 | engines: {node: '>=0.3.1'} 787 | 788 | eastasianwidth@0.2.0: 789 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 790 | 791 | ecc-jsbn@0.1.2: 792 | resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} 793 | 794 | ejs@3.1.10: 795 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} 796 | engines: {node: '>=0.10.0'} 797 | hasBin: true 798 | 799 | electron-to-chromium@1.5.167: 800 | resolution: {integrity: sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==} 801 | 802 | emittery@0.13.1: 803 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 804 | engines: {node: '>=12'} 805 | 806 | emoji-regex@8.0.0: 807 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 808 | 809 | emoji-regex@9.2.2: 810 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 811 | 812 | error-ex@1.3.2: 813 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 814 | 815 | escalade@3.2.0: 816 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 817 | engines: {node: '>=6'} 818 | 819 | escape-string-regexp@2.0.0: 820 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 821 | engines: {node: '>=8'} 822 | 823 | esprima@4.0.1: 824 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 825 | engines: {node: '>=4'} 826 | hasBin: true 827 | 828 | execa@5.1.1: 829 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 830 | engines: {node: '>=10'} 831 | 832 | exit-x@0.2.2: 833 | resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} 834 | engines: {node: '>= 0.8.0'} 835 | 836 | expect@29.7.0: 837 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 838 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 839 | 840 | expect@30.0.0: 841 | resolution: {integrity: sha512-xCdPp6gwiR9q9lsPCHANarIkFTN/IMZso6Kkq03sOm9IIGtzK/UJqml0dkhHibGh8HKOj8BIDIpZ0BZuU7QK6w==} 842 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 843 | 844 | extend@3.0.2: 845 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 846 | 847 | extsprintf@1.3.0: 848 | resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} 849 | engines: {'0': node >=0.6.0} 850 | 851 | fast-csv@5.0.2: 852 | resolution: {integrity: sha512-CnB2zYAzzeh5Ta0UhSf32NexLy2SsEsSMY+fMWPV40k1OgaLEbm9Hf5dms3z/9fASZHBjB6i834079gVeksEqQ==} 853 | engines: {node: '>=10.0.0'} 854 | 855 | fast-deep-equal@3.1.3: 856 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 857 | 858 | fast-json-stable-stringify@2.1.0: 859 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 860 | 861 | fb-watchman@2.0.2: 862 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 863 | 864 | filelist@1.0.4: 865 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 866 | 867 | fill-range@7.1.1: 868 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 869 | engines: {node: '>=8'} 870 | 871 | find-up@4.1.0: 872 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 873 | engines: {node: '>=8'} 874 | 875 | foreground-child@3.3.1: 876 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 877 | engines: {node: '>=14'} 878 | 879 | forever-agent@0.6.1: 880 | resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} 881 | 882 | form-data@2.3.3: 883 | resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} 884 | engines: {node: '>= 0.12'} 885 | 886 | fs.realpath@1.0.0: 887 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 888 | 889 | fsevents@2.3.3: 890 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 891 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 892 | os: [darwin] 893 | 894 | gensync@1.0.0-beta.2: 895 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 896 | engines: {node: '>=6.9.0'} 897 | 898 | get-caller-file@2.0.5: 899 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 900 | engines: {node: 6.* || 8.* || >= 10.*} 901 | 902 | get-package-type@0.1.0: 903 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 904 | engines: {node: '>=8.0.0'} 905 | 906 | get-stream@6.0.1: 907 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 908 | engines: {node: '>=10'} 909 | 910 | getpass@0.1.7: 911 | resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} 912 | 913 | glob@10.4.5: 914 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 915 | hasBin: true 916 | 917 | glob@11.0.3: 918 | resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} 919 | engines: {node: 20 || >=22} 920 | hasBin: true 921 | 922 | glob@7.2.3: 923 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 924 | deprecated: Glob versions prior to v9 are no longer supported 925 | 926 | globals@11.12.0: 927 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 928 | engines: {node: '>=4'} 929 | 930 | graceful-fs@4.2.11: 931 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 932 | 933 | har-schema@2.0.0: 934 | resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} 935 | engines: {node: '>=4'} 936 | 937 | har-validator@5.1.5: 938 | resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} 939 | engines: {node: '>=6'} 940 | deprecated: this library is no longer supported 941 | 942 | has-flag@4.0.0: 943 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 944 | engines: {node: '>=8'} 945 | 946 | html-escaper@2.0.2: 947 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 948 | 949 | http-signature@1.2.0: 950 | resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} 951 | engines: {node: '>=0.8', npm: '>=1.3.7'} 952 | 953 | human-signals@2.1.0: 954 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 955 | engines: {node: '>=10.17.0'} 956 | 957 | import-local@3.2.0: 958 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} 959 | engines: {node: '>=8'} 960 | hasBin: true 961 | 962 | imurmurhash@0.1.4: 963 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 964 | engines: {node: '>=0.8.19'} 965 | 966 | inflight@1.0.6: 967 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 968 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 969 | 970 | inherits@2.0.4: 971 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 972 | 973 | is-arrayish@0.2.1: 974 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 975 | 976 | is-fullwidth-code-point@3.0.0: 977 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 978 | engines: {node: '>=8'} 979 | 980 | is-generator-fn@2.1.0: 981 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 982 | engines: {node: '>=6'} 983 | 984 | is-number@7.0.0: 985 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 986 | engines: {node: '>=0.12.0'} 987 | 988 | is-stream@2.0.1: 989 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 990 | engines: {node: '>=8'} 991 | 992 | is-typedarray@1.0.0: 993 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 994 | 995 | isexe@2.0.0: 996 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 997 | 998 | isstream@0.1.2: 999 | resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} 1000 | 1001 | istanbul-lib-coverage@3.2.2: 1002 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1003 | engines: {node: '>=8'} 1004 | 1005 | istanbul-lib-instrument@6.0.3: 1006 | resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} 1007 | engines: {node: '>=10'} 1008 | 1009 | istanbul-lib-report@3.0.1: 1010 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1011 | engines: {node: '>=10'} 1012 | 1013 | istanbul-lib-source-maps@5.0.6: 1014 | resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} 1015 | engines: {node: '>=10'} 1016 | 1017 | istanbul-reports@3.1.7: 1018 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1019 | engines: {node: '>=8'} 1020 | 1021 | jackspeak@3.4.3: 1022 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1023 | 1024 | jackspeak@4.1.1: 1025 | resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} 1026 | engines: {node: 20 || >=22} 1027 | 1028 | jake@10.9.2: 1029 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} 1030 | engines: {node: '>=10'} 1031 | hasBin: true 1032 | 1033 | jest-changed-files@30.0.0: 1034 | resolution: {integrity: sha512-rzGpvCdPdEV1Ma83c1GbZif0L2KAm3vXSXGRlpx7yCt0vhruwCNouKNRh3SiVcISHP1mb3iJzjb7tAEnNu1laQ==} 1035 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1036 | 1037 | jest-circus@30.0.0: 1038 | resolution: {integrity: sha512-nTwah78qcKVyndBS650hAkaEmwWGaVsMMoWdJwMnH77XArRJow2Ir7hc+8p/mATtxVZuM9OTkA/3hQocRIK5Dw==} 1039 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1040 | 1041 | jest-cli@30.0.0: 1042 | resolution: {integrity: sha512-fWKAgrhlwVVCfeizsmIrPRTBYTzO82WSba3gJniZNR3PKXADgdC0mmCSK+M+t7N8RCXOVfY6kvCkvjUNtzmHYQ==} 1043 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1044 | hasBin: true 1045 | peerDependencies: 1046 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1047 | peerDependenciesMeta: 1048 | node-notifier: 1049 | optional: true 1050 | 1051 | jest-config@30.0.0: 1052 | resolution: {integrity: sha512-p13a/zun+sbOMrBnTEUdq/5N7bZMOGd1yMfqtAJniPNuzURMay4I+vxZLK1XSDbjvIhmeVdG8h8RznqYyjctyg==} 1053 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1054 | peerDependencies: 1055 | '@types/node': '*' 1056 | esbuild-register: '>=3.4.0' 1057 | ts-node: '>=9.0.0' 1058 | peerDependenciesMeta: 1059 | '@types/node': 1060 | optional: true 1061 | esbuild-register: 1062 | optional: true 1063 | ts-node: 1064 | optional: true 1065 | 1066 | jest-diff@29.7.0: 1067 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1068 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1069 | 1070 | jest-diff@30.0.0: 1071 | resolution: {integrity: sha512-TgT1+KipV8JTLXXeFX0qSvIJR/UXiNNojjxb/awh3vYlBZyChU/NEmyKmq+wijKjWEztyrGJFL790nqMqNjTHA==} 1072 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1073 | 1074 | jest-docblock@30.0.0: 1075 | resolution: {integrity: sha512-By/iQ0nvTzghEecGzUMCp1axLtBh+8wB4Hpoi5o+x1stycjEmPcH1mHugL4D9Q+YKV++vKeX/3ZTW90QC8ICPg==} 1076 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1077 | 1078 | jest-each@30.0.0: 1079 | resolution: {integrity: sha512-qkFEW3cfytEjG2KtrhwtldZfXYnWSanO8xUMXLe4A6yaiHMHJUalk0Yyv4MQH6aeaxgi4sGVrukvF0lPMM7U1w==} 1080 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1081 | 1082 | jest-environment-node@30.0.0: 1083 | resolution: {integrity: sha512-sF6lxyA25dIURyDk4voYmGU9Uwz2rQKMfjxKnDd19yk+qxKGrimFqS5YsPHWTlAVBo+YhWzXsqZoaMzrTFvqfg==} 1084 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1085 | 1086 | jest-get-type@29.6.3: 1087 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 1088 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1089 | 1090 | jest-haste-map@30.0.0: 1091 | resolution: {integrity: sha512-p4bXAhXTawTsADgQgTpbymdLaTyPW1xWNu1oIGG7/N3LIAbZVkH2JMJqS8/IUcnGR8Kc7WFE+vWbJvsqGCWZXw==} 1092 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1093 | 1094 | jest-leak-detector@30.0.0: 1095 | resolution: {integrity: sha512-E/ly1azdVVbZrS0T6FIpyYHvsdek4FNaThJTtggjV/8IpKxh3p9NLndeUZy2+sjAI3ncS+aM0uLLon/dBg8htA==} 1096 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1097 | 1098 | jest-matcher-utils@29.7.0: 1099 | resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} 1100 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1101 | 1102 | jest-matcher-utils@30.0.0: 1103 | resolution: {integrity: sha512-m5mrunqopkrqwG1mMdJxe1J4uGmS9AHHKYUmoxeQOxBcLjEvirIrIDwuKmUYrecPHVB/PUBpXs2gPoeA2FSSLQ==} 1104 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1105 | 1106 | jest-message-util@29.7.0: 1107 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 1108 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1109 | 1110 | jest-message-util@30.0.0: 1111 | resolution: {integrity: sha512-pV3qcrb4utEsa/U7UI2VayNzSDQcmCllBZLSoIucrESRu0geKThFZOjjh0kACDJFJRAQwsK7GVsmS6SpEceD8w==} 1112 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1113 | 1114 | jest-mock@30.0.0: 1115 | resolution: {integrity: sha512-W2sRA4ALXILrEetEOh2ooZG6fZ01iwVs0OWMKSSWRcUlaLr4ESHuiKXDNTg+ZVgOq8Ei5445i/Yxrv59VT+XkA==} 1116 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1117 | 1118 | jest-pnp-resolver@1.2.3: 1119 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1120 | engines: {node: '>=6'} 1121 | peerDependencies: 1122 | jest-resolve: '*' 1123 | peerDependenciesMeta: 1124 | jest-resolve: 1125 | optional: true 1126 | 1127 | jest-regex-util@30.0.0: 1128 | resolution: {integrity: sha512-rT84010qRu/5OOU7a9TeidC2Tp3Qgt9Sty4pOZ/VSDuEmRupIjKZAb53gU3jr4ooMlhwScrgC9UixJxWzVu9oQ==} 1129 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1130 | 1131 | jest-resolve-dependencies@30.0.0: 1132 | resolution: {integrity: sha512-Yhh7odCAUNXhluK1bCpwIlHrN1wycYaTlZwq1GdfNBEESNNI/z1j1a7dUEWHbmB9LGgv0sanxw3JPmWU8NeebQ==} 1133 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1134 | 1135 | jest-resolve@30.0.0: 1136 | resolution: {integrity: sha512-zwWl1P15CcAfuQCEuxszjiKdsValhnWcj/aXg/R3aMHs8HVoCWHC4B/+5+1BirMoOud8NnN85GSP2LEZCbj3OA==} 1137 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1138 | 1139 | jest-runner@30.0.0: 1140 | resolution: {integrity: sha512-xbhmvWIc8X1IQ8G7xTv0AQJXKjBVyxoVJEJgy7A4RXsSaO+k/1ZSBbHwjnUhvYqMvwQPomWssDkUx6EoidEhlw==} 1141 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1142 | 1143 | jest-runtime@30.0.0: 1144 | resolution: {integrity: sha512-/O07qVgFrFAOGKGigojmdR3jUGz/y3+a/v9S/Yi2MHxsD+v6WcPppglZJw0gNJkRBArRDK8CFAwpM/VuEiiRjA==} 1145 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1146 | 1147 | jest-snapshot@30.0.0: 1148 | resolution: {integrity: sha512-6oCnzjpvfj/UIOMTqKZ6gedWAUgaycMdV8Y8h2dRJPvc2wSjckN03pzeoonw8y33uVngfx7WMo1ygdRGEKOT7w==} 1149 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1150 | 1151 | jest-util@29.7.0: 1152 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 1153 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1154 | 1155 | jest-util@30.0.0: 1156 | resolution: {integrity: sha512-fhNBBM9uSUbd4Lzsf8l/kcAdaHD/4SgoI48en3HXcBEMwKwoleKFMZ6cYEYs21SB779PRuRCyNLmymApAm8tZw==} 1157 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1158 | 1159 | jest-validate@30.0.0: 1160 | resolution: {integrity: sha512-d6OkzsdlWItHAikUDs1hlLmpOIRhsZoXTCliV2XXalVQ3ZOeb9dy0CQ6AKulJu/XOZqpOEr/FiMH+FeOBVV+nw==} 1161 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1162 | 1163 | jest-watcher@30.0.0: 1164 | resolution: {integrity: sha512-fbAkojcyS53bOL/B7XYhahORq9cIaPwOgd/p9qW/hybbC8l6CzxfWJJxjlPBAIVN8dRipLR0zdhpGQdam+YBtw==} 1165 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1166 | 1167 | jest-worker@30.0.0: 1168 | resolution: {integrity: sha512-VZvxfWIybIvwK8N/Bsfe43LfQgd/rD0c4h5nLUx78CAqPxIQcW2qDjsVAC53iUR8yxzFIeCFFvWOh8en8hGzdg==} 1169 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1170 | 1171 | jest@30.0.0: 1172 | resolution: {integrity: sha512-/3G2iFwsUY95vkflmlDn/IdLyLWqpQXcftptooaPH4qkyU52V7qVYf1BjmdSPlp1+0fs6BmNtrGaSFwOfV07ew==} 1173 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1174 | hasBin: true 1175 | peerDependencies: 1176 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1177 | peerDependenciesMeta: 1178 | node-notifier: 1179 | optional: true 1180 | 1181 | js-tokens@4.0.0: 1182 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1183 | 1184 | js-yaml@3.14.1: 1185 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1186 | hasBin: true 1187 | 1188 | jsbn@0.1.1: 1189 | resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} 1190 | 1191 | jsesc@3.1.0: 1192 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1193 | engines: {node: '>=6'} 1194 | hasBin: true 1195 | 1196 | json-parse-even-better-errors@2.3.1: 1197 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1198 | 1199 | json-schema-traverse@0.4.1: 1200 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1201 | 1202 | json-schema@0.4.0: 1203 | resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} 1204 | 1205 | json-stringify-safe@5.0.1: 1206 | resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} 1207 | 1208 | json5@2.2.3: 1209 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1210 | engines: {node: '>=6'} 1211 | hasBin: true 1212 | 1213 | jsprim@1.4.2: 1214 | resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} 1215 | engines: {node: '>=0.6.0'} 1216 | 1217 | lcov-parse@1.0.0: 1218 | resolution: {integrity: sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==} 1219 | hasBin: true 1220 | 1221 | leven@3.1.0: 1222 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1223 | engines: {node: '>=6'} 1224 | 1225 | lines-and-columns@1.2.4: 1226 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1227 | 1228 | locate-path@5.0.0: 1229 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1230 | engines: {node: '>=8'} 1231 | 1232 | lodash.escaperegexp@4.1.2: 1233 | resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} 1234 | 1235 | lodash.groupby@4.6.0: 1236 | resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==} 1237 | 1238 | lodash.isboolean@3.0.3: 1239 | resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} 1240 | 1241 | lodash.isequal@4.5.0: 1242 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 1243 | deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. 1244 | 1245 | lodash.isfunction@3.0.9: 1246 | resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} 1247 | 1248 | lodash.isnil@4.0.0: 1249 | resolution: {integrity: sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==} 1250 | 1251 | lodash.isundefined@3.0.1: 1252 | resolution: {integrity: sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==} 1253 | 1254 | lodash.memoize@4.1.2: 1255 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 1256 | 1257 | lodash.uniq@4.5.0: 1258 | resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} 1259 | 1260 | lodash@4.17.21: 1261 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1262 | 1263 | log-driver@1.2.7: 1264 | resolution: {integrity: sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==} 1265 | engines: {node: '>=0.8.6'} 1266 | 1267 | lru-cache@10.4.3: 1268 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1269 | 1270 | lru-cache@11.1.0: 1271 | resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} 1272 | engines: {node: 20 || >=22} 1273 | 1274 | lru-cache@5.1.1: 1275 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1276 | 1277 | make-dir@4.0.0: 1278 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1279 | engines: {node: '>=10'} 1280 | 1281 | make-error@1.3.6: 1282 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1283 | 1284 | makeerror@1.0.12: 1285 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1286 | 1287 | merge-stream@2.0.0: 1288 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1289 | 1290 | micromatch@4.0.8: 1291 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1292 | engines: {node: '>=8.6'} 1293 | 1294 | mime-db@1.52.0: 1295 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1296 | engines: {node: '>= 0.6'} 1297 | 1298 | mime-types@2.1.35: 1299 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1300 | engines: {node: '>= 0.6'} 1301 | 1302 | mimic-fn@2.1.0: 1303 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1304 | engines: {node: '>=6'} 1305 | 1306 | minimatch@10.0.3: 1307 | resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} 1308 | engines: {node: 20 || >=22} 1309 | 1310 | minimatch@3.1.2: 1311 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1312 | 1313 | minimatch@5.1.6: 1314 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1315 | engines: {node: '>=10'} 1316 | 1317 | minimatch@9.0.5: 1318 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1319 | engines: {node: '>=16 || 14 >=14.17'} 1320 | 1321 | minimist@1.2.8: 1322 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1323 | 1324 | minipass@7.1.2: 1325 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1326 | engines: {node: '>=16 || 14 >=14.17'} 1327 | 1328 | ms@2.1.3: 1329 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1330 | 1331 | napi-postinstall@0.2.4: 1332 | resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} 1333 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 1334 | hasBin: true 1335 | 1336 | natural-compare@1.4.0: 1337 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1338 | 1339 | node-int64@0.4.0: 1340 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1341 | 1342 | node-releases@2.0.19: 1343 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1344 | 1345 | normalize-path@3.0.0: 1346 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1347 | engines: {node: '>=0.10.0'} 1348 | 1349 | npm-run-path@4.0.1: 1350 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1351 | engines: {node: '>=8'} 1352 | 1353 | oauth-sign@0.9.0: 1354 | resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} 1355 | 1356 | once@1.4.0: 1357 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1358 | 1359 | onetime@5.1.2: 1360 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1361 | engines: {node: '>=6'} 1362 | 1363 | p-limit@2.3.0: 1364 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1365 | engines: {node: '>=6'} 1366 | 1367 | p-limit@3.1.0: 1368 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1369 | engines: {node: '>=10'} 1370 | 1371 | p-locate@4.1.0: 1372 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1373 | engines: {node: '>=8'} 1374 | 1375 | p-try@2.2.0: 1376 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1377 | engines: {node: '>=6'} 1378 | 1379 | package-json-from-dist@1.0.1: 1380 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1381 | 1382 | parse-json@5.2.0: 1383 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1384 | engines: {node: '>=8'} 1385 | 1386 | path-exists@4.0.0: 1387 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1388 | engines: {node: '>=8'} 1389 | 1390 | path-is-absolute@1.0.1: 1391 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1392 | engines: {node: '>=0.10.0'} 1393 | 1394 | path-key@3.1.1: 1395 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1396 | engines: {node: '>=8'} 1397 | 1398 | path-scurry@1.11.1: 1399 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1400 | engines: {node: '>=16 || 14 >=14.18'} 1401 | 1402 | path-scurry@2.0.0: 1403 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} 1404 | engines: {node: 20 || >=22} 1405 | 1406 | performance-now@2.1.0: 1407 | resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} 1408 | 1409 | picocolors@1.1.1: 1410 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1411 | 1412 | picomatch@2.3.1: 1413 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1414 | engines: {node: '>=8.6'} 1415 | 1416 | picomatch@4.0.2: 1417 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1418 | engines: {node: '>=12'} 1419 | 1420 | pirates@4.0.7: 1421 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 1422 | engines: {node: '>= 6'} 1423 | 1424 | pkg-dir@4.2.0: 1425 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1426 | engines: {node: '>=8'} 1427 | 1428 | pretty-format@29.7.0: 1429 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1430 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1431 | 1432 | pretty-format@30.0.0: 1433 | resolution: {integrity: sha512-18NAOUr4ZOQiIR+BgI5NhQE7uREdx4ZyV0dyay5izh4yfQ+1T7BSvggxvRGoXocrRyevqW5OhScUjbi9GB8R8Q==} 1434 | engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} 1435 | 1436 | psl@1.15.0: 1437 | resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} 1438 | 1439 | punycode@2.3.1: 1440 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1441 | engines: {node: '>=6'} 1442 | 1443 | pure-rand@7.0.1: 1444 | resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} 1445 | 1446 | qs@6.5.3: 1447 | resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} 1448 | engines: {node: '>=0.6'} 1449 | 1450 | react-is@18.3.1: 1451 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1452 | 1453 | request@2.88.2: 1454 | resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} 1455 | engines: {node: '>= 6'} 1456 | deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 1457 | 1458 | require-directory@2.1.1: 1459 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1460 | engines: {node: '>=0.10.0'} 1461 | 1462 | resolve-cwd@3.0.0: 1463 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1464 | engines: {node: '>=8'} 1465 | 1466 | resolve-from@5.0.0: 1467 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1468 | engines: {node: '>=8'} 1469 | 1470 | rimraf@6.0.1: 1471 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} 1472 | engines: {node: 20 || >=22} 1473 | hasBin: true 1474 | 1475 | safe-buffer@5.2.1: 1476 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1477 | 1478 | safer-buffer@2.1.2: 1479 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1480 | 1481 | semver@6.3.1: 1482 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1483 | hasBin: true 1484 | 1485 | semver@7.7.2: 1486 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1487 | engines: {node: '>=10'} 1488 | hasBin: true 1489 | 1490 | shebang-command@2.0.0: 1491 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1492 | engines: {node: '>=8'} 1493 | 1494 | shebang-regex@3.0.0: 1495 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1496 | engines: {node: '>=8'} 1497 | 1498 | signal-exit@3.0.7: 1499 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1500 | 1501 | signal-exit@4.1.0: 1502 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1503 | engines: {node: '>=14'} 1504 | 1505 | slash@3.0.0: 1506 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1507 | engines: {node: '>=8'} 1508 | 1509 | source-map-support@0.5.13: 1510 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 1511 | 1512 | source-map@0.6.1: 1513 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1514 | engines: {node: '>=0.10.0'} 1515 | 1516 | sprintf-js@1.0.3: 1517 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1518 | 1519 | sshpk@1.18.0: 1520 | resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} 1521 | engines: {node: '>=0.10.0'} 1522 | hasBin: true 1523 | 1524 | stack-utils@2.0.6: 1525 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1526 | engines: {node: '>=10'} 1527 | 1528 | string-length@4.0.2: 1529 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 1530 | engines: {node: '>=10'} 1531 | 1532 | string-width@4.2.3: 1533 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1534 | engines: {node: '>=8'} 1535 | 1536 | string-width@5.1.2: 1537 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1538 | engines: {node: '>=12'} 1539 | 1540 | strip-ansi@6.0.1: 1541 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1542 | engines: {node: '>=8'} 1543 | 1544 | strip-ansi@7.1.0: 1545 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1546 | engines: {node: '>=12'} 1547 | 1548 | strip-bom@4.0.0: 1549 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 1550 | engines: {node: '>=8'} 1551 | 1552 | strip-final-newline@2.0.0: 1553 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1554 | engines: {node: '>=6'} 1555 | 1556 | strip-json-comments@3.1.1: 1557 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1558 | engines: {node: '>=8'} 1559 | 1560 | supports-color@7.2.0: 1561 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1562 | engines: {node: '>=8'} 1563 | 1564 | supports-color@8.1.1: 1565 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1566 | engines: {node: '>=10'} 1567 | 1568 | synckit@0.11.8: 1569 | resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} 1570 | engines: {node: ^14.18.0 || >=16.0.0} 1571 | 1572 | test-exclude@6.0.0: 1573 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 1574 | engines: {node: '>=8'} 1575 | 1576 | tmpl@1.0.5: 1577 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 1578 | 1579 | to-regex-range@5.0.1: 1580 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1581 | engines: {node: '>=8.0'} 1582 | 1583 | tough-cookie@2.5.0: 1584 | resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} 1585 | engines: {node: '>=0.8'} 1586 | 1587 | ts-jest@29.4.0: 1588 | resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} 1589 | engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} 1590 | hasBin: true 1591 | peerDependencies: 1592 | '@babel/core': '>=7.0.0-beta.0 <8' 1593 | '@jest/transform': ^29.0.0 || ^30.0.0 1594 | '@jest/types': ^29.0.0 || ^30.0.0 1595 | babel-jest: ^29.0.0 || ^30.0.0 1596 | esbuild: '*' 1597 | jest: ^29.0.0 || ^30.0.0 1598 | jest-util: ^29.0.0 || ^30.0.0 1599 | typescript: '>=4.3 <6' 1600 | peerDependenciesMeta: 1601 | '@babel/core': 1602 | optional: true 1603 | '@jest/transform': 1604 | optional: true 1605 | '@jest/types': 1606 | optional: true 1607 | babel-jest: 1608 | optional: true 1609 | esbuild: 1610 | optional: true 1611 | jest-util: 1612 | optional: true 1613 | 1614 | ts-node@10.9.2: 1615 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 1616 | hasBin: true 1617 | peerDependencies: 1618 | '@swc/core': '>=1.2.50' 1619 | '@swc/wasm': '>=1.2.50' 1620 | '@types/node': '*' 1621 | typescript: '>=2.7' 1622 | peerDependenciesMeta: 1623 | '@swc/core': 1624 | optional: true 1625 | '@swc/wasm': 1626 | optional: true 1627 | 1628 | tslib@2.8.1: 1629 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1630 | 1631 | tunnel-agent@0.6.0: 1632 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 1633 | 1634 | tweetnacl@0.14.5: 1635 | resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} 1636 | 1637 | type-detect@4.0.8: 1638 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1639 | engines: {node: '>=4'} 1640 | 1641 | type-fest@0.21.3: 1642 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1643 | engines: {node: '>=10'} 1644 | 1645 | type-fest@4.41.0: 1646 | resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} 1647 | engines: {node: '>=16'} 1648 | 1649 | typescript@5.8.3: 1650 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1651 | engines: {node: '>=14.17'} 1652 | hasBin: true 1653 | 1654 | undici-types@7.8.0: 1655 | resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} 1656 | 1657 | unrs-resolver@1.9.0: 1658 | resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} 1659 | 1660 | update-browserslist-db@1.1.3: 1661 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1662 | hasBin: true 1663 | peerDependencies: 1664 | browserslist: '>= 4.21.0' 1665 | 1666 | uri-js@4.4.1: 1667 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1668 | 1669 | uuid@3.4.0: 1670 | resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} 1671 | deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. 1672 | hasBin: true 1673 | 1674 | v8-compile-cache-lib@3.0.1: 1675 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1676 | 1677 | v8-to-istanbul@9.3.0: 1678 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 1679 | engines: {node: '>=10.12.0'} 1680 | 1681 | verror@1.10.0: 1682 | resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} 1683 | engines: {'0': node >=0.6.0} 1684 | 1685 | walker@1.0.8: 1686 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 1687 | 1688 | which@2.0.2: 1689 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1690 | engines: {node: '>= 8'} 1691 | hasBin: true 1692 | 1693 | wrap-ansi@7.0.0: 1694 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1695 | engines: {node: '>=10'} 1696 | 1697 | wrap-ansi@8.1.0: 1698 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1699 | engines: {node: '>=12'} 1700 | 1701 | wrappy@1.0.2: 1702 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1703 | 1704 | write-file-atomic@5.0.1: 1705 | resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} 1706 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1707 | 1708 | y18n@5.0.8: 1709 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1710 | engines: {node: '>=10'} 1711 | 1712 | yallist@3.1.1: 1713 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1714 | 1715 | yargs-parser@21.1.1: 1716 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1717 | engines: {node: '>=12'} 1718 | 1719 | yargs@17.7.2: 1720 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1721 | engines: {node: '>=12'} 1722 | 1723 | yn@3.1.1: 1724 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1725 | engines: {node: '>=6'} 1726 | 1727 | yocto-queue@0.1.0: 1728 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1729 | engines: {node: '>=10'} 1730 | 1731 | snapshots: 1732 | 1733 | '@ampproject/remapping@2.3.0': 1734 | dependencies: 1735 | '@jridgewell/gen-mapping': 0.3.8 1736 | '@jridgewell/trace-mapping': 0.3.25 1737 | 1738 | '@babel/code-frame@7.27.1': 1739 | dependencies: 1740 | '@babel/helper-validator-identifier': 7.27.1 1741 | js-tokens: 4.0.0 1742 | picocolors: 1.1.1 1743 | 1744 | '@babel/compat-data@7.27.5': {} 1745 | 1746 | '@babel/core@7.27.4': 1747 | dependencies: 1748 | '@ampproject/remapping': 2.3.0 1749 | '@babel/code-frame': 7.27.1 1750 | '@babel/generator': 7.27.5 1751 | '@babel/helper-compilation-targets': 7.27.2 1752 | '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) 1753 | '@babel/helpers': 7.27.6 1754 | '@babel/parser': 7.27.5 1755 | '@babel/template': 7.27.2 1756 | '@babel/traverse': 7.27.4 1757 | '@babel/types': 7.27.6 1758 | convert-source-map: 2.0.0 1759 | debug: 4.4.1 1760 | gensync: 1.0.0-beta.2 1761 | json5: 2.2.3 1762 | semver: 6.3.1 1763 | transitivePeerDependencies: 1764 | - supports-color 1765 | 1766 | '@babel/generator@7.27.5': 1767 | dependencies: 1768 | '@babel/parser': 7.27.5 1769 | '@babel/types': 7.27.6 1770 | '@jridgewell/gen-mapping': 0.3.8 1771 | '@jridgewell/trace-mapping': 0.3.25 1772 | jsesc: 3.1.0 1773 | 1774 | '@babel/helper-compilation-targets@7.27.2': 1775 | dependencies: 1776 | '@babel/compat-data': 7.27.5 1777 | '@babel/helper-validator-option': 7.27.1 1778 | browserslist: 4.25.0 1779 | lru-cache: 5.1.1 1780 | semver: 6.3.1 1781 | 1782 | '@babel/helper-module-imports@7.27.1': 1783 | dependencies: 1784 | '@babel/traverse': 7.27.4 1785 | '@babel/types': 7.27.6 1786 | transitivePeerDependencies: 1787 | - supports-color 1788 | 1789 | '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': 1790 | dependencies: 1791 | '@babel/core': 7.27.4 1792 | '@babel/helper-module-imports': 7.27.1 1793 | '@babel/helper-validator-identifier': 7.27.1 1794 | '@babel/traverse': 7.27.4 1795 | transitivePeerDependencies: 1796 | - supports-color 1797 | 1798 | '@babel/helper-plugin-utils@7.27.1': {} 1799 | 1800 | '@babel/helper-string-parser@7.27.1': {} 1801 | 1802 | '@babel/helper-validator-identifier@7.27.1': {} 1803 | 1804 | '@babel/helper-validator-option@7.27.1': {} 1805 | 1806 | '@babel/helpers@7.27.6': 1807 | dependencies: 1808 | '@babel/template': 7.27.2 1809 | '@babel/types': 7.27.6 1810 | 1811 | '@babel/parser@7.27.5': 1812 | dependencies: 1813 | '@babel/types': 7.27.6 1814 | 1815 | '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.4)': 1816 | dependencies: 1817 | '@babel/core': 7.27.4 1818 | '@babel/helper-plugin-utils': 7.27.1 1819 | 1820 | '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.4)': 1821 | dependencies: 1822 | '@babel/core': 7.27.4 1823 | '@babel/helper-plugin-utils': 7.27.1 1824 | 1825 | '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.4)': 1826 | dependencies: 1827 | '@babel/core': 7.27.4 1828 | '@babel/helper-plugin-utils': 7.27.1 1829 | 1830 | '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.4)': 1831 | dependencies: 1832 | '@babel/core': 7.27.4 1833 | '@babel/helper-plugin-utils': 7.27.1 1834 | 1835 | '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': 1836 | dependencies: 1837 | '@babel/core': 7.27.4 1838 | '@babel/helper-plugin-utils': 7.27.1 1839 | 1840 | '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.4)': 1841 | dependencies: 1842 | '@babel/core': 7.27.4 1843 | '@babel/helper-plugin-utils': 7.27.1 1844 | 1845 | '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.4)': 1846 | dependencies: 1847 | '@babel/core': 7.27.4 1848 | '@babel/helper-plugin-utils': 7.27.1 1849 | 1850 | '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': 1851 | dependencies: 1852 | '@babel/core': 7.27.4 1853 | '@babel/helper-plugin-utils': 7.27.1 1854 | 1855 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.4)': 1856 | dependencies: 1857 | '@babel/core': 7.27.4 1858 | '@babel/helper-plugin-utils': 7.27.1 1859 | 1860 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.4)': 1861 | dependencies: 1862 | '@babel/core': 7.27.4 1863 | '@babel/helper-plugin-utils': 7.27.1 1864 | 1865 | '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.4)': 1866 | dependencies: 1867 | '@babel/core': 7.27.4 1868 | '@babel/helper-plugin-utils': 7.27.1 1869 | 1870 | '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.4)': 1871 | dependencies: 1872 | '@babel/core': 7.27.4 1873 | '@babel/helper-plugin-utils': 7.27.1 1874 | 1875 | '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.4)': 1876 | dependencies: 1877 | '@babel/core': 7.27.4 1878 | '@babel/helper-plugin-utils': 7.27.1 1879 | 1880 | '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.4)': 1881 | dependencies: 1882 | '@babel/core': 7.27.4 1883 | '@babel/helper-plugin-utils': 7.27.1 1884 | 1885 | '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.4)': 1886 | dependencies: 1887 | '@babel/core': 7.27.4 1888 | '@babel/helper-plugin-utils': 7.27.1 1889 | 1890 | '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.4)': 1891 | dependencies: 1892 | '@babel/core': 7.27.4 1893 | '@babel/helper-plugin-utils': 7.27.1 1894 | 1895 | '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': 1896 | dependencies: 1897 | '@babel/core': 7.27.4 1898 | '@babel/helper-plugin-utils': 7.27.1 1899 | 1900 | '@babel/template@7.27.2': 1901 | dependencies: 1902 | '@babel/code-frame': 7.27.1 1903 | '@babel/parser': 7.27.5 1904 | '@babel/types': 7.27.6 1905 | 1906 | '@babel/traverse@7.27.4': 1907 | dependencies: 1908 | '@babel/code-frame': 7.27.1 1909 | '@babel/generator': 7.27.5 1910 | '@babel/parser': 7.27.5 1911 | '@babel/template': 7.27.2 1912 | '@babel/types': 7.27.6 1913 | debug: 4.4.1 1914 | globals: 11.12.0 1915 | transitivePeerDependencies: 1916 | - supports-color 1917 | 1918 | '@babel/types@7.27.6': 1919 | dependencies: 1920 | '@babel/helper-string-parser': 7.27.1 1921 | '@babel/helper-validator-identifier': 7.27.1 1922 | 1923 | '@bcoe/v8-coverage@0.2.3': {} 1924 | 1925 | '@cspotcode/source-map-support@0.8.1': 1926 | dependencies: 1927 | '@jridgewell/trace-mapping': 0.3.9 1928 | 1929 | '@emnapi/core@1.4.3': 1930 | dependencies: 1931 | '@emnapi/wasi-threads': 1.0.2 1932 | tslib: 2.8.1 1933 | optional: true 1934 | 1935 | '@emnapi/runtime@1.4.3': 1936 | dependencies: 1937 | tslib: 2.8.1 1938 | optional: true 1939 | 1940 | '@emnapi/wasi-threads@1.0.2': 1941 | dependencies: 1942 | tslib: 2.8.1 1943 | optional: true 1944 | 1945 | '@fast-csv/format@5.0.2': 1946 | dependencies: 1947 | lodash.escaperegexp: 4.1.2 1948 | lodash.isboolean: 3.0.3 1949 | lodash.isequal: 4.5.0 1950 | lodash.isfunction: 3.0.9 1951 | lodash.isnil: 4.0.0 1952 | 1953 | '@fast-csv/parse@5.0.2': 1954 | dependencies: 1955 | lodash.escaperegexp: 4.1.2 1956 | lodash.groupby: 4.6.0 1957 | lodash.isfunction: 3.0.9 1958 | lodash.isnil: 4.0.0 1959 | lodash.isundefined: 3.0.1 1960 | lodash.uniq: 4.5.0 1961 | 1962 | '@isaacs/balanced-match@4.0.1': {} 1963 | 1964 | '@isaacs/brace-expansion@5.0.0': 1965 | dependencies: 1966 | '@isaacs/balanced-match': 4.0.1 1967 | 1968 | '@isaacs/cliui@8.0.2': 1969 | dependencies: 1970 | string-width: 5.1.2 1971 | string-width-cjs: string-width@4.2.3 1972 | strip-ansi: 7.1.0 1973 | strip-ansi-cjs: strip-ansi@6.0.1 1974 | wrap-ansi: 8.1.0 1975 | wrap-ansi-cjs: wrap-ansi@7.0.0 1976 | 1977 | '@istanbuljs/load-nyc-config@1.1.0': 1978 | dependencies: 1979 | camelcase: 5.3.1 1980 | find-up: 4.1.0 1981 | get-package-type: 0.1.0 1982 | js-yaml: 3.14.1 1983 | resolve-from: 5.0.0 1984 | 1985 | '@istanbuljs/schema@0.1.3': {} 1986 | 1987 | '@jest/console@30.0.0': 1988 | dependencies: 1989 | '@jest/types': 30.0.0 1990 | '@types/node': 24.0.1 1991 | chalk: 4.1.2 1992 | jest-message-util: 30.0.0 1993 | jest-util: 30.0.0 1994 | slash: 3.0.0 1995 | 1996 | '@jest/core@30.0.0(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3))': 1997 | dependencies: 1998 | '@jest/console': 30.0.0 1999 | '@jest/pattern': 30.0.0 2000 | '@jest/reporters': 30.0.0 2001 | '@jest/test-result': 30.0.0 2002 | '@jest/transform': 30.0.0 2003 | '@jest/types': 30.0.0 2004 | '@types/node': 24.0.1 2005 | ansi-escapes: 4.3.2 2006 | chalk: 4.1.2 2007 | ci-info: 4.2.0 2008 | exit-x: 0.2.2 2009 | graceful-fs: 4.2.11 2010 | jest-changed-files: 30.0.0 2011 | jest-config: 30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 2012 | jest-haste-map: 30.0.0 2013 | jest-message-util: 30.0.0 2014 | jest-regex-util: 30.0.0 2015 | jest-resolve: 30.0.0 2016 | jest-resolve-dependencies: 30.0.0 2017 | jest-runner: 30.0.0 2018 | jest-runtime: 30.0.0 2019 | jest-snapshot: 30.0.0 2020 | jest-util: 30.0.0 2021 | jest-validate: 30.0.0 2022 | jest-watcher: 30.0.0 2023 | micromatch: 4.0.8 2024 | pretty-format: 30.0.0 2025 | slash: 3.0.0 2026 | transitivePeerDependencies: 2027 | - babel-plugin-macros 2028 | - esbuild-register 2029 | - supports-color 2030 | - ts-node 2031 | 2032 | '@jest/diff-sequences@30.0.0': {} 2033 | 2034 | '@jest/environment@30.0.0': 2035 | dependencies: 2036 | '@jest/fake-timers': 30.0.0 2037 | '@jest/types': 30.0.0 2038 | '@types/node': 24.0.1 2039 | jest-mock: 30.0.0 2040 | 2041 | '@jest/expect-utils@29.7.0': 2042 | dependencies: 2043 | jest-get-type: 29.6.3 2044 | 2045 | '@jest/expect-utils@30.0.0': 2046 | dependencies: 2047 | '@jest/get-type': 30.0.0 2048 | 2049 | '@jest/expect@30.0.0': 2050 | dependencies: 2051 | expect: 30.0.0 2052 | jest-snapshot: 30.0.0 2053 | transitivePeerDependencies: 2054 | - supports-color 2055 | 2056 | '@jest/fake-timers@30.0.0': 2057 | dependencies: 2058 | '@jest/types': 30.0.0 2059 | '@sinonjs/fake-timers': 13.0.5 2060 | '@types/node': 24.0.1 2061 | jest-message-util: 30.0.0 2062 | jest-mock: 30.0.0 2063 | jest-util: 30.0.0 2064 | 2065 | '@jest/get-type@30.0.0': {} 2066 | 2067 | '@jest/globals@30.0.0': 2068 | dependencies: 2069 | '@jest/environment': 30.0.0 2070 | '@jest/expect': 30.0.0 2071 | '@jest/types': 30.0.0 2072 | jest-mock: 30.0.0 2073 | transitivePeerDependencies: 2074 | - supports-color 2075 | 2076 | '@jest/pattern@30.0.0': 2077 | dependencies: 2078 | '@types/node': 24.0.1 2079 | jest-regex-util: 30.0.0 2080 | 2081 | '@jest/reporters@30.0.0': 2082 | dependencies: 2083 | '@bcoe/v8-coverage': 0.2.3 2084 | '@jest/console': 30.0.0 2085 | '@jest/test-result': 30.0.0 2086 | '@jest/transform': 30.0.0 2087 | '@jest/types': 30.0.0 2088 | '@jridgewell/trace-mapping': 0.3.25 2089 | '@types/node': 24.0.1 2090 | chalk: 4.1.2 2091 | collect-v8-coverage: 1.0.2 2092 | exit-x: 0.2.2 2093 | glob: 10.4.5 2094 | graceful-fs: 4.2.11 2095 | istanbul-lib-coverage: 3.2.2 2096 | istanbul-lib-instrument: 6.0.3 2097 | istanbul-lib-report: 3.0.1 2098 | istanbul-lib-source-maps: 5.0.6 2099 | istanbul-reports: 3.1.7 2100 | jest-message-util: 30.0.0 2101 | jest-util: 30.0.0 2102 | jest-worker: 30.0.0 2103 | slash: 3.0.0 2104 | string-length: 4.0.2 2105 | v8-to-istanbul: 9.3.0 2106 | transitivePeerDependencies: 2107 | - supports-color 2108 | 2109 | '@jest/schemas@29.6.3': 2110 | dependencies: 2111 | '@sinclair/typebox': 0.27.8 2112 | 2113 | '@jest/schemas@30.0.0': 2114 | dependencies: 2115 | '@sinclair/typebox': 0.34.35 2116 | 2117 | '@jest/snapshot-utils@30.0.0': 2118 | dependencies: 2119 | '@jest/types': 30.0.0 2120 | chalk: 4.1.2 2121 | graceful-fs: 4.2.11 2122 | natural-compare: 1.4.0 2123 | 2124 | '@jest/source-map@30.0.0': 2125 | dependencies: 2126 | '@jridgewell/trace-mapping': 0.3.25 2127 | callsites: 3.1.0 2128 | graceful-fs: 4.2.11 2129 | 2130 | '@jest/test-result@30.0.0': 2131 | dependencies: 2132 | '@jest/console': 30.0.0 2133 | '@jest/types': 30.0.0 2134 | '@types/istanbul-lib-coverage': 2.0.6 2135 | collect-v8-coverage: 1.0.2 2136 | 2137 | '@jest/test-sequencer@30.0.0': 2138 | dependencies: 2139 | '@jest/test-result': 30.0.0 2140 | graceful-fs: 4.2.11 2141 | jest-haste-map: 30.0.0 2142 | slash: 3.0.0 2143 | 2144 | '@jest/transform@30.0.0': 2145 | dependencies: 2146 | '@babel/core': 7.27.4 2147 | '@jest/types': 30.0.0 2148 | '@jridgewell/trace-mapping': 0.3.25 2149 | babel-plugin-istanbul: 7.0.0 2150 | chalk: 4.1.2 2151 | convert-source-map: 2.0.0 2152 | fast-json-stable-stringify: 2.1.0 2153 | graceful-fs: 4.2.11 2154 | jest-haste-map: 30.0.0 2155 | jest-regex-util: 30.0.0 2156 | jest-util: 30.0.0 2157 | micromatch: 4.0.8 2158 | pirates: 4.0.7 2159 | slash: 3.0.0 2160 | write-file-atomic: 5.0.1 2161 | transitivePeerDependencies: 2162 | - supports-color 2163 | 2164 | '@jest/types@29.6.3': 2165 | dependencies: 2166 | '@jest/schemas': 29.6.3 2167 | '@types/istanbul-lib-coverage': 2.0.6 2168 | '@types/istanbul-reports': 3.0.4 2169 | '@types/node': 24.0.1 2170 | '@types/yargs': 17.0.33 2171 | chalk: 4.1.2 2172 | 2173 | '@jest/types@30.0.0': 2174 | dependencies: 2175 | '@jest/pattern': 30.0.0 2176 | '@jest/schemas': 30.0.0 2177 | '@types/istanbul-lib-coverage': 2.0.6 2178 | '@types/istanbul-reports': 3.0.4 2179 | '@types/node': 24.0.1 2180 | '@types/yargs': 17.0.33 2181 | chalk: 4.1.2 2182 | 2183 | '@jridgewell/gen-mapping@0.3.8': 2184 | dependencies: 2185 | '@jridgewell/set-array': 1.2.1 2186 | '@jridgewell/sourcemap-codec': 1.5.0 2187 | '@jridgewell/trace-mapping': 0.3.25 2188 | 2189 | '@jridgewell/resolve-uri@3.1.2': {} 2190 | 2191 | '@jridgewell/set-array@1.2.1': {} 2192 | 2193 | '@jridgewell/sourcemap-codec@1.5.0': {} 2194 | 2195 | '@jridgewell/trace-mapping@0.3.25': 2196 | dependencies: 2197 | '@jridgewell/resolve-uri': 3.1.2 2198 | '@jridgewell/sourcemap-codec': 1.5.0 2199 | 2200 | '@jridgewell/trace-mapping@0.3.9': 2201 | dependencies: 2202 | '@jridgewell/resolve-uri': 3.1.2 2203 | '@jridgewell/sourcemap-codec': 1.5.0 2204 | 2205 | '@napi-rs/wasm-runtime@0.2.11': 2206 | dependencies: 2207 | '@emnapi/core': 1.4.3 2208 | '@emnapi/runtime': 1.4.3 2209 | '@tybys/wasm-util': 0.9.0 2210 | optional: true 2211 | 2212 | '@pkgjs/parseargs@0.11.0': 2213 | optional: true 2214 | 2215 | '@pkgr/core@0.2.7': {} 2216 | 2217 | '@sinclair/typebox@0.27.8': {} 2218 | 2219 | '@sinclair/typebox@0.34.35': {} 2220 | 2221 | '@sinonjs/commons@3.0.1': 2222 | dependencies: 2223 | type-detect: 4.0.8 2224 | 2225 | '@sinonjs/fake-timers@13.0.5': 2226 | dependencies: 2227 | '@sinonjs/commons': 3.0.1 2228 | 2229 | '@tsconfig/node10@1.0.11': {} 2230 | 2231 | '@tsconfig/node12@1.0.11': {} 2232 | 2233 | '@tsconfig/node14@1.0.3': {} 2234 | 2235 | '@tsconfig/node16@1.0.4': {} 2236 | 2237 | '@tybys/wasm-util@0.9.0': 2238 | dependencies: 2239 | tslib: 2.8.1 2240 | optional: true 2241 | 2242 | '@types/babel__core@7.20.5': 2243 | dependencies: 2244 | '@babel/parser': 7.27.5 2245 | '@babel/types': 7.27.6 2246 | '@types/babel__generator': 7.27.0 2247 | '@types/babel__template': 7.4.4 2248 | '@types/babel__traverse': 7.20.7 2249 | 2250 | '@types/babel__generator@7.27.0': 2251 | dependencies: 2252 | '@babel/types': 7.27.6 2253 | 2254 | '@types/babel__template@7.4.4': 2255 | dependencies: 2256 | '@babel/parser': 7.27.5 2257 | '@babel/types': 7.27.6 2258 | 2259 | '@types/babel__traverse@7.20.7': 2260 | dependencies: 2261 | '@babel/types': 7.27.6 2262 | 2263 | '@types/istanbul-lib-coverage@2.0.6': {} 2264 | 2265 | '@types/istanbul-lib-report@3.0.3': 2266 | dependencies: 2267 | '@types/istanbul-lib-coverage': 2.0.6 2268 | 2269 | '@types/istanbul-reports@3.0.4': 2270 | dependencies: 2271 | '@types/istanbul-lib-report': 3.0.3 2272 | 2273 | '@types/jest@29.5.14': 2274 | dependencies: 2275 | expect: 29.7.0 2276 | pretty-format: 29.7.0 2277 | 2278 | '@types/lodash@4.17.17': {} 2279 | 2280 | '@types/node@24.0.1': 2281 | dependencies: 2282 | undici-types: 7.8.0 2283 | 2284 | '@types/stack-utils@2.0.3': {} 2285 | 2286 | '@types/yargs-parser@21.0.3': {} 2287 | 2288 | '@types/yargs@17.0.33': 2289 | dependencies: 2290 | '@types/yargs-parser': 21.0.3 2291 | 2292 | '@ungap/structured-clone@1.3.0': {} 2293 | 2294 | '@unrs/resolver-binding-android-arm-eabi@1.9.0': 2295 | optional: true 2296 | 2297 | '@unrs/resolver-binding-android-arm64@1.9.0': 2298 | optional: true 2299 | 2300 | '@unrs/resolver-binding-darwin-arm64@1.9.0': 2301 | optional: true 2302 | 2303 | '@unrs/resolver-binding-darwin-x64@1.9.0': 2304 | optional: true 2305 | 2306 | '@unrs/resolver-binding-freebsd-x64@1.9.0': 2307 | optional: true 2308 | 2309 | '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': 2310 | optional: true 2311 | 2312 | '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': 2313 | optional: true 2314 | 2315 | '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': 2316 | optional: true 2317 | 2318 | '@unrs/resolver-binding-linux-arm64-musl@1.9.0': 2319 | optional: true 2320 | 2321 | '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': 2322 | optional: true 2323 | 2324 | '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': 2325 | optional: true 2326 | 2327 | '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': 2328 | optional: true 2329 | 2330 | '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': 2331 | optional: true 2332 | 2333 | '@unrs/resolver-binding-linux-x64-gnu@1.9.0': 2334 | optional: true 2335 | 2336 | '@unrs/resolver-binding-linux-x64-musl@1.9.0': 2337 | optional: true 2338 | 2339 | '@unrs/resolver-binding-wasm32-wasi@1.9.0': 2340 | dependencies: 2341 | '@napi-rs/wasm-runtime': 0.2.11 2342 | optional: true 2343 | 2344 | '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': 2345 | optional: true 2346 | 2347 | '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': 2348 | optional: true 2349 | 2350 | '@unrs/resolver-binding-win32-x64-msvc@1.9.0': 2351 | optional: true 2352 | 2353 | acorn-walk@8.3.4: 2354 | dependencies: 2355 | acorn: 8.15.0 2356 | 2357 | acorn@8.15.0: {} 2358 | 2359 | ajv@6.12.6: 2360 | dependencies: 2361 | fast-deep-equal: 3.1.3 2362 | fast-json-stable-stringify: 2.1.0 2363 | json-schema-traverse: 0.4.1 2364 | uri-js: 4.4.1 2365 | 2366 | ansi-escapes@4.3.2: 2367 | dependencies: 2368 | type-fest: 0.21.3 2369 | 2370 | ansi-regex@5.0.1: {} 2371 | 2372 | ansi-regex@6.1.0: {} 2373 | 2374 | ansi-styles@4.3.0: 2375 | dependencies: 2376 | color-convert: 2.0.1 2377 | 2378 | ansi-styles@5.2.0: {} 2379 | 2380 | ansi-styles@6.2.1: {} 2381 | 2382 | anymatch@3.1.3: 2383 | dependencies: 2384 | normalize-path: 3.0.0 2385 | picomatch: 2.3.1 2386 | 2387 | arg@4.1.3: {} 2388 | 2389 | argparse@1.0.10: 2390 | dependencies: 2391 | sprintf-js: 1.0.3 2392 | 2393 | asn1@0.2.6: 2394 | dependencies: 2395 | safer-buffer: 2.1.2 2396 | 2397 | assert-plus@1.0.0: {} 2398 | 2399 | async@3.2.6: {} 2400 | 2401 | asynckit@0.4.0: {} 2402 | 2403 | aws-sign2@0.7.0: {} 2404 | 2405 | aws4@1.13.2: {} 2406 | 2407 | babel-jest@30.0.0(@babel/core@7.27.4): 2408 | dependencies: 2409 | '@babel/core': 7.27.4 2410 | '@jest/transform': 30.0.0 2411 | '@types/babel__core': 7.20.5 2412 | babel-plugin-istanbul: 7.0.0 2413 | babel-preset-jest: 30.0.0(@babel/core@7.27.4) 2414 | chalk: 4.1.2 2415 | graceful-fs: 4.2.11 2416 | slash: 3.0.0 2417 | transitivePeerDependencies: 2418 | - supports-color 2419 | 2420 | babel-plugin-istanbul@7.0.0: 2421 | dependencies: 2422 | '@babel/helper-plugin-utils': 7.27.1 2423 | '@istanbuljs/load-nyc-config': 1.1.0 2424 | '@istanbuljs/schema': 0.1.3 2425 | istanbul-lib-instrument: 6.0.3 2426 | test-exclude: 6.0.0 2427 | transitivePeerDependencies: 2428 | - supports-color 2429 | 2430 | babel-plugin-jest-hoist@30.0.0: 2431 | dependencies: 2432 | '@babel/template': 7.27.2 2433 | '@babel/types': 7.27.6 2434 | '@types/babel__core': 7.20.5 2435 | 2436 | babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.4): 2437 | dependencies: 2438 | '@babel/core': 7.27.4 2439 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.4) 2440 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) 2441 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.4) 2442 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.4) 2443 | '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) 2444 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.4) 2445 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.4) 2446 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.4) 2447 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.4) 2448 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.4) 2449 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) 2450 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.4) 2451 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.4) 2452 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.4) 2453 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.4) 2454 | 2455 | babel-preset-jest@30.0.0(@babel/core@7.27.4): 2456 | dependencies: 2457 | '@babel/core': 7.27.4 2458 | babel-plugin-jest-hoist: 30.0.0 2459 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) 2460 | 2461 | balanced-match@1.0.2: {} 2462 | 2463 | bcrypt-pbkdf@1.0.2: 2464 | dependencies: 2465 | tweetnacl: 0.14.5 2466 | 2467 | brace-expansion@1.1.12: 2468 | dependencies: 2469 | balanced-match: 1.0.2 2470 | concat-map: 0.0.1 2471 | 2472 | brace-expansion@2.0.2: 2473 | dependencies: 2474 | balanced-match: 1.0.2 2475 | 2476 | braces@3.0.3: 2477 | dependencies: 2478 | fill-range: 7.1.1 2479 | 2480 | browserslist@4.25.0: 2481 | dependencies: 2482 | caniuse-lite: 1.0.30001723 2483 | electron-to-chromium: 1.5.167 2484 | node-releases: 2.0.19 2485 | update-browserslist-db: 1.1.3(browserslist@4.25.0) 2486 | 2487 | bs-logger@0.2.6: 2488 | dependencies: 2489 | fast-json-stable-stringify: 2.1.0 2490 | 2491 | bser@2.1.1: 2492 | dependencies: 2493 | node-int64: 0.4.0 2494 | 2495 | buffer-from@1.1.2: {} 2496 | 2497 | callsites@3.1.0: {} 2498 | 2499 | camelcase@5.3.1: {} 2500 | 2501 | camelcase@6.3.0: {} 2502 | 2503 | caniuse-lite@1.0.30001723: {} 2504 | 2505 | caseless@0.12.0: {} 2506 | 2507 | chalk@4.1.2: 2508 | dependencies: 2509 | ansi-styles: 4.3.0 2510 | supports-color: 7.2.0 2511 | 2512 | char-regex@1.0.2: {} 2513 | 2514 | ci-info@3.9.0: {} 2515 | 2516 | ci-info@4.2.0: {} 2517 | 2518 | cjs-module-lexer@2.1.0: {} 2519 | 2520 | cliui@8.0.1: 2521 | dependencies: 2522 | string-width: 4.2.3 2523 | strip-ansi: 6.0.1 2524 | wrap-ansi: 7.0.0 2525 | 2526 | co@4.6.0: {} 2527 | 2528 | collect-v8-coverage@1.0.2: {} 2529 | 2530 | color-convert@2.0.1: 2531 | dependencies: 2532 | color-name: 1.1.4 2533 | 2534 | color-name@1.1.4: {} 2535 | 2536 | combined-stream@1.0.8: 2537 | dependencies: 2538 | delayed-stream: 1.0.0 2539 | 2540 | commander@14.0.0: {} 2541 | 2542 | concat-map@0.0.1: {} 2543 | 2544 | convert-source-map@2.0.0: {} 2545 | 2546 | core-util-is@1.0.2: {} 2547 | 2548 | coveralls@3.1.1: 2549 | dependencies: 2550 | js-yaml: 3.14.1 2551 | lcov-parse: 1.0.0 2552 | log-driver: 1.2.7 2553 | minimist: 1.2.8 2554 | request: 2.88.2 2555 | 2556 | create-require@1.1.1: {} 2557 | 2558 | cross-spawn@7.0.6: 2559 | dependencies: 2560 | path-key: 3.1.1 2561 | shebang-command: 2.0.0 2562 | which: 2.0.2 2563 | 2564 | dashdash@1.14.1: 2565 | dependencies: 2566 | assert-plus: 1.0.0 2567 | 2568 | debug@4.4.1: 2569 | dependencies: 2570 | ms: 2.1.3 2571 | 2572 | dedent@1.6.0: {} 2573 | 2574 | deepmerge@4.3.1: {} 2575 | 2576 | delayed-stream@1.0.0: {} 2577 | 2578 | detect-newline@3.1.0: {} 2579 | 2580 | diff-sequences@29.6.3: {} 2581 | 2582 | diff@4.0.2: {} 2583 | 2584 | eastasianwidth@0.2.0: {} 2585 | 2586 | ecc-jsbn@0.1.2: 2587 | dependencies: 2588 | jsbn: 0.1.1 2589 | safer-buffer: 2.1.2 2590 | 2591 | ejs@3.1.10: 2592 | dependencies: 2593 | jake: 10.9.2 2594 | 2595 | electron-to-chromium@1.5.167: {} 2596 | 2597 | emittery@0.13.1: {} 2598 | 2599 | emoji-regex@8.0.0: {} 2600 | 2601 | emoji-regex@9.2.2: {} 2602 | 2603 | error-ex@1.3.2: 2604 | dependencies: 2605 | is-arrayish: 0.2.1 2606 | 2607 | escalade@3.2.0: {} 2608 | 2609 | escape-string-regexp@2.0.0: {} 2610 | 2611 | esprima@4.0.1: {} 2612 | 2613 | execa@5.1.1: 2614 | dependencies: 2615 | cross-spawn: 7.0.6 2616 | get-stream: 6.0.1 2617 | human-signals: 2.1.0 2618 | is-stream: 2.0.1 2619 | merge-stream: 2.0.0 2620 | npm-run-path: 4.0.1 2621 | onetime: 5.1.2 2622 | signal-exit: 3.0.7 2623 | strip-final-newline: 2.0.0 2624 | 2625 | exit-x@0.2.2: {} 2626 | 2627 | expect@29.7.0: 2628 | dependencies: 2629 | '@jest/expect-utils': 29.7.0 2630 | jest-get-type: 29.6.3 2631 | jest-matcher-utils: 29.7.0 2632 | jest-message-util: 29.7.0 2633 | jest-util: 29.7.0 2634 | 2635 | expect@30.0.0: 2636 | dependencies: 2637 | '@jest/expect-utils': 30.0.0 2638 | '@jest/get-type': 30.0.0 2639 | jest-matcher-utils: 30.0.0 2640 | jest-message-util: 30.0.0 2641 | jest-mock: 30.0.0 2642 | jest-util: 30.0.0 2643 | 2644 | extend@3.0.2: {} 2645 | 2646 | extsprintf@1.3.0: {} 2647 | 2648 | fast-csv@5.0.2: 2649 | dependencies: 2650 | '@fast-csv/format': 5.0.2 2651 | '@fast-csv/parse': 5.0.2 2652 | 2653 | fast-deep-equal@3.1.3: {} 2654 | 2655 | fast-json-stable-stringify@2.1.0: {} 2656 | 2657 | fb-watchman@2.0.2: 2658 | dependencies: 2659 | bser: 2.1.1 2660 | 2661 | filelist@1.0.4: 2662 | dependencies: 2663 | minimatch: 5.1.6 2664 | 2665 | fill-range@7.1.1: 2666 | dependencies: 2667 | to-regex-range: 5.0.1 2668 | 2669 | find-up@4.1.0: 2670 | dependencies: 2671 | locate-path: 5.0.0 2672 | path-exists: 4.0.0 2673 | 2674 | foreground-child@3.3.1: 2675 | dependencies: 2676 | cross-spawn: 7.0.6 2677 | signal-exit: 4.1.0 2678 | 2679 | forever-agent@0.6.1: {} 2680 | 2681 | form-data@2.3.3: 2682 | dependencies: 2683 | asynckit: 0.4.0 2684 | combined-stream: 1.0.8 2685 | mime-types: 2.1.35 2686 | 2687 | fs.realpath@1.0.0: {} 2688 | 2689 | fsevents@2.3.3: 2690 | optional: true 2691 | 2692 | gensync@1.0.0-beta.2: {} 2693 | 2694 | get-caller-file@2.0.5: {} 2695 | 2696 | get-package-type@0.1.0: {} 2697 | 2698 | get-stream@6.0.1: {} 2699 | 2700 | getpass@0.1.7: 2701 | dependencies: 2702 | assert-plus: 1.0.0 2703 | 2704 | glob@10.4.5: 2705 | dependencies: 2706 | foreground-child: 3.3.1 2707 | jackspeak: 3.4.3 2708 | minimatch: 9.0.5 2709 | minipass: 7.1.2 2710 | package-json-from-dist: 1.0.1 2711 | path-scurry: 1.11.1 2712 | 2713 | glob@11.0.3: 2714 | dependencies: 2715 | foreground-child: 3.3.1 2716 | jackspeak: 4.1.1 2717 | minimatch: 10.0.3 2718 | minipass: 7.1.2 2719 | package-json-from-dist: 1.0.1 2720 | path-scurry: 2.0.0 2721 | 2722 | glob@7.2.3: 2723 | dependencies: 2724 | fs.realpath: 1.0.0 2725 | inflight: 1.0.6 2726 | inherits: 2.0.4 2727 | minimatch: 3.1.2 2728 | once: 1.4.0 2729 | path-is-absolute: 1.0.1 2730 | 2731 | globals@11.12.0: {} 2732 | 2733 | graceful-fs@4.2.11: {} 2734 | 2735 | har-schema@2.0.0: {} 2736 | 2737 | har-validator@5.1.5: 2738 | dependencies: 2739 | ajv: 6.12.6 2740 | har-schema: 2.0.0 2741 | 2742 | has-flag@4.0.0: {} 2743 | 2744 | html-escaper@2.0.2: {} 2745 | 2746 | http-signature@1.2.0: 2747 | dependencies: 2748 | assert-plus: 1.0.0 2749 | jsprim: 1.4.2 2750 | sshpk: 1.18.0 2751 | 2752 | human-signals@2.1.0: {} 2753 | 2754 | import-local@3.2.0: 2755 | dependencies: 2756 | pkg-dir: 4.2.0 2757 | resolve-cwd: 3.0.0 2758 | 2759 | imurmurhash@0.1.4: {} 2760 | 2761 | inflight@1.0.6: 2762 | dependencies: 2763 | once: 1.4.0 2764 | wrappy: 1.0.2 2765 | 2766 | inherits@2.0.4: {} 2767 | 2768 | is-arrayish@0.2.1: {} 2769 | 2770 | is-fullwidth-code-point@3.0.0: {} 2771 | 2772 | is-generator-fn@2.1.0: {} 2773 | 2774 | is-number@7.0.0: {} 2775 | 2776 | is-stream@2.0.1: {} 2777 | 2778 | is-typedarray@1.0.0: {} 2779 | 2780 | isexe@2.0.0: {} 2781 | 2782 | isstream@0.1.2: {} 2783 | 2784 | istanbul-lib-coverage@3.2.2: {} 2785 | 2786 | istanbul-lib-instrument@6.0.3: 2787 | dependencies: 2788 | '@babel/core': 7.27.4 2789 | '@babel/parser': 7.27.5 2790 | '@istanbuljs/schema': 0.1.3 2791 | istanbul-lib-coverage: 3.2.2 2792 | semver: 7.7.2 2793 | transitivePeerDependencies: 2794 | - supports-color 2795 | 2796 | istanbul-lib-report@3.0.1: 2797 | dependencies: 2798 | istanbul-lib-coverage: 3.2.2 2799 | make-dir: 4.0.0 2800 | supports-color: 7.2.0 2801 | 2802 | istanbul-lib-source-maps@5.0.6: 2803 | dependencies: 2804 | '@jridgewell/trace-mapping': 0.3.25 2805 | debug: 4.4.1 2806 | istanbul-lib-coverage: 3.2.2 2807 | transitivePeerDependencies: 2808 | - supports-color 2809 | 2810 | istanbul-reports@3.1.7: 2811 | dependencies: 2812 | html-escaper: 2.0.2 2813 | istanbul-lib-report: 3.0.1 2814 | 2815 | jackspeak@3.4.3: 2816 | dependencies: 2817 | '@isaacs/cliui': 8.0.2 2818 | optionalDependencies: 2819 | '@pkgjs/parseargs': 0.11.0 2820 | 2821 | jackspeak@4.1.1: 2822 | dependencies: 2823 | '@isaacs/cliui': 8.0.2 2824 | 2825 | jake@10.9.2: 2826 | dependencies: 2827 | async: 3.2.6 2828 | chalk: 4.1.2 2829 | filelist: 1.0.4 2830 | minimatch: 3.1.2 2831 | 2832 | jest-changed-files@30.0.0: 2833 | dependencies: 2834 | execa: 5.1.1 2835 | jest-util: 30.0.0 2836 | p-limit: 3.1.0 2837 | 2838 | jest-circus@30.0.0: 2839 | dependencies: 2840 | '@jest/environment': 30.0.0 2841 | '@jest/expect': 30.0.0 2842 | '@jest/test-result': 30.0.0 2843 | '@jest/types': 30.0.0 2844 | '@types/node': 24.0.1 2845 | chalk: 4.1.2 2846 | co: 4.6.0 2847 | dedent: 1.6.0 2848 | is-generator-fn: 2.1.0 2849 | jest-each: 30.0.0 2850 | jest-matcher-utils: 30.0.0 2851 | jest-message-util: 30.0.0 2852 | jest-runtime: 30.0.0 2853 | jest-snapshot: 30.0.0 2854 | jest-util: 30.0.0 2855 | p-limit: 3.1.0 2856 | pretty-format: 30.0.0 2857 | pure-rand: 7.0.1 2858 | slash: 3.0.0 2859 | stack-utils: 2.0.6 2860 | transitivePeerDependencies: 2861 | - babel-plugin-macros 2862 | - supports-color 2863 | 2864 | jest-cli@30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)): 2865 | dependencies: 2866 | '@jest/core': 30.0.0(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 2867 | '@jest/test-result': 30.0.0 2868 | '@jest/types': 30.0.0 2869 | chalk: 4.1.2 2870 | exit-x: 0.2.2 2871 | import-local: 3.2.0 2872 | jest-config: 30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 2873 | jest-util: 30.0.0 2874 | jest-validate: 30.0.0 2875 | yargs: 17.7.2 2876 | transitivePeerDependencies: 2877 | - '@types/node' 2878 | - babel-plugin-macros 2879 | - esbuild-register 2880 | - supports-color 2881 | - ts-node 2882 | 2883 | jest-config@30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)): 2884 | dependencies: 2885 | '@babel/core': 7.27.4 2886 | '@jest/get-type': 30.0.0 2887 | '@jest/pattern': 30.0.0 2888 | '@jest/test-sequencer': 30.0.0 2889 | '@jest/types': 30.0.0 2890 | babel-jest: 30.0.0(@babel/core@7.27.4) 2891 | chalk: 4.1.2 2892 | ci-info: 4.2.0 2893 | deepmerge: 4.3.1 2894 | glob: 10.4.5 2895 | graceful-fs: 4.2.11 2896 | jest-circus: 30.0.0 2897 | jest-docblock: 30.0.0 2898 | jest-environment-node: 30.0.0 2899 | jest-regex-util: 30.0.0 2900 | jest-resolve: 30.0.0 2901 | jest-runner: 30.0.0 2902 | jest-util: 30.0.0 2903 | jest-validate: 30.0.0 2904 | micromatch: 4.0.8 2905 | parse-json: 5.2.0 2906 | pretty-format: 30.0.0 2907 | slash: 3.0.0 2908 | strip-json-comments: 3.1.1 2909 | optionalDependencies: 2910 | '@types/node': 24.0.1 2911 | ts-node: 10.9.2(@types/node@24.0.1)(typescript@5.8.3) 2912 | transitivePeerDependencies: 2913 | - babel-plugin-macros 2914 | - supports-color 2915 | 2916 | jest-diff@29.7.0: 2917 | dependencies: 2918 | chalk: 4.1.2 2919 | diff-sequences: 29.6.3 2920 | jest-get-type: 29.6.3 2921 | pretty-format: 29.7.0 2922 | 2923 | jest-diff@30.0.0: 2924 | dependencies: 2925 | '@jest/diff-sequences': 30.0.0 2926 | '@jest/get-type': 30.0.0 2927 | chalk: 4.1.2 2928 | pretty-format: 30.0.0 2929 | 2930 | jest-docblock@30.0.0: 2931 | dependencies: 2932 | detect-newline: 3.1.0 2933 | 2934 | jest-each@30.0.0: 2935 | dependencies: 2936 | '@jest/get-type': 30.0.0 2937 | '@jest/types': 30.0.0 2938 | chalk: 4.1.2 2939 | jest-util: 30.0.0 2940 | pretty-format: 30.0.0 2941 | 2942 | jest-environment-node@30.0.0: 2943 | dependencies: 2944 | '@jest/environment': 30.0.0 2945 | '@jest/fake-timers': 30.0.0 2946 | '@jest/types': 30.0.0 2947 | '@types/node': 24.0.1 2948 | jest-mock: 30.0.0 2949 | jest-util: 30.0.0 2950 | jest-validate: 30.0.0 2951 | 2952 | jest-get-type@29.6.3: {} 2953 | 2954 | jest-haste-map@30.0.0: 2955 | dependencies: 2956 | '@jest/types': 30.0.0 2957 | '@types/node': 24.0.1 2958 | anymatch: 3.1.3 2959 | fb-watchman: 2.0.2 2960 | graceful-fs: 4.2.11 2961 | jest-regex-util: 30.0.0 2962 | jest-util: 30.0.0 2963 | jest-worker: 30.0.0 2964 | micromatch: 4.0.8 2965 | walker: 1.0.8 2966 | optionalDependencies: 2967 | fsevents: 2.3.3 2968 | 2969 | jest-leak-detector@30.0.0: 2970 | dependencies: 2971 | '@jest/get-type': 30.0.0 2972 | pretty-format: 30.0.0 2973 | 2974 | jest-matcher-utils@29.7.0: 2975 | dependencies: 2976 | chalk: 4.1.2 2977 | jest-diff: 29.7.0 2978 | jest-get-type: 29.6.3 2979 | pretty-format: 29.7.0 2980 | 2981 | jest-matcher-utils@30.0.0: 2982 | dependencies: 2983 | '@jest/get-type': 30.0.0 2984 | chalk: 4.1.2 2985 | jest-diff: 30.0.0 2986 | pretty-format: 30.0.0 2987 | 2988 | jest-message-util@29.7.0: 2989 | dependencies: 2990 | '@babel/code-frame': 7.27.1 2991 | '@jest/types': 29.6.3 2992 | '@types/stack-utils': 2.0.3 2993 | chalk: 4.1.2 2994 | graceful-fs: 4.2.11 2995 | micromatch: 4.0.8 2996 | pretty-format: 29.7.0 2997 | slash: 3.0.0 2998 | stack-utils: 2.0.6 2999 | 3000 | jest-message-util@30.0.0: 3001 | dependencies: 3002 | '@babel/code-frame': 7.27.1 3003 | '@jest/types': 30.0.0 3004 | '@types/stack-utils': 2.0.3 3005 | chalk: 4.1.2 3006 | graceful-fs: 4.2.11 3007 | micromatch: 4.0.8 3008 | pretty-format: 30.0.0 3009 | slash: 3.0.0 3010 | stack-utils: 2.0.6 3011 | 3012 | jest-mock@30.0.0: 3013 | dependencies: 3014 | '@jest/types': 30.0.0 3015 | '@types/node': 24.0.1 3016 | jest-util: 30.0.0 3017 | 3018 | jest-pnp-resolver@1.2.3(jest-resolve@30.0.0): 3019 | optionalDependencies: 3020 | jest-resolve: 30.0.0 3021 | 3022 | jest-regex-util@30.0.0: {} 3023 | 3024 | jest-resolve-dependencies@30.0.0: 3025 | dependencies: 3026 | jest-regex-util: 30.0.0 3027 | jest-snapshot: 30.0.0 3028 | transitivePeerDependencies: 3029 | - supports-color 3030 | 3031 | jest-resolve@30.0.0: 3032 | dependencies: 3033 | chalk: 4.1.2 3034 | graceful-fs: 4.2.11 3035 | jest-haste-map: 30.0.0 3036 | jest-pnp-resolver: 1.2.3(jest-resolve@30.0.0) 3037 | jest-util: 30.0.0 3038 | jest-validate: 30.0.0 3039 | slash: 3.0.0 3040 | unrs-resolver: 1.9.0 3041 | 3042 | jest-runner@30.0.0: 3043 | dependencies: 3044 | '@jest/console': 30.0.0 3045 | '@jest/environment': 30.0.0 3046 | '@jest/test-result': 30.0.0 3047 | '@jest/transform': 30.0.0 3048 | '@jest/types': 30.0.0 3049 | '@types/node': 24.0.1 3050 | chalk: 4.1.2 3051 | emittery: 0.13.1 3052 | exit-x: 0.2.2 3053 | graceful-fs: 4.2.11 3054 | jest-docblock: 30.0.0 3055 | jest-environment-node: 30.0.0 3056 | jest-haste-map: 30.0.0 3057 | jest-leak-detector: 30.0.0 3058 | jest-message-util: 30.0.0 3059 | jest-resolve: 30.0.0 3060 | jest-runtime: 30.0.0 3061 | jest-util: 30.0.0 3062 | jest-watcher: 30.0.0 3063 | jest-worker: 30.0.0 3064 | p-limit: 3.1.0 3065 | source-map-support: 0.5.13 3066 | transitivePeerDependencies: 3067 | - supports-color 3068 | 3069 | jest-runtime@30.0.0: 3070 | dependencies: 3071 | '@jest/environment': 30.0.0 3072 | '@jest/fake-timers': 30.0.0 3073 | '@jest/globals': 30.0.0 3074 | '@jest/source-map': 30.0.0 3075 | '@jest/test-result': 30.0.0 3076 | '@jest/transform': 30.0.0 3077 | '@jest/types': 30.0.0 3078 | '@types/node': 24.0.1 3079 | chalk: 4.1.2 3080 | cjs-module-lexer: 2.1.0 3081 | collect-v8-coverage: 1.0.2 3082 | glob: 10.4.5 3083 | graceful-fs: 4.2.11 3084 | jest-haste-map: 30.0.0 3085 | jest-message-util: 30.0.0 3086 | jest-mock: 30.0.0 3087 | jest-regex-util: 30.0.0 3088 | jest-resolve: 30.0.0 3089 | jest-snapshot: 30.0.0 3090 | jest-util: 30.0.0 3091 | slash: 3.0.0 3092 | strip-bom: 4.0.0 3093 | transitivePeerDependencies: 3094 | - supports-color 3095 | 3096 | jest-snapshot@30.0.0: 3097 | dependencies: 3098 | '@babel/core': 7.27.4 3099 | '@babel/generator': 7.27.5 3100 | '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) 3101 | '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) 3102 | '@babel/types': 7.27.6 3103 | '@jest/expect-utils': 30.0.0 3104 | '@jest/get-type': 30.0.0 3105 | '@jest/snapshot-utils': 30.0.0 3106 | '@jest/transform': 30.0.0 3107 | '@jest/types': 30.0.0 3108 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) 3109 | chalk: 4.1.2 3110 | expect: 30.0.0 3111 | graceful-fs: 4.2.11 3112 | jest-diff: 30.0.0 3113 | jest-matcher-utils: 30.0.0 3114 | jest-message-util: 30.0.0 3115 | jest-util: 30.0.0 3116 | pretty-format: 30.0.0 3117 | semver: 7.7.2 3118 | synckit: 0.11.8 3119 | transitivePeerDependencies: 3120 | - supports-color 3121 | 3122 | jest-util@29.7.0: 3123 | dependencies: 3124 | '@jest/types': 29.6.3 3125 | '@types/node': 24.0.1 3126 | chalk: 4.1.2 3127 | ci-info: 3.9.0 3128 | graceful-fs: 4.2.11 3129 | picomatch: 2.3.1 3130 | 3131 | jest-util@30.0.0: 3132 | dependencies: 3133 | '@jest/types': 30.0.0 3134 | '@types/node': 24.0.1 3135 | chalk: 4.1.2 3136 | ci-info: 4.2.0 3137 | graceful-fs: 4.2.11 3138 | picomatch: 4.0.2 3139 | 3140 | jest-validate@30.0.0: 3141 | dependencies: 3142 | '@jest/get-type': 30.0.0 3143 | '@jest/types': 30.0.0 3144 | camelcase: 6.3.0 3145 | chalk: 4.1.2 3146 | leven: 3.1.0 3147 | pretty-format: 30.0.0 3148 | 3149 | jest-watcher@30.0.0: 3150 | dependencies: 3151 | '@jest/test-result': 30.0.0 3152 | '@jest/types': 30.0.0 3153 | '@types/node': 24.0.1 3154 | ansi-escapes: 4.3.2 3155 | chalk: 4.1.2 3156 | emittery: 0.13.1 3157 | jest-util: 30.0.0 3158 | string-length: 4.0.2 3159 | 3160 | jest-worker@30.0.0: 3161 | dependencies: 3162 | '@types/node': 24.0.1 3163 | '@ungap/structured-clone': 1.3.0 3164 | jest-util: 30.0.0 3165 | merge-stream: 2.0.0 3166 | supports-color: 8.1.1 3167 | 3168 | jest@30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)): 3169 | dependencies: 3170 | '@jest/core': 30.0.0(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 3171 | '@jest/types': 30.0.0 3172 | import-local: 3.2.0 3173 | jest-cli: 30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 3174 | transitivePeerDependencies: 3175 | - '@types/node' 3176 | - babel-plugin-macros 3177 | - esbuild-register 3178 | - supports-color 3179 | - ts-node 3180 | 3181 | js-tokens@4.0.0: {} 3182 | 3183 | js-yaml@3.14.1: 3184 | dependencies: 3185 | argparse: 1.0.10 3186 | esprima: 4.0.1 3187 | 3188 | jsbn@0.1.1: {} 3189 | 3190 | jsesc@3.1.0: {} 3191 | 3192 | json-parse-even-better-errors@2.3.1: {} 3193 | 3194 | json-schema-traverse@0.4.1: {} 3195 | 3196 | json-schema@0.4.0: {} 3197 | 3198 | json-stringify-safe@5.0.1: {} 3199 | 3200 | json5@2.2.3: {} 3201 | 3202 | jsprim@1.4.2: 3203 | dependencies: 3204 | assert-plus: 1.0.0 3205 | extsprintf: 1.3.0 3206 | json-schema: 0.4.0 3207 | verror: 1.10.0 3208 | 3209 | lcov-parse@1.0.0: {} 3210 | 3211 | leven@3.1.0: {} 3212 | 3213 | lines-and-columns@1.2.4: {} 3214 | 3215 | locate-path@5.0.0: 3216 | dependencies: 3217 | p-locate: 4.1.0 3218 | 3219 | lodash.escaperegexp@4.1.2: {} 3220 | 3221 | lodash.groupby@4.6.0: {} 3222 | 3223 | lodash.isboolean@3.0.3: {} 3224 | 3225 | lodash.isequal@4.5.0: {} 3226 | 3227 | lodash.isfunction@3.0.9: {} 3228 | 3229 | lodash.isnil@4.0.0: {} 3230 | 3231 | lodash.isundefined@3.0.1: {} 3232 | 3233 | lodash.memoize@4.1.2: {} 3234 | 3235 | lodash.uniq@4.5.0: {} 3236 | 3237 | lodash@4.17.21: {} 3238 | 3239 | log-driver@1.2.7: {} 3240 | 3241 | lru-cache@10.4.3: {} 3242 | 3243 | lru-cache@11.1.0: {} 3244 | 3245 | lru-cache@5.1.1: 3246 | dependencies: 3247 | yallist: 3.1.1 3248 | 3249 | make-dir@4.0.0: 3250 | dependencies: 3251 | semver: 7.7.2 3252 | 3253 | make-error@1.3.6: {} 3254 | 3255 | makeerror@1.0.12: 3256 | dependencies: 3257 | tmpl: 1.0.5 3258 | 3259 | merge-stream@2.0.0: {} 3260 | 3261 | micromatch@4.0.8: 3262 | dependencies: 3263 | braces: 3.0.3 3264 | picomatch: 2.3.1 3265 | 3266 | mime-db@1.52.0: {} 3267 | 3268 | mime-types@2.1.35: 3269 | dependencies: 3270 | mime-db: 1.52.0 3271 | 3272 | mimic-fn@2.1.0: {} 3273 | 3274 | minimatch@10.0.3: 3275 | dependencies: 3276 | '@isaacs/brace-expansion': 5.0.0 3277 | 3278 | minimatch@3.1.2: 3279 | dependencies: 3280 | brace-expansion: 1.1.12 3281 | 3282 | minimatch@5.1.6: 3283 | dependencies: 3284 | brace-expansion: 2.0.2 3285 | 3286 | minimatch@9.0.5: 3287 | dependencies: 3288 | brace-expansion: 2.0.2 3289 | 3290 | minimist@1.2.8: {} 3291 | 3292 | minipass@7.1.2: {} 3293 | 3294 | ms@2.1.3: {} 3295 | 3296 | napi-postinstall@0.2.4: {} 3297 | 3298 | natural-compare@1.4.0: {} 3299 | 3300 | node-int64@0.4.0: {} 3301 | 3302 | node-releases@2.0.19: {} 3303 | 3304 | normalize-path@3.0.0: {} 3305 | 3306 | npm-run-path@4.0.1: 3307 | dependencies: 3308 | path-key: 3.1.1 3309 | 3310 | oauth-sign@0.9.0: {} 3311 | 3312 | once@1.4.0: 3313 | dependencies: 3314 | wrappy: 1.0.2 3315 | 3316 | onetime@5.1.2: 3317 | dependencies: 3318 | mimic-fn: 2.1.0 3319 | 3320 | p-limit@2.3.0: 3321 | dependencies: 3322 | p-try: 2.2.0 3323 | 3324 | p-limit@3.1.0: 3325 | dependencies: 3326 | yocto-queue: 0.1.0 3327 | 3328 | p-locate@4.1.0: 3329 | dependencies: 3330 | p-limit: 2.3.0 3331 | 3332 | p-try@2.2.0: {} 3333 | 3334 | package-json-from-dist@1.0.1: {} 3335 | 3336 | parse-json@5.2.0: 3337 | dependencies: 3338 | '@babel/code-frame': 7.27.1 3339 | error-ex: 1.3.2 3340 | json-parse-even-better-errors: 2.3.1 3341 | lines-and-columns: 1.2.4 3342 | 3343 | path-exists@4.0.0: {} 3344 | 3345 | path-is-absolute@1.0.1: {} 3346 | 3347 | path-key@3.1.1: {} 3348 | 3349 | path-scurry@1.11.1: 3350 | dependencies: 3351 | lru-cache: 10.4.3 3352 | minipass: 7.1.2 3353 | 3354 | path-scurry@2.0.0: 3355 | dependencies: 3356 | lru-cache: 11.1.0 3357 | minipass: 7.1.2 3358 | 3359 | performance-now@2.1.0: {} 3360 | 3361 | picocolors@1.1.1: {} 3362 | 3363 | picomatch@2.3.1: {} 3364 | 3365 | picomatch@4.0.2: {} 3366 | 3367 | pirates@4.0.7: {} 3368 | 3369 | pkg-dir@4.2.0: 3370 | dependencies: 3371 | find-up: 4.1.0 3372 | 3373 | pretty-format@29.7.0: 3374 | dependencies: 3375 | '@jest/schemas': 29.6.3 3376 | ansi-styles: 5.2.0 3377 | react-is: 18.3.1 3378 | 3379 | pretty-format@30.0.0: 3380 | dependencies: 3381 | '@jest/schemas': 30.0.0 3382 | ansi-styles: 5.2.0 3383 | react-is: 18.3.1 3384 | 3385 | psl@1.15.0: 3386 | dependencies: 3387 | punycode: 2.3.1 3388 | 3389 | punycode@2.3.1: {} 3390 | 3391 | pure-rand@7.0.1: {} 3392 | 3393 | qs@6.5.3: {} 3394 | 3395 | react-is@18.3.1: {} 3396 | 3397 | request@2.88.2: 3398 | dependencies: 3399 | aws-sign2: 0.7.0 3400 | aws4: 1.13.2 3401 | caseless: 0.12.0 3402 | combined-stream: 1.0.8 3403 | extend: 3.0.2 3404 | forever-agent: 0.6.1 3405 | form-data: 2.3.3 3406 | har-validator: 5.1.5 3407 | http-signature: 1.2.0 3408 | is-typedarray: 1.0.0 3409 | isstream: 0.1.2 3410 | json-stringify-safe: 5.0.1 3411 | mime-types: 2.1.35 3412 | oauth-sign: 0.9.0 3413 | performance-now: 2.1.0 3414 | qs: 6.5.3 3415 | safe-buffer: 5.2.1 3416 | tough-cookie: 2.5.0 3417 | tunnel-agent: 0.6.0 3418 | uuid: 3.4.0 3419 | 3420 | require-directory@2.1.1: {} 3421 | 3422 | resolve-cwd@3.0.0: 3423 | dependencies: 3424 | resolve-from: 5.0.0 3425 | 3426 | resolve-from@5.0.0: {} 3427 | 3428 | rimraf@6.0.1: 3429 | dependencies: 3430 | glob: 11.0.3 3431 | package-json-from-dist: 1.0.1 3432 | 3433 | safe-buffer@5.2.1: {} 3434 | 3435 | safer-buffer@2.1.2: {} 3436 | 3437 | semver@6.3.1: {} 3438 | 3439 | semver@7.7.2: {} 3440 | 3441 | shebang-command@2.0.0: 3442 | dependencies: 3443 | shebang-regex: 3.0.0 3444 | 3445 | shebang-regex@3.0.0: {} 3446 | 3447 | signal-exit@3.0.7: {} 3448 | 3449 | signal-exit@4.1.0: {} 3450 | 3451 | slash@3.0.0: {} 3452 | 3453 | source-map-support@0.5.13: 3454 | dependencies: 3455 | buffer-from: 1.1.2 3456 | source-map: 0.6.1 3457 | 3458 | source-map@0.6.1: {} 3459 | 3460 | sprintf-js@1.0.3: {} 3461 | 3462 | sshpk@1.18.0: 3463 | dependencies: 3464 | asn1: 0.2.6 3465 | assert-plus: 1.0.0 3466 | bcrypt-pbkdf: 1.0.2 3467 | dashdash: 1.14.1 3468 | ecc-jsbn: 0.1.2 3469 | getpass: 0.1.7 3470 | jsbn: 0.1.1 3471 | safer-buffer: 2.1.2 3472 | tweetnacl: 0.14.5 3473 | 3474 | stack-utils@2.0.6: 3475 | dependencies: 3476 | escape-string-regexp: 2.0.0 3477 | 3478 | string-length@4.0.2: 3479 | dependencies: 3480 | char-regex: 1.0.2 3481 | strip-ansi: 6.0.1 3482 | 3483 | string-width@4.2.3: 3484 | dependencies: 3485 | emoji-regex: 8.0.0 3486 | is-fullwidth-code-point: 3.0.0 3487 | strip-ansi: 6.0.1 3488 | 3489 | string-width@5.1.2: 3490 | dependencies: 3491 | eastasianwidth: 0.2.0 3492 | emoji-regex: 9.2.2 3493 | strip-ansi: 7.1.0 3494 | 3495 | strip-ansi@6.0.1: 3496 | dependencies: 3497 | ansi-regex: 5.0.1 3498 | 3499 | strip-ansi@7.1.0: 3500 | dependencies: 3501 | ansi-regex: 6.1.0 3502 | 3503 | strip-bom@4.0.0: {} 3504 | 3505 | strip-final-newline@2.0.0: {} 3506 | 3507 | strip-json-comments@3.1.1: {} 3508 | 3509 | supports-color@7.2.0: 3510 | dependencies: 3511 | has-flag: 4.0.0 3512 | 3513 | supports-color@8.1.1: 3514 | dependencies: 3515 | has-flag: 4.0.0 3516 | 3517 | synckit@0.11.8: 3518 | dependencies: 3519 | '@pkgr/core': 0.2.7 3520 | 3521 | test-exclude@6.0.0: 3522 | dependencies: 3523 | '@istanbuljs/schema': 0.1.3 3524 | glob: 7.2.3 3525 | minimatch: 3.1.2 3526 | 3527 | tmpl@1.0.5: {} 3528 | 3529 | to-regex-range@5.0.1: 3530 | dependencies: 3531 | is-number: 7.0.0 3532 | 3533 | tough-cookie@2.5.0: 3534 | dependencies: 3535 | psl: 1.15.0 3536 | punycode: 2.3.1 3537 | 3538 | ts-jest@29.4.0(@babel/core@7.27.4)(@jest/transform@30.0.0)(@jest/types@30.0.0)(babel-jest@30.0.0(@babel/core@7.27.4))(jest-util@30.0.0)(jest@30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)))(typescript@5.8.3): 3539 | dependencies: 3540 | bs-logger: 0.2.6 3541 | ejs: 3.1.10 3542 | fast-json-stable-stringify: 2.1.0 3543 | jest: 30.0.0(@types/node@24.0.1)(ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3)) 3544 | json5: 2.2.3 3545 | lodash.memoize: 4.1.2 3546 | make-error: 1.3.6 3547 | semver: 7.7.2 3548 | type-fest: 4.41.0 3549 | typescript: 5.8.3 3550 | yargs-parser: 21.1.1 3551 | optionalDependencies: 3552 | '@babel/core': 7.27.4 3553 | '@jest/transform': 30.0.0 3554 | '@jest/types': 30.0.0 3555 | babel-jest: 30.0.0(@babel/core@7.27.4) 3556 | jest-util: 30.0.0 3557 | 3558 | ts-node@10.9.2(@types/node@24.0.1)(typescript@5.8.3): 3559 | dependencies: 3560 | '@cspotcode/source-map-support': 0.8.1 3561 | '@tsconfig/node10': 1.0.11 3562 | '@tsconfig/node12': 1.0.11 3563 | '@tsconfig/node14': 1.0.3 3564 | '@tsconfig/node16': 1.0.4 3565 | '@types/node': 24.0.1 3566 | acorn: 8.15.0 3567 | acorn-walk: 8.3.4 3568 | arg: 4.1.3 3569 | create-require: 1.1.1 3570 | diff: 4.0.2 3571 | make-error: 1.3.6 3572 | typescript: 5.8.3 3573 | v8-compile-cache-lib: 3.0.1 3574 | yn: 3.1.1 3575 | 3576 | tslib@2.8.1: 3577 | optional: true 3578 | 3579 | tunnel-agent@0.6.0: 3580 | dependencies: 3581 | safe-buffer: 5.2.1 3582 | 3583 | tweetnacl@0.14.5: {} 3584 | 3585 | type-detect@4.0.8: {} 3586 | 3587 | type-fest@0.21.3: {} 3588 | 3589 | type-fest@4.41.0: {} 3590 | 3591 | typescript@5.8.3: {} 3592 | 3593 | undici-types@7.8.0: {} 3594 | 3595 | unrs-resolver@1.9.0: 3596 | dependencies: 3597 | napi-postinstall: 0.2.4 3598 | optionalDependencies: 3599 | '@unrs/resolver-binding-android-arm-eabi': 1.9.0 3600 | '@unrs/resolver-binding-android-arm64': 1.9.0 3601 | '@unrs/resolver-binding-darwin-arm64': 1.9.0 3602 | '@unrs/resolver-binding-darwin-x64': 1.9.0 3603 | '@unrs/resolver-binding-freebsd-x64': 1.9.0 3604 | '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 3605 | '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 3606 | '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 3607 | '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 3608 | '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 3609 | '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 3610 | '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 3611 | '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 3612 | '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 3613 | '@unrs/resolver-binding-linux-x64-musl': 1.9.0 3614 | '@unrs/resolver-binding-wasm32-wasi': 1.9.0 3615 | '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 3616 | '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 3617 | '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 3618 | 3619 | update-browserslist-db@1.1.3(browserslist@4.25.0): 3620 | dependencies: 3621 | browserslist: 4.25.0 3622 | escalade: 3.2.0 3623 | picocolors: 1.1.1 3624 | 3625 | uri-js@4.4.1: 3626 | dependencies: 3627 | punycode: 2.3.1 3628 | 3629 | uuid@3.4.0: {} 3630 | 3631 | v8-compile-cache-lib@3.0.1: {} 3632 | 3633 | v8-to-istanbul@9.3.0: 3634 | dependencies: 3635 | '@jridgewell/trace-mapping': 0.3.25 3636 | '@types/istanbul-lib-coverage': 2.0.6 3637 | convert-source-map: 2.0.0 3638 | 3639 | verror@1.10.0: 3640 | dependencies: 3641 | assert-plus: 1.0.0 3642 | core-util-is: 1.0.2 3643 | extsprintf: 1.3.0 3644 | 3645 | walker@1.0.8: 3646 | dependencies: 3647 | makeerror: 1.0.12 3648 | 3649 | which@2.0.2: 3650 | dependencies: 3651 | isexe: 2.0.0 3652 | 3653 | wrap-ansi@7.0.0: 3654 | dependencies: 3655 | ansi-styles: 4.3.0 3656 | string-width: 4.2.3 3657 | strip-ansi: 6.0.1 3658 | 3659 | wrap-ansi@8.1.0: 3660 | dependencies: 3661 | ansi-styles: 6.2.1 3662 | string-width: 5.1.2 3663 | strip-ansi: 7.1.0 3664 | 3665 | wrappy@1.0.2: {} 3666 | 3667 | write-file-atomic@5.0.1: 3668 | dependencies: 3669 | imurmurhash: 0.1.4 3670 | signal-exit: 4.1.0 3671 | 3672 | y18n@5.0.8: {} 3673 | 3674 | yallist@3.1.1: {} 3675 | 3676 | yargs-parser@21.1.1: {} 3677 | 3678 | yargs@17.7.2: 3679 | dependencies: 3680 | cliui: 8.0.1 3681 | escalade: 3.2.0 3682 | get-caller-file: 2.0.5 3683 | require-directory: 2.1.1 3684 | string-width: 4.2.3 3685 | y18n: 5.0.8 3686 | yargs-parser: 21.1.1 3687 | 3688 | yn@3.1.1: {} 3689 | 3690 | yocto-queue@0.1.0: {} 3691 | --------------------------------------------------------------------------------