├── .gitignore ├── pnpm-workspace.yaml ├── .vscode └── extensions.json ├── global.d.ts ├── .hintrc ├── src ├── index.ts ├── MessageProcessor.ts ├── TypeWriterManage.ts ├── CacheManager.ts └── StreamFetchClient.ts ├── jest.config.cjs ├── tsup.config.ts ├── tsconfig.json ├── publish.js ├── package.json ├── test ├── CacheManager.test.ts └── MessageProcessor.test.ts ├── LICENSE ├── dist ├── index.d.ts ├── index.js └── index.global.js ├── readme.md ├── README.en.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | scripts/ -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | ignoredBuiltDependencies: 2 | - esbuild 3 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "orta.vscode-jest" 4 | ] 5 | } -------------------------------------------------------------------------------- /global.d.ts: -------------------------------------------------------------------------------- 1 | // global.d.ts 2 | declare module "*.js" { 3 | const value: any; 4 | export default value; 5 | } 6 | -------------------------------------------------------------------------------- /.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "development" 4 | ], 5 | "hints": { 6 | "typescript-config/consistent-casing": "off" 7 | } 8 | } -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { CacheManager } from "./CacheManager"; 2 | import { MessageProcessor } from "./MessageProcessor"; 3 | import { StreamFetchClient } from "./StreamFetchClient"; 4 | 5 | export { StreamFetchClient, CacheManager, MessageProcessor }; 6 | -------------------------------------------------------------------------------- /jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "ts-jest", 3 | testEnvironment: "node", 4 | transform: { 5 | "^.+\\.ts?$": "ts-jest", 6 | }, 7 | testMatch: ["**/test/**/*.test.ts"], 8 | moduleNameMapper: { 9 | "@microsoft/fetch-event-source": 10 | "/test/__mocks__/fetchEventSource.ts", 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entry: ["src/index.ts"], // 入口 5 | outDir: "dist", // 打包输出目录 6 | clean: true, // 每次打包前清空目录 7 | format: ["esm", "iife"], // 打包格式,iife 支持 script 标签直接引入 8 | globalName: "easyWebStore", // iife 模式下的全局变量名 9 | dts: true, // 输出 d.ts 文件 10 | minify: true, // 压缩代码 11 | }); 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "module": "ESNext", 5 | "lib": ["dom", "es6", "es2017", "esnext.asynciterable"], 6 | "noEmit": true, // tsc 仅检查,不生成 js 文件 7 | "sourceMap": false, 8 | "strict": true, 9 | "declaration": true, 10 | "esModuleInterop": true, 11 | "moduleResolution": "node", 12 | "resolveJsonModule": true, 13 | "allowSyntheticDefaultImports": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": true, 18 | "removeComments": true 19 | }, 20 | "include": ["src/**/*"] 21 | } 22 | -------------------------------------------------------------------------------- /publish.js: -------------------------------------------------------------------------------- 1 | import { execSync } from "node:child_process"; 2 | import { readFileSync, writeFileSync } from "node:fs"; 3 | import { resolve } from "node:path"; 4 | 5 | // 如果检查未通过,则退出 6 | execSync("pnpm tsc && pnpm build", { stdio: "inherit" }); 7 | 8 | // 升级 package.json 9 | const packageJson = JSON.parse(readFileSync(resolve("package.json"), "utf-8")); 10 | const { version } = packageJson; 11 | const newVersion = version 12 | .split(".") 13 | .map((v, i) => (i === 2 ? parseInt(v) + 1 : v)) 14 | .join("."); 15 | packageJson.version = newVersion; 16 | writeFileSync("package.json", JSON.stringify(packageJson, null, 2)); 17 | 18 | // git commit 19 | execSync("git add .", { stdio: "inherit" }); 20 | execSync(`git commit -m "chore: upgrade version to ${newVersion}"`, { 21 | stdio: "inherit", 22 | }); 23 | 24 | // npm 发布 25 | execSync( 26 | `npm publish --registry https://registry.npmjs.org --no-git-checks --access public`, 27 | { 28 | stdio: "inherit", 29 | } 30 | ); 31 | 32 | // 上传 git 33 | execSync("git push", { stdio: "inherit" }); 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lesliechueng/stream-fetch-manage", 3 | "version": "1.0.8", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "publishConfig": { 8 | "access": "public" 9 | }, 10 | "files": [ 11 | "dist" 12 | ], 13 | "module": "dist/index.js", 14 | "types": "dist/index.d.ts", 15 | "exports": { 16 | ".": { 17 | "import": "./dist/index.js", 18 | "types": "./dist/index.d.ts" 19 | } 20 | }, 21 | "scripts": { 22 | "build": "tsup", 23 | "test": "jest", 24 | "pub": "node ./publish.js" 25 | }, 26 | "keywords": [], 27 | "author": "", 28 | "license": "ISC", 29 | "homepage": "https://github.com/leslieCHUENGT/streamFetchManage", 30 | "repository": { 31 | "type": "git", 32 | "url": "git+https://github.com/leslieCHUENGT/streamFetchManage.git" 33 | }, 34 | "packageManager": "pnpm@10.9.0", 35 | "devDependencies": { 36 | "@jest/globals": "^29.7.0", 37 | "@types/jest": "^29.5.14", 38 | "@types/node": "^24.3.1", 39 | "jest": "^29.7.0", 40 | "ts-jest": "^29.3.2", 41 | "tslib": "^2.8.1", 42 | "tsup": "^8.4.0", 43 | "typescript": "^5.8.3" 44 | }, 45 | "dependencies": { 46 | "@microsoft/fetch-event-source": "^2.0.1" 47 | } 48 | } -------------------------------------------------------------------------------- /test/CacheManager.test.ts: -------------------------------------------------------------------------------- 1 | import { CacheManager } from "../src/CacheManager"; 2 | import { jest } from "@jest/globals"; 3 | 4 | describe("CacheManager", () => { 5 | let cache: CacheManager; 6 | let mockDateNow: any; 7 | 8 | beforeEach(() => { 9 | jest.useFakeTimers(); 10 | // 固定初始时间并允许后续修改 11 | mockDateNow = jest.spyOn(Date, "now").mockReturnValue(1000); 12 | cache = new CacheManager({ maxCacheSize: 3, cacheTimeout: 5000 }); 13 | }); 14 | 15 | afterEach(() => { 16 | mockDateNow.mockRestore(); 17 | jest.useRealTimers(); 18 | }); 19 | 20 | test("should evict old entries by size", () => { 21 | // 测试顺序改为明确插入顺序 22 | [1, 2, 3].forEach((n) => cache.cacheMessage(n, `data${n}`)); 23 | expect(cache.getCachedMessage(1)).toBeDefined(); // 前3个存在 24 | 25 | // 插入第4个触发淘汰 26 | cache.cacheMessage(4, "data4"); 27 | 28 | expect(cache.getCachedMessage(1)).toBeUndefined(); // 1被淘汰 29 | expect(cache.getCachedMessage(4)).toBeDefined(); // 4保留 30 | }); 31 | 32 | test("should evict entries by timeout", () => { 33 | cache.cacheMessage(1, "data1"); 34 | // 快进时间并更新Date.now模拟值 35 | jest.advanceTimersByTime(6000); 36 | mockDateNow.mockReturnValue(7000); // 1000 + 6000 = 7000ms 37 | 38 | expect(cache.getCachedMessage(1)).toBeUndefined(); 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 jingtao.lai 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | 11 | You should replace 2025 with the year in which you release the component, and jingtao.lai with your name or the name of the entity releasing the component. This license allows others to use, modify, and distribute your md component as long as they include the copyright notice and the permission notice. 12 | -------------------------------------------------------------------------------- /src/MessageProcessor.ts: -------------------------------------------------------------------------------- 1 | import type { CacheManager } from './CacheManager'; 2 | 3 | export class MessageProcessor { 4 | private expectedSeq: number = 0; 5 | private cacheManager: CacheManager; 6 | private handleAppMessage: (data: T) => void; 7 | private handleValidateMessageFormat: (data: T) => void; 8 | private getIndexValue: (data: T) => number; 9 | 10 | constructor( 11 | expectedSeq: number = 0, 12 | cacheManager: CacheManager, 13 | handleAppMessage: (data: T) => void, 14 | handleValidateMessageFormat: (data: T) => void, 15 | getIndexValue: (data: T) => number, 16 | ) { 17 | this.expectedSeq = expectedSeq; 18 | this.cacheManager = cacheManager; 19 | this.handleAppMessage = handleAppMessage; 20 | this.handleValidateMessageFormat = handleValidateMessageFormat; 21 | this.getIndexValue = getIndexValue; 22 | } 23 | 24 | public processMessage(data: T): void { 25 | try { 26 | this.handleValidateMessageFormat(data); 27 | const seq = this.getIndexValue(data); 28 | 29 | if (seq === this.expectedSeq) { 30 | this.handleCurrentMessage(data); 31 | } else if (seq > this.expectedSeq) { 32 | this.cacheManager.cacheMessage(seq, data); 33 | } else { 34 | // 忽略旧消息或重复消息 35 | } 36 | } catch (error) { 37 | console.error('消息处理错误:', error); 38 | } 39 | } 40 | 41 | private handleCurrentMessage(data: T): void { 42 | this.handleAppMessage(data); 43 | this.expectedSeq++; 44 | this.checkCacheForNext(); 45 | } 46 | 47 | private checkCacheForNext(): void { 48 | while (this.cacheManager.messageCache.has(this.expectedSeq)) { 49 | const cachedEntry = this.cacheManager.getCachedMessage(this.expectedSeq); 50 | if (cachedEntry) { 51 | this.handleAppMessage(cachedEntry.data as T); 52 | this.cacheManager.deleteMessage(this.expectedSeq); 53 | this.expectedSeq++; 54 | } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/TypeWriterManage.ts: -------------------------------------------------------------------------------- 1 | export class TypeWriterManage { 2 | private messageQueue: string[]; 3 | private delay: number; 4 | private onMessage: (char: string) => void; 5 | private onFinish: () => void; 6 | private isProcessing: boolean; 7 | private stopFlag: boolean; 8 | private timeoutId: ReturnType | null; 9 | 10 | constructor( 11 | delay: number, 12 | onMessage: (char: string) => void, 13 | onFinish: () => void, 14 | initialValue: string = "" 15 | ) { 16 | this.messageQueue = []; // 字符队列 17 | this.delay = delay; // 字符间隔时间 18 | this.onMessage = onMessage; // 单字回调 19 | this.onFinish = onFinish; // 完成回调 20 | this.isProcessing = false; // 处理状态 21 | this.stopFlag = false; // 停止标志 22 | this.timeoutId = null; // 定时器ID 23 | 24 | // 初始化时直接添加初始值 25 | if (initialValue) { 26 | this.add(initialValue); 27 | } 28 | } 29 | 30 | add(chunk: string): void { 31 | if (typeof chunk !== "string" || this.stopFlag) return; 32 | 33 | // 拆解数据块为单字并加入队列 34 | const chars = chunk.split(""); 35 | this.messageQueue.push(...chars); 36 | 37 | // 自动启动处理流程 38 | if (!this.isProcessing) { 39 | this.start(); 40 | } 41 | } 42 | 43 | setOnComplete(callback: () => void): void { 44 | this.onFinish = callback; 45 | } 46 | 47 | start(): void { 48 | this.processQueue(); 49 | } 50 | 51 | processQueue(): void { 52 | if (this.stopFlag || this.messageQueue.length === 0) { 53 | this.isProcessing = false; 54 | if (this.messageQueue.length === 0) this.onFinish(); 55 | return; 56 | } 57 | 58 | this.isProcessing = true; 59 | const char = this.messageQueue.shift() as string; 60 | this.onMessage(char); 61 | 62 | this.timeoutId = setTimeout(() => { 63 | this.processQueue(); 64 | }, this.delay); 65 | } 66 | 67 | stop(): void { 68 | this.stopFlag = true; 69 | } 70 | 71 | immediatelyStop(): void { 72 | clearTimeout(this.timeoutId as ReturnType); 73 | this.messageQueue = []; 74 | this.isProcessing = false; 75 | this.stopFlag = false; 76 | this.onFinish(); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/CacheManager.ts: -------------------------------------------------------------------------------- 1 | export class CacheManager { 2 | public messageCache: Map; 3 | private maxCacheSize: number; 4 | private cacheTimeout: number; 5 | cleanupInterval: any; 6 | 7 | constructor(config: { maxCacheSize?: number; cacheTimeout?: number } = {}) { 8 | this.messageCache = new Map(); 9 | this.maxCacheSize = config.maxCacheSize || 100; 10 | this.cacheTimeout = config.cacheTimeout || 5000; 11 | this.cleanupInterval = null; 12 | this.initCleanupCycle(); 13 | } 14 | 15 | private initCleanupCycle(): void { 16 | this.cleanupInterval = setInterval(() => this.cleanup(), 30000); 17 | } 18 | 19 | private cleanup(): void { 20 | this.applyTimeBasedEviction(); 21 | this.applySizeBasedEviction(); 22 | } 23 | 24 | private applyTimeBasedEviction(): void { 25 | const now = Date.now(); 26 | Array.from(this.messageCache.entries()).forEach(([seq, { timestamp }]) => { 27 | if (now - timestamp >= this.cacheTimeout) { 28 | this.messageCache.delete(seq); 29 | } 30 | }); 31 | } 32 | 33 | private applySizeBasedEviction(): void { 34 | // 循环删除直到满足大小限制 35 | while (this.messageCache.size >= this.maxCacheSize) { 36 | const oldestKey = Array.from(this.messageCache.keys())[0]; 37 | this.messageCache.delete(oldestKey); 38 | } 39 | } 40 | 41 | public cacheMessage(seq: number, data: T): void { 42 | // 插入前立即执行淘汰检查 43 | this.applySizeBasedEviction(); 44 | this.messageCache.set(seq, { 45 | data, 46 | timestamp: Date.now(), 47 | }); 48 | } 49 | 50 | public getCachedMessage( 51 | seq: number 52 | ): { data: T; timestamp: number } | undefined { 53 | const entry = this.messageCache.get(seq); 54 | if (entry) { 55 | // 访问时实时检查过期 56 | if (Date.now() - entry.timestamp > this.cacheTimeout) { 57 | this.messageCache.delete(seq); 58 | return undefined; 59 | } 60 | return entry; 61 | } 62 | return undefined; 63 | } 64 | 65 | public deleteMessage(seq: number): void { 66 | this.messageCache.delete(seq); 67 | } 68 | 69 | public clear(): void { 70 | this.messageCache.clear(); 71 | } 72 | 73 | public destroy() { 74 | if (this.cleanupInterval) { 75 | clearInterval(this.cleanupInterval); 76 | this.cleanupInterval = null; 77 | } 78 | this.clear(); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /test/MessageProcessor.test.ts: -------------------------------------------------------------------------------- 1 | // test/MessageProcessor.test.ts 2 | import { MessageProcessor } from "../src/MessageProcessor"; 3 | import { CacheManager } from "../src/CacheManager"; 4 | 5 | describe("MessageProcessor", () => { 6 | let cacheManager: CacheManager; 7 | let handleAppMessageMock: jest.Mock; 8 | let handleValidateMessageFormatMock: jest.Mock; 9 | let getIndexValueMock: jest.Mock; 10 | let messageProcessor: MessageProcessor; 11 | 12 | beforeEach(() => { 13 | cacheManager = new CacheManager(); 14 | handleAppMessageMock = jest.fn(); 15 | handleValidateMessageFormatMock = jest.fn(); 16 | getIndexValueMock = jest.fn(); 17 | messageProcessor = new MessageProcessor( 18 | 0, 19 | cacheManager, 20 | handleAppMessageMock, 21 | handleValidateMessageFormatMock, 22 | getIndexValueMock 23 | ); 24 | }); 25 | 26 | test("processMessage: 处理顺序消息", () => { 27 | const data = { seq: 0 }; 28 | getIndexValueMock.mockReturnValue(0); 29 | 30 | messageProcessor.processMessage(data); 31 | 32 | expect(handleValidateMessageFormatMock).toHaveBeenCalledWith(data); 33 | expect(handleAppMessageMock).toHaveBeenCalledWith(data); 34 | expect(messageProcessor["expectedSeq"]).toBe(1); 35 | }); 36 | 37 | test("processMessage: 处理乱序消息", () => { 38 | const data = { seq: 1 }; 39 | getIndexValueMock.mockReturnValue(1); 40 | 41 | messageProcessor.processMessage(data); 42 | 43 | expect(handleValidateMessageFormatMock).toHaveBeenCalledWith(data); 44 | expect(handleAppMessageMock).not.toHaveBeenCalled(); 45 | expect(cacheManager.getCachedMessage(1)).toBeDefined(); 46 | }); 47 | 48 | test("processMessage: 处理旧消息或重复消息", () => { 49 | const data = { seq: -1 }; 50 | getIndexValueMock.mockReturnValue(-1); 51 | 52 | messageProcessor.processMessage(data); 53 | 54 | expect(handleValidateMessageFormatMock).toHaveBeenCalledWith(data); 55 | expect(handleAppMessageMock).not.toHaveBeenCalled(); 56 | expect(cacheManager.getCachedMessage(-1)).toBeUndefined(); 57 | }); 58 | 59 | test("processMessage: 消息格式验证失败", () => { 60 | const data = { seq: "invalid" }; 61 | handleValidateMessageFormatMock.mockImplementation(() => { 62 | throw new Error("Invalid message format"); 63 | }); 64 | 65 | console.error = jest.fn(); 66 | 67 | messageProcessor.processMessage(data); 68 | 69 | expect(handleValidateMessageFormatMock).toHaveBeenCalledWith(data); 70 | expect(handleAppMessageMock).not.toHaveBeenCalled(); 71 | expect(console.error).toHaveBeenCalledWith( 72 | "消息处理错误:", 73 | expect.any(Error) 74 | ); 75 | }); 76 | }); 77 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | declare class CacheManager { 2 | messageCache: Map; 6 | private maxCacheSize; 7 | private cacheTimeout; 8 | cleanupInterval: any; 9 | constructor(config?: { 10 | maxCacheSize?: number; 11 | cacheTimeout?: number; 12 | }); 13 | private initCleanupCycle; 14 | private cleanup; 15 | private applyTimeBasedEviction; 16 | private applySizeBasedEviction; 17 | cacheMessage(seq: number, data: T): void; 18 | getCachedMessage(seq: number): { 19 | data: T; 20 | timestamp: number; 21 | } | undefined; 22 | deleteMessage(seq: number): void; 23 | clear(): void; 24 | destroy(): void; 25 | } 26 | 27 | declare class MessageProcessor { 28 | private expectedSeq; 29 | private cacheManager; 30 | private handleAppMessage; 31 | private handleValidateMessageFormat; 32 | private getIndexValue; 33 | constructor(expectedSeq: number | undefined, cacheManager: CacheManager, handleAppMessage: (data: T) => void, handleValidateMessageFormat: (data: T) => void, getIndexValue: (data: T) => number); 34 | processMessage(data: T): void; 35 | private handleCurrentMessage; 36 | private checkCacheForNext; 37 | } 38 | 39 | interface ICurrentEventHandlers { 40 | onStreamConnectionError: (data: T, error: Error) => void; 41 | onConnectionError: (data: T, error: Error) => void; 42 | onServerError: (data: T, error: Error) => void; 43 | onParseError: (data: T, error: Error) => void; 44 | onMessage: (data: T) => void; 45 | onClose: (data: T) => void; 46 | } 47 | interface IStreamFetchClientConfig { 48 | baseUrl?: string; 49 | headers?: Record; 50 | overErrorTimer?: number; 51 | } 52 | interface IProcessorConfig { 53 | maxCacheSize: number; 54 | cacheTimeout: number; 55 | expectedSeq: number; 56 | handleValidateMessageFormat: (data: T) => void; 57 | getIndexValue: (data: T) => number; 58 | } 59 | declare class StreamFetchClient { 60 | private currentMessage; 61 | private baseUrl; 62 | private headers; 63 | private streamTimer; 64 | private overErrorTimer; 65 | private abortController; 66 | private currentEventHandlers; 67 | private cacheManager; 68 | private messageProcessor; 69 | constructor(config: IStreamFetchClientConfig, eventHandles: ICurrentEventHandlers, processorConfig?: IProcessorConfig); 70 | sendStreamRequest(payload: Record, eventHandlers?: ICurrentEventHandlers | null, config?: IStreamFetchClientConfig): Promise; 71 | disconnect(): void; 72 | private executeFetchRequest; 73 | private handleServerMessage; 74 | private buildRequestPayload; 75 | private handleOpenResponse; 76 | private handleStreamClose; 77 | private handleStreamError; 78 | private handleRequestError; 79 | private startTimer; 80 | private resetTimer; 81 | private clearTimer; 82 | } 83 | 84 | export { CacheManager, MessageProcessor, StreamFetchClient }; 85 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | var p=Object.defineProperty;var m=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var u=(a,e,r)=>e in a?p(a,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):a[e]=r,c=(a,e)=>{for(var r in e||(e={}))v.call(e,r)&&u(a,r,e[r]);if(m)for(var r of m(e))T.call(e,r)&&u(a,r,e[r]);return a};var o=class{constructor(e={}){this.messageCache=new Map,this.maxCacheSize=e.maxCacheSize||100,this.cacheTimeout=e.cacheTimeout||5e3,this.cleanupInterval=null,this.initCleanupCycle()}initCleanupCycle(){this.cleanupInterval=setInterval(()=>this.cleanup(),3e4)}cleanup(){this.applyTimeBasedEviction(),this.applySizeBasedEviction()}applyTimeBasedEviction(){let e=Date.now();Array.from(this.messageCache.entries()).forEach(([r,{timestamp:t}])=>{e-t>=this.cacheTimeout&&this.messageCache.delete(r)})}applySizeBasedEviction(){for(;this.messageCache.size>=this.maxCacheSize;){let e=Array.from(this.messageCache.keys())[0];this.messageCache.delete(e)}}cacheMessage(e,r){this.applySizeBasedEviction(),this.messageCache.set(e,{data:r,timestamp:Date.now()})}getCachedMessage(e){let r=this.messageCache.get(e);if(r){if(Date.now()-r.timestamp>this.cacheTimeout){this.messageCache.delete(e);return}return r}}deleteMessage(e){this.messageCache.delete(e)}clear(){this.messageCache.clear()}destroy(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null),this.clear()}};var h=class{constructor(e=0,r,t,s,i){this.expectedSeq=0;this.expectedSeq=e,this.cacheManager=r,this.handleAppMessage=t,this.handleValidateMessageFormat=s,this.getIndexValue=i}processMessage(e){try{this.handleValidateMessageFormat(e);let r=this.getIndexValue(e);r===this.expectedSeq?this.handleCurrentMessage(e):r>this.expectedSeq&&this.cacheManager.cacheMessage(r,e)}catch(r){console.error("\u6D88\u606F\u5904\u7406\u9519\u8BEF:",r)}}handleCurrentMessage(e){this.handleAppMessage(e),this.expectedSeq++,this.checkCacheForNext()}checkCacheForNext(){for(;this.cacheManager.messageCache.has(this.expectedSeq);){let e=this.cacheManager.getCachedMessage(this.expectedSeq);e&&(this.handleAppMessage(e.data),this.cacheManager.deleteMessage(this.expectedSeq),this.expectedSeq++)}}};import{fetchEventSource as g}from"@microsoft/fetch-event-source";var l=class{constructor(e,r,t){this.cacheManager=null;this.messageProcessor=null;this.baseUrl=e.baseUrl||"",this.headers=e.headers||{"Content-Type":"application/json"},this.overErrorTimer=e.overErrorTimer||60*1e3,this.currentEventHandlers=r||{onMessage:()=>{}},this.abortController=null,this.streamTimer=null,t&&(this.cacheManager=new o({maxCacheSize:t.maxCacheSize,cacheTimeout:t.cacheTimeout}),this.messageProcessor=new h(t.expectedSeq,this.cacheManager,this.currentEventHandlers.onMessage,t.handleValidateMessageFormat,t.getIndexValue))}async sendStreamRequest(e,r,t){t&&(this.baseUrl=(t==null?void 0:t.baseUrl)||this.baseUrl,this.headers=c(c({},this.headers),t==null?void 0:t.headers),this.overErrorTimer=(t==null?void 0:t.overErrorTimer)||this.overErrorTimer),this.currentEventHandlers=r||this.currentEventHandlers,this.abortController=new AbortController;try{this.startTimer(),await this.executeFetchRequest(e)}catch(s){this.handleRequestError(s)}finally{this.clearTimer()}}disconnect(){var e;this.abortController&&(this.abortController.abort(),this.abortController=null),this.clearTimer(),(e=this.cacheManager)==null||e.destroy()}async executeFetchRequest(e){var r;await g(this.baseUrl,{method:"POST",headers:this.headers,body:JSON.stringify(this.buildRequestPayload(e)),openWhenHidden:!0,signal:(r=this.abortController)==null?void 0:r.signal,onopen:async t=>{this.handleOpenResponse(t)},onmessage:t=>this.handleServerMessage(t),onclose:()=>this.handleStreamClose(),onerror:()=>this.handleStreamError()})}handleServerMessage(e){var r,t,s,i;this.resetTimer();try{let n=JSON.parse(e.data);if(this.messageProcessor){this.messageProcessor.processMessage(n);return}(t=(r=this.currentEventHandlers).onMessage)==null||t.call(r,n),this.currentMessage=n}catch(n){(i=(s=this.currentEventHandlers).onParseError)==null||i.call(s,this.currentMessage,n)}}buildRequestPayload(e){return c({},e)}handleOpenResponse(e){var s,i,n,d;let r="text/event-stream",t=e.headers.get("content-type");e.ok&&t&&t.includes(r)||(e.status>=400&&e.status<500&&e.status!==429&&((i=(s=this.currentEventHandlers).onServerError)==null||i.call(s,this.currentMessage,new Error(e.statusText))),(d=(n=this.currentEventHandlers).onConnectionError)==null||d.call(n,this.currentMessage,new Error("Connection error")))}handleStreamClose(){var e,r;(r=(e=this.currentEventHandlers).onClose)==null||r.call(e,this.currentMessage),this.clearTimer()}handleStreamError(){var e,r;(r=(e=this.currentEventHandlers).onServerError)==null||r.call(e,this.currentMessage,new Error("Stream error")),this.clearTimer()}handleRequestError(e){var r,t;(t=(r=this.currentEventHandlers).onServerError)==null||t.call(r,this.currentMessage,e),this.clearTimer()}startTimer(){this.streamTimer=setTimeout(()=>{var e,r;(r=(e=this.currentEventHandlers).onStreamConnectionError)==null||r.call(e,this.currentMessage,new Error("Stream connection timed out")),this.disconnect()},this.overErrorTimer)}resetTimer(){this.clearTimer(),this.startTimer()}clearTimer(){this.streamTimer&&(clearTimeout(this.streamTimer),this.streamTimer=null)}};export{o as CacheManager,h as MessageProcessor,l as StreamFetchClient}; 2 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | [English](./README.en.md) | **简体中文** 2 | 3 | # 流式请求工具库使用指南 4 | 5 | > useAgent 提供的流式请求工具库专为大模型应用场景设计,支持 Server-Sent Events (SSE) 流式 **POST** 通信,具备消息缓存、顺序保证、全链路错误处理等核心能力,帮助开发者快速实现稳定可靠的流式交互体验。 6 | 7 | ## 安装 8 | 9 | 使用任意包管理器安装: 10 | 11 | ```bash [npm] 12 | npm install @lesliechueng/stream-fetch-manage --save-dev 13 | ``` 14 | 15 | ```bash [yarn] 16 | yarn add @lesliechueng/stream-fetch-manage --save-dev 17 | ``` 18 | 19 | ```bash [pnpm] 20 | pnpm add @lesliechueng/stream-fetch-manage --save-dev 21 | ``` 22 | 23 | ## 基础用法 24 | 25 | ```ts 26 | import { StreamFetchClient } from "@lesliechueng/stream-fetch-manage"; 27 | 28 | interface IContent { 29 | content: string; 30 | sequenceNumber: number; 31 | done?: boolean; 32 | } 33 | 34 | const streamFetch = new StreamFetchClient( 35 | { 36 | baseUrl: "/api/chat", 37 | headers: { 38 | "Content-Type": "application/json", 39 | }, 40 | overErrorTimer: 60 * 1000, // 流式中间超时时间,单位为毫秒 41 | }, 42 | { 43 | onMessage: (data: IContent) => { 44 | console.log("收到消息:", data); 45 | }, 46 | onClose: (lastData: IContent) => { 47 | console.log("连接关闭", lastData); 48 | }, 49 | onServerError: (data: IContent, error: Error) => { 50 | console.error("服务器错误", error); 51 | }, 52 | onStreamConnectionError: (data: IContent, error: Error) => { 53 | console.error("流连接错误:", error); 54 | }, 55 | onConnectionError: (data: IContent, error: Error) => { 56 | console.error("连接错误:", error); 57 | }, 58 | onParseError: (data: IContent, error: Error) => { 59 | console.error("解析错误:", error); 60 | }, 61 | } 62 | ); 63 | 64 | // 开始发起请求,下面是具体的参数 65 | streamFetch.sendStreamRequest({ 66 | // 流式中间请求参数 67 | }); 68 | 69 | // 暂停请求 70 | streamFetch.disconnect(); 71 | ``` 72 | 73 | ## 高级配置 74 | 75 | 消息顺序保证与缓存,当需要处理可能**乱序到达**的流式消息时,可配置消息处理器实现顺序保证。 76 | 77 | ```ts 78 | import { StreamFetchClient } from "@lesliechueng/stream-fetch-manage"; 79 | 80 | interface IContent { 81 | content: string; 82 | sequenceNumber: number; 83 | done?: boolean; 84 | } 85 | 86 | const streamFetch = new StreamFetchClient( 87 | { 88 | baseUrl: "/api/chat", 89 | headers: { 90 | "Content-Type": "application/json", 91 | }, 92 | overErrorTimer: 60 * 1000, // 流式中间超时时间,单位为毫秒 93 | }, 94 | { 95 | onMessage: (data: IContent) => { 96 | console.log("收到消息:", data); 97 | }, 98 | onClose: (lastData: IContent) => { 99 | console.log("连接关闭", lastData); 100 | }, 101 | onServerError: (data: IContent, error: Error) => { 102 | console.error("服务器错误", error); 103 | }, 104 | onStreamConnectionError: (data: IContent, error: Error) => { 105 | console.error("流连接错误:", error); 106 | }, 107 | onConnectionError: (data: IContent, error: Error) => { 108 | console.error("连接错误:", error); 109 | }, 110 | onParseError: (data: IContent, error: Error) => { 111 | console.error("解析错误:", error); 112 | }, 113 | }, 114 | { 115 | maxCacheSize: 6, // 最大缓存大小,单位为条 116 | cacheTimeout: 5000, // 缓存超时时间,单位为毫秒 117 | expectedSeq: 0, // 期望的初始化消息索引值 118 | handleValidateMessageFormat: (data: IContent) => { 119 | // 校验消息序号的数据类型 120 | if (typeof data.sequenceNumber !== "number") { 121 | throw new Error("Message must have a numeric seq field"); 122 | } 123 | }, 124 | // 使得消息处理器获取消息序号的索引值 125 | getIndexValue: (data: IContent) => data.sequenceNumber, 126 | } 127 | ); 128 | ``` 129 | 130 | ## 核心 API 131 | 132 | ### StreamFetchClient 构造函数 133 | 134 | ```typescript 135 | new StreamFetchClient(config, eventHandlers, processorConfig?) 136 | ``` 137 | 138 | | 参数 | 类型 | 说明 | 139 | | --------------- | -------------------------- | ------------------------------------ | 140 | | config | `IStreamFetchClientConfig` | 基础配置 | 141 | | eventHandlers | `ICurrentEventHandlers` | 事件处理函数集合 | 142 | | processorConfig | `IProcessorConfig` | 消息处理器配置(可选,用于消息排序) | 143 | 144 | #### IStreamFetchClientConfig 145 | 146 | | 属性 | 类型 | 默认值 | 说明 | 147 | | -------------- | ------------------------ | ---------------------------------------- | ------------------- | 148 | | baseUrl | `string` | `''` | 流式请求基础 URL | 149 | | headers | `Record` | `{ 'Content-Type': 'application/json' }` | 请求头 | 150 | | overErrorTimer | `number` | `60000` | 无消息超时时间 (ms) | 151 | 152 | #### ICurrentEventHandlers 153 | 154 | | 方法 | 说明 | 155 | | ----------------------- | -------------------- | 156 | | onMessage | 收到消息时触发 | 157 | | onStreamConnectionError | 连接超时时触发 | 158 | | onConnectionError | 连接建立失败时触发 | 159 | | onServerError | 服务器返回错误时触发 | 160 | | onParseError | 消息解析失败时触发 | 161 | | onClose | 连接关闭时触发 | 162 | 163 | ### 实例方法 164 | 165 | #### sendStreamRequest 166 | 167 | 发送流式请求 168 | 169 | ```typescript 170 | async sendStreamRequest( 171 | payload: Record, 172 | eventHandlers?: ICurrentEventHandlers | null, 173 | config?: IStreamFetchClientConfig 174 | ) 175 | ``` 176 | 177 | | 参数 | 类型 | 说明 | 178 | | ------------- | -------------------------- | ---------------------- | 179 | | payload | `Record` | 请求体数据 | 180 | | eventHandlers | `ICurrentEventHandlers` | 临时事件处理器(可选) | 181 | | config | `IStreamFetchClientConfig` | 临时配置(可选) | 182 | 183 | #### disconnect 184 | 185 | 断开当前流式连接并清理资源 186 | 187 | ```typescript 188 | disconnect(); 189 | ``` 190 | 191 | ## 消息处理机制 192 | 193 | 当配置了  `processorConfig`  时,消息处理流程如下: 194 | 195 | 1. 收到消息后先进行格式验证(`handleValidateMessageFormat`) 196 | 2. 提取消息序号(`getIndexValue`) 197 | 3. 如果序号与预期一致,直接处理并更新预期序号 198 | 4. 如果序号大于预期,缓存消息 199 | 5. 处理完当前消息后,自动检查缓存中是否有下一条预期消息 200 | 201 | 这种机制可以确保即使消息乱序到达,最终也能按正确顺序处理。 202 | 203 | ## 注意事项 204 | 205 | 1. 务必在组件卸载或不需要流式连接时调用  `disconnect()`  方法,避免内存泄漏 206 | 1. 根据业务需求合理配置  `maxCacheSize`  和  `cacheTimeout`,平衡内存占用和消息可靠性 207 | 1. `handleValidateMessageFormat`  中应严格验证消息格式,避免处理非法数据 208 | 1. 对于需要长期运行的流式连接,建议实现重连机制 209 | -------------------------------------------------------------------------------- /src/StreamFetchClient.ts: -------------------------------------------------------------------------------- 1 | import { CacheManager } from "./CacheManager"; 2 | import { MessageProcessor } from "./MessageProcessor"; 3 | import { fetchEventSource } from "@microsoft/fetch-event-source"; 4 | 5 | export interface ICurrentEventHandlers { 6 | onStreamConnectionError: (data: T, error: Error) => void; 7 | onConnectionError: (data: T, error: Error) => void; 8 | onServerError: (data: T, error: Error) => void; 9 | onParseError: (data: T, error: Error) => void; 10 | onMessage: (data: T) => void; 11 | onClose: (data: T) => void; 12 | } 13 | 14 | export interface IStreamFetchClientConfig { 15 | baseUrl?: string; 16 | headers?: Record; 17 | overErrorTimer?: number; 18 | } 19 | 20 | export interface IProcessorConfig { 21 | maxCacheSize: number; 22 | cacheTimeout: number; 23 | expectedSeq: number; 24 | handleValidateMessageFormat: (data: T) => void; 25 | getIndexValue: (data: T) => number; 26 | } 27 | 28 | export class StreamFetchClient { 29 | private currentMessage: T | undefined; 30 | private baseUrl: string; 31 | private headers: Record; 32 | private streamTimer: ReturnType | null; 33 | private overErrorTimer: number; 34 | private abortController: AbortController | null; 35 | private currentEventHandlers: ICurrentEventHandlers; 36 | private cacheManager: CacheManager | null = null; 37 | private messageProcessor: MessageProcessor | null = null; 38 | 39 | constructor( 40 | config: IStreamFetchClientConfig, 41 | eventHandles: ICurrentEventHandlers, 42 | processorConfig?: IProcessorConfig 43 | ) { 44 | this.baseUrl = config.baseUrl || ""; 45 | this.headers = config.headers || { 46 | "Content-Type": "application/json", 47 | }; 48 | this.overErrorTimer = config.overErrorTimer || 60 * 1000; 49 | this.currentEventHandlers = eventHandles || { 50 | onMessage: () => {}, 51 | }; 52 | this.abortController = null; 53 | this.streamTimer = null; 54 | if (processorConfig) { 55 | this.cacheManager = new CacheManager({ 56 | maxCacheSize: processorConfig.maxCacheSize, 57 | cacheTimeout: processorConfig.cacheTimeout, 58 | }); 59 | this.messageProcessor = new MessageProcessor( 60 | processorConfig.expectedSeq, 61 | this.cacheManager, 62 | this.currentEventHandlers.onMessage, 63 | processorConfig.handleValidateMessageFormat, 64 | processorConfig.getIndexValue 65 | ); 66 | } 67 | } 68 | 69 | public async sendStreamRequest( 70 | payload: Record, 71 | eventHandlers?: ICurrentEventHandlers | null, 72 | config?: IStreamFetchClientConfig 73 | ) { 74 | if (config) { 75 | this.baseUrl = config?.baseUrl || this.baseUrl; 76 | this.headers = { ...this.headers, ...config?.headers }; 77 | this.overErrorTimer = config?.overErrorTimer || this.overErrorTimer; 78 | } 79 | 80 | this.currentEventHandlers = eventHandlers || this.currentEventHandlers; 81 | this.abortController = new AbortController(); 82 | 83 | try { 84 | this.startTimer(); 85 | await this.executeFetchRequest(payload); 86 | } catch (error: any) { 87 | this.handleRequestError(error); 88 | } finally { 89 | this.clearTimer(); 90 | } 91 | } 92 | 93 | public disconnect() { 94 | if (this.abortController) { 95 | this.abortController.abort(); 96 | this.abortController = null; 97 | } 98 | this.clearTimer(); 99 | this.cacheManager?.destroy(); 100 | } 101 | 102 | private async executeFetchRequest(payload: Record) { 103 | await fetchEventSource(this.baseUrl, { 104 | method: "POST", 105 | headers: this.headers, 106 | body: JSON.stringify(this.buildRequestPayload(payload)), 107 | openWhenHidden: true, 108 | signal: this.abortController?.signal, 109 | onopen: async (response) => { 110 | this.handleOpenResponse(response); 111 | }, 112 | onmessage: (event) => this.handleServerMessage(event), 113 | onclose: () => this.handleStreamClose(), 114 | onerror: () => this.handleStreamError(), 115 | }); 116 | } 117 | 118 | private handleServerMessage(event: any) { 119 | this.resetTimer(); 120 | try { 121 | const message = JSON.parse(event.data); 122 | if (this.messageProcessor) { 123 | this.messageProcessor.processMessage(message); 124 | return; 125 | } 126 | this.currentEventHandlers.onMessage?.(message); 127 | this.currentMessage = message; // 存储最新的消息 128 | } catch (error: any) { 129 | this.currentEventHandlers.onParseError?.(this.currentMessage as T, error); 130 | } 131 | } 132 | 133 | private buildRequestPayload(payload: Record) { 134 | return { 135 | ...payload, 136 | }; 137 | } 138 | 139 | private handleOpenResponse(response: Response) { 140 | const EventStreamContentType = "text/event-stream"; 141 | 142 | const contentType = response.headers.get("content-type"); 143 | if ( 144 | response.ok && 145 | contentType && 146 | contentType.includes(EventStreamContentType) 147 | ) { 148 | return; 149 | } 150 | 151 | if ( 152 | response.status >= 400 && 153 | response.status < 500 && 154 | response.status !== 429 155 | ) { 156 | this.currentEventHandlers.onServerError?.( 157 | this.currentMessage as T, 158 | new Error(response.statusText) 159 | ); 160 | } 161 | this.currentEventHandlers.onConnectionError?.( 162 | this.currentMessage as T, 163 | new Error("Connection error") 164 | ); 165 | } 166 | 167 | private handleStreamClose() { 168 | this.currentEventHandlers.onClose?.(this.currentMessage as T); 169 | this.clearTimer(); 170 | } 171 | 172 | private handleStreamError() { 173 | this.currentEventHandlers.onServerError?.( 174 | this.currentMessage as T, 175 | new Error("Stream error") 176 | ); 177 | this.clearTimer(); 178 | } 179 | 180 | private handleRequestError(error: any) { 181 | this.currentEventHandlers.onServerError?.(this.currentMessage as T, error); 182 | this.clearTimer(); 183 | } 184 | 185 | private startTimer() { 186 | this.streamTimer = setTimeout(() => { 187 | this.currentEventHandlers.onStreamConnectionError?.( 188 | this.currentMessage as T, 189 | new Error("Stream connection timed out") 190 | ); 191 | this.disconnect(); 192 | }, this.overErrorTimer); 193 | } 194 | 195 | private resetTimer() { 196 | this.clearTimer(); 197 | this.startTimer(); 198 | } 199 | 200 | private clearTimer() { 201 | if (this.streamTimer) { 202 | clearTimeout(this.streamTimer); 203 | this.streamTimer = null; 204 | } 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /dist/index.global.js: -------------------------------------------------------------------------------- 1 | "use strict";var easyWebStore=(()=>{var b=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames,H=Object.getOwnPropertySymbols;var R=Object.prototype.hasOwnProperty,L=Object.prototype.propertyIsEnumerable;var q=(a,e,t)=>e in a?b(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,y=(a,e)=>{for(var t in e||(e={}))R.call(e,t)&&q(a,t,e[t]);if(H)for(var t of H(e))L.call(e,t)&&q(a,t,e[t]);return a};var D=(a,e)=>{for(var t in e)b(a,t,{get:e[t],enumerable:!0})},W=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of N(e))!R.call(a,n)&&n!==t&&b(a,n,{get:()=>e[n],enumerable:!(r=B(e,n))||r.enumerable});return a};var _=a=>W(b({},"__esModule",{value:!0}),a);var Q={};D(Q,{CacheManager:()=>u,MessageProcessor:()=>m,StreamFetchClient:()=>C});var u=class{constructor(e={}){this.messageCache=new Map,this.maxCacheSize=e.maxCacheSize||100,this.cacheTimeout=e.cacheTimeout||5e3,this.cleanupInterval=null,this.initCleanupCycle()}initCleanupCycle(){this.cleanupInterval=setInterval(()=>this.cleanup(),3e4)}cleanup(){this.applyTimeBasedEviction(),this.applySizeBasedEviction()}applyTimeBasedEviction(){let e=Date.now();Array.from(this.messageCache.entries()).forEach(([t,{timestamp:r}])=>{e-r>=this.cacheTimeout&&this.messageCache.delete(t)})}applySizeBasedEviction(){for(;this.messageCache.size>=this.maxCacheSize;){let e=Array.from(this.messageCache.keys())[0];this.messageCache.delete(e)}}cacheMessage(e,t){this.applySizeBasedEviction(),this.messageCache.set(e,{data:t,timestamp:Date.now()})}getCachedMessage(e){let t=this.messageCache.get(e);if(t){if(Date.now()-t.timestamp>this.cacheTimeout){this.messageCache.delete(e);return}return t}}deleteMessage(e){this.messageCache.delete(e)}clear(){this.messageCache.clear()}destroy(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null),this.clear()}};var m=class{constructor(e=0,t,r,n,c){this.expectedSeq=0;this.expectedSeq=e,this.cacheManager=t,this.handleAppMessage=r,this.handleValidateMessageFormat=n,this.getIndexValue=c}processMessage(e){try{this.handleValidateMessageFormat(e);let t=this.getIndexValue(e);t===this.expectedSeq?this.handleCurrentMessage(e):t>this.expectedSeq&&this.cacheManager.cacheMessage(t,e)}catch(t){console.error("\u6D88\u606F\u5904\u7406\u9519\u8BEF:",t)}}handleCurrentMessage(e){this.handleAppMessage(e),this.expectedSeq++,this.checkCacheForNext()}checkCacheForNext(){for(;this.cacheManager.messageCache.has(this.expectedSeq);){let e=this.cacheManager.getCachedMessage(this.expectedSeq);e&&(this.handleAppMessage(e.data),this.cacheManager.deleteMessage(this.expectedSeq),this.expectedSeq++)}}};async function P(a,e){let t=a.getReader(),r;for(;!(r=await t.read()).done;)e(r.value)}function F(a){let e,t,r,n=!1;return function(s){e===void 0?(e=s,t=0,r=-1):e=J(e,s);let i=e.length,o=0;for(;t0){let o=n.decode(s.subarray(0,i)),l=i+(s[i+1]===32?2:1),d=n.decode(s.subarray(l));switch(o){case"data":r.data=r.data?r.data+` 2 | `+d:d;break;case"event":r.event=d;break;case"id":a(r.id=d);break;case"retry":let p=parseInt(d,10);isNaN(p)||e(r.retry=p);break}}}}function J(a,e){let t=new Uint8Array(a.length+e.length);return t.set(a),t.set(e,a.length),t}function k(){return{data:"",event:"",id:"",retry:void 0}}var $=function(a,e){var t={};for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&e.indexOf(r)<0&&(t[r]=a[r]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,r=Object.getOwnPropertySymbols(a);n{let v=Object.assign({},r);v.accept||(v.accept=f);let g;function I(){g.abort(),document.hidden||S()}o||document.addEventListener("visibilitychange",I);let O=K,E=0;function M(){document.removeEventListener("visibilitychange",I),window.clearTimeout(E),g.abort()}t==null||t.addEventListener("abort",()=>{M(),p()});let U=l!=null?l:window.fetch,j=n!=null?n:G;async function S(){var w;g=new AbortController;try{let T=await U(a,Object.assign(Object.assign({},d),{headers:v,signal:g.signal}));await j(T),await P(T.body,F(z(h=>{h?v[A]=h:delete v[A]},h=>{O=h},c))),s==null||s(),M(),p()}catch(T){if(!g.signal.aborted)try{let h=(w=i==null?void 0:i(T))!==null&&w!==void 0?w:O;window.clearTimeout(E),E=window.setTimeout(S,h)}catch(h){M(),V(h)}}}S()})}function G(a){let e=a.headers.get("content-type");if(!(e!=null&&e.startsWith(f)))throw new Error(`Expected content-type to be ${f}, Actual: ${e}`)}var C=class{constructor(e,t,r){this.cacheManager=null;this.messageProcessor=null;this.baseUrl=e.baseUrl||"",this.headers=e.headers||{"Content-Type":"application/json"},this.overErrorTimer=e.overErrorTimer||60*1e3,this.currentEventHandlers=t||{onMessage:()=>{}},this.abortController=null,this.streamTimer=null,r&&(this.cacheManager=new u({maxCacheSize:r.maxCacheSize,cacheTimeout:r.cacheTimeout}),this.messageProcessor=new m(r.expectedSeq,this.cacheManager,this.currentEventHandlers.onMessage,r.handleValidateMessageFormat,r.getIndexValue))}async sendStreamRequest(e,t,r){r&&(this.baseUrl=(r==null?void 0:r.baseUrl)||this.baseUrl,this.headers=y(y({},this.headers),r==null?void 0:r.headers),this.overErrorTimer=(r==null?void 0:r.overErrorTimer)||this.overErrorTimer),this.currentEventHandlers=t||this.currentEventHandlers,this.abortController=new AbortController;try{this.startTimer(),await this.executeFetchRequest(e)}catch(n){this.handleRequestError(n)}finally{this.clearTimer()}}disconnect(){var e;this.abortController&&(this.abortController.abort(),this.abortController=null),this.clearTimer(),(e=this.cacheManager)==null||e.destroy()}async executeFetchRequest(e){var t;await x(this.baseUrl,{method:"POST",headers:this.headers,body:JSON.stringify(this.buildRequestPayload(e)),openWhenHidden:!0,signal:(t=this.abortController)==null?void 0:t.signal,onopen:async r=>{this.handleOpenResponse(r)},onmessage:r=>this.handleServerMessage(r),onclose:()=>this.handleStreamClose(),onerror:()=>this.handleStreamError()})}handleServerMessage(e){var t,r,n,c;this.resetTimer();try{let s=JSON.parse(e.data);if(this.messageProcessor){this.messageProcessor.processMessage(s);return}(r=(t=this.currentEventHandlers).onMessage)==null||r.call(t,s),this.currentMessage=s}catch(s){(c=(n=this.currentEventHandlers).onParseError)==null||c.call(n,this.currentMessage,s)}}buildRequestPayload(e){return y({},e)}handleOpenResponse(e){var n,c,s,i;let t="text/event-stream",r=e.headers.get("content-type");e.ok&&r&&r.includes(t)||(e.status>=400&&e.status<500&&e.status!==429&&((c=(n=this.currentEventHandlers).onServerError)==null||c.call(n,this.currentMessage,new Error(e.statusText))),(i=(s=this.currentEventHandlers).onConnectionError)==null||i.call(s,this.currentMessage,new Error("Connection error")))}handleStreamClose(){var e,t;(t=(e=this.currentEventHandlers).onClose)==null||t.call(e,this.currentMessage),this.clearTimer()}handleStreamError(){var e,t;(t=(e=this.currentEventHandlers).onServerError)==null||t.call(e,this.currentMessage,new Error("Stream error")),this.clearTimer()}handleRequestError(e){var t,r;(r=(t=this.currentEventHandlers).onServerError)==null||r.call(t,this.currentMessage,e),this.clearTimer()}startTimer(){this.streamTimer=setTimeout(()=>{var e,t;(t=(e=this.currentEventHandlers).onStreamConnectionError)==null||t.call(e,this.currentMessage,new Error("Stream connection timed out")),this.disconnect()},this.overErrorTimer)}resetTimer(){this.clearTimer(),this.startTimer()}clearTimer(){this.streamTimer&&(clearTimeout(this.streamTimer),this.streamTimer=null)}};return _(Q);})(); 3 | -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # Guide to Using the Streaming Request Utility Library 2 | 3 | > The streaming request utility library provided by useAgent is specifically designed for large - model application scenarios. It supports Server - Sent Events (SSE) streaming **POST** communication and has core capabilities such as message caching, sequence guarantee, and end - to - end error handling, helping developers quickly implement a stable and reliable streaming interaction experience. 4 | 5 | ## Installation 6 | 7 | Install with any package manager: 8 | 9 | ```bash [npm] 10 | npm install @lesliechueng/stream-fetch-manage --save-dev 11 | ``` 12 | 13 | ```bash [yarn] 14 | yarn add @lesliechueng/stream-fetch-manage --save-dev 15 | ``` 16 | 17 | ```bash [pnpm] 18 | pnpm add @lesliechueng/stream-fetch-manage --save-dev 19 | ``` 20 | 21 | ## Basic Usage 22 | 23 | ```ts 24 | import { StreamFetchClient } from '@lesliechueng/stream-fetch-manage'; 25 | 26 | interface IContent { 27 | content: string; 28 | sequenceNumber: number; 29 | done?: boolean; 30 | } 31 | 32 | const streamFetch = new StreamFetchClient( 33 | { 34 | baseUrl: '/api/chat', 35 | headers: { 36 | 'Content - Type': 'application/json' 37 | }, 38 | overErrorTimer: 60 * 1000, // Timeout during streaming, in milliseconds 39 | }, 40 | { 41 | onMessage: (data: IContent) => { 42 | console.log('Received message:', data); 43 | }, 44 | onClose: (lastData: IContent) => { 45 | console.log('Connection closed', lastData); 46 | }, 47 | onServerError: (data: IContent, error: Error) => { 48 | console.error('Server error', error); 49 | }, 50 | onStreamConnectionError: (data: IContent, error: Error) => { 51 | console.error('Stream connection error:', error); 52 | }, 53 | onConnectionError: (data: IContent, error: Error) => { 54 | console.error('Connection error:', error); 55 | }, 56 | onParseError: (data: IContent, error: Error) => { 57 | console.error('Parse error:', error); 58 | } 59 | } 60 | ); 61 | 62 | // Start sending the request, the following are the specific parameters 63 | streamFetch.sendStreamRequest({ 64 | // Parameters for the streaming request 65 | }); 66 | 67 | // Pause the request 68 | streamFetch.disconnect(); 69 | ``` 70 | 71 | ## Advanced Configuration 72 | 73 | Message sequence guarantee and caching. When dealing with streaming messages that may **arrive out of order**, you can configure a message processor to ensure the sequence. 74 | 75 | ```ts 76 | import { StreamFetchClient } from '@lesliechueng/stream-fetch-manage'; 77 | 78 | interface IContent { 79 | content: string; 80 | sequenceNumber: number; 81 | done?: boolean; 82 | } 83 | 84 | const streamFetch = new StreamFetchClient( 85 | { 86 | baseUrl: '/api/chat', 87 | headers: { 88 | 'Content - Type': 'application/json' 89 | }, 90 | overErrorTimer: 60 * 1000, // Timeout during streaming, in milliseconds 91 | }, 92 | { 93 | onMessage: (data: IContent) => { 94 | console.log('Received message:', data); 95 | }, 96 | onClose: (lastData: IContent) => { 97 | console.log('Connection closed', lastData); 98 | }, 99 | onServerError: (data: IContent, error: Error) => { 100 | console.error('Server error', error); 101 | }, 102 | onStreamConnectionError: (data: IContent, error: Error) => { 103 | console.error('Stream connection error:', error); 104 | }, 105 | onConnectionError: (data: IContent, error: Error) => { 106 | console.error('Connection error:', error); 107 | }, 108 | onParseError: (data: IContent, error: Error) => { 109 | console.error('Parse error:', error); 110 | } 111 | }, 112 | { 113 | maxCacheSize: 6, // Maximum cache size, in number of messages 114 | cacheTimeout: 5000, // Cache timeout, in milliseconds 115 | expectedSeq: 0, // Expected initial message index value 116 | handleValidateMessageFormat: (data: IContent) => { 117 | // Validate the data type of the message sequence number 118 | if (typeof data.sequenceNumber!== 'number') { 119 | throw new Error('Message must have a numeric seq field'); 120 | } 121 | }, 122 | // Enable the message processor to obtain the index value of the message sequence number 123 | getIndexValue: (data: IContent) => data.sequenceNumber 124 | } 125 | ); 126 | ``` 127 | 128 | ## Core API 129 | 130 | ### StreamFetchClient Constructor 131 | 132 | ```typescript 133 | new StreamFetchClient(config, eventHandlers, processorConfig?) 134 | ``` 135 | 136 | | Parameter | Type | Description | 137 | | ----------------- | -------------------------- | ------------------------------------------- | 138 | | config | `IStreamFetchClientConfig` | Basic configuration | 139 | | eventHandlers | `ICurrentEventHandlers` | Set of event handlers | 140 | | processorConfig | `IProcessorConfig` | Message processor configuration (optional, for message sorting) | 141 | 142 | #### IStreamFetchClientConfig 143 | 144 | | Property | Type | Default Value | Description | 145 | | --------------- | ------------------------ | ------------------------------------------ | ---------------------------- | 146 | | baseUrl | `string` | `''` | Base URL for streaming requests | 147 | | headers | `Record` | `{ 'Content - Type': 'application/json' }` | Request headers | 148 | | overErrorTimer | `number` | `60000` | Timeout without messages (ms) | 149 | 150 | #### ICurrentEventHandlers 151 | 152 | | Method | Description | 153 | | ----------------------- | --------------------------- | 154 | | onMessage | Triggered when a message is received | 155 | | onStreamConnectionError | Triggered when the connection times out | 156 | | onConnectionError | Triggered when the connection fails to establish | 157 | | onServerError | Triggered when the server returns an error | 158 | | onParseError | Triggered when message parsing fails | 159 | | onClose | Triggered when the connection is closed | 160 | 161 | ### Instance Methods 162 | 163 | #### sendStreamRequest 164 | 165 | Send a streaming request 166 | 167 | ```typescript 168 | async sendStreamRequest( 169 | payload: Record, 170 | eventHandlers?: ICurrentEventHandlers | null, 171 | config?: IStreamFetchClientConfig 172 | ) 173 | ``` 174 | 175 | | Parameter | Type | Description | 176 | | ----------------- | -------------------------- | ----------------------------- | 177 | | payload | `Record` | Request body data | 178 | | eventHandlers | `ICurrentEventHandlers` | Temporary event handlers (optional) | 179 | | config | `IStreamFetchClientConfig` | Temporary configuration (optional) | 180 | 181 | #### disconnect 182 | 183 | Disconnect the current streaming connection and clean up resources 184 | 185 | ```typescript 186 | disconnect(); 187 | ``` 188 | 189 | ## Message Processing Mechanism 190 | 191 | When `processorConfig` is configured, the message processing flow is as follows: 192 | 193 | 1. After receiving a message, first perform format validation (`handleValidateMessageFormat`) 194 | 2. Extract the message sequence number (`getIndexValue`) 195 | 3. If the sequence number is as expected, process it directly and update the expected sequence number 196 | 4. If the sequence number is greater than expected, cache the message 197 | 5. After processing the current message, automatically check if the next expected message is in the cache 198 | 199 | This mechanism ensures that even if messages arrive out of order, they can ultimately be processed in the correct sequence. 200 | 201 | ## Precautions 202 | 203 | 1. Be sure to call the `disconnect()` method when the component is unmounted or the streaming connection is no longer needed to avoid memory leaks. 204 | 2. Reasonably configure `maxCacheSize` and `cacheTimeout` according to business requirements to balance memory usage and message reliability. 205 | 3. Strictly validate the message format in `handleValidateMessageFormat` to avoid processing illegal data. 206 | 4. For long - running streaming connections, it is recommended to implement a reconnection mechanism. -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@microsoft/fetch-event-source': 12 | specifier: ^2.0.1 13 | version: 2.0.1 14 | devDependencies: 15 | '@jest/globals': 16 | specifier: ^29.7.0 17 | version: 29.7.0 18 | '@types/jest': 19 | specifier: ^29.5.14 20 | version: 29.5.14 21 | '@types/node': 22 | specifier: ^24.3.1 23 | version: 24.3.1 24 | jest: 25 | specifier: ^29.7.0 26 | version: 29.7.0(@types/node@24.3.1) 27 | ts-jest: 28 | specifier: ^29.3.2 29 | version: 29.3.2(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.25.3)(jest@29.7.0(@types/node@24.3.1))(typescript@5.8.3) 30 | tslib: 31 | specifier: ^2.8.1 32 | version: 2.8.1 33 | tsup: 34 | specifier: ^8.4.0 35 | version: 8.4.0(typescript@5.8.3) 36 | typescript: 37 | specifier: ^5.8.3 38 | version: 5.8.3 39 | 40 | packages: 41 | 42 | '@ampproject/remapping@2.3.0': 43 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 44 | engines: {node: '>=6.0.0'} 45 | 46 | '@babel/code-frame@7.26.2': 47 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 48 | engines: {node: '>=6.9.0'} 49 | 50 | '@babel/compat-data@7.26.8': 51 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 52 | engines: {node: '>=6.9.0'} 53 | 54 | '@babel/core@7.26.10': 55 | resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} 56 | engines: {node: '>=6.9.0'} 57 | 58 | '@babel/generator@7.27.0': 59 | resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} 60 | engines: {node: '>=6.9.0'} 61 | 62 | '@babel/helper-compilation-targets@7.27.0': 63 | resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | '@babel/helper-module-imports@7.25.9': 67 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 68 | engines: {node: '>=6.9.0'} 69 | 70 | '@babel/helper-module-transforms@7.26.0': 71 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 72 | engines: {node: '>=6.9.0'} 73 | peerDependencies: 74 | '@babel/core': ^7.0.0 75 | 76 | '@babel/helper-plugin-utils@7.26.5': 77 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 78 | engines: {node: '>=6.9.0'} 79 | 80 | '@babel/helper-string-parser@7.25.9': 81 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 82 | engines: {node: '>=6.9.0'} 83 | 84 | '@babel/helper-validator-identifier@7.25.9': 85 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/helper-validator-option@7.25.9': 89 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/helpers@7.27.0': 93 | resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/parser@7.27.0': 97 | resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} 98 | engines: {node: '>=6.0.0'} 99 | hasBin: true 100 | 101 | '@babel/plugin-syntax-async-generators@7.8.4': 102 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 103 | peerDependencies: 104 | '@babel/core': ^7.0.0-0 105 | 106 | '@babel/plugin-syntax-bigint@7.8.3': 107 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 108 | peerDependencies: 109 | '@babel/core': ^7.0.0-0 110 | 111 | '@babel/plugin-syntax-class-properties@7.12.13': 112 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 113 | peerDependencies: 114 | '@babel/core': ^7.0.0-0 115 | 116 | '@babel/plugin-syntax-class-static-block@7.14.5': 117 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 118 | engines: {node: '>=6.9.0'} 119 | peerDependencies: 120 | '@babel/core': ^7.0.0-0 121 | 122 | '@babel/plugin-syntax-import-attributes@7.26.0': 123 | resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 124 | engines: {node: '>=6.9.0'} 125 | peerDependencies: 126 | '@babel/core': ^7.0.0-0 127 | 128 | '@babel/plugin-syntax-import-meta@7.10.4': 129 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 130 | peerDependencies: 131 | '@babel/core': ^7.0.0-0 132 | 133 | '@babel/plugin-syntax-json-strings@7.8.3': 134 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 135 | peerDependencies: 136 | '@babel/core': ^7.0.0-0 137 | 138 | '@babel/plugin-syntax-jsx@7.25.9': 139 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 140 | engines: {node: '>=6.9.0'} 141 | peerDependencies: 142 | '@babel/core': ^7.0.0-0 143 | 144 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4': 145 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 146 | peerDependencies: 147 | '@babel/core': ^7.0.0-0 148 | 149 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': 150 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 151 | peerDependencies: 152 | '@babel/core': ^7.0.0-0 153 | 154 | '@babel/plugin-syntax-numeric-separator@7.10.4': 155 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 156 | peerDependencies: 157 | '@babel/core': ^7.0.0-0 158 | 159 | '@babel/plugin-syntax-object-rest-spread@7.8.3': 160 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 161 | peerDependencies: 162 | '@babel/core': ^7.0.0-0 163 | 164 | '@babel/plugin-syntax-optional-catch-binding@7.8.3': 165 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 166 | peerDependencies: 167 | '@babel/core': ^7.0.0-0 168 | 169 | '@babel/plugin-syntax-optional-chaining@7.8.3': 170 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 171 | peerDependencies: 172 | '@babel/core': ^7.0.0-0 173 | 174 | '@babel/plugin-syntax-private-property-in-object@7.14.5': 175 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 176 | engines: {node: '>=6.9.0'} 177 | peerDependencies: 178 | '@babel/core': ^7.0.0-0 179 | 180 | '@babel/plugin-syntax-top-level-await@7.14.5': 181 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 182 | engines: {node: '>=6.9.0'} 183 | peerDependencies: 184 | '@babel/core': ^7.0.0-0 185 | 186 | '@babel/plugin-syntax-typescript@7.25.9': 187 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} 188 | engines: {node: '>=6.9.0'} 189 | peerDependencies: 190 | '@babel/core': ^7.0.0-0 191 | 192 | '@babel/template@7.27.0': 193 | resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} 194 | engines: {node: '>=6.9.0'} 195 | 196 | '@babel/traverse@7.27.0': 197 | resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} 198 | engines: {node: '>=6.9.0'} 199 | 200 | '@babel/types@7.27.0': 201 | resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} 202 | engines: {node: '>=6.9.0'} 203 | 204 | '@bcoe/v8-coverage@0.2.3': 205 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 206 | 207 | '@esbuild/aix-ppc64@0.25.3': 208 | resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} 209 | engines: {node: '>=18'} 210 | cpu: [ppc64] 211 | os: [aix] 212 | 213 | '@esbuild/android-arm64@0.25.3': 214 | resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} 215 | engines: {node: '>=18'} 216 | cpu: [arm64] 217 | os: [android] 218 | 219 | '@esbuild/android-arm@0.25.3': 220 | resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} 221 | engines: {node: '>=18'} 222 | cpu: [arm] 223 | os: [android] 224 | 225 | '@esbuild/android-x64@0.25.3': 226 | resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} 227 | engines: {node: '>=18'} 228 | cpu: [x64] 229 | os: [android] 230 | 231 | '@esbuild/darwin-arm64@0.25.3': 232 | resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} 233 | engines: {node: '>=18'} 234 | cpu: [arm64] 235 | os: [darwin] 236 | 237 | '@esbuild/darwin-x64@0.25.3': 238 | resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} 239 | engines: {node: '>=18'} 240 | cpu: [x64] 241 | os: [darwin] 242 | 243 | '@esbuild/freebsd-arm64@0.25.3': 244 | resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} 245 | engines: {node: '>=18'} 246 | cpu: [arm64] 247 | os: [freebsd] 248 | 249 | '@esbuild/freebsd-x64@0.25.3': 250 | resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} 251 | engines: {node: '>=18'} 252 | cpu: [x64] 253 | os: [freebsd] 254 | 255 | '@esbuild/linux-arm64@0.25.3': 256 | resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} 257 | engines: {node: '>=18'} 258 | cpu: [arm64] 259 | os: [linux] 260 | 261 | '@esbuild/linux-arm@0.25.3': 262 | resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} 263 | engines: {node: '>=18'} 264 | cpu: [arm] 265 | os: [linux] 266 | 267 | '@esbuild/linux-ia32@0.25.3': 268 | resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} 269 | engines: {node: '>=18'} 270 | cpu: [ia32] 271 | os: [linux] 272 | 273 | '@esbuild/linux-loong64@0.25.3': 274 | resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} 275 | engines: {node: '>=18'} 276 | cpu: [loong64] 277 | os: [linux] 278 | 279 | '@esbuild/linux-mips64el@0.25.3': 280 | resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} 281 | engines: {node: '>=18'} 282 | cpu: [mips64el] 283 | os: [linux] 284 | 285 | '@esbuild/linux-ppc64@0.25.3': 286 | resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} 287 | engines: {node: '>=18'} 288 | cpu: [ppc64] 289 | os: [linux] 290 | 291 | '@esbuild/linux-riscv64@0.25.3': 292 | resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} 293 | engines: {node: '>=18'} 294 | cpu: [riscv64] 295 | os: [linux] 296 | 297 | '@esbuild/linux-s390x@0.25.3': 298 | resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} 299 | engines: {node: '>=18'} 300 | cpu: [s390x] 301 | os: [linux] 302 | 303 | '@esbuild/linux-x64@0.25.3': 304 | resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} 305 | engines: {node: '>=18'} 306 | cpu: [x64] 307 | os: [linux] 308 | 309 | '@esbuild/netbsd-arm64@0.25.3': 310 | resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} 311 | engines: {node: '>=18'} 312 | cpu: [arm64] 313 | os: [netbsd] 314 | 315 | '@esbuild/netbsd-x64@0.25.3': 316 | resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} 317 | engines: {node: '>=18'} 318 | cpu: [x64] 319 | os: [netbsd] 320 | 321 | '@esbuild/openbsd-arm64@0.25.3': 322 | resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} 323 | engines: {node: '>=18'} 324 | cpu: [arm64] 325 | os: [openbsd] 326 | 327 | '@esbuild/openbsd-x64@0.25.3': 328 | resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} 329 | engines: {node: '>=18'} 330 | cpu: [x64] 331 | os: [openbsd] 332 | 333 | '@esbuild/sunos-x64@0.25.3': 334 | resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} 335 | engines: {node: '>=18'} 336 | cpu: [x64] 337 | os: [sunos] 338 | 339 | '@esbuild/win32-arm64@0.25.3': 340 | resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} 341 | engines: {node: '>=18'} 342 | cpu: [arm64] 343 | os: [win32] 344 | 345 | '@esbuild/win32-ia32@0.25.3': 346 | resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} 347 | engines: {node: '>=18'} 348 | cpu: [ia32] 349 | os: [win32] 350 | 351 | '@esbuild/win32-x64@0.25.3': 352 | resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} 353 | engines: {node: '>=18'} 354 | cpu: [x64] 355 | os: [win32] 356 | 357 | '@isaacs/cliui@8.0.2': 358 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 359 | engines: {node: '>=12'} 360 | 361 | '@istanbuljs/load-nyc-config@1.1.0': 362 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 363 | engines: {node: '>=8'} 364 | 365 | '@istanbuljs/schema@0.1.3': 366 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 367 | engines: {node: '>=8'} 368 | 369 | '@jest/console@29.7.0': 370 | resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} 371 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 372 | 373 | '@jest/core@29.7.0': 374 | resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} 375 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 376 | peerDependencies: 377 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 378 | peerDependenciesMeta: 379 | node-notifier: 380 | optional: true 381 | 382 | '@jest/environment@29.7.0': 383 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 384 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 385 | 386 | '@jest/expect-utils@29.7.0': 387 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 388 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 389 | 390 | '@jest/expect@29.7.0': 391 | resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} 392 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 393 | 394 | '@jest/fake-timers@29.7.0': 395 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 396 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 397 | 398 | '@jest/globals@29.7.0': 399 | resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} 400 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 401 | 402 | '@jest/reporters@29.7.0': 403 | resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} 404 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 405 | peerDependencies: 406 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 407 | peerDependenciesMeta: 408 | node-notifier: 409 | optional: true 410 | 411 | '@jest/schemas@29.6.3': 412 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 413 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 414 | 415 | '@jest/source-map@29.6.3': 416 | resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} 417 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 418 | 419 | '@jest/test-result@29.7.0': 420 | resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} 421 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 422 | 423 | '@jest/test-sequencer@29.7.0': 424 | resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} 425 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 426 | 427 | '@jest/transform@29.7.0': 428 | resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} 429 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 430 | 431 | '@jest/types@29.6.3': 432 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 433 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 434 | 435 | '@jridgewell/gen-mapping@0.3.8': 436 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 437 | engines: {node: '>=6.0.0'} 438 | 439 | '@jridgewell/resolve-uri@3.1.2': 440 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 441 | engines: {node: '>=6.0.0'} 442 | 443 | '@jridgewell/set-array@1.2.1': 444 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 445 | engines: {node: '>=6.0.0'} 446 | 447 | '@jridgewell/sourcemap-codec@1.5.0': 448 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 449 | 450 | '@jridgewell/trace-mapping@0.3.25': 451 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 452 | 453 | '@microsoft/fetch-event-source@2.0.1': 454 | resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==} 455 | 456 | '@pkgjs/parseargs@0.11.0': 457 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 458 | engines: {node: '>=14'} 459 | 460 | '@rollup/rollup-android-arm-eabi@4.40.0': 461 | resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} 462 | cpu: [arm] 463 | os: [android] 464 | 465 | '@rollup/rollup-android-arm64@4.40.0': 466 | resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==} 467 | cpu: [arm64] 468 | os: [android] 469 | 470 | '@rollup/rollup-darwin-arm64@4.40.0': 471 | resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==} 472 | cpu: [arm64] 473 | os: [darwin] 474 | 475 | '@rollup/rollup-darwin-x64@4.40.0': 476 | resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==} 477 | cpu: [x64] 478 | os: [darwin] 479 | 480 | '@rollup/rollup-freebsd-arm64@4.40.0': 481 | resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==} 482 | cpu: [arm64] 483 | os: [freebsd] 484 | 485 | '@rollup/rollup-freebsd-x64@4.40.0': 486 | resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==} 487 | cpu: [x64] 488 | os: [freebsd] 489 | 490 | '@rollup/rollup-linux-arm-gnueabihf@4.40.0': 491 | resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} 492 | cpu: [arm] 493 | os: [linux] 494 | libc: [glibc] 495 | 496 | '@rollup/rollup-linux-arm-musleabihf@4.40.0': 497 | resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} 498 | cpu: [arm] 499 | os: [linux] 500 | libc: [musl] 501 | 502 | '@rollup/rollup-linux-arm64-gnu@4.40.0': 503 | resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} 504 | cpu: [arm64] 505 | os: [linux] 506 | libc: [glibc] 507 | 508 | '@rollup/rollup-linux-arm64-musl@4.40.0': 509 | resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} 510 | cpu: [arm64] 511 | os: [linux] 512 | libc: [musl] 513 | 514 | '@rollup/rollup-linux-loongarch64-gnu@4.40.0': 515 | resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} 516 | cpu: [loong64] 517 | os: [linux] 518 | libc: [glibc] 519 | 520 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': 521 | resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} 522 | cpu: [ppc64] 523 | os: [linux] 524 | libc: [glibc] 525 | 526 | '@rollup/rollup-linux-riscv64-gnu@4.40.0': 527 | resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} 528 | cpu: [riscv64] 529 | os: [linux] 530 | libc: [glibc] 531 | 532 | '@rollup/rollup-linux-riscv64-musl@4.40.0': 533 | resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} 534 | cpu: [riscv64] 535 | os: [linux] 536 | libc: [musl] 537 | 538 | '@rollup/rollup-linux-s390x-gnu@4.40.0': 539 | resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} 540 | cpu: [s390x] 541 | os: [linux] 542 | libc: [glibc] 543 | 544 | '@rollup/rollup-linux-x64-gnu@4.40.0': 545 | resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} 546 | cpu: [x64] 547 | os: [linux] 548 | libc: [glibc] 549 | 550 | '@rollup/rollup-linux-x64-musl@4.40.0': 551 | resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} 552 | cpu: [x64] 553 | os: [linux] 554 | libc: [musl] 555 | 556 | '@rollup/rollup-win32-arm64-msvc@4.40.0': 557 | resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} 558 | cpu: [arm64] 559 | os: [win32] 560 | 561 | '@rollup/rollup-win32-ia32-msvc@4.40.0': 562 | resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==} 563 | cpu: [ia32] 564 | os: [win32] 565 | 566 | '@rollup/rollup-win32-x64-msvc@4.40.0': 567 | resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==} 568 | cpu: [x64] 569 | os: [win32] 570 | 571 | '@sinclair/typebox@0.27.8': 572 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 573 | 574 | '@sinonjs/commons@3.0.1': 575 | resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} 576 | 577 | '@sinonjs/fake-timers@10.3.0': 578 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 579 | 580 | '@types/babel__core@7.20.5': 581 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 582 | 583 | '@types/babel__generator@7.27.0': 584 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 585 | 586 | '@types/babel__template@7.4.4': 587 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 588 | 589 | '@types/babel__traverse@7.20.7': 590 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} 591 | 592 | '@types/estree@1.0.7': 593 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 594 | 595 | '@types/graceful-fs@4.1.9': 596 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 597 | 598 | '@types/istanbul-lib-coverage@2.0.6': 599 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 600 | 601 | '@types/istanbul-lib-report@3.0.3': 602 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 603 | 604 | '@types/istanbul-reports@3.0.4': 605 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 606 | 607 | '@types/jest@29.5.14': 608 | resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} 609 | 610 | '@types/node@24.3.1': 611 | resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} 612 | 613 | '@types/stack-utils@2.0.3': 614 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 615 | 616 | '@types/yargs-parser@21.0.3': 617 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 618 | 619 | '@types/yargs@17.0.33': 620 | resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} 621 | 622 | ansi-escapes@4.3.2: 623 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 624 | engines: {node: '>=8'} 625 | 626 | ansi-regex@5.0.1: 627 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 628 | engines: {node: '>=8'} 629 | 630 | ansi-regex@6.1.0: 631 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 632 | engines: {node: '>=12'} 633 | 634 | ansi-styles@4.3.0: 635 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 636 | engines: {node: '>=8'} 637 | 638 | ansi-styles@5.2.0: 639 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 640 | engines: {node: '>=10'} 641 | 642 | ansi-styles@6.2.1: 643 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 644 | engines: {node: '>=12'} 645 | 646 | any-promise@1.3.0: 647 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 648 | 649 | anymatch@3.1.3: 650 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 651 | engines: {node: '>= 8'} 652 | 653 | argparse@1.0.10: 654 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 655 | 656 | async@3.2.6: 657 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 658 | 659 | babel-jest@29.7.0: 660 | resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} 661 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 662 | peerDependencies: 663 | '@babel/core': ^7.8.0 664 | 665 | babel-plugin-istanbul@6.1.1: 666 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 667 | engines: {node: '>=8'} 668 | 669 | babel-plugin-jest-hoist@29.6.3: 670 | resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} 671 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 672 | 673 | babel-preset-current-node-syntax@1.1.0: 674 | resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} 675 | peerDependencies: 676 | '@babel/core': ^7.0.0 677 | 678 | babel-preset-jest@29.6.3: 679 | resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} 680 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 681 | peerDependencies: 682 | '@babel/core': ^7.0.0 683 | 684 | balanced-match@1.0.2: 685 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 686 | 687 | brace-expansion@1.1.11: 688 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 689 | 690 | brace-expansion@2.0.1: 691 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 692 | 693 | braces@3.0.3: 694 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 695 | engines: {node: '>=8'} 696 | 697 | browserslist@4.24.4: 698 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 699 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 700 | hasBin: true 701 | 702 | bs-logger@0.2.6: 703 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 704 | engines: {node: '>= 6'} 705 | 706 | bser@2.1.1: 707 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 708 | 709 | buffer-from@1.1.2: 710 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 711 | 712 | bundle-require@5.1.0: 713 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 714 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 715 | peerDependencies: 716 | esbuild: '>=0.18' 717 | 718 | cac@6.7.14: 719 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 720 | engines: {node: '>=8'} 721 | 722 | callsites@3.1.0: 723 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 724 | engines: {node: '>=6'} 725 | 726 | camelcase@5.3.1: 727 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 728 | engines: {node: '>=6'} 729 | 730 | camelcase@6.3.0: 731 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 732 | engines: {node: '>=10'} 733 | 734 | caniuse-lite@1.0.30001715: 735 | resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} 736 | 737 | chalk@4.1.2: 738 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 739 | engines: {node: '>=10'} 740 | 741 | char-regex@1.0.2: 742 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 743 | engines: {node: '>=10'} 744 | 745 | chokidar@4.0.3: 746 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 747 | engines: {node: '>= 14.16.0'} 748 | 749 | ci-info@3.9.0: 750 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 751 | engines: {node: '>=8'} 752 | 753 | cjs-module-lexer@1.4.3: 754 | resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} 755 | 756 | cliui@8.0.1: 757 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 758 | engines: {node: '>=12'} 759 | 760 | co@4.6.0: 761 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 762 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 763 | 764 | collect-v8-coverage@1.0.2: 765 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 766 | 767 | color-convert@2.0.1: 768 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 769 | engines: {node: '>=7.0.0'} 770 | 771 | color-name@1.1.4: 772 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 773 | 774 | commander@4.1.1: 775 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 776 | engines: {node: '>= 6'} 777 | 778 | concat-map@0.0.1: 779 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 780 | 781 | consola@3.4.2: 782 | resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 783 | engines: {node: ^14.18.0 || >=16.10.0} 784 | 785 | convert-source-map@2.0.0: 786 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 787 | 788 | create-jest@29.7.0: 789 | resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} 790 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 791 | hasBin: true 792 | 793 | cross-spawn@7.0.6: 794 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 795 | engines: {node: '>= 8'} 796 | 797 | debug@4.4.0: 798 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 799 | engines: {node: '>=6.0'} 800 | peerDependencies: 801 | supports-color: '*' 802 | peerDependenciesMeta: 803 | supports-color: 804 | optional: true 805 | 806 | dedent@1.5.3: 807 | resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} 808 | peerDependencies: 809 | babel-plugin-macros: ^3.1.0 810 | peerDependenciesMeta: 811 | babel-plugin-macros: 812 | optional: true 813 | 814 | deepmerge@4.3.1: 815 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 816 | engines: {node: '>=0.10.0'} 817 | 818 | detect-newline@3.1.0: 819 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 820 | engines: {node: '>=8'} 821 | 822 | diff-sequences@29.6.3: 823 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 824 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 825 | 826 | eastasianwidth@0.2.0: 827 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 828 | 829 | ejs@3.1.10: 830 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} 831 | engines: {node: '>=0.10.0'} 832 | hasBin: true 833 | 834 | electron-to-chromium@1.5.142: 835 | resolution: {integrity: sha512-Ah2HgkTu/9RhTDNThBtzu2Wirdy4DC9b0sMT1pUhbkZQ5U/iwmE+PHZX1MpjD5IkJCc2wSghgGG/B04szAx07w==} 836 | 837 | emittery@0.13.1: 838 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 839 | engines: {node: '>=12'} 840 | 841 | emoji-regex@8.0.0: 842 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 843 | 844 | emoji-regex@9.2.2: 845 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 846 | 847 | error-ex@1.3.2: 848 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 849 | 850 | esbuild@0.25.3: 851 | resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} 852 | engines: {node: '>=18'} 853 | hasBin: true 854 | 855 | escalade@3.2.0: 856 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 857 | engines: {node: '>=6'} 858 | 859 | escape-string-regexp@2.0.0: 860 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 861 | engines: {node: '>=8'} 862 | 863 | esprima@4.0.1: 864 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 865 | engines: {node: '>=4'} 866 | hasBin: true 867 | 868 | execa@5.1.1: 869 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 870 | engines: {node: '>=10'} 871 | 872 | exit@0.1.2: 873 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 874 | engines: {node: '>= 0.8.0'} 875 | 876 | expect@29.7.0: 877 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 878 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 879 | 880 | fast-json-stable-stringify@2.1.0: 881 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 882 | 883 | fb-watchman@2.0.2: 884 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 885 | 886 | fdir@6.4.4: 887 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 888 | peerDependencies: 889 | picomatch: ^3 || ^4 890 | peerDependenciesMeta: 891 | picomatch: 892 | optional: true 893 | 894 | filelist@1.0.4: 895 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 896 | 897 | fill-range@7.1.1: 898 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 899 | engines: {node: '>=8'} 900 | 901 | find-up@4.1.0: 902 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 903 | engines: {node: '>=8'} 904 | 905 | foreground-child@3.3.1: 906 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 907 | engines: {node: '>=14'} 908 | 909 | fs.realpath@1.0.0: 910 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 911 | 912 | fsevents@2.3.3: 913 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 914 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 915 | os: [darwin] 916 | 917 | function-bind@1.1.2: 918 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 919 | 920 | gensync@1.0.0-beta.2: 921 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 922 | engines: {node: '>=6.9.0'} 923 | 924 | get-caller-file@2.0.5: 925 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 926 | engines: {node: 6.* || 8.* || >= 10.*} 927 | 928 | get-package-type@0.1.0: 929 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 930 | engines: {node: '>=8.0.0'} 931 | 932 | get-stream@6.0.1: 933 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 934 | engines: {node: '>=10'} 935 | 936 | glob@10.4.5: 937 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 938 | hasBin: true 939 | 940 | glob@7.2.3: 941 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 942 | deprecated: Glob versions prior to v9 are no longer supported 943 | 944 | globals@11.12.0: 945 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 946 | engines: {node: '>=4'} 947 | 948 | graceful-fs@4.2.11: 949 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 950 | 951 | has-flag@4.0.0: 952 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 953 | engines: {node: '>=8'} 954 | 955 | hasown@2.0.2: 956 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 957 | engines: {node: '>= 0.4'} 958 | 959 | html-escaper@2.0.2: 960 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 961 | 962 | human-signals@2.1.0: 963 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 964 | engines: {node: '>=10.17.0'} 965 | 966 | import-local@3.2.0: 967 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} 968 | engines: {node: '>=8'} 969 | hasBin: true 970 | 971 | imurmurhash@0.1.4: 972 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 973 | engines: {node: '>=0.8.19'} 974 | 975 | inflight@1.0.6: 976 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 977 | 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. 978 | 979 | inherits@2.0.4: 980 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 981 | 982 | is-arrayish@0.2.1: 983 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 984 | 985 | is-core-module@2.16.1: 986 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 987 | engines: {node: '>= 0.4'} 988 | 989 | is-fullwidth-code-point@3.0.0: 990 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 991 | engines: {node: '>=8'} 992 | 993 | is-generator-fn@2.1.0: 994 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 995 | engines: {node: '>=6'} 996 | 997 | is-number@7.0.0: 998 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 999 | engines: {node: '>=0.12.0'} 1000 | 1001 | is-stream@2.0.1: 1002 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1003 | engines: {node: '>=8'} 1004 | 1005 | isexe@2.0.0: 1006 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1007 | 1008 | istanbul-lib-coverage@3.2.2: 1009 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 1010 | engines: {node: '>=8'} 1011 | 1012 | istanbul-lib-instrument@5.2.1: 1013 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 1014 | engines: {node: '>=8'} 1015 | 1016 | istanbul-lib-instrument@6.0.3: 1017 | resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} 1018 | engines: {node: '>=10'} 1019 | 1020 | istanbul-lib-report@3.0.1: 1021 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 1022 | engines: {node: '>=10'} 1023 | 1024 | istanbul-lib-source-maps@4.0.1: 1025 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 1026 | engines: {node: '>=10'} 1027 | 1028 | istanbul-reports@3.1.7: 1029 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 1030 | engines: {node: '>=8'} 1031 | 1032 | jackspeak@3.4.3: 1033 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1034 | 1035 | jake@10.9.2: 1036 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} 1037 | engines: {node: '>=10'} 1038 | hasBin: true 1039 | 1040 | jest-changed-files@29.7.0: 1041 | resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} 1042 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1043 | 1044 | jest-circus@29.7.0: 1045 | resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} 1046 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1047 | 1048 | jest-cli@29.7.0: 1049 | resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} 1050 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1051 | hasBin: true 1052 | peerDependencies: 1053 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1054 | peerDependenciesMeta: 1055 | node-notifier: 1056 | optional: true 1057 | 1058 | jest-config@29.7.0: 1059 | resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} 1060 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1061 | peerDependencies: 1062 | '@types/node': '*' 1063 | ts-node: '>=9.0.0' 1064 | peerDependenciesMeta: 1065 | '@types/node': 1066 | optional: true 1067 | ts-node: 1068 | optional: true 1069 | 1070 | jest-diff@29.7.0: 1071 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1072 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1073 | 1074 | jest-docblock@29.7.0: 1075 | resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} 1076 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1077 | 1078 | jest-each@29.7.0: 1079 | resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} 1080 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1081 | 1082 | jest-environment-node@29.7.0: 1083 | resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} 1084 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.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@29.7.0: 1091 | resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} 1092 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1093 | 1094 | jest-leak-detector@29.7.0: 1095 | resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 1096 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.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-message-util@29.7.0: 1103 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 1104 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1105 | 1106 | jest-mock@29.7.0: 1107 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 1108 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1109 | 1110 | jest-pnp-resolver@1.2.3: 1111 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 1112 | engines: {node: '>=6'} 1113 | peerDependencies: 1114 | jest-resolve: '*' 1115 | peerDependenciesMeta: 1116 | jest-resolve: 1117 | optional: true 1118 | 1119 | jest-regex-util@29.6.3: 1120 | resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} 1121 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1122 | 1123 | jest-resolve-dependencies@29.7.0: 1124 | resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} 1125 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1126 | 1127 | jest-resolve@29.7.0: 1128 | resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} 1129 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1130 | 1131 | jest-runner@29.7.0: 1132 | resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} 1133 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1134 | 1135 | jest-runtime@29.7.0: 1136 | resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} 1137 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1138 | 1139 | jest-snapshot@29.7.0: 1140 | resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} 1141 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1142 | 1143 | jest-util@29.7.0: 1144 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 1145 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1146 | 1147 | jest-validate@29.7.0: 1148 | resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} 1149 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1150 | 1151 | jest-watcher@29.7.0: 1152 | resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} 1153 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1154 | 1155 | jest-worker@29.7.0: 1156 | resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} 1157 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1158 | 1159 | jest@29.7.0: 1160 | resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} 1161 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1162 | hasBin: true 1163 | peerDependencies: 1164 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 1165 | peerDependenciesMeta: 1166 | node-notifier: 1167 | optional: true 1168 | 1169 | joycon@3.1.1: 1170 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1171 | engines: {node: '>=10'} 1172 | 1173 | js-tokens@4.0.0: 1174 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1175 | 1176 | js-yaml@3.14.1: 1177 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1178 | hasBin: true 1179 | 1180 | jsesc@3.1.0: 1181 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1182 | engines: {node: '>=6'} 1183 | hasBin: true 1184 | 1185 | json-parse-even-better-errors@2.3.1: 1186 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1187 | 1188 | json5@2.2.3: 1189 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1190 | engines: {node: '>=6'} 1191 | hasBin: true 1192 | 1193 | kleur@3.0.3: 1194 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1195 | engines: {node: '>=6'} 1196 | 1197 | leven@3.1.0: 1198 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 1199 | engines: {node: '>=6'} 1200 | 1201 | lilconfig@3.1.3: 1202 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1203 | engines: {node: '>=14'} 1204 | 1205 | lines-and-columns@1.2.4: 1206 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1207 | 1208 | load-tsconfig@0.2.5: 1209 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1210 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1211 | 1212 | locate-path@5.0.0: 1213 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1214 | engines: {node: '>=8'} 1215 | 1216 | lodash.memoize@4.1.2: 1217 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 1218 | 1219 | lodash.sortby@4.7.0: 1220 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1221 | 1222 | lru-cache@10.4.3: 1223 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1224 | 1225 | lru-cache@5.1.1: 1226 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1227 | 1228 | make-dir@4.0.0: 1229 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1230 | engines: {node: '>=10'} 1231 | 1232 | make-error@1.3.6: 1233 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1234 | 1235 | makeerror@1.0.12: 1236 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 1237 | 1238 | merge-stream@2.0.0: 1239 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1240 | 1241 | micromatch@4.0.8: 1242 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1243 | engines: {node: '>=8.6'} 1244 | 1245 | mimic-fn@2.1.0: 1246 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1247 | engines: {node: '>=6'} 1248 | 1249 | minimatch@3.1.2: 1250 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1251 | 1252 | minimatch@5.1.6: 1253 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1254 | engines: {node: '>=10'} 1255 | 1256 | minimatch@9.0.5: 1257 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1258 | engines: {node: '>=16 || 14 >=14.17'} 1259 | 1260 | minipass@7.1.2: 1261 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1262 | engines: {node: '>=16 || 14 >=14.17'} 1263 | 1264 | ms@2.1.3: 1265 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1266 | 1267 | mz@2.7.0: 1268 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1269 | 1270 | natural-compare@1.4.0: 1271 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1272 | 1273 | node-int64@0.4.0: 1274 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 1275 | 1276 | node-releases@2.0.19: 1277 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1278 | 1279 | normalize-path@3.0.0: 1280 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1281 | engines: {node: '>=0.10.0'} 1282 | 1283 | npm-run-path@4.0.1: 1284 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1285 | engines: {node: '>=8'} 1286 | 1287 | object-assign@4.1.1: 1288 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1289 | engines: {node: '>=0.10.0'} 1290 | 1291 | once@1.4.0: 1292 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1293 | 1294 | onetime@5.1.2: 1295 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1296 | engines: {node: '>=6'} 1297 | 1298 | p-limit@2.3.0: 1299 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1300 | engines: {node: '>=6'} 1301 | 1302 | p-limit@3.1.0: 1303 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1304 | engines: {node: '>=10'} 1305 | 1306 | p-locate@4.1.0: 1307 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1308 | engines: {node: '>=8'} 1309 | 1310 | p-try@2.2.0: 1311 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1312 | engines: {node: '>=6'} 1313 | 1314 | package-json-from-dist@1.0.1: 1315 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1316 | 1317 | parse-json@5.2.0: 1318 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1319 | engines: {node: '>=8'} 1320 | 1321 | path-exists@4.0.0: 1322 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1323 | engines: {node: '>=8'} 1324 | 1325 | path-is-absolute@1.0.1: 1326 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1327 | engines: {node: '>=0.10.0'} 1328 | 1329 | path-key@3.1.1: 1330 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1331 | engines: {node: '>=8'} 1332 | 1333 | path-parse@1.0.7: 1334 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1335 | 1336 | path-scurry@1.11.1: 1337 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1338 | engines: {node: '>=16 || 14 >=14.18'} 1339 | 1340 | picocolors@1.1.1: 1341 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1342 | 1343 | picomatch@2.3.1: 1344 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1345 | engines: {node: '>=8.6'} 1346 | 1347 | picomatch@4.0.2: 1348 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1349 | engines: {node: '>=12'} 1350 | 1351 | pirates@4.0.7: 1352 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 1353 | engines: {node: '>= 6'} 1354 | 1355 | pkg-dir@4.2.0: 1356 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1357 | engines: {node: '>=8'} 1358 | 1359 | postcss-load-config@6.0.1: 1360 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1361 | engines: {node: '>= 18'} 1362 | peerDependencies: 1363 | jiti: '>=1.21.0' 1364 | postcss: '>=8.0.9' 1365 | tsx: ^4.8.1 1366 | yaml: ^2.4.2 1367 | peerDependenciesMeta: 1368 | jiti: 1369 | optional: true 1370 | postcss: 1371 | optional: true 1372 | tsx: 1373 | optional: true 1374 | yaml: 1375 | optional: true 1376 | 1377 | pretty-format@29.7.0: 1378 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1379 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1380 | 1381 | prompts@2.4.2: 1382 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1383 | engines: {node: '>= 6'} 1384 | 1385 | punycode@2.3.1: 1386 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1387 | engines: {node: '>=6'} 1388 | 1389 | pure-rand@6.1.0: 1390 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 1391 | 1392 | react-is@18.3.1: 1393 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1394 | 1395 | readdirp@4.1.2: 1396 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1397 | engines: {node: '>= 14.18.0'} 1398 | 1399 | require-directory@2.1.1: 1400 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1401 | engines: {node: '>=0.10.0'} 1402 | 1403 | resolve-cwd@3.0.0: 1404 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 1405 | engines: {node: '>=8'} 1406 | 1407 | resolve-from@5.0.0: 1408 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1409 | engines: {node: '>=8'} 1410 | 1411 | resolve.exports@2.0.3: 1412 | resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} 1413 | engines: {node: '>=10'} 1414 | 1415 | resolve@1.22.10: 1416 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1417 | engines: {node: '>= 0.4'} 1418 | hasBin: true 1419 | 1420 | rollup@4.40.0: 1421 | resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} 1422 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1423 | hasBin: true 1424 | 1425 | semver@6.3.1: 1426 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1427 | hasBin: true 1428 | 1429 | semver@7.7.1: 1430 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1431 | engines: {node: '>=10'} 1432 | hasBin: true 1433 | 1434 | shebang-command@2.0.0: 1435 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1436 | engines: {node: '>=8'} 1437 | 1438 | shebang-regex@3.0.0: 1439 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1440 | engines: {node: '>=8'} 1441 | 1442 | signal-exit@3.0.7: 1443 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1444 | 1445 | signal-exit@4.1.0: 1446 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1447 | engines: {node: '>=14'} 1448 | 1449 | sisteransi@1.0.5: 1450 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1451 | 1452 | slash@3.0.0: 1453 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1454 | engines: {node: '>=8'} 1455 | 1456 | source-map-support@0.5.13: 1457 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 1458 | 1459 | source-map@0.6.1: 1460 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1461 | engines: {node: '>=0.10.0'} 1462 | 1463 | source-map@0.8.0-beta.0: 1464 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1465 | engines: {node: '>= 8'} 1466 | 1467 | sprintf-js@1.0.3: 1468 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1469 | 1470 | stack-utils@2.0.6: 1471 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 1472 | engines: {node: '>=10'} 1473 | 1474 | string-length@4.0.2: 1475 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 1476 | engines: {node: '>=10'} 1477 | 1478 | string-width@4.2.3: 1479 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1480 | engines: {node: '>=8'} 1481 | 1482 | string-width@5.1.2: 1483 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1484 | engines: {node: '>=12'} 1485 | 1486 | strip-ansi@6.0.1: 1487 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1488 | engines: {node: '>=8'} 1489 | 1490 | strip-ansi@7.1.0: 1491 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1492 | engines: {node: '>=12'} 1493 | 1494 | strip-bom@4.0.0: 1495 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 1496 | engines: {node: '>=8'} 1497 | 1498 | strip-final-newline@2.0.0: 1499 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1500 | engines: {node: '>=6'} 1501 | 1502 | strip-json-comments@3.1.1: 1503 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1504 | engines: {node: '>=8'} 1505 | 1506 | sucrase@3.35.0: 1507 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1508 | engines: {node: '>=16 || 14 >=14.17'} 1509 | hasBin: true 1510 | 1511 | supports-color@7.2.0: 1512 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1513 | engines: {node: '>=8'} 1514 | 1515 | supports-color@8.1.1: 1516 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1517 | engines: {node: '>=10'} 1518 | 1519 | supports-preserve-symlinks-flag@1.0.0: 1520 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1521 | engines: {node: '>= 0.4'} 1522 | 1523 | test-exclude@6.0.0: 1524 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 1525 | engines: {node: '>=8'} 1526 | 1527 | thenify-all@1.6.0: 1528 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1529 | engines: {node: '>=0.8'} 1530 | 1531 | thenify@3.3.1: 1532 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1533 | 1534 | tinyexec@0.3.2: 1535 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1536 | 1537 | tinyglobby@0.2.13: 1538 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} 1539 | engines: {node: '>=12.0.0'} 1540 | 1541 | tmpl@1.0.5: 1542 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 1543 | 1544 | to-regex-range@5.0.1: 1545 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1546 | engines: {node: '>=8.0'} 1547 | 1548 | tr46@1.0.1: 1549 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1550 | 1551 | tree-kill@1.2.2: 1552 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1553 | hasBin: true 1554 | 1555 | ts-interface-checker@0.1.13: 1556 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1557 | 1558 | ts-jest@29.3.2: 1559 | resolution: {integrity: sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==} 1560 | engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} 1561 | hasBin: true 1562 | peerDependencies: 1563 | '@babel/core': '>=7.0.0-beta.0 <8' 1564 | '@jest/transform': ^29.0.0 1565 | '@jest/types': ^29.0.0 1566 | babel-jest: ^29.0.0 1567 | esbuild: '*' 1568 | jest: ^29.0.0 1569 | typescript: '>=4.3 <6' 1570 | peerDependenciesMeta: 1571 | '@babel/core': 1572 | optional: true 1573 | '@jest/transform': 1574 | optional: true 1575 | '@jest/types': 1576 | optional: true 1577 | babel-jest: 1578 | optional: true 1579 | esbuild: 1580 | optional: true 1581 | 1582 | tslib@2.8.1: 1583 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1584 | 1585 | tsup@8.4.0: 1586 | resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} 1587 | engines: {node: '>=18'} 1588 | hasBin: true 1589 | peerDependencies: 1590 | '@microsoft/api-extractor': ^7.36.0 1591 | '@swc/core': ^1 1592 | postcss: ^8.4.12 1593 | typescript: '>=4.5.0' 1594 | peerDependenciesMeta: 1595 | '@microsoft/api-extractor': 1596 | optional: true 1597 | '@swc/core': 1598 | optional: true 1599 | postcss: 1600 | optional: true 1601 | typescript: 1602 | optional: true 1603 | 1604 | type-detect@4.0.8: 1605 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1606 | engines: {node: '>=4'} 1607 | 1608 | type-fest@0.21.3: 1609 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1610 | engines: {node: '>=10'} 1611 | 1612 | type-fest@4.40.0: 1613 | resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} 1614 | engines: {node: '>=16'} 1615 | 1616 | typescript@5.8.3: 1617 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1618 | engines: {node: '>=14.17'} 1619 | hasBin: true 1620 | 1621 | undici-types@7.10.0: 1622 | resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} 1623 | 1624 | update-browserslist-db@1.1.3: 1625 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1626 | hasBin: true 1627 | peerDependencies: 1628 | browserslist: '>= 4.21.0' 1629 | 1630 | v8-to-istanbul@9.3.0: 1631 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 1632 | engines: {node: '>=10.12.0'} 1633 | 1634 | walker@1.0.8: 1635 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 1636 | 1637 | webidl-conversions@4.0.2: 1638 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1639 | 1640 | whatwg-url@7.1.0: 1641 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1642 | 1643 | which@2.0.2: 1644 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1645 | engines: {node: '>= 8'} 1646 | hasBin: true 1647 | 1648 | wrap-ansi@7.0.0: 1649 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1650 | engines: {node: '>=10'} 1651 | 1652 | wrap-ansi@8.1.0: 1653 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1654 | engines: {node: '>=12'} 1655 | 1656 | wrappy@1.0.2: 1657 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1658 | 1659 | write-file-atomic@4.0.2: 1660 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 1661 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1662 | 1663 | y18n@5.0.8: 1664 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1665 | engines: {node: '>=10'} 1666 | 1667 | yallist@3.1.1: 1668 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1669 | 1670 | yargs-parser@21.1.1: 1671 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1672 | engines: {node: '>=12'} 1673 | 1674 | yargs@17.7.2: 1675 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1676 | engines: {node: '>=12'} 1677 | 1678 | yocto-queue@0.1.0: 1679 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1680 | engines: {node: '>=10'} 1681 | 1682 | snapshots: 1683 | 1684 | '@ampproject/remapping@2.3.0': 1685 | dependencies: 1686 | '@jridgewell/gen-mapping': 0.3.8 1687 | '@jridgewell/trace-mapping': 0.3.25 1688 | 1689 | '@babel/code-frame@7.26.2': 1690 | dependencies: 1691 | '@babel/helper-validator-identifier': 7.25.9 1692 | js-tokens: 4.0.0 1693 | picocolors: 1.1.1 1694 | 1695 | '@babel/compat-data@7.26.8': {} 1696 | 1697 | '@babel/core@7.26.10': 1698 | dependencies: 1699 | '@ampproject/remapping': 2.3.0 1700 | '@babel/code-frame': 7.26.2 1701 | '@babel/generator': 7.27.0 1702 | '@babel/helper-compilation-targets': 7.27.0 1703 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 1704 | '@babel/helpers': 7.27.0 1705 | '@babel/parser': 7.27.0 1706 | '@babel/template': 7.27.0 1707 | '@babel/traverse': 7.27.0 1708 | '@babel/types': 7.27.0 1709 | convert-source-map: 2.0.0 1710 | debug: 4.4.0 1711 | gensync: 1.0.0-beta.2 1712 | json5: 2.2.3 1713 | semver: 6.3.1 1714 | transitivePeerDependencies: 1715 | - supports-color 1716 | 1717 | '@babel/generator@7.27.0': 1718 | dependencies: 1719 | '@babel/parser': 7.27.0 1720 | '@babel/types': 7.27.0 1721 | '@jridgewell/gen-mapping': 0.3.8 1722 | '@jridgewell/trace-mapping': 0.3.25 1723 | jsesc: 3.1.0 1724 | 1725 | '@babel/helper-compilation-targets@7.27.0': 1726 | dependencies: 1727 | '@babel/compat-data': 7.26.8 1728 | '@babel/helper-validator-option': 7.25.9 1729 | browserslist: 4.24.4 1730 | lru-cache: 5.1.1 1731 | semver: 6.3.1 1732 | 1733 | '@babel/helper-module-imports@7.25.9': 1734 | dependencies: 1735 | '@babel/traverse': 7.27.0 1736 | '@babel/types': 7.27.0 1737 | transitivePeerDependencies: 1738 | - supports-color 1739 | 1740 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': 1741 | dependencies: 1742 | '@babel/core': 7.26.10 1743 | '@babel/helper-module-imports': 7.25.9 1744 | '@babel/helper-validator-identifier': 7.25.9 1745 | '@babel/traverse': 7.27.0 1746 | transitivePeerDependencies: 1747 | - supports-color 1748 | 1749 | '@babel/helper-plugin-utils@7.26.5': {} 1750 | 1751 | '@babel/helper-string-parser@7.25.9': {} 1752 | 1753 | '@babel/helper-validator-identifier@7.25.9': {} 1754 | 1755 | '@babel/helper-validator-option@7.25.9': {} 1756 | 1757 | '@babel/helpers@7.27.0': 1758 | dependencies: 1759 | '@babel/template': 7.27.0 1760 | '@babel/types': 7.27.0 1761 | 1762 | '@babel/parser@7.27.0': 1763 | dependencies: 1764 | '@babel/types': 7.27.0 1765 | 1766 | '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': 1767 | dependencies: 1768 | '@babel/core': 7.26.10 1769 | '@babel/helper-plugin-utils': 7.26.5 1770 | 1771 | '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': 1772 | dependencies: 1773 | '@babel/core': 7.26.10 1774 | '@babel/helper-plugin-utils': 7.26.5 1775 | 1776 | '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': 1777 | dependencies: 1778 | '@babel/core': 7.26.10 1779 | '@babel/helper-plugin-utils': 7.26.5 1780 | 1781 | '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': 1782 | dependencies: 1783 | '@babel/core': 7.26.10 1784 | '@babel/helper-plugin-utils': 7.26.5 1785 | 1786 | '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': 1787 | dependencies: 1788 | '@babel/core': 7.26.10 1789 | '@babel/helper-plugin-utils': 7.26.5 1790 | 1791 | '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': 1792 | dependencies: 1793 | '@babel/core': 7.26.10 1794 | '@babel/helper-plugin-utils': 7.26.5 1795 | 1796 | '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': 1797 | dependencies: 1798 | '@babel/core': 7.26.10 1799 | '@babel/helper-plugin-utils': 7.26.5 1800 | 1801 | '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': 1802 | dependencies: 1803 | '@babel/core': 7.26.10 1804 | '@babel/helper-plugin-utils': 7.26.5 1805 | 1806 | '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': 1807 | dependencies: 1808 | '@babel/core': 7.26.10 1809 | '@babel/helper-plugin-utils': 7.26.5 1810 | 1811 | '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': 1812 | dependencies: 1813 | '@babel/core': 7.26.10 1814 | '@babel/helper-plugin-utils': 7.26.5 1815 | 1816 | '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': 1817 | dependencies: 1818 | '@babel/core': 7.26.10 1819 | '@babel/helper-plugin-utils': 7.26.5 1820 | 1821 | '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': 1822 | dependencies: 1823 | '@babel/core': 7.26.10 1824 | '@babel/helper-plugin-utils': 7.26.5 1825 | 1826 | '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': 1827 | dependencies: 1828 | '@babel/core': 7.26.10 1829 | '@babel/helper-plugin-utils': 7.26.5 1830 | 1831 | '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': 1832 | dependencies: 1833 | '@babel/core': 7.26.10 1834 | '@babel/helper-plugin-utils': 7.26.5 1835 | 1836 | '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': 1837 | dependencies: 1838 | '@babel/core': 7.26.10 1839 | '@babel/helper-plugin-utils': 7.26.5 1840 | 1841 | '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': 1842 | dependencies: 1843 | '@babel/core': 7.26.10 1844 | '@babel/helper-plugin-utils': 7.26.5 1845 | 1846 | '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': 1847 | dependencies: 1848 | '@babel/core': 7.26.10 1849 | '@babel/helper-plugin-utils': 7.26.5 1850 | 1851 | '@babel/template@7.27.0': 1852 | dependencies: 1853 | '@babel/code-frame': 7.26.2 1854 | '@babel/parser': 7.27.0 1855 | '@babel/types': 7.27.0 1856 | 1857 | '@babel/traverse@7.27.0': 1858 | dependencies: 1859 | '@babel/code-frame': 7.26.2 1860 | '@babel/generator': 7.27.0 1861 | '@babel/parser': 7.27.0 1862 | '@babel/template': 7.27.0 1863 | '@babel/types': 7.27.0 1864 | debug: 4.4.0 1865 | globals: 11.12.0 1866 | transitivePeerDependencies: 1867 | - supports-color 1868 | 1869 | '@babel/types@7.27.0': 1870 | dependencies: 1871 | '@babel/helper-string-parser': 7.25.9 1872 | '@babel/helper-validator-identifier': 7.25.9 1873 | 1874 | '@bcoe/v8-coverage@0.2.3': {} 1875 | 1876 | '@esbuild/aix-ppc64@0.25.3': 1877 | optional: true 1878 | 1879 | '@esbuild/android-arm64@0.25.3': 1880 | optional: true 1881 | 1882 | '@esbuild/android-arm@0.25.3': 1883 | optional: true 1884 | 1885 | '@esbuild/android-x64@0.25.3': 1886 | optional: true 1887 | 1888 | '@esbuild/darwin-arm64@0.25.3': 1889 | optional: true 1890 | 1891 | '@esbuild/darwin-x64@0.25.3': 1892 | optional: true 1893 | 1894 | '@esbuild/freebsd-arm64@0.25.3': 1895 | optional: true 1896 | 1897 | '@esbuild/freebsd-x64@0.25.3': 1898 | optional: true 1899 | 1900 | '@esbuild/linux-arm64@0.25.3': 1901 | optional: true 1902 | 1903 | '@esbuild/linux-arm@0.25.3': 1904 | optional: true 1905 | 1906 | '@esbuild/linux-ia32@0.25.3': 1907 | optional: true 1908 | 1909 | '@esbuild/linux-loong64@0.25.3': 1910 | optional: true 1911 | 1912 | '@esbuild/linux-mips64el@0.25.3': 1913 | optional: true 1914 | 1915 | '@esbuild/linux-ppc64@0.25.3': 1916 | optional: true 1917 | 1918 | '@esbuild/linux-riscv64@0.25.3': 1919 | optional: true 1920 | 1921 | '@esbuild/linux-s390x@0.25.3': 1922 | optional: true 1923 | 1924 | '@esbuild/linux-x64@0.25.3': 1925 | optional: true 1926 | 1927 | '@esbuild/netbsd-arm64@0.25.3': 1928 | optional: true 1929 | 1930 | '@esbuild/netbsd-x64@0.25.3': 1931 | optional: true 1932 | 1933 | '@esbuild/openbsd-arm64@0.25.3': 1934 | optional: true 1935 | 1936 | '@esbuild/openbsd-x64@0.25.3': 1937 | optional: true 1938 | 1939 | '@esbuild/sunos-x64@0.25.3': 1940 | optional: true 1941 | 1942 | '@esbuild/win32-arm64@0.25.3': 1943 | optional: true 1944 | 1945 | '@esbuild/win32-ia32@0.25.3': 1946 | optional: true 1947 | 1948 | '@esbuild/win32-x64@0.25.3': 1949 | optional: true 1950 | 1951 | '@isaacs/cliui@8.0.2': 1952 | dependencies: 1953 | string-width: 5.1.2 1954 | string-width-cjs: string-width@4.2.3 1955 | strip-ansi: 7.1.0 1956 | strip-ansi-cjs: strip-ansi@6.0.1 1957 | wrap-ansi: 8.1.0 1958 | wrap-ansi-cjs: wrap-ansi@7.0.0 1959 | 1960 | '@istanbuljs/load-nyc-config@1.1.0': 1961 | dependencies: 1962 | camelcase: 5.3.1 1963 | find-up: 4.1.0 1964 | get-package-type: 0.1.0 1965 | js-yaml: 3.14.1 1966 | resolve-from: 5.0.0 1967 | 1968 | '@istanbuljs/schema@0.1.3': {} 1969 | 1970 | '@jest/console@29.7.0': 1971 | dependencies: 1972 | '@jest/types': 29.6.3 1973 | '@types/node': 24.3.1 1974 | chalk: 4.1.2 1975 | jest-message-util: 29.7.0 1976 | jest-util: 29.7.0 1977 | slash: 3.0.0 1978 | 1979 | '@jest/core@29.7.0': 1980 | dependencies: 1981 | '@jest/console': 29.7.0 1982 | '@jest/reporters': 29.7.0 1983 | '@jest/test-result': 29.7.0 1984 | '@jest/transform': 29.7.0 1985 | '@jest/types': 29.6.3 1986 | '@types/node': 24.3.1 1987 | ansi-escapes: 4.3.2 1988 | chalk: 4.1.2 1989 | ci-info: 3.9.0 1990 | exit: 0.1.2 1991 | graceful-fs: 4.2.11 1992 | jest-changed-files: 29.7.0 1993 | jest-config: 29.7.0(@types/node@24.3.1) 1994 | jest-haste-map: 29.7.0 1995 | jest-message-util: 29.7.0 1996 | jest-regex-util: 29.6.3 1997 | jest-resolve: 29.7.0 1998 | jest-resolve-dependencies: 29.7.0 1999 | jest-runner: 29.7.0 2000 | jest-runtime: 29.7.0 2001 | jest-snapshot: 29.7.0 2002 | jest-util: 29.7.0 2003 | jest-validate: 29.7.0 2004 | jest-watcher: 29.7.0 2005 | micromatch: 4.0.8 2006 | pretty-format: 29.7.0 2007 | slash: 3.0.0 2008 | strip-ansi: 6.0.1 2009 | transitivePeerDependencies: 2010 | - babel-plugin-macros 2011 | - supports-color 2012 | - ts-node 2013 | 2014 | '@jest/environment@29.7.0': 2015 | dependencies: 2016 | '@jest/fake-timers': 29.7.0 2017 | '@jest/types': 29.6.3 2018 | '@types/node': 24.3.1 2019 | jest-mock: 29.7.0 2020 | 2021 | '@jest/expect-utils@29.7.0': 2022 | dependencies: 2023 | jest-get-type: 29.6.3 2024 | 2025 | '@jest/expect@29.7.0': 2026 | dependencies: 2027 | expect: 29.7.0 2028 | jest-snapshot: 29.7.0 2029 | transitivePeerDependencies: 2030 | - supports-color 2031 | 2032 | '@jest/fake-timers@29.7.0': 2033 | dependencies: 2034 | '@jest/types': 29.6.3 2035 | '@sinonjs/fake-timers': 10.3.0 2036 | '@types/node': 24.3.1 2037 | jest-message-util: 29.7.0 2038 | jest-mock: 29.7.0 2039 | jest-util: 29.7.0 2040 | 2041 | '@jest/globals@29.7.0': 2042 | dependencies: 2043 | '@jest/environment': 29.7.0 2044 | '@jest/expect': 29.7.0 2045 | '@jest/types': 29.6.3 2046 | jest-mock: 29.7.0 2047 | transitivePeerDependencies: 2048 | - supports-color 2049 | 2050 | '@jest/reporters@29.7.0': 2051 | dependencies: 2052 | '@bcoe/v8-coverage': 0.2.3 2053 | '@jest/console': 29.7.0 2054 | '@jest/test-result': 29.7.0 2055 | '@jest/transform': 29.7.0 2056 | '@jest/types': 29.6.3 2057 | '@jridgewell/trace-mapping': 0.3.25 2058 | '@types/node': 24.3.1 2059 | chalk: 4.1.2 2060 | collect-v8-coverage: 1.0.2 2061 | exit: 0.1.2 2062 | glob: 7.2.3 2063 | graceful-fs: 4.2.11 2064 | istanbul-lib-coverage: 3.2.2 2065 | istanbul-lib-instrument: 6.0.3 2066 | istanbul-lib-report: 3.0.1 2067 | istanbul-lib-source-maps: 4.0.1 2068 | istanbul-reports: 3.1.7 2069 | jest-message-util: 29.7.0 2070 | jest-util: 29.7.0 2071 | jest-worker: 29.7.0 2072 | slash: 3.0.0 2073 | string-length: 4.0.2 2074 | strip-ansi: 6.0.1 2075 | v8-to-istanbul: 9.3.0 2076 | transitivePeerDependencies: 2077 | - supports-color 2078 | 2079 | '@jest/schemas@29.6.3': 2080 | dependencies: 2081 | '@sinclair/typebox': 0.27.8 2082 | 2083 | '@jest/source-map@29.6.3': 2084 | dependencies: 2085 | '@jridgewell/trace-mapping': 0.3.25 2086 | callsites: 3.1.0 2087 | graceful-fs: 4.2.11 2088 | 2089 | '@jest/test-result@29.7.0': 2090 | dependencies: 2091 | '@jest/console': 29.7.0 2092 | '@jest/types': 29.6.3 2093 | '@types/istanbul-lib-coverage': 2.0.6 2094 | collect-v8-coverage: 1.0.2 2095 | 2096 | '@jest/test-sequencer@29.7.0': 2097 | dependencies: 2098 | '@jest/test-result': 29.7.0 2099 | graceful-fs: 4.2.11 2100 | jest-haste-map: 29.7.0 2101 | slash: 3.0.0 2102 | 2103 | '@jest/transform@29.7.0': 2104 | dependencies: 2105 | '@babel/core': 7.26.10 2106 | '@jest/types': 29.6.3 2107 | '@jridgewell/trace-mapping': 0.3.25 2108 | babel-plugin-istanbul: 6.1.1 2109 | chalk: 4.1.2 2110 | convert-source-map: 2.0.0 2111 | fast-json-stable-stringify: 2.1.0 2112 | graceful-fs: 4.2.11 2113 | jest-haste-map: 29.7.0 2114 | jest-regex-util: 29.6.3 2115 | jest-util: 29.7.0 2116 | micromatch: 4.0.8 2117 | pirates: 4.0.7 2118 | slash: 3.0.0 2119 | write-file-atomic: 4.0.2 2120 | transitivePeerDependencies: 2121 | - supports-color 2122 | 2123 | '@jest/types@29.6.3': 2124 | dependencies: 2125 | '@jest/schemas': 29.6.3 2126 | '@types/istanbul-lib-coverage': 2.0.6 2127 | '@types/istanbul-reports': 3.0.4 2128 | '@types/node': 24.3.1 2129 | '@types/yargs': 17.0.33 2130 | chalk: 4.1.2 2131 | 2132 | '@jridgewell/gen-mapping@0.3.8': 2133 | dependencies: 2134 | '@jridgewell/set-array': 1.2.1 2135 | '@jridgewell/sourcemap-codec': 1.5.0 2136 | '@jridgewell/trace-mapping': 0.3.25 2137 | 2138 | '@jridgewell/resolve-uri@3.1.2': {} 2139 | 2140 | '@jridgewell/set-array@1.2.1': {} 2141 | 2142 | '@jridgewell/sourcemap-codec@1.5.0': {} 2143 | 2144 | '@jridgewell/trace-mapping@0.3.25': 2145 | dependencies: 2146 | '@jridgewell/resolve-uri': 3.1.2 2147 | '@jridgewell/sourcemap-codec': 1.5.0 2148 | 2149 | '@microsoft/fetch-event-source@2.0.1': {} 2150 | 2151 | '@pkgjs/parseargs@0.11.0': 2152 | optional: true 2153 | 2154 | '@rollup/rollup-android-arm-eabi@4.40.0': 2155 | optional: true 2156 | 2157 | '@rollup/rollup-android-arm64@4.40.0': 2158 | optional: true 2159 | 2160 | '@rollup/rollup-darwin-arm64@4.40.0': 2161 | optional: true 2162 | 2163 | '@rollup/rollup-darwin-x64@4.40.0': 2164 | optional: true 2165 | 2166 | '@rollup/rollup-freebsd-arm64@4.40.0': 2167 | optional: true 2168 | 2169 | '@rollup/rollup-freebsd-x64@4.40.0': 2170 | optional: true 2171 | 2172 | '@rollup/rollup-linux-arm-gnueabihf@4.40.0': 2173 | optional: true 2174 | 2175 | '@rollup/rollup-linux-arm-musleabihf@4.40.0': 2176 | optional: true 2177 | 2178 | '@rollup/rollup-linux-arm64-gnu@4.40.0': 2179 | optional: true 2180 | 2181 | '@rollup/rollup-linux-arm64-musl@4.40.0': 2182 | optional: true 2183 | 2184 | '@rollup/rollup-linux-loongarch64-gnu@4.40.0': 2185 | optional: true 2186 | 2187 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': 2188 | optional: true 2189 | 2190 | '@rollup/rollup-linux-riscv64-gnu@4.40.0': 2191 | optional: true 2192 | 2193 | '@rollup/rollup-linux-riscv64-musl@4.40.0': 2194 | optional: true 2195 | 2196 | '@rollup/rollup-linux-s390x-gnu@4.40.0': 2197 | optional: true 2198 | 2199 | '@rollup/rollup-linux-x64-gnu@4.40.0': 2200 | optional: true 2201 | 2202 | '@rollup/rollup-linux-x64-musl@4.40.0': 2203 | optional: true 2204 | 2205 | '@rollup/rollup-win32-arm64-msvc@4.40.0': 2206 | optional: true 2207 | 2208 | '@rollup/rollup-win32-ia32-msvc@4.40.0': 2209 | optional: true 2210 | 2211 | '@rollup/rollup-win32-x64-msvc@4.40.0': 2212 | optional: true 2213 | 2214 | '@sinclair/typebox@0.27.8': {} 2215 | 2216 | '@sinonjs/commons@3.0.1': 2217 | dependencies: 2218 | type-detect: 4.0.8 2219 | 2220 | '@sinonjs/fake-timers@10.3.0': 2221 | dependencies: 2222 | '@sinonjs/commons': 3.0.1 2223 | 2224 | '@types/babel__core@7.20.5': 2225 | dependencies: 2226 | '@babel/parser': 7.27.0 2227 | '@babel/types': 7.27.0 2228 | '@types/babel__generator': 7.27.0 2229 | '@types/babel__template': 7.4.4 2230 | '@types/babel__traverse': 7.20.7 2231 | 2232 | '@types/babel__generator@7.27.0': 2233 | dependencies: 2234 | '@babel/types': 7.27.0 2235 | 2236 | '@types/babel__template@7.4.4': 2237 | dependencies: 2238 | '@babel/parser': 7.27.0 2239 | '@babel/types': 7.27.0 2240 | 2241 | '@types/babel__traverse@7.20.7': 2242 | dependencies: 2243 | '@babel/types': 7.27.0 2244 | 2245 | '@types/estree@1.0.7': {} 2246 | 2247 | '@types/graceful-fs@4.1.9': 2248 | dependencies: 2249 | '@types/node': 24.3.1 2250 | 2251 | '@types/istanbul-lib-coverage@2.0.6': {} 2252 | 2253 | '@types/istanbul-lib-report@3.0.3': 2254 | dependencies: 2255 | '@types/istanbul-lib-coverage': 2.0.6 2256 | 2257 | '@types/istanbul-reports@3.0.4': 2258 | dependencies: 2259 | '@types/istanbul-lib-report': 3.0.3 2260 | 2261 | '@types/jest@29.5.14': 2262 | dependencies: 2263 | expect: 29.7.0 2264 | pretty-format: 29.7.0 2265 | 2266 | '@types/node@24.3.1': 2267 | dependencies: 2268 | undici-types: 7.10.0 2269 | 2270 | '@types/stack-utils@2.0.3': {} 2271 | 2272 | '@types/yargs-parser@21.0.3': {} 2273 | 2274 | '@types/yargs@17.0.33': 2275 | dependencies: 2276 | '@types/yargs-parser': 21.0.3 2277 | 2278 | ansi-escapes@4.3.2: 2279 | dependencies: 2280 | type-fest: 0.21.3 2281 | 2282 | ansi-regex@5.0.1: {} 2283 | 2284 | ansi-regex@6.1.0: {} 2285 | 2286 | ansi-styles@4.3.0: 2287 | dependencies: 2288 | color-convert: 2.0.1 2289 | 2290 | ansi-styles@5.2.0: {} 2291 | 2292 | ansi-styles@6.2.1: {} 2293 | 2294 | any-promise@1.3.0: {} 2295 | 2296 | anymatch@3.1.3: 2297 | dependencies: 2298 | normalize-path: 3.0.0 2299 | picomatch: 2.3.1 2300 | 2301 | argparse@1.0.10: 2302 | dependencies: 2303 | sprintf-js: 1.0.3 2304 | 2305 | async@3.2.6: {} 2306 | 2307 | babel-jest@29.7.0(@babel/core@7.26.10): 2308 | dependencies: 2309 | '@babel/core': 7.26.10 2310 | '@jest/transform': 29.7.0 2311 | '@types/babel__core': 7.20.5 2312 | babel-plugin-istanbul: 6.1.1 2313 | babel-preset-jest: 29.6.3(@babel/core@7.26.10) 2314 | chalk: 4.1.2 2315 | graceful-fs: 4.2.11 2316 | slash: 3.0.0 2317 | transitivePeerDependencies: 2318 | - supports-color 2319 | 2320 | babel-plugin-istanbul@6.1.1: 2321 | dependencies: 2322 | '@babel/helper-plugin-utils': 7.26.5 2323 | '@istanbuljs/load-nyc-config': 1.1.0 2324 | '@istanbuljs/schema': 0.1.3 2325 | istanbul-lib-instrument: 5.2.1 2326 | test-exclude: 6.0.0 2327 | transitivePeerDependencies: 2328 | - supports-color 2329 | 2330 | babel-plugin-jest-hoist@29.6.3: 2331 | dependencies: 2332 | '@babel/template': 7.27.0 2333 | '@babel/types': 7.27.0 2334 | '@types/babel__core': 7.20.5 2335 | '@types/babel__traverse': 7.20.7 2336 | 2337 | babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): 2338 | dependencies: 2339 | '@babel/core': 7.26.10 2340 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) 2341 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) 2342 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) 2343 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) 2344 | '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) 2345 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) 2346 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) 2347 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) 2348 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) 2349 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) 2350 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) 2351 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) 2352 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) 2353 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) 2354 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) 2355 | 2356 | babel-preset-jest@29.6.3(@babel/core@7.26.10): 2357 | dependencies: 2358 | '@babel/core': 7.26.10 2359 | babel-plugin-jest-hoist: 29.6.3 2360 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) 2361 | 2362 | balanced-match@1.0.2: {} 2363 | 2364 | brace-expansion@1.1.11: 2365 | dependencies: 2366 | balanced-match: 1.0.2 2367 | concat-map: 0.0.1 2368 | 2369 | brace-expansion@2.0.1: 2370 | dependencies: 2371 | balanced-match: 1.0.2 2372 | 2373 | braces@3.0.3: 2374 | dependencies: 2375 | fill-range: 7.1.1 2376 | 2377 | browserslist@4.24.4: 2378 | dependencies: 2379 | caniuse-lite: 1.0.30001715 2380 | electron-to-chromium: 1.5.142 2381 | node-releases: 2.0.19 2382 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 2383 | 2384 | bs-logger@0.2.6: 2385 | dependencies: 2386 | fast-json-stable-stringify: 2.1.0 2387 | 2388 | bser@2.1.1: 2389 | dependencies: 2390 | node-int64: 0.4.0 2391 | 2392 | buffer-from@1.1.2: {} 2393 | 2394 | bundle-require@5.1.0(esbuild@0.25.3): 2395 | dependencies: 2396 | esbuild: 0.25.3 2397 | load-tsconfig: 0.2.5 2398 | 2399 | cac@6.7.14: {} 2400 | 2401 | callsites@3.1.0: {} 2402 | 2403 | camelcase@5.3.1: {} 2404 | 2405 | camelcase@6.3.0: {} 2406 | 2407 | caniuse-lite@1.0.30001715: {} 2408 | 2409 | chalk@4.1.2: 2410 | dependencies: 2411 | ansi-styles: 4.3.0 2412 | supports-color: 7.2.0 2413 | 2414 | char-regex@1.0.2: {} 2415 | 2416 | chokidar@4.0.3: 2417 | dependencies: 2418 | readdirp: 4.1.2 2419 | 2420 | ci-info@3.9.0: {} 2421 | 2422 | cjs-module-lexer@1.4.3: {} 2423 | 2424 | cliui@8.0.1: 2425 | dependencies: 2426 | string-width: 4.2.3 2427 | strip-ansi: 6.0.1 2428 | wrap-ansi: 7.0.0 2429 | 2430 | co@4.6.0: {} 2431 | 2432 | collect-v8-coverage@1.0.2: {} 2433 | 2434 | color-convert@2.0.1: 2435 | dependencies: 2436 | color-name: 1.1.4 2437 | 2438 | color-name@1.1.4: {} 2439 | 2440 | commander@4.1.1: {} 2441 | 2442 | concat-map@0.0.1: {} 2443 | 2444 | consola@3.4.2: {} 2445 | 2446 | convert-source-map@2.0.0: {} 2447 | 2448 | create-jest@29.7.0(@types/node@24.3.1): 2449 | dependencies: 2450 | '@jest/types': 29.6.3 2451 | chalk: 4.1.2 2452 | exit: 0.1.2 2453 | graceful-fs: 4.2.11 2454 | jest-config: 29.7.0(@types/node@24.3.1) 2455 | jest-util: 29.7.0 2456 | prompts: 2.4.2 2457 | transitivePeerDependencies: 2458 | - '@types/node' 2459 | - babel-plugin-macros 2460 | - supports-color 2461 | - ts-node 2462 | 2463 | cross-spawn@7.0.6: 2464 | dependencies: 2465 | path-key: 3.1.1 2466 | shebang-command: 2.0.0 2467 | which: 2.0.2 2468 | 2469 | debug@4.4.0: 2470 | dependencies: 2471 | ms: 2.1.3 2472 | 2473 | dedent@1.5.3: {} 2474 | 2475 | deepmerge@4.3.1: {} 2476 | 2477 | detect-newline@3.1.0: {} 2478 | 2479 | diff-sequences@29.6.3: {} 2480 | 2481 | eastasianwidth@0.2.0: {} 2482 | 2483 | ejs@3.1.10: 2484 | dependencies: 2485 | jake: 10.9.2 2486 | 2487 | electron-to-chromium@1.5.142: {} 2488 | 2489 | emittery@0.13.1: {} 2490 | 2491 | emoji-regex@8.0.0: {} 2492 | 2493 | emoji-regex@9.2.2: {} 2494 | 2495 | error-ex@1.3.2: 2496 | dependencies: 2497 | is-arrayish: 0.2.1 2498 | 2499 | esbuild@0.25.3: 2500 | optionalDependencies: 2501 | '@esbuild/aix-ppc64': 0.25.3 2502 | '@esbuild/android-arm': 0.25.3 2503 | '@esbuild/android-arm64': 0.25.3 2504 | '@esbuild/android-x64': 0.25.3 2505 | '@esbuild/darwin-arm64': 0.25.3 2506 | '@esbuild/darwin-x64': 0.25.3 2507 | '@esbuild/freebsd-arm64': 0.25.3 2508 | '@esbuild/freebsd-x64': 0.25.3 2509 | '@esbuild/linux-arm': 0.25.3 2510 | '@esbuild/linux-arm64': 0.25.3 2511 | '@esbuild/linux-ia32': 0.25.3 2512 | '@esbuild/linux-loong64': 0.25.3 2513 | '@esbuild/linux-mips64el': 0.25.3 2514 | '@esbuild/linux-ppc64': 0.25.3 2515 | '@esbuild/linux-riscv64': 0.25.3 2516 | '@esbuild/linux-s390x': 0.25.3 2517 | '@esbuild/linux-x64': 0.25.3 2518 | '@esbuild/netbsd-arm64': 0.25.3 2519 | '@esbuild/netbsd-x64': 0.25.3 2520 | '@esbuild/openbsd-arm64': 0.25.3 2521 | '@esbuild/openbsd-x64': 0.25.3 2522 | '@esbuild/sunos-x64': 0.25.3 2523 | '@esbuild/win32-arm64': 0.25.3 2524 | '@esbuild/win32-ia32': 0.25.3 2525 | '@esbuild/win32-x64': 0.25.3 2526 | 2527 | escalade@3.2.0: {} 2528 | 2529 | escape-string-regexp@2.0.0: {} 2530 | 2531 | esprima@4.0.1: {} 2532 | 2533 | execa@5.1.1: 2534 | dependencies: 2535 | cross-spawn: 7.0.6 2536 | get-stream: 6.0.1 2537 | human-signals: 2.1.0 2538 | is-stream: 2.0.1 2539 | merge-stream: 2.0.0 2540 | npm-run-path: 4.0.1 2541 | onetime: 5.1.2 2542 | signal-exit: 3.0.7 2543 | strip-final-newline: 2.0.0 2544 | 2545 | exit@0.1.2: {} 2546 | 2547 | expect@29.7.0: 2548 | dependencies: 2549 | '@jest/expect-utils': 29.7.0 2550 | jest-get-type: 29.6.3 2551 | jest-matcher-utils: 29.7.0 2552 | jest-message-util: 29.7.0 2553 | jest-util: 29.7.0 2554 | 2555 | fast-json-stable-stringify@2.1.0: {} 2556 | 2557 | fb-watchman@2.0.2: 2558 | dependencies: 2559 | bser: 2.1.1 2560 | 2561 | fdir@6.4.4(picomatch@4.0.2): 2562 | optionalDependencies: 2563 | picomatch: 4.0.2 2564 | 2565 | filelist@1.0.4: 2566 | dependencies: 2567 | minimatch: 5.1.6 2568 | 2569 | fill-range@7.1.1: 2570 | dependencies: 2571 | to-regex-range: 5.0.1 2572 | 2573 | find-up@4.1.0: 2574 | dependencies: 2575 | locate-path: 5.0.0 2576 | path-exists: 4.0.0 2577 | 2578 | foreground-child@3.3.1: 2579 | dependencies: 2580 | cross-spawn: 7.0.6 2581 | signal-exit: 4.1.0 2582 | 2583 | fs.realpath@1.0.0: {} 2584 | 2585 | fsevents@2.3.3: 2586 | optional: true 2587 | 2588 | function-bind@1.1.2: {} 2589 | 2590 | gensync@1.0.0-beta.2: {} 2591 | 2592 | get-caller-file@2.0.5: {} 2593 | 2594 | get-package-type@0.1.0: {} 2595 | 2596 | get-stream@6.0.1: {} 2597 | 2598 | glob@10.4.5: 2599 | dependencies: 2600 | foreground-child: 3.3.1 2601 | jackspeak: 3.4.3 2602 | minimatch: 9.0.5 2603 | minipass: 7.1.2 2604 | package-json-from-dist: 1.0.1 2605 | path-scurry: 1.11.1 2606 | 2607 | glob@7.2.3: 2608 | dependencies: 2609 | fs.realpath: 1.0.0 2610 | inflight: 1.0.6 2611 | inherits: 2.0.4 2612 | minimatch: 3.1.2 2613 | once: 1.4.0 2614 | path-is-absolute: 1.0.1 2615 | 2616 | globals@11.12.0: {} 2617 | 2618 | graceful-fs@4.2.11: {} 2619 | 2620 | has-flag@4.0.0: {} 2621 | 2622 | hasown@2.0.2: 2623 | dependencies: 2624 | function-bind: 1.1.2 2625 | 2626 | html-escaper@2.0.2: {} 2627 | 2628 | human-signals@2.1.0: {} 2629 | 2630 | import-local@3.2.0: 2631 | dependencies: 2632 | pkg-dir: 4.2.0 2633 | resolve-cwd: 3.0.0 2634 | 2635 | imurmurhash@0.1.4: {} 2636 | 2637 | inflight@1.0.6: 2638 | dependencies: 2639 | once: 1.4.0 2640 | wrappy: 1.0.2 2641 | 2642 | inherits@2.0.4: {} 2643 | 2644 | is-arrayish@0.2.1: {} 2645 | 2646 | is-core-module@2.16.1: 2647 | dependencies: 2648 | hasown: 2.0.2 2649 | 2650 | is-fullwidth-code-point@3.0.0: {} 2651 | 2652 | is-generator-fn@2.1.0: {} 2653 | 2654 | is-number@7.0.0: {} 2655 | 2656 | is-stream@2.0.1: {} 2657 | 2658 | isexe@2.0.0: {} 2659 | 2660 | istanbul-lib-coverage@3.2.2: {} 2661 | 2662 | istanbul-lib-instrument@5.2.1: 2663 | dependencies: 2664 | '@babel/core': 7.26.10 2665 | '@babel/parser': 7.27.0 2666 | '@istanbuljs/schema': 0.1.3 2667 | istanbul-lib-coverage: 3.2.2 2668 | semver: 6.3.1 2669 | transitivePeerDependencies: 2670 | - supports-color 2671 | 2672 | istanbul-lib-instrument@6.0.3: 2673 | dependencies: 2674 | '@babel/core': 7.26.10 2675 | '@babel/parser': 7.27.0 2676 | '@istanbuljs/schema': 0.1.3 2677 | istanbul-lib-coverage: 3.2.2 2678 | semver: 7.7.1 2679 | transitivePeerDependencies: 2680 | - supports-color 2681 | 2682 | istanbul-lib-report@3.0.1: 2683 | dependencies: 2684 | istanbul-lib-coverage: 3.2.2 2685 | make-dir: 4.0.0 2686 | supports-color: 7.2.0 2687 | 2688 | istanbul-lib-source-maps@4.0.1: 2689 | dependencies: 2690 | debug: 4.4.0 2691 | istanbul-lib-coverage: 3.2.2 2692 | source-map: 0.6.1 2693 | transitivePeerDependencies: 2694 | - supports-color 2695 | 2696 | istanbul-reports@3.1.7: 2697 | dependencies: 2698 | html-escaper: 2.0.2 2699 | istanbul-lib-report: 3.0.1 2700 | 2701 | jackspeak@3.4.3: 2702 | dependencies: 2703 | '@isaacs/cliui': 8.0.2 2704 | optionalDependencies: 2705 | '@pkgjs/parseargs': 0.11.0 2706 | 2707 | jake@10.9.2: 2708 | dependencies: 2709 | async: 3.2.6 2710 | chalk: 4.1.2 2711 | filelist: 1.0.4 2712 | minimatch: 3.1.2 2713 | 2714 | jest-changed-files@29.7.0: 2715 | dependencies: 2716 | execa: 5.1.1 2717 | jest-util: 29.7.0 2718 | p-limit: 3.1.0 2719 | 2720 | jest-circus@29.7.0: 2721 | dependencies: 2722 | '@jest/environment': 29.7.0 2723 | '@jest/expect': 29.7.0 2724 | '@jest/test-result': 29.7.0 2725 | '@jest/types': 29.6.3 2726 | '@types/node': 24.3.1 2727 | chalk: 4.1.2 2728 | co: 4.6.0 2729 | dedent: 1.5.3 2730 | is-generator-fn: 2.1.0 2731 | jest-each: 29.7.0 2732 | jest-matcher-utils: 29.7.0 2733 | jest-message-util: 29.7.0 2734 | jest-runtime: 29.7.0 2735 | jest-snapshot: 29.7.0 2736 | jest-util: 29.7.0 2737 | p-limit: 3.1.0 2738 | pretty-format: 29.7.0 2739 | pure-rand: 6.1.0 2740 | slash: 3.0.0 2741 | stack-utils: 2.0.6 2742 | transitivePeerDependencies: 2743 | - babel-plugin-macros 2744 | - supports-color 2745 | 2746 | jest-cli@29.7.0(@types/node@24.3.1): 2747 | dependencies: 2748 | '@jest/core': 29.7.0 2749 | '@jest/test-result': 29.7.0 2750 | '@jest/types': 29.6.3 2751 | chalk: 4.1.2 2752 | create-jest: 29.7.0(@types/node@24.3.1) 2753 | exit: 0.1.2 2754 | import-local: 3.2.0 2755 | jest-config: 29.7.0(@types/node@24.3.1) 2756 | jest-util: 29.7.0 2757 | jest-validate: 29.7.0 2758 | yargs: 17.7.2 2759 | transitivePeerDependencies: 2760 | - '@types/node' 2761 | - babel-plugin-macros 2762 | - supports-color 2763 | - ts-node 2764 | 2765 | jest-config@29.7.0(@types/node@24.3.1): 2766 | dependencies: 2767 | '@babel/core': 7.26.10 2768 | '@jest/test-sequencer': 29.7.0 2769 | '@jest/types': 29.6.3 2770 | babel-jest: 29.7.0(@babel/core@7.26.10) 2771 | chalk: 4.1.2 2772 | ci-info: 3.9.0 2773 | deepmerge: 4.3.1 2774 | glob: 7.2.3 2775 | graceful-fs: 4.2.11 2776 | jest-circus: 29.7.0 2777 | jest-environment-node: 29.7.0 2778 | jest-get-type: 29.6.3 2779 | jest-regex-util: 29.6.3 2780 | jest-resolve: 29.7.0 2781 | jest-runner: 29.7.0 2782 | jest-util: 29.7.0 2783 | jest-validate: 29.7.0 2784 | micromatch: 4.0.8 2785 | parse-json: 5.2.0 2786 | pretty-format: 29.7.0 2787 | slash: 3.0.0 2788 | strip-json-comments: 3.1.1 2789 | optionalDependencies: 2790 | '@types/node': 24.3.1 2791 | transitivePeerDependencies: 2792 | - babel-plugin-macros 2793 | - supports-color 2794 | 2795 | jest-diff@29.7.0: 2796 | dependencies: 2797 | chalk: 4.1.2 2798 | diff-sequences: 29.6.3 2799 | jest-get-type: 29.6.3 2800 | pretty-format: 29.7.0 2801 | 2802 | jest-docblock@29.7.0: 2803 | dependencies: 2804 | detect-newline: 3.1.0 2805 | 2806 | jest-each@29.7.0: 2807 | dependencies: 2808 | '@jest/types': 29.6.3 2809 | chalk: 4.1.2 2810 | jest-get-type: 29.6.3 2811 | jest-util: 29.7.0 2812 | pretty-format: 29.7.0 2813 | 2814 | jest-environment-node@29.7.0: 2815 | dependencies: 2816 | '@jest/environment': 29.7.0 2817 | '@jest/fake-timers': 29.7.0 2818 | '@jest/types': 29.6.3 2819 | '@types/node': 24.3.1 2820 | jest-mock: 29.7.0 2821 | jest-util: 29.7.0 2822 | 2823 | jest-get-type@29.6.3: {} 2824 | 2825 | jest-haste-map@29.7.0: 2826 | dependencies: 2827 | '@jest/types': 29.6.3 2828 | '@types/graceful-fs': 4.1.9 2829 | '@types/node': 24.3.1 2830 | anymatch: 3.1.3 2831 | fb-watchman: 2.0.2 2832 | graceful-fs: 4.2.11 2833 | jest-regex-util: 29.6.3 2834 | jest-util: 29.7.0 2835 | jest-worker: 29.7.0 2836 | micromatch: 4.0.8 2837 | walker: 1.0.8 2838 | optionalDependencies: 2839 | fsevents: 2.3.3 2840 | 2841 | jest-leak-detector@29.7.0: 2842 | dependencies: 2843 | jest-get-type: 29.6.3 2844 | pretty-format: 29.7.0 2845 | 2846 | jest-matcher-utils@29.7.0: 2847 | dependencies: 2848 | chalk: 4.1.2 2849 | jest-diff: 29.7.0 2850 | jest-get-type: 29.6.3 2851 | pretty-format: 29.7.0 2852 | 2853 | jest-message-util@29.7.0: 2854 | dependencies: 2855 | '@babel/code-frame': 7.26.2 2856 | '@jest/types': 29.6.3 2857 | '@types/stack-utils': 2.0.3 2858 | chalk: 4.1.2 2859 | graceful-fs: 4.2.11 2860 | micromatch: 4.0.8 2861 | pretty-format: 29.7.0 2862 | slash: 3.0.0 2863 | stack-utils: 2.0.6 2864 | 2865 | jest-mock@29.7.0: 2866 | dependencies: 2867 | '@jest/types': 29.6.3 2868 | '@types/node': 24.3.1 2869 | jest-util: 29.7.0 2870 | 2871 | jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): 2872 | optionalDependencies: 2873 | jest-resolve: 29.7.0 2874 | 2875 | jest-regex-util@29.6.3: {} 2876 | 2877 | jest-resolve-dependencies@29.7.0: 2878 | dependencies: 2879 | jest-regex-util: 29.6.3 2880 | jest-snapshot: 29.7.0 2881 | transitivePeerDependencies: 2882 | - supports-color 2883 | 2884 | jest-resolve@29.7.0: 2885 | dependencies: 2886 | chalk: 4.1.2 2887 | graceful-fs: 4.2.11 2888 | jest-haste-map: 29.7.0 2889 | jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) 2890 | jest-util: 29.7.0 2891 | jest-validate: 29.7.0 2892 | resolve: 1.22.10 2893 | resolve.exports: 2.0.3 2894 | slash: 3.0.0 2895 | 2896 | jest-runner@29.7.0: 2897 | dependencies: 2898 | '@jest/console': 29.7.0 2899 | '@jest/environment': 29.7.0 2900 | '@jest/test-result': 29.7.0 2901 | '@jest/transform': 29.7.0 2902 | '@jest/types': 29.6.3 2903 | '@types/node': 24.3.1 2904 | chalk: 4.1.2 2905 | emittery: 0.13.1 2906 | graceful-fs: 4.2.11 2907 | jest-docblock: 29.7.0 2908 | jest-environment-node: 29.7.0 2909 | jest-haste-map: 29.7.0 2910 | jest-leak-detector: 29.7.0 2911 | jest-message-util: 29.7.0 2912 | jest-resolve: 29.7.0 2913 | jest-runtime: 29.7.0 2914 | jest-util: 29.7.0 2915 | jest-watcher: 29.7.0 2916 | jest-worker: 29.7.0 2917 | p-limit: 3.1.0 2918 | source-map-support: 0.5.13 2919 | transitivePeerDependencies: 2920 | - supports-color 2921 | 2922 | jest-runtime@29.7.0: 2923 | dependencies: 2924 | '@jest/environment': 29.7.0 2925 | '@jest/fake-timers': 29.7.0 2926 | '@jest/globals': 29.7.0 2927 | '@jest/source-map': 29.6.3 2928 | '@jest/test-result': 29.7.0 2929 | '@jest/transform': 29.7.0 2930 | '@jest/types': 29.6.3 2931 | '@types/node': 24.3.1 2932 | chalk: 4.1.2 2933 | cjs-module-lexer: 1.4.3 2934 | collect-v8-coverage: 1.0.2 2935 | glob: 7.2.3 2936 | graceful-fs: 4.2.11 2937 | jest-haste-map: 29.7.0 2938 | jest-message-util: 29.7.0 2939 | jest-mock: 29.7.0 2940 | jest-regex-util: 29.6.3 2941 | jest-resolve: 29.7.0 2942 | jest-snapshot: 29.7.0 2943 | jest-util: 29.7.0 2944 | slash: 3.0.0 2945 | strip-bom: 4.0.0 2946 | transitivePeerDependencies: 2947 | - supports-color 2948 | 2949 | jest-snapshot@29.7.0: 2950 | dependencies: 2951 | '@babel/core': 7.26.10 2952 | '@babel/generator': 7.27.0 2953 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) 2954 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) 2955 | '@babel/types': 7.27.0 2956 | '@jest/expect-utils': 29.7.0 2957 | '@jest/transform': 29.7.0 2958 | '@jest/types': 29.6.3 2959 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) 2960 | chalk: 4.1.2 2961 | expect: 29.7.0 2962 | graceful-fs: 4.2.11 2963 | jest-diff: 29.7.0 2964 | jest-get-type: 29.6.3 2965 | jest-matcher-utils: 29.7.0 2966 | jest-message-util: 29.7.0 2967 | jest-util: 29.7.0 2968 | natural-compare: 1.4.0 2969 | pretty-format: 29.7.0 2970 | semver: 7.7.1 2971 | transitivePeerDependencies: 2972 | - supports-color 2973 | 2974 | jest-util@29.7.0: 2975 | dependencies: 2976 | '@jest/types': 29.6.3 2977 | '@types/node': 24.3.1 2978 | chalk: 4.1.2 2979 | ci-info: 3.9.0 2980 | graceful-fs: 4.2.11 2981 | picomatch: 2.3.1 2982 | 2983 | jest-validate@29.7.0: 2984 | dependencies: 2985 | '@jest/types': 29.6.3 2986 | camelcase: 6.3.0 2987 | chalk: 4.1.2 2988 | jest-get-type: 29.6.3 2989 | leven: 3.1.0 2990 | pretty-format: 29.7.0 2991 | 2992 | jest-watcher@29.7.0: 2993 | dependencies: 2994 | '@jest/test-result': 29.7.0 2995 | '@jest/types': 29.6.3 2996 | '@types/node': 24.3.1 2997 | ansi-escapes: 4.3.2 2998 | chalk: 4.1.2 2999 | emittery: 0.13.1 3000 | jest-util: 29.7.0 3001 | string-length: 4.0.2 3002 | 3003 | jest-worker@29.7.0: 3004 | dependencies: 3005 | '@types/node': 24.3.1 3006 | jest-util: 29.7.0 3007 | merge-stream: 2.0.0 3008 | supports-color: 8.1.1 3009 | 3010 | jest@29.7.0(@types/node@24.3.1): 3011 | dependencies: 3012 | '@jest/core': 29.7.0 3013 | '@jest/types': 29.6.3 3014 | import-local: 3.2.0 3015 | jest-cli: 29.7.0(@types/node@24.3.1) 3016 | transitivePeerDependencies: 3017 | - '@types/node' 3018 | - babel-plugin-macros 3019 | - supports-color 3020 | - ts-node 3021 | 3022 | joycon@3.1.1: {} 3023 | 3024 | js-tokens@4.0.0: {} 3025 | 3026 | js-yaml@3.14.1: 3027 | dependencies: 3028 | argparse: 1.0.10 3029 | esprima: 4.0.1 3030 | 3031 | jsesc@3.1.0: {} 3032 | 3033 | json-parse-even-better-errors@2.3.1: {} 3034 | 3035 | json5@2.2.3: {} 3036 | 3037 | kleur@3.0.3: {} 3038 | 3039 | leven@3.1.0: {} 3040 | 3041 | lilconfig@3.1.3: {} 3042 | 3043 | lines-and-columns@1.2.4: {} 3044 | 3045 | load-tsconfig@0.2.5: {} 3046 | 3047 | locate-path@5.0.0: 3048 | dependencies: 3049 | p-locate: 4.1.0 3050 | 3051 | lodash.memoize@4.1.2: {} 3052 | 3053 | lodash.sortby@4.7.0: {} 3054 | 3055 | lru-cache@10.4.3: {} 3056 | 3057 | lru-cache@5.1.1: 3058 | dependencies: 3059 | yallist: 3.1.1 3060 | 3061 | make-dir@4.0.0: 3062 | dependencies: 3063 | semver: 7.7.1 3064 | 3065 | make-error@1.3.6: {} 3066 | 3067 | makeerror@1.0.12: 3068 | dependencies: 3069 | tmpl: 1.0.5 3070 | 3071 | merge-stream@2.0.0: {} 3072 | 3073 | micromatch@4.0.8: 3074 | dependencies: 3075 | braces: 3.0.3 3076 | picomatch: 2.3.1 3077 | 3078 | mimic-fn@2.1.0: {} 3079 | 3080 | minimatch@3.1.2: 3081 | dependencies: 3082 | brace-expansion: 1.1.11 3083 | 3084 | minimatch@5.1.6: 3085 | dependencies: 3086 | brace-expansion: 2.0.1 3087 | 3088 | minimatch@9.0.5: 3089 | dependencies: 3090 | brace-expansion: 2.0.1 3091 | 3092 | minipass@7.1.2: {} 3093 | 3094 | ms@2.1.3: {} 3095 | 3096 | mz@2.7.0: 3097 | dependencies: 3098 | any-promise: 1.3.0 3099 | object-assign: 4.1.1 3100 | thenify-all: 1.6.0 3101 | 3102 | natural-compare@1.4.0: {} 3103 | 3104 | node-int64@0.4.0: {} 3105 | 3106 | node-releases@2.0.19: {} 3107 | 3108 | normalize-path@3.0.0: {} 3109 | 3110 | npm-run-path@4.0.1: 3111 | dependencies: 3112 | path-key: 3.1.1 3113 | 3114 | object-assign@4.1.1: {} 3115 | 3116 | once@1.4.0: 3117 | dependencies: 3118 | wrappy: 1.0.2 3119 | 3120 | onetime@5.1.2: 3121 | dependencies: 3122 | mimic-fn: 2.1.0 3123 | 3124 | p-limit@2.3.0: 3125 | dependencies: 3126 | p-try: 2.2.0 3127 | 3128 | p-limit@3.1.0: 3129 | dependencies: 3130 | yocto-queue: 0.1.0 3131 | 3132 | p-locate@4.1.0: 3133 | dependencies: 3134 | p-limit: 2.3.0 3135 | 3136 | p-try@2.2.0: {} 3137 | 3138 | package-json-from-dist@1.0.1: {} 3139 | 3140 | parse-json@5.2.0: 3141 | dependencies: 3142 | '@babel/code-frame': 7.26.2 3143 | error-ex: 1.3.2 3144 | json-parse-even-better-errors: 2.3.1 3145 | lines-and-columns: 1.2.4 3146 | 3147 | path-exists@4.0.0: {} 3148 | 3149 | path-is-absolute@1.0.1: {} 3150 | 3151 | path-key@3.1.1: {} 3152 | 3153 | path-parse@1.0.7: {} 3154 | 3155 | path-scurry@1.11.1: 3156 | dependencies: 3157 | lru-cache: 10.4.3 3158 | minipass: 7.1.2 3159 | 3160 | picocolors@1.1.1: {} 3161 | 3162 | picomatch@2.3.1: {} 3163 | 3164 | picomatch@4.0.2: {} 3165 | 3166 | pirates@4.0.7: {} 3167 | 3168 | pkg-dir@4.2.0: 3169 | dependencies: 3170 | find-up: 4.1.0 3171 | 3172 | postcss-load-config@6.0.1: 3173 | dependencies: 3174 | lilconfig: 3.1.3 3175 | 3176 | pretty-format@29.7.0: 3177 | dependencies: 3178 | '@jest/schemas': 29.6.3 3179 | ansi-styles: 5.2.0 3180 | react-is: 18.3.1 3181 | 3182 | prompts@2.4.2: 3183 | dependencies: 3184 | kleur: 3.0.3 3185 | sisteransi: 1.0.5 3186 | 3187 | punycode@2.3.1: {} 3188 | 3189 | pure-rand@6.1.0: {} 3190 | 3191 | react-is@18.3.1: {} 3192 | 3193 | readdirp@4.1.2: {} 3194 | 3195 | require-directory@2.1.1: {} 3196 | 3197 | resolve-cwd@3.0.0: 3198 | dependencies: 3199 | resolve-from: 5.0.0 3200 | 3201 | resolve-from@5.0.0: {} 3202 | 3203 | resolve.exports@2.0.3: {} 3204 | 3205 | resolve@1.22.10: 3206 | dependencies: 3207 | is-core-module: 2.16.1 3208 | path-parse: 1.0.7 3209 | supports-preserve-symlinks-flag: 1.0.0 3210 | 3211 | rollup@4.40.0: 3212 | dependencies: 3213 | '@types/estree': 1.0.7 3214 | optionalDependencies: 3215 | '@rollup/rollup-android-arm-eabi': 4.40.0 3216 | '@rollup/rollup-android-arm64': 4.40.0 3217 | '@rollup/rollup-darwin-arm64': 4.40.0 3218 | '@rollup/rollup-darwin-x64': 4.40.0 3219 | '@rollup/rollup-freebsd-arm64': 4.40.0 3220 | '@rollup/rollup-freebsd-x64': 4.40.0 3221 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.0 3222 | '@rollup/rollup-linux-arm-musleabihf': 4.40.0 3223 | '@rollup/rollup-linux-arm64-gnu': 4.40.0 3224 | '@rollup/rollup-linux-arm64-musl': 4.40.0 3225 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.0 3226 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0 3227 | '@rollup/rollup-linux-riscv64-gnu': 4.40.0 3228 | '@rollup/rollup-linux-riscv64-musl': 4.40.0 3229 | '@rollup/rollup-linux-s390x-gnu': 4.40.0 3230 | '@rollup/rollup-linux-x64-gnu': 4.40.0 3231 | '@rollup/rollup-linux-x64-musl': 4.40.0 3232 | '@rollup/rollup-win32-arm64-msvc': 4.40.0 3233 | '@rollup/rollup-win32-ia32-msvc': 4.40.0 3234 | '@rollup/rollup-win32-x64-msvc': 4.40.0 3235 | fsevents: 2.3.3 3236 | 3237 | semver@6.3.1: {} 3238 | 3239 | semver@7.7.1: {} 3240 | 3241 | shebang-command@2.0.0: 3242 | dependencies: 3243 | shebang-regex: 3.0.0 3244 | 3245 | shebang-regex@3.0.0: {} 3246 | 3247 | signal-exit@3.0.7: {} 3248 | 3249 | signal-exit@4.1.0: {} 3250 | 3251 | sisteransi@1.0.5: {} 3252 | 3253 | slash@3.0.0: {} 3254 | 3255 | source-map-support@0.5.13: 3256 | dependencies: 3257 | buffer-from: 1.1.2 3258 | source-map: 0.6.1 3259 | 3260 | source-map@0.6.1: {} 3261 | 3262 | source-map@0.8.0-beta.0: 3263 | dependencies: 3264 | whatwg-url: 7.1.0 3265 | 3266 | sprintf-js@1.0.3: {} 3267 | 3268 | stack-utils@2.0.6: 3269 | dependencies: 3270 | escape-string-regexp: 2.0.0 3271 | 3272 | string-length@4.0.2: 3273 | dependencies: 3274 | char-regex: 1.0.2 3275 | strip-ansi: 6.0.1 3276 | 3277 | string-width@4.2.3: 3278 | dependencies: 3279 | emoji-regex: 8.0.0 3280 | is-fullwidth-code-point: 3.0.0 3281 | strip-ansi: 6.0.1 3282 | 3283 | string-width@5.1.2: 3284 | dependencies: 3285 | eastasianwidth: 0.2.0 3286 | emoji-regex: 9.2.2 3287 | strip-ansi: 7.1.0 3288 | 3289 | strip-ansi@6.0.1: 3290 | dependencies: 3291 | ansi-regex: 5.0.1 3292 | 3293 | strip-ansi@7.1.0: 3294 | dependencies: 3295 | ansi-regex: 6.1.0 3296 | 3297 | strip-bom@4.0.0: {} 3298 | 3299 | strip-final-newline@2.0.0: {} 3300 | 3301 | strip-json-comments@3.1.1: {} 3302 | 3303 | sucrase@3.35.0: 3304 | dependencies: 3305 | '@jridgewell/gen-mapping': 0.3.8 3306 | commander: 4.1.1 3307 | glob: 10.4.5 3308 | lines-and-columns: 1.2.4 3309 | mz: 2.7.0 3310 | pirates: 4.0.7 3311 | ts-interface-checker: 0.1.13 3312 | 3313 | supports-color@7.2.0: 3314 | dependencies: 3315 | has-flag: 4.0.0 3316 | 3317 | supports-color@8.1.1: 3318 | dependencies: 3319 | has-flag: 4.0.0 3320 | 3321 | supports-preserve-symlinks-flag@1.0.0: {} 3322 | 3323 | test-exclude@6.0.0: 3324 | dependencies: 3325 | '@istanbuljs/schema': 0.1.3 3326 | glob: 7.2.3 3327 | minimatch: 3.1.2 3328 | 3329 | thenify-all@1.6.0: 3330 | dependencies: 3331 | thenify: 3.3.1 3332 | 3333 | thenify@3.3.1: 3334 | dependencies: 3335 | any-promise: 1.3.0 3336 | 3337 | tinyexec@0.3.2: {} 3338 | 3339 | tinyglobby@0.2.13: 3340 | dependencies: 3341 | fdir: 6.4.4(picomatch@4.0.2) 3342 | picomatch: 4.0.2 3343 | 3344 | tmpl@1.0.5: {} 3345 | 3346 | to-regex-range@5.0.1: 3347 | dependencies: 3348 | is-number: 7.0.0 3349 | 3350 | tr46@1.0.1: 3351 | dependencies: 3352 | punycode: 2.3.1 3353 | 3354 | tree-kill@1.2.2: {} 3355 | 3356 | ts-interface-checker@0.1.13: {} 3357 | 3358 | ts-jest@29.3.2(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(esbuild@0.25.3)(jest@29.7.0(@types/node@24.3.1))(typescript@5.8.3): 3359 | dependencies: 3360 | bs-logger: 0.2.6 3361 | ejs: 3.1.10 3362 | fast-json-stable-stringify: 2.1.0 3363 | jest: 29.7.0(@types/node@24.3.1) 3364 | jest-util: 29.7.0 3365 | json5: 2.2.3 3366 | lodash.memoize: 4.1.2 3367 | make-error: 1.3.6 3368 | semver: 7.7.1 3369 | type-fest: 4.40.0 3370 | typescript: 5.8.3 3371 | yargs-parser: 21.1.1 3372 | optionalDependencies: 3373 | '@babel/core': 7.26.10 3374 | '@jest/transform': 29.7.0 3375 | '@jest/types': 29.6.3 3376 | babel-jest: 29.7.0(@babel/core@7.26.10) 3377 | esbuild: 0.25.3 3378 | 3379 | tslib@2.8.1: {} 3380 | 3381 | tsup@8.4.0(typescript@5.8.3): 3382 | dependencies: 3383 | bundle-require: 5.1.0(esbuild@0.25.3) 3384 | cac: 6.7.14 3385 | chokidar: 4.0.3 3386 | consola: 3.4.2 3387 | debug: 4.4.0 3388 | esbuild: 0.25.3 3389 | joycon: 3.1.1 3390 | picocolors: 1.1.1 3391 | postcss-load-config: 6.0.1 3392 | resolve-from: 5.0.0 3393 | rollup: 4.40.0 3394 | source-map: 0.8.0-beta.0 3395 | sucrase: 3.35.0 3396 | tinyexec: 0.3.2 3397 | tinyglobby: 0.2.13 3398 | tree-kill: 1.2.2 3399 | optionalDependencies: 3400 | typescript: 5.8.3 3401 | transitivePeerDependencies: 3402 | - jiti 3403 | - supports-color 3404 | - tsx 3405 | - yaml 3406 | 3407 | type-detect@4.0.8: {} 3408 | 3409 | type-fest@0.21.3: {} 3410 | 3411 | type-fest@4.40.0: {} 3412 | 3413 | typescript@5.8.3: {} 3414 | 3415 | undici-types@7.10.0: {} 3416 | 3417 | update-browserslist-db@1.1.3(browserslist@4.24.4): 3418 | dependencies: 3419 | browserslist: 4.24.4 3420 | escalade: 3.2.0 3421 | picocolors: 1.1.1 3422 | 3423 | v8-to-istanbul@9.3.0: 3424 | dependencies: 3425 | '@jridgewell/trace-mapping': 0.3.25 3426 | '@types/istanbul-lib-coverage': 2.0.6 3427 | convert-source-map: 2.0.0 3428 | 3429 | walker@1.0.8: 3430 | dependencies: 3431 | makeerror: 1.0.12 3432 | 3433 | webidl-conversions@4.0.2: {} 3434 | 3435 | whatwg-url@7.1.0: 3436 | dependencies: 3437 | lodash.sortby: 4.7.0 3438 | tr46: 1.0.1 3439 | webidl-conversions: 4.0.2 3440 | 3441 | which@2.0.2: 3442 | dependencies: 3443 | isexe: 2.0.0 3444 | 3445 | wrap-ansi@7.0.0: 3446 | dependencies: 3447 | ansi-styles: 4.3.0 3448 | string-width: 4.2.3 3449 | strip-ansi: 6.0.1 3450 | 3451 | wrap-ansi@8.1.0: 3452 | dependencies: 3453 | ansi-styles: 6.2.1 3454 | string-width: 5.1.2 3455 | strip-ansi: 7.1.0 3456 | 3457 | wrappy@1.0.2: {} 3458 | 3459 | write-file-atomic@4.0.2: 3460 | dependencies: 3461 | imurmurhash: 0.1.4 3462 | signal-exit: 3.0.7 3463 | 3464 | y18n@5.0.8: {} 3465 | 3466 | yallist@3.1.1: {} 3467 | 3468 | yargs-parser@21.1.1: {} 3469 | 3470 | yargs@17.7.2: 3471 | dependencies: 3472 | cliui: 8.0.1 3473 | escalade: 3.2.0 3474 | get-caller-file: 2.0.5 3475 | require-directory: 2.1.1 3476 | string-width: 4.2.3 3477 | y18n: 5.0.8 3478 | yargs-parser: 21.1.1 3479 | 3480 | yocto-queue@0.1.0: {} 3481 | --------------------------------------------------------------------------------