diff --git a/apps/backend/package.json b/apps/backend/package.json index 6a740f7e..c53ae472 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -37,10 +37,11 @@ "@nestjs/websockets": "^10.4.8", "@theinternetfolks/snowflake": "^1.3.0", "@types/multer": "^1.4.12", + "@types/redlock": "^4.0.7", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", - "ioredis": "^5.4.1", "cookie-parser": "^1.4.7", + "ioredis": "^5.4.1", "lib0": "^0.2.98", "passport": "^0.7.0", "passport-kakao": "^1.0.1", @@ -48,6 +49,7 @@ "path": "^0.12.7", "pg": "^8.13.1", "prosemirror-view": "^1.37.0", + "redlock": "^5.0.0-beta.2", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "socket.io": "^4.8.1", diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index e2290861..1463291f 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -22,6 +22,7 @@ import { WorkspaceModule } from './workspace/workspace.module'; import { RoleModule } from './role/role.module'; import { TasksModule } from './tasks/tasks.module'; import { ScheduleModule } from '@nestjs/schedule'; +import { RedLockModule } from './red-lock/red-lock.module'; @Module({ imports: [ @@ -61,6 +62,7 @@ import { ScheduleModule } from '@nestjs/schedule'; WorkspaceModule, RoleModule, TasksModule, + RedLockModule, ], controllers: [AppController], providers: [AppService], diff --git a/apps/backend/src/page/page.controller.spec.ts b/apps/backend/src/page/page.controller.spec.ts index ae01405a..4280b835 100644 --- a/apps/backend/src/page/page.controller.spec.ts +++ b/apps/backend/src/page/page.controller.spec.ts @@ -20,7 +20,6 @@ describe('PageController', () => { provide: PageService, useValue: { createPage: jest.fn(), - createLinkedPage: jest.fn(), deletePage: jest.fn(), updatePage: jest.fn(), findPageById: jest.fn(), diff --git a/apps/backend/src/page/page.module.ts b/apps/backend/src/page/page.module.ts index 743427e3..74d30922 100644 --- a/apps/backend/src/page/page.module.ts +++ b/apps/backend/src/page/page.module.ts @@ -6,12 +6,14 @@ import { Page } from './page.entity'; import { PageRepository } from './page.repository'; import { NodeModule } from '../node/node.module'; import { WorkspaceModule } from '../workspace/workspace.module'; +import { RedLockModule } from '../red-lock/red-lock.module'; @Module({ imports: [ TypeOrmModule.forFeature([Page]), forwardRef(() => NodeModule), WorkspaceModule, + RedLockModule, ], controllers: [PageController], providers: [PageService, PageRepository], diff --git a/apps/backend/src/page/page.repository.ts b/apps/backend/src/page/page.repository.ts index f76136d2..1fa7cee4 100644 --- a/apps/backend/src/page/page.repository.ts +++ b/apps/backend/src/page/page.repository.ts @@ -1,4 +1,4 @@ -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { DataSource, Repository } from 'typeorm'; import { Page } from './page.entity'; import { InjectDataSource } from '@nestjs/typeorm'; diff --git a/apps/backend/src/page/page.service.spec.ts b/apps/backend/src/page/page.service.spec.ts index 5e77f81b..df291830 100644 --- a/apps/backend/src/page/page.service.spec.ts +++ b/apps/backend/src/page/page.service.spec.ts @@ -10,13 +10,17 @@ import { UpdatePageDto } from './dtos/updatePage.dto'; import { PageNotFoundException } from '../exception/page.exception'; import { WorkspaceRepository } from '../workspace/workspace.repository'; import { WorkspaceNotFoundException } from '../exception/workspace.exception'; +const RED_LOCK_TOKEN = 'RED_LOCK'; +type RedisLock = { + acquire(): Promise<{ release: () => void }>; +}; describe('PageService', () => { let service: PageService; let pageRepository: PageRepository; let nodeRepository: NodeRepository; let workspaceRepository: WorkspaceRepository; - + let redisLock: RedisLock; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ @@ -46,6 +50,12 @@ describe('PageService', () => { findOneBy: jest.fn(), }, }, + { + provide: RED_LOCK_TOKEN, + useValue: { + acquire: jest.fn(), + }, + }, ], }).compile(); @@ -53,10 +63,15 @@ describe('PageService', () => { pageRepository = module.get(PageRepository); nodeRepository = module.get(NodeRepository); workspaceRepository = module.get(WorkspaceRepository); + redisLock = module.get(RED_LOCK_TOKEN); }); it('서비스 클래스가 정상적으로 인스턴스화된다.', () => { expect(service).toBeDefined(); + expect(pageRepository).toBeDefined(); + expect(nodeRepository).toBeDefined(); + expect(workspaceRepository).toBeDefined(); + expect(redisLock).toBeDefined(); }); describe('createPage', () => { @@ -141,17 +156,15 @@ describe('PageService', () => { }); }); - describe('createLinkedPage', () => { - it('', () => {}); - }); - describe('deletePage', () => { it('id에 해당하는 페이지를 찾아 성공적으로 삭제한다.', async () => { jest .spyOn(pageRepository, 'delete') .mockResolvedValue({ affected: true } as any); jest.spyOn(pageRepository, 'findOneBy').mockResolvedValue(new Page()); - + jest.spyOn(redisLock, 'acquire').mockResolvedValue({ + release: jest.fn(), + }); await service.deletePage(1); expect(pageRepository.delete).toHaveBeenCalledWith(1); @@ -161,7 +174,9 @@ describe('PageService', () => { jest .spyOn(pageRepository, 'delete') .mockResolvedValue({ affected: false } as any); - + jest.spyOn(redisLock, 'acquire').mockResolvedValue({ + release: jest.fn(), + }); await expect(service.deletePage(1)).rejects.toThrow( PageNotFoundException, ); @@ -199,10 +214,11 @@ describe('PageService', () => { emoji: '📝', workspace: null, }; - jest.spyOn(pageRepository, 'findOneBy').mockResolvedValue(originPage); jest.spyOn(pageRepository, 'save').mockResolvedValue(newPage); - + jest.spyOn(redisLock, 'acquire').mockResolvedValue({ + release: jest.fn(), + }); const result = await service.updatePage(1, dto); expect(result).toEqual(newPage); @@ -216,7 +232,9 @@ describe('PageService', () => { jest .spyOn(nodeRepository, 'findOneBy') .mockResolvedValue({ affected: false } as any); - + jest.spyOn(redisLock, 'acquire').mockResolvedValue({ + release: jest.fn(), + }); await expect(service.updatePage(1, new UpdatePageDto())).rejects.toThrow( PageNotFoundException, ); diff --git a/apps/backend/src/page/page.service.ts b/apps/backend/src/page/page.service.ts index b74dd45d..9312aca1 100644 --- a/apps/backend/src/page/page.service.ts +++ b/apps/backend/src/page/page.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, Inject } from '@nestjs/common'; import { NodeRepository } from '../node/node.repository'; import { WorkspaceRepository } from '../workspace/workspace.repository'; import { PageRepository } from './page.repository'; @@ -8,15 +8,30 @@ import { UpdatePageDto } from './dtos/updatePage.dto'; import { UpdatePartialPageDto } from './dtos/updatePartialPage.dto'; import { PageNotFoundException } from '../exception/page.exception'; import { WorkspaceNotFoundException } from '../exception/workspace.exception'; +import Redlock from 'redlock'; +const RED_LOCK_TOKEN = 'RED_LOCK'; @Injectable() export class PageService { constructor( private readonly pageRepository: PageRepository, private readonly nodeRepository: NodeRepository, private readonly workspaceRepository: WorkspaceRepository, + @Inject(RED_LOCK_TOKEN) private readonly redisLock: Redlock, ) {} - + /** + * redis에 저장된 페이지 정보를 다음 과정을 통해 주기적으로 데이터베이스에 반영한다. + * + * 1. redis에서 해당 페이지의 title과 content를 가져온다. + * 2. 데이터베이스에 해당 페이지의 title과 content를 갱신한다. + * 3. redis에서 해당 페이지 정보를 삭제한다. + * + * 만약 1번 과정을 진행한 상태에서 page가 삭제된다면 오류가 발생한다. + * 위 과정을 진행하는 동안 page 정보 수정을 막기 위해 lock을 사용한다. + * + * 동기화를 위해 기존 페이지에 접근하여 수정하는 로직은 RedLock 알고리즘을 통해 락을 획득할 수 있을 때만 수행한다. + * 기존 페이지에 접근하여 연산하는 로직의 경우 RedLock 알고리즘을 사용하여 동시 접근을 방지한다. + */ async createPage(dto: CreatePageDto): Promise { const { title, content, workspaceId, x, y, emoji } = dto; @@ -47,40 +62,43 @@ export class PageService { return page; } - async createLinkedPage(title: string, nodeId: number): Promise { - // 노드를 조회한다. - const existingNode = await this.nodeRepository.findOneBy({ id: nodeId }); - // 페이지를 생성한다. - const page = await this.pageRepository.save({ title, content: {} }); - - page.node = existingNode; - return await this.pageRepository.save(page); - } - async deletePage(id: number): Promise { - // 페이지를 삭제한다. - const deleteResult = await this.pageRepository.delete(id); - - // 만약 삭제된 페이지가 없으면 페이지를 찾지 못한 것 - if (!deleteResult.affected) { - throw new PageNotFoundException(); + // 락을 획득할 때까지 기다린다. + const lock = await this.redisLock.acquire([`user:${id.toString()}`], 1000); + try { + // 페이지를 삭제한다. + const deleteResult = await this.pageRepository.delete(id); + + // 만약 삭제된 페이지가 없으면 페이지를 찾지 못한 것 + if (!deleteResult.affected) { + throw new PageNotFoundException(); + } + } finally { + // 락을 해제한다. + await lock.release(); } } async updatePage(id: number, dto: UpdatePageDto): Promise { - // 갱신할 페이지를 조회한다. - // 페이지를 조회한다. - const page = await this.pageRepository.findOneBy({ id }); - - // 페이지가 없으면 NotFound 에러 - if (!page) { - throw new PageNotFoundException(); + // 락을 획득할 때까지 기다린다. + const lock = await this.redisLock.acquire([`user:${id.toString()}`], 1000); + try { + // 갱신할 페이지를 조회한다. + // 페이지를 조회한다. + const page = await this.pageRepository.findOneBy({ id }); + + // 페이지가 없으면 NotFound 에러 + if (!page) { + throw new PageNotFoundException(); + } + // 페이지 정보를 갱신한다. + const newPage = Object.assign({}, page, dto); + + // 변경된 페이지를 저장 + return await this.pageRepository.save(newPage); + } finally { + await lock.release(); } - // 페이지 정보를 갱신한다. - const newPage = Object.assign({}, page, dto); - - // 변경된 페이지를 저장 - return await this.pageRepository.save(newPage); } async updateBulkPage(pages: UpdatePartialPageDto[]) { diff --git a/apps/backend/src/red-lock/red-lock.module.ts b/apps/backend/src/red-lock/red-lock.module.ts new file mode 100644 index 00000000..d2d9f574 --- /dev/null +++ b/apps/backend/src/red-lock/red-lock.module.ts @@ -0,0 +1,27 @@ +import { Module, forwardRef } from '@nestjs/common'; +import Redis from 'ioredis'; +import Redlock from 'redlock'; +import { RedisModule } from '../redis/redis.module'; +const RED_LOCK_TOKEN = 'RED_LOCK'; +const REDIS_CLIENT_TOKEN = 'REDIS_CLIENT'; + +@Module({ + imports: [forwardRef(() => RedisModule)], + providers: [ + { + provide: RED_LOCK_TOKEN, + useFactory: (redisClient: Redis) => { + return new Redlock([redisClient], { + driftFactor: 0.01, + retryCount: 10, + retryDelay: 200, + retryJitter: 200, + automaticExtensionThreshold: 500, + }); + }, + inject: [REDIS_CLIENT_TOKEN], + }, + ], + exports: [RED_LOCK_TOKEN], +}) +export class RedLockModule {} diff --git a/apps/backend/src/redis/redis.module.ts b/apps/backend/src/redis/redis.module.ts index b4958682..152d05b3 100644 --- a/apps/backend/src/redis/redis.module.ts +++ b/apps/backend/src/redis/redis.module.ts @@ -1,8 +1,27 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; +import { ConfigModule, ConfigService } from '@nestjs/config'; import { RedisService } from './redis.service'; +import Redis from 'ioredis'; +import { RedLockModule } from '../red-lock/red-lock.module'; + +// 의존성 주입할 때 redis client를 식별할 토큰 +const REDIS_CLIENT_TOKEN = 'REDIS_CLIENT'; @Module({ - providers: [RedisService], - exports: [RedisService], + imports: [ConfigModule, forwardRef(() => RedLockModule)], // ConfigModule 추가 + providers: [ + RedisService, + { + provide: REDIS_CLIENT_TOKEN, + inject: [ConfigService], // ConfigService 주입 + useFactory: (configService: ConfigService) => { + return new Redis({ + host: configService.get('REDIS_HOST'), + port: configService.get('REDIS_PORT'), + }); + }, + }, + ], + exports: [RedisService, REDIS_CLIENT_TOKEN], }) export class RedisModule {} diff --git a/apps/backend/src/redis/redis.service.spec.ts b/apps/backend/src/redis/redis.service.spec.ts deleted file mode 100644 index 9300ac3e..00000000 --- a/apps/backend/src/redis/redis.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RedisService } from './redis.service'; - -describe('RedisService', () => { - let service: RedisService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RedisService], - }).compile(); - - service = module.get(RedisService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/apps/backend/src/redis/redis.service.ts b/apps/backend/src/redis/redis.service.ts index 3d38a9e3..2280d35b 100644 --- a/apps/backend/src/redis/redis.service.ts +++ b/apps/backend/src/redis/redis.service.ts @@ -1,25 +1,29 @@ import { Injectable } from '@nestjs/common'; +import { Inject } from '@nestjs/common'; import Redis from 'ioredis'; +import Redlock from 'redlock'; +const REDIS_CLIENT_TOKEN = 'REDIS_CLIENT'; +const RED_LOCK_TOKEN = 'RED_LOCK'; + type RedisPage = { - title: string; - content: string; + title?: string; + content?: string; }; @Injectable() export class RedisService { - private readonly redisClient: Redis; - - constructor() { - console.log('===================='); - console.log(process.env.REDIS_HOST); - console.log(process.env.REDIS_PORT); - this.redisClient = new Redis({ - host: process.env.REDIS_HOST, - port: parseInt(process.env.REDIS_PORT), - }); + // private readonly redisClient: Redis; + + constructor( + @Inject(REDIS_CLIENT_TOKEN) private readonly redisClient: Redis, + @Inject(RED_LOCK_TOKEN) private readonly redisLock: Redlock, + ) {} + + async getAllKeys(pattern) { + return await this.redisClient.keys(pattern); } - async getAllKeys() { - return await this.redisClient.keys('*'); + createStream() { + return this.redisClient.scanStream(); } async get(key: string) { @@ -30,14 +34,32 @@ export class RedisService { } async set(key: string, value: object) { - return await this.redisClient.hset(key, Object.entries(value)); + // 락을 획득할 때까지 기다린다. + const lock = await this.redisLock.acquire([`user:${key}`], 1000); + try { + await this.redisClient.hset(key, Object.entries(value)); + } finally { + lock.release(); + } } async setField(key: string, field: string, value: string) { - return await this.redisClient.hset(key, field, value); + // 락을 획득할 때까지 기다린다. + const lock = await this.redisLock.acquire([`user:${key}`], 1000); + try { + return await this.redisClient.hset(key, field, value); + } finally { + lock.release(); + } } async delete(key: string) { - return await this.redisClient.del(key); + // 락을 획득할 때까지 기다린다. + const lock = await this.redisLock.acquire([`user:${key}`], 1000); + try { + return await this.redisClient.del(key); + } finally { + lock.release(); + } } } diff --git a/apps/backend/src/tasks/tasks.service.ts b/apps/backend/src/tasks/tasks.service.ts index 0664f049..32939f8e 100644 --- a/apps/backend/src/tasks/tasks.service.ts +++ b/apps/backend/src/tasks/tasks.service.ts @@ -1,48 +1,86 @@ import { Injectable, Logger } from '@nestjs/common'; import { Cron, CronExpression } from '@nestjs/schedule'; import { RedisService } from '../redis/redis.service'; -import { PageService } from '../page/page.service'; - +import { DataSource } from 'typeorm'; +import { InjectDataSource } from '@nestjs/typeorm'; +import { Page } from 'src/page/page.entity'; @Injectable() export class TasksService { private readonly logger = new Logger(TasksService.name); constructor( private readonly redisService: RedisService, - private readonly pageService: PageService, + @InjectDataSource() private readonly dataSource: DataSource, ) {} - @Cron(CronExpression.EVERY_30_SECONDS) + @Cron(CronExpression.EVERY_10_SECONDS) async handleCron() { this.logger.log('스케줄러 시작'); // 시작 시간 const startTime = performance.now(); + const keys = await this.redisService.getAllKeys('page:*'); + console.log(keys); + Promise.allSettled( + keys.map(async (key: string) => { + const redisData = await this.redisService.get(key); + // 데이터 없으면 오류 + if (!redisData) { + throw new Error(`redis에 ${key}에 해당하는 데이터가 없습니다.`); + } - // redis의 모든 값을 가져와서 database에 저장 - const keys = await this.redisService.getAllKeys(); - const pages = []; - for await (const key of keys) { - const { title, content } = await this.redisService.get(key); - const jsonContent = JSON.parse(content); - Object.assign({ - id: parseInt(key), - }); - pages.push({ - id: parseInt(key), - title, - content: jsonContent, - version: 1, + const { title, content } = redisData; + + const updateData: Partial<{ title: string; content: any }> = {}; + + if (title) updateData.title = title; + if (content) updateData.content = JSON.parse(content); + const pageId = parseInt(key.split(':')[1]); + // title과 content 중 적어도 하나가 있을 때 업데이트 실행 + if (Object.keys(updateData).length > 0) { + // 트랜잭션 시작 + const queryRunner = this.dataSource.createQueryRunner(); + try { + await queryRunner.startTransaction(); + + // 갱신 시작 + const pageRepository = queryRunner.manager.getRepository(Page); + await pageRepository.update(pageId, updateData); + + // redis에서 데이터 삭제 + await this.redisService.delete(key); + + // 트랜잭션 커밋 + await queryRunner.commitTransaction(); + } catch (err) { + // 실패하면 postgres는 roll back하고 redis의 값을 살린다. + this.logger.error(err.stack); + await queryRunner.rollbackTransaction(); + title && (await this.redisService.setField(key, 'title', title)); + content && + (await this.redisService.setField(key, 'content', content)); + + // Promise.all에서 실패를 인식하기 위해 에러를 던진다. + throw err; + } finally { + // 리소스 정리 + await queryRunner.release(); + } + } + }), + ) + .then((results) => { + const endTime = performance.now(); + this.logger.log(`총 개수 : ${results.length}개`); + console.log(results); + this.logger.log( + `성공 개수 : ${results.filter((result) => result.status === 'fulfilled').length}개`, + ); + this.logger.log( + `실패 개수 : ${results.filter((result) => result.status === 'rejected').length}개`, + ); + this.logger.log(`실행 시간 : ${(endTime - startTime) / 1000}초`); + }) + .catch((err) => { + this.logger.error(err); }); - // this.pageService.updatePage(parseInt(key), { - // title, - // content: jsonContent, - // }); - // this.logger.log('데이터베이스 갱신'); - } - await this.pageService.updateBulkPage(pages); - - // 끝 시간 - const endTime = performance.now(); - this.logger.log(`갱신 개수 : ${pages.length}개`); - this.logger.log(`실행 시간 : ${(endTime - startTime) / 1000}초`); } } diff --git a/apps/backend/src/yjs/yjs.service.ts b/apps/backend/src/yjs/yjs.service.ts index e4db7b01..42fd2200 100644 --- a/apps/backend/src/yjs/yjs.service.ts +++ b/apps/backend/src/yjs/yjs.service.ts @@ -113,11 +113,12 @@ export class YjsService editorDoc.observeDeep(() => { const document = editorDoc.doc as CustomDoc; const pageId = parseInt(document.name.split('-')[1]); - this.pageService.updatePage( - pageId, - JSON.parse( - JSON.stringify(yXmlFragmentToProsemirrorJSON(editorDoc)), - ), + + this.redisService.setField( + `page:${pageId.toString()}`, + 'content', + JSON.stringify(yXmlFragmentToProsemirrorJSON(editorDoc)), + ); // this.redisService.setField( @@ -157,12 +158,13 @@ export class YjsService // title의 변경 사항을 감지한다. title.observeDeep(async (event) => { // path가 존재할 때만 페이지 갱신 + event[0].path.toString().split('_')[1] && - this.pageService.updatePage( - parseInt(event[0].path.toString().split('_')[1]), - { - title: event[0].target.toString(), - }, + this.redisService.setField( + `page:${event[0].path.toString().split('_')[1]}`, + 'title', + event[0].target.toString(), + ); // this.redisService.setField( // event[0].path.toString().split('_')[1], @@ -193,7 +195,6 @@ export class YjsService const { title, id } = node.data; const { x, y } = node.position; const isHolding = node.isHolding; - this.logger.log('log', node); if (!isHolding) { // TODO : node의 경우 key 값을 page id가 아닌 node id로 변경 const findPage = await this.pageService.findPageById(id); diff --git a/yarn.lock b/yarn.lock index 854d421e..fa741136 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1283,10 +1283,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@eslint/js@9.15.0", "@eslint/js@^9.13.0": - version "9.15.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.15.0.tgz#df0e24fe869143b59731942128c19938fdbadfb5" - integrity sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg== +"@eslint/js@9.16.0", "@eslint/js@^9.13.0": + version "9.16.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.16.0.tgz#3df2b2dd3b9163056616886c86e4082f45dbf3f4" + integrity sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -1690,13 +1690,13 @@ webpack-node-externals "3.0.0" "@nestjs/common@^10.0.0": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.11.tgz#7cd1021561a1591e278c254daa06b2e1e7872c98" - integrity sha512-7MnKYckMsT/LGlwC0PCY8XZFWD84bxVwsPsn9H2RrLSbCCwUvcRb39ZkQt4uR+zKj2fq4TsV80+5DfjMwFvVdg== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.12.tgz#9ba742e910df30c475b00132c6734c8bedaa6241" + integrity sha512-+aQw1d1cV9MtjSSCoXA2iZf+EBJANyjTC9d0j38bUAHhaPQinRlgM81F91DFYZoYcYVOY4hJd+DDYRFGoN7j7Q== dependencies: uid "2.0.2" iterare "1.2.1" - tslib "2.7.0" + tslib "2.8.1" "@nestjs/config@^3.3.0": version "3.3.0" @@ -1708,16 +1708,16 @@ lodash "4.17.21" "@nestjs/core@^10.0.0": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.11.tgz#d71f57b62e8862ed1b9352baf75d7f39429bd007" - integrity sha512-S8wbxl08SZ2dgLRrIJNpesxI8ppn3y50XW3hH3HvKfUSjMEmCNIcGvge3WxJULiYkOUnmZ3ZqJAmKr2EjAGliA== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.12.tgz#b784849df4edd4f2287e33dec4ad5ea0ca623b02" + integrity sha512-2qENES1U0VxCOfW45jVIV7g38edcvuU5aaLpZWOhb3nzehdvmeYoovUe8LTTHFrLWsDVY1v9FPfEhFQGsZfopQ== dependencies: uid "2.0.2" "@nuxtjs/opencollective" "0.3.2" fast-safe-stringify "2.1.1" iterare "1.2.1" path-to-regexp "3.3.0" - tslib "2.7.0" + tslib "2.8.1" "@nestjs/jwt@^10.2.0": version "10.2.0" @@ -1738,30 +1738,30 @@ integrity sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ== "@nestjs/platform-express@^10.0.0": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.4.11.tgz#5c80ae93dda45c3bac146bc560e0307747661b9a" - integrity sha512-YjhoIOdCbpxy3p5Em2pqYsUY+5cpyocguCzMI91qh41/jTAUzBD25K+hAiMyENZXEkDyscoF8OajyZvWm1ihdQ== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.4.12.tgz#2a9c3ee053b29083e154d6622b8ded4e284da894" + integrity sha512-+m8BQas9mnY29Y6rZv8EUqIYwcta99/dTiGIUy48LB/+YoAyDTEHpsLd2+rpetk54niGgKJYclCZRUwRcjrYYA== dependencies: body-parser "1.20.3" cors "2.8.5" express "4.21.1" multer "1.4.4-lts.1" - tslib "2.7.0" + tslib "2.8.1" "@nestjs/platform-socket.io@^10.4.8": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/platform-socket.io/-/platform-socket.io-10.4.11.tgz#91da3907d320d8e2ab03f5a09b1ba638fdf3f583" - integrity sha512-71QOyhOv52D9XodLrcPbmLKsPfF7h+bVPk1fD5bdc8KxDZb/+0W3aWlUUUhOazRYAl2yJAOmpk+t7jE7W3wFYg== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/platform-socket.io/-/platform-socket.io-10.4.12.tgz#91bf905f8d3d512ffa3d5d2517ec3b4c47792c00" + integrity sha512-5gtMgxyEuVppDRGqxPI05F8RTrYKBBfJmqOzogmrD4kGCKkc7POohvwiR2AsIVxXHRbcShtRGOCcs5cvkOOhlA== dependencies: - socket.io "4.8.0" - tslib "2.7.0" + socket.io "4.8.1" + tslib "2.8.1" "@nestjs/platform-ws@^10.4.7": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/platform-ws/-/platform-ws-10.4.11.tgz#b53200e19e87fc3a8cf0065e925571f5f3b6c538" - integrity sha512-Plm/69sKls1UcM2x0uGUVbqaGpfpQJiUBItE2kziCeiJm7VtpcXPETzZAvoVzLUdhUdOZzeo6EgGotncuNTEdQ== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/platform-ws/-/platform-ws-10.4.12.tgz#46c6a15ba50f35e16c4a982e8dc4f25d2e71eabb" + integrity sha512-lDyoQA+O7ajQd3LuQEgXn/PQ0pVoGBQOXXS4MQKY67rvdH5agJTtSpMAQqORmMBAdXZ/CM6c+Z8bLo9G+d5Hxw== dependencies: - tslib "2.7.0" + tslib "2.8.1" ws "8.18.0" "@nestjs/schedule@^4.1.1": @@ -1803,11 +1803,11 @@ swagger-ui-dist "5.18.2" "@nestjs/testing@^10.0.0": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-10.4.11.tgz#30505132bf49869f44321b759a5f4b3b2ee4811f" - integrity sha512-jpZwVrPfOvjZxdYMHasHko38XD+yuGAGJBM3qFQlZRQkZ+mEa6AuXUcMXihXWehHw7DXTeYi7u2hA+HN/wBBbw== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-10.4.12.tgz#33e0bf6bd885c6e2f88a40c3eb086283a044558a" + integrity sha512-Q1ZpzmIqzem6Q9pBwT1qQRYE050HhvSh8U7AbdIavOHCI063GbXOy/erXEpUnE0o46mqT+y88Nn9NjTXAQt4nQ== dependencies: - tslib "2.7.0" + tslib "2.8.1" "@nestjs/typeorm@^10.0.2": version "10.0.2" @@ -1817,13 +1817,13 @@ uuid "9.0.1" "@nestjs/websockets@^10.4.8": - version "10.4.11" - resolved "https://registry.yarnpkg.com/@nestjs/websockets/-/websockets-10.4.11.tgz#6d032c3da22af65e961739312d08588cf14c8914" - integrity sha512-hxcTk9ljuZtRVmcG0OGks8/AbEXnEb3uxweIcH+7F1B2KQZukn2wvjrTZkmcm7ygJYZIwLPF9sSYO/oqZJwWZA== + version "10.4.12" + resolved "https://registry.yarnpkg.com/@nestjs/websockets/-/websockets-10.4.12.tgz#78412ee0f84f664a36d627c41be340438911ca95" + integrity sha512-BPu8VgA/R0DPu87VGmGg1U6BGZaIy9vlNqaoeNUyMbyToG+cTL4WvFi3s9QBO/I88QnTlfzC/ez/oAGaJjygEQ== dependencies: iterare "1.2.1" object-hash "3.0.0" - tslib "2.7.0" + tslib "2.8.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2234,95 +2234,95 @@ resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f" integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== -"@rollup/rollup-android-arm-eabi@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz#e3c9cc13f144ba033df4d2c3130a214dc8e3473e" - integrity sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw== - -"@rollup/rollup-android-arm64@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz#0474250fcb5871aca952e249a0c3270fc4310b55" - integrity sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA== - -"@rollup/rollup-darwin-arm64@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz#77c29b4f9c430c1624f1a6835f2a7e82be3d16f2" - integrity sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q== - -"@rollup/rollup-darwin-x64@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz#7d87711f641a458868758cbf110fb32eabd6a25a" - integrity sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ== - -"@rollup/rollup-freebsd-arm64@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz#662f808d2780e4e91021ac9ee7ed800862bb9a57" - integrity sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw== - -"@rollup/rollup-freebsd-x64@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz#71e5a7bcfcbe51d8b65d158675acec1307edea79" - integrity sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA== - -"@rollup/rollup-linux-arm-gnueabihf@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz#08f67fcec61ee18f8b33b3f403a834ab8f3aa75d" - integrity sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w== - -"@rollup/rollup-linux-arm-musleabihf@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz#2e1ad4607f86475b1731556359c6070eb8f4b109" - integrity sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A== - -"@rollup/rollup-linux-arm64-gnu@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz#c65d559dcb0d3dabea500cf7b8215959ae6cccf8" - integrity sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg== - -"@rollup/rollup-linux-arm64-musl@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz#6739f7eb33e20466bb88748519c98ce8dee23922" - integrity sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA== - -"@rollup/rollup-linux-powerpc64le-gnu@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz#8d9fe9471c256e55278cb1f7b1c977cd8fe6df20" - integrity sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ== - -"@rollup/rollup-linux-riscv64-gnu@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz#9a467f7ad5b61c9d66b24e79a3c57cb755d02c35" - integrity sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw== - -"@rollup/rollup-linux-s390x-gnu@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz#efaddf22df27b87a267a731fbeb9539e92cd4527" - integrity sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg== - -"@rollup/rollup-linux-x64-gnu@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz#a959eccb04b07fd1591d7ff745a6865faa7042cd" - integrity sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q== - -"@rollup/rollup-linux-x64-musl@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz#927764f1da1f2dd50943716dec93796d10cb6e99" - integrity sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw== - -"@rollup/rollup-win32-arm64-msvc@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz#030b6cc607d845da23dced624e47fb45de105840" - integrity sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A== - -"@rollup/rollup-win32-ia32-msvc@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz#3457a3f44a84f51d8097c3606429e01f0d2d0ec2" - integrity sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ== - -"@rollup/rollup-win32-x64-msvc@4.27.4": - version "4.27.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz#67d516613c9f2fe42e2d8b78e252d0003179d92c" - integrity sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug== +"@rollup/rollup-android-arm-eabi@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz#462e7ecdd60968bc9eb95a20d185e74f8243ec1b" + integrity sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ== + +"@rollup/rollup-android-arm64@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz#78a2b8a8a55f71a295eb860a654ae90a2b168f40" + integrity sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA== + +"@rollup/rollup-darwin-arm64@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz#5b783af714f434f1e66e3cdfa3817e0b99216d84" + integrity sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q== + +"@rollup/rollup-darwin-x64@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz#f72484e842521a5261978034e18e20f778a2850d" + integrity sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w== + +"@rollup/rollup-freebsd-arm64@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz#3c919dff72b2fe344811a609c674a8347b033f62" + integrity sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ== + +"@rollup/rollup-freebsd-x64@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz#b62a3a8365b363b3fdfa6da11a9188b6ab4dca7c" + integrity sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA== + +"@rollup/rollup-linux-arm-gnueabihf@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz#0d02cc55bd229bd8ca5c54f65f916ba5e0591c94" + integrity sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w== + +"@rollup/rollup-linux-arm-musleabihf@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz#c51d379263201e88a60e92bd8e90878f0c044425" + integrity sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg== + +"@rollup/rollup-linux-arm64-gnu@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz#93ce2addc337b5cfa52b84f8e730d2e36eb4339b" + integrity sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg== + +"@rollup/rollup-linux-arm64-musl@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz#730af6ddc091a5ba5baac28a3510691725dc808b" + integrity sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz#b5565aac20b4de60ca1e557f525e76478b5436af" + integrity sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ== + +"@rollup/rollup-linux-riscv64-gnu@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz#d488290bf9338bad4ae9409c4aa8a1728835a20b" + integrity sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g== + +"@rollup/rollup-linux-s390x-gnu@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz#eb2e3f3a06acf448115045c11a5a96868c95a556" + integrity sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw== + +"@rollup/rollup-linux-x64-gnu@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz#065952ef2aea7e837dc7e02aa500feeaff4fc507" + integrity sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw== + +"@rollup/rollup-linux-x64-musl@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz#3435d484d05f5c4d1ffd54541b4facce2887103a" + integrity sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw== + +"@rollup/rollup-win32-arm64-msvc@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz#69682a2a10d9fedc334f87583cfca83c39c08077" + integrity sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg== + +"@rollup/rollup-win32-ia32-msvc@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz#b64470f9ac79abb386829c56750b9a4711be3332" + integrity sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A== + +"@rollup/rollup-win32-x64-msvc@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz#cb313feef9ac6e3737067fdf34f42804ac65a6f2" + integrity sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ== "@scarf/scarf@=1.4.0": version "1.4.0" @@ -2892,22 +2892,22 @@ resolved "https://registry.yarnpkg.com/@tanstack/history/-/history-1.81.9.tgz#5b0beea542eb3ba0211966fcff829df23976227f" integrity sha512-9MPknhhnvZKifK4jSvva6NDqYQwsNaptrRzO4ejk6yCLyi4koVG4u3C4VCeClYZY5etLEQbO8wXU9knEFZpMeg== -"@tanstack/query-core@5.61.5": - version "5.61.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.61.5.tgz#3ba80527f6474b5edbf348c1b0a6254b3cdfe160" - integrity sha512-iG5vqurEOEbv+paP6kW3zPENa99kSIrd1THISJMaTwVlJ+N5yjVDNOUwp9McK2DWqWCXM3v13ubBbAyhxT78UQ== +"@tanstack/query-core@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.62.0.tgz#94022c9fde3b8c60e69828b726bd0df535dcacf9" + integrity sha512-sx38bGrqF9bop92AXOvzDr0L9fWDas5zXdPglxa9cuqeVSWS7lY6OnVyl/oodfXjgOGRk79IfCpgVmxrbHuFHg== "@tanstack/react-query@^5.59.19": - version "5.61.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.61.5.tgz#abe26e5f2d7c9c6c0643579abfd9119ac22a88c8" - integrity sha512-rjy8aqPgBBEz/rjJnpnuhi8TVkVTorMUsJlM3lMvrRb5wK6yzfk34Er0fnJ7w/4qyF01SnXsLB/QsTBsLF5PaQ== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.62.0.tgz#db7d4ec58a0db69b105e2d8bd249acfb20653825" + integrity sha512-tj2ltjAn2a3fs+Dqonlvs6GyLQ/LKVJE2DVSYW+8pJ3P6/VCVGrfqv5UEchmlP7tLOvvtZcOuSyI2ooVlR5Yqw== dependencies: - "@tanstack/query-core" "5.61.5" + "@tanstack/query-core" "5.62.0" "@tanstack/react-router@^1.82.12": - version "1.84.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-router/-/react-router-1.84.0.tgz#68fbb458f8db94cff09695fdcf0e6a30d7ecda32" - integrity sha512-JJ6NhktXQHF1oWBSZwPHwq7eRZJGqEbWhtar/Mw1JDwZcNrodZ6mgFSeL07jRax89/K3YAKHPzdVwIuSsllXeg== + version "1.85.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-router/-/react-router-1.85.0.tgz#18d6eac047ae06e38d54eb5c7338d96bc5160be9" + integrity sha512-97v99aupSRajxM3jESPhJ4cq/Jxy1cdN4SYizS6eQu3106QCaOz6nciQGbcRJvwAhWyElKWhs9NYHYK4hc4PVA== dependencies: "@tanstack/history" "1.81.9" "@tanstack/react-store" "^0.6.1" @@ -2924,18 +2924,17 @@ use-sync-external-store "^1.2.2" "@tanstack/router-devtools@^1.82.12": - version "1.84.0" - resolved "https://registry.yarnpkg.com/@tanstack/router-devtools/-/router-devtools-1.84.0.tgz#dc59710d902bc6182e2838aef2f561e812c9b86c" - integrity sha512-XCBT1MJNZ7k1h2+E+9Hwg4h21gahYJf92PZZU4JNhKKl3JSrFrIm+ItP5p7dP1hk6LE5eIB1DTDIZifT+meS5w== + version "1.85.0" + resolved "https://registry.yarnpkg.com/@tanstack/router-devtools/-/router-devtools-1.85.0.tgz#212df5ba33c5220e7c2b1d2b492084ca5aff42dc" + integrity sha512-k0UgYCOpQaEdZBsXntGIcc8+WuNeUMPxqGaR4+iY/dsrFCf9fL5Z0pVU6MIiLAx0TlXInI4XJr1YILc9bg3pKg== dependencies: clsx "^2.1.1" goober "^2.1.16" - -"@tanstack/router-generator@^1.83.1": - version "1.83.1" - resolved "https://registry.yarnpkg.com/@tanstack/router-generator/-/router-generator-1.83.1.tgz#dc91cb538c5ffcb19e67154cd1fde3a62b4df330" - integrity sha512-PecQnkY8hz2V1ZVriQ5iKp3+033H6VbiOmAkESXSENCfnM3p5SBUsd+VbPI4/2w5V/4X1lFEWepJaIBNM1Gm3A== +"@tanstack/router-generator@^1.84.4": + version "1.84.4" + resolved "https://registry.yarnpkg.com/@tanstack/router-generator/-/router-generator-1.84.4.tgz#d45b6f831fb2719a12d78042ddccecaa90752641" + integrity sha512-BpzFuJRY8AllyrNnXk/NFXXGsxmyfUhfvcYqmJ7GDcoEAyMuPJ89z5+nJm/OPh5aed14I/7mPB2yC40FnZ2rWA== dependencies: "@tanstack/virtual-file-routes" "^1.81.9" prettier "^3.3.3" @@ -2943,9 +2942,9 @@ zod "^3.23.8" "@tanstack/router-plugin@^1.82.10": - version "1.83.1" - resolved "https://registry.yarnpkg.com/@tanstack/router-plugin/-/router-plugin-1.83.1.tgz#0c0df682432ce85f4def507a90ccf5e23aefabcc" - integrity sha512-K/TQ81q5Sy+2l+9mprH2cKw0f4ytopDMgq0bEYujjwhjdR8/bXeTk9HuerWtz0dsyjOdm2SDh68w0Lan3nkHFA== + version "1.84.4" + resolved "https://registry.yarnpkg.com/@tanstack/router-plugin/-/router-plugin-1.84.4.tgz#4cd9a2636e1653eeac9bea27a2f032032bb1b1f3" + integrity sha512-tNT6NLb6Q2jdbWu+SriO/SnahRPbTfNZFrr8W5JhrK36Ul0Usfl2frxhN1zSOBCHkRBcpcy09qf3Vt/Hcyxegw== dependencies: "@babel/core" "^7.26.0" "@babel/generator" "^7.26.2" @@ -2955,7 +2954,7 @@ "@babel/template" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/types" "^7.26.0" - "@tanstack/router-generator" "^1.83.1" + "@tanstack/router-generator" "^1.84.4" "@tanstack/virtual-file-routes" "^1.81.9" "@types/babel__core" "^7.20.5" "@types/babel__generator" "^7.6.8" @@ -3287,6 +3286,11 @@ dependencies: "@babel/types" "^7.20.7" +"@types/bluebird@*": + version "3.5.42" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.42.tgz#7ec05f1ce9986d920313c1377a5662b1b563d366" + integrity sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A== + "@types/body-parser@*": version "1.19.5" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -3452,6 +3456,13 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== +"@types/ioredis@^4.28.10": + version "4.28.10" + resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" + integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" @@ -3562,9 +3573,9 @@ "@types/express" "*" "@types/node@*", "@types/node@>=10.0.0": - version "22.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.0.tgz#89bfc9e82496b9c7edea3382583fa94f75896e81" - integrity sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA== + version "22.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== dependencies: undici-types "~6.20.0" @@ -3574,9 +3585,9 @@ integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== "@types/node@^20.3.1": - version "20.17.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.8.tgz#42748cdb169adf5be7c9760604c72820c7b7d560" - integrity sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA== + version "20.17.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.9.tgz#5f141d4b7ee125cdee5faefe28de095398865bab" + integrity sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw== dependencies: undici-types "~6.19.2" @@ -3610,6 +3621,22 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/redis@^2.8.0": + version "2.8.32" + resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.32.tgz#1d3430219afbee10f8cfa389dad2571a05ecfb11" + integrity sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w== + dependencies: + "@types/node" "*" + +"@types/redlock@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@types/redlock/-/redlock-4.0.7.tgz#33ed56f22a38d6b2f2e6ae5ed1b3fc1875a08e6b" + integrity sha512-5D6egBv0fCfdbmnCETjEynVuiwFMEFFc3YFjh9EwhaaVTAi0YmB6UI1swq1S1rjIu+n27ppmlTFDK3D3cadJqg== + dependencies: + "@types/bluebird" "*" + "@types/ioredis" "^4.28.10" + "@types/redis" "^2.8.0" + "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -3860,206 +3887,206 @@ "@typescript-eslint/types" "8.16.0" eslint-visitor-keys "^4.2.0" -"@uiw/color-convert@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/color-convert/-/color-convert-2.3.2.tgz#1cb7931d6ec3bda8ecadca4ae65a382bec3813a2" - integrity sha512-Txs0oAcOGhvM15yi7NqDJSws6htpuGx75EblFlZmh4h4AyUYXaeN2HNcOAUt835M3SN1j7rqMC+XERIE4r776Q== - -"@uiw/react-color-alpha@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-alpha/-/react-color-alpha-2.3.2.tgz#61a3bac06bd426c4c1cc1893a536b24de31881b6" - integrity sha512-+yh+KEpNKjxNFFODQrB3Lki2hu6kznoSCngHgptlWBUtAC3e/e7tIiTTedSpCGr7fwIpC0CWrKwxENA3tyY/2Q== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-drag-event-interactive" "2.3.2" - -"@uiw/react-color-block@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-block/-/react-color-block-2.3.2.tgz#e5afd883f40650cf34173cc46073d0c385e36261" - integrity sha512-eic08WG6IFBEWrsE/U9aMuZxW9gSdX4s5iD5TyZMlHlUiGIneGXEOOSHNqlIfA7Dxbs1STYQbEQU/aSx6APYLw== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" - -"@uiw/react-color-chrome@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-chrome/-/react-color-chrome-2.3.2.tgz#6d1f0a52fc6419ddb93cec998e69d6b1db1964da" - integrity sha512-WvA8dg2y+vgoyy8GFBM3B1+SeJ29ov5OVEei1kACMKxThADPdI4w3RRmhYIMnSeFGVW3bGuBMq6JimjIKZirCQ== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-editable-input-hsla" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - "@uiw/react-color-github" "2.3.2" - "@uiw/react-color-hue" "2.3.2" - "@uiw/react-color-saturation" "2.3.2" - -"@uiw/react-color-circle@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-circle/-/react-color-circle-2.3.2.tgz#9f279924cfb30750c285eb269208868cf1eefea8" - integrity sha512-lndeyFmvKNZ5MBwL9BqkfceuhOnIGQW3gB9wKRPxiKmux9maxllirTwWNvv/6vgGFMnfaR89NO7pjTyf7mNhOA== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" - -"@uiw/react-color-colorful@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-colorful/-/react-color-colorful-2.3.2.tgz#118a3893f892c5ef681919512b32a2a65a641ee0" - integrity sha512-Rr1qa4Uo588CZjOx6OZIXjo7+CNcnqogU0Nel6L5zzwL+3CNBC3GfS4Or4db/ZxFhN49qt6NqsQa/ykA2/ixpg== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" - "@uiw/react-color-hue" "2.3.2" - "@uiw/react-color-saturation" "2.3.2" - -"@uiw/react-color-compact@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-compact/-/react-color-compact-2.3.2.tgz#c5ec1f1917f6fd1a25dfd1c18315596419ec4987" - integrity sha512-3/eQkndGBIBr91mkPoOgS8NwTxpz5wEt5UK6CSvbC+zOQtEzZaWq+XpB7ieoUjla3yiKgdBauu3iYTwo1LOFEw== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" - -"@uiw/react-color-editable-input-hsla@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input-hsla/-/react-color-editable-input-hsla-2.3.2.tgz#749116a1842f71eb786b40bc28e0ef82890c5557" - integrity sha512-lLO8K+Zv5L9HKBgM3zYSqeLKisBkpXCxlQmF8iCKYcIgeRilM26qqylskA4n6pVixfSooL0hyL/HwfNmbCIrrg== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - -"@uiw/react-color-editable-input-rgba@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input-rgba/-/react-color-editable-input-rgba-2.3.2.tgz#711d4e85183f5c3f5fabaf1bf4e7ca6a6dbe7d7c" - integrity sha512-HV0+5zzpaNG5v6EyVgmPfInd9UzYknQI7gdsVmmXKzB13L3RFhiv77r6o+q3IZMEnoDZ3U92uX4FeRaM1NrwYw== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - -"@uiw/react-color-editable-input@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input/-/react-color-editable-input-2.3.2.tgz#1df092ede3b301d29c12a8aba63e1eed1dcf7daa" - integrity sha512-DDl9pCN7hH5Q+OB6LiFGFmkqIQw81EDIEvDi6rr6G9U+k+oqZ9JCBKSZ9qNKSa4MqnuISOkFv0vL3Jh8fSyqcg== - -"@uiw/react-color-github@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-github/-/react-color-github-2.3.2.tgz#8ee1d1992b5293f69e6f68c98f6f2c1bd15515cd" - integrity sha512-3QxpEOKYXbbV/L1cYsf7nhoOnl19/zWTpRRgda8LOe3SuRhFrFM3ZLa+UJUEXgO1cg9h64gxSKINh2st/FawpQ== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" - -"@uiw/react-color-hue@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-hue/-/react-color-hue-2.3.2.tgz#6cf5d821461a1047a7d1770bf150cf1c6997b342" - integrity sha512-aAveo++GAghw09Ngc8Zzwxhj9mGaJfw8q40fDGFrVNxdrwrAjySIKHzlOSg5kw6WnEp4tUjhkMXDfCZWUhqmPA== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" - -"@uiw/react-color-material@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-material/-/react-color-material-2.3.2.tgz#f0a780a5221af0369af5d38236ad82447b83bda3" - integrity sha512-fb+bVCwRoeb4INAFEEYU26GWU7+/695DFz7C/dA2RLUa279NhVtNaOtISULT+u+Aerf2dR6GrjBk5wdgNqRqPg== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - -"@uiw/react-color-name@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-name/-/react-color-name-2.3.2.tgz#d520077d501f879742d6e33dbde5e8d6a81302cf" - integrity sha512-ZLt6ypbsGbo48wSgtFa5t+egZ57VmWIriyW/6rMNK5nMB8Y9Da7tqT2dL4WfwPzrG7I/97qafinfnGzPAuHdsw== +"@uiw/color-convert@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/color-convert/-/color-convert-2.3.3.tgz#c3adecdee71ac4878f3f05ca00728737f9eaa3ef" + integrity sha512-9ZCCVSVdPP+Rat1Keo1T867sjLfektCbBW+N7Qb5Ii1l/BnGYghLpIcuCY6tjzpHjKHc/yo90QkFVE70sdlafg== + +"@uiw/react-color-alpha@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-alpha/-/react-color-alpha-2.3.3.tgz#2f72bf31af0bca9c864e86391c19f06059aae8d1" + integrity sha512-Qwh1YLLFTxiZxssQzxcKUt7cCi026mdDEcALyOl+GUNXvPulDX8b9+T6RHUgpgX/iUgDh3Sv98UcYJ4swpM/4w== dependencies: - colors-named "^1.0.1" - colors-named-hex "^1.0.1" + "@uiw/color-convert" "2.3.3" + "@uiw/react-drag-event-interactive" "2.3.3" + +"@uiw/react-color-block@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-block/-/react-color-block-2.3.3.tgz#789050fc2f6a2a1355c1d62fa988a62bdf21260d" + integrity sha512-LZDxgUNutz2zXV0ZU+noTD7te/Z55IvPWmalkIrL5xJc9yd+cGvohf3P61EmIQZZF4vrRxrKVmVt/RF/UBvKyw== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" + +"@uiw/react-color-chrome@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-chrome/-/react-color-chrome-2.3.3.tgz#ee55ba9da823ead2507af07800d46656e03fd474" + integrity sha512-p4MrDgXTIzyVyp1T51LHbF47MZyZ8fXjfPlTikhHx7oBxtcCs4FEUOfStj6HvAMtODfYWI2qUxrv3xzTDC4OKw== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-editable-input-hsla" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" + "@uiw/react-color-github" "2.3.3" + "@uiw/react-color-hue" "2.3.3" + "@uiw/react-color-saturation" "2.3.3" + +"@uiw/react-color-circle@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-circle/-/react-color-circle-2.3.3.tgz#079344c04a416d7b2f9233b7c47d1c13926a63e6" + integrity sha512-nDXKPViP6xj5X5AYc8rzygaD0t2ettBevyuLy0EXB/CIguxjsPQBbZ2/hpXyO7UXiISdwj1Ilqsuug4UYzD2Aw== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" + +"@uiw/react-color-colorful@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-colorful/-/react-color-colorful-2.3.3.tgz#ce1caf5a0889e5fa8aa210926dbc7be218814787" + integrity sha512-sbepYeUi15A179II5fLDrfqm3yJCQlHyuiAdwqkIepwoWSll86/0Hx6mIrzK1IYUaY9vEUWwa4SEBfMLOScXrw== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" + "@uiw/react-color-hue" "2.3.3" + "@uiw/react-color-saturation" "2.3.3" + +"@uiw/react-color-compact@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-compact/-/react-color-compact-2.3.3.tgz#c4f109271650e14f38742687aefa6c95870eecd7" + integrity sha512-oD6ReoxgzSifFduW/2VeyNpW2L/jeNUs00vPfuLap4CspY9fw2jnBOhmi5OMIqeQGVI1dyesI0D8hz61BpwLbg== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" + +"@uiw/react-color-editable-input-hsla@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input-hsla/-/react-color-editable-input-hsla-2.3.3.tgz#b23c1b12e68dd8ba413fcf50b8a437195a78f0fe" + integrity sha512-xOkfZdA1ktwS6a52VU31+BLLowTgwgWrGJosPQ3FDatqQvA2v46wlcgtZBDWNYHVrk1816PDU/4of15u4/G0gQ== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" + +"@uiw/react-color-editable-input-rgba@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input-rgba/-/react-color-editable-input-rgba-2.3.3.tgz#8cb11639b5cf0421310a45b653665007dfcac0b7" + integrity sha512-XCeWxR0gs9Lp6is2NWvbtCmkYjFm8raTktp1VYycVsmgg3202VmK8fgy944JsPFJIDt8XSi5Z4fjwychoRKGqg== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + +"@uiw/react-color-editable-input@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-editable-input/-/react-color-editable-input-2.3.3.tgz#9f7e200a2c994b9a2d1b9fbabdad18ba20608b76" + integrity sha512-QV66flPVm5FkuizgLkwq0Sapy7xUBKYcHguhtoTr/vsOqsOrA9EYGdQuQPImxQLBEdyLcJsK5Wj1gwZhZAFvXQ== + +"@uiw/react-color-github@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-github/-/react-color-github-2.3.3.tgz#753504e4f89215c3dcfe73f4bc5cf23836865272" + integrity sha512-JTbyP79KGwnkKlKBGtge6ce32FO1LSKn9oKXEfaR0h47DgqwpfpFU0vtewvirYBbcreBX0SIgFagWhBnKgY7tA== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" -"@uiw/react-color-saturation@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-saturation/-/react-color-saturation-2.3.2.tgz#8987a142f59d19180739711a49c24c71065c52c9" - integrity sha512-aDKMhjylBUb4dH4oTQYz+U4mhpOebbQ2J0Y8y5aX1tfZ3fZuBqnXtWzu7Ffj3ksdKwkQHPddxT5IDTbAChF/og== +"@uiw/react-color-hue@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-hue/-/react-color-hue-2.3.3.tgz#3bbe6d8a00bc88e1032ad6e00487fb861e5953d4" + integrity sha512-4V/kj8NMDptm3+PYCzqnU5sW7DY+mP1crWkcpLJiIiqxjAbMxZjfI8+7Nm1Kcd+wUFfdFBt4/ZhVmvURyG+7TQ== dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-drag-event-interactive" "2.3.2" + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" -"@uiw/react-color-shade-slider@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-shade-slider/-/react-color-shade-slider-2.3.2.tgz#056e6ad5aa320a2a70bb07c1e8aad249b5cf9feb" - integrity sha512-nM8AJPpq9UnC7LWjQEZ28bIm8gMRqRzk3dXfGQ4X3t3040d11o4sbl23pTmWTjn6P+3+MP/L2FhmvLSTUkMp/g== +"@uiw/react-color-material@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-material/-/react-color-material-2.3.3.tgz#7d7d36f18defc63e4e03aa585e41889add7558b5" + integrity sha512-77w4GfO3d60UkKjYC1RPWxAedTRasvfQnmiFXG4A2t/+tkrE0M+ZVD4y3vKk9OJTzt1yxh2nZPH7GcOCuixiVw== dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" -"@uiw/react-color-sketch@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-sketch/-/react-color-sketch-2.3.2.tgz#c9b680360e658bd7f474a7d9d039f9525a0af044" - integrity sha512-CMCbzarRVEqZLCi84AE4RQrHapvZQTXFylm7A7mfA28qInFFyF3jZsqRu6Y5sc33rPmL4AeSURbgPljmolxQ1g== +"@uiw/react-color-name@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-name/-/react-color-name-2.3.3.tgz#e46d0e126fcf49534837b077a2bc3bea32e9484c" + integrity sha512-TYW4fohOxfUjz8hC2pa2T5y2rwvipHL4ZBDVBhw/14BvfrigQKqFD0AIiu6XD5/kUsTSNHQFvpCr//x+3w836Q== dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - "@uiw/react-color-hue" "2.3.2" - "@uiw/react-color-saturation" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" + colors-named "^1.0.1" + colors-named-hex "^1.0.1" -"@uiw/react-color-slider@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-slider/-/react-color-slider-2.3.2.tgz#67219865df3f3e275b516617d7f995a73797fa9d" - integrity sha512-Mf9w9YwI+nYxagoTPsxzEHX+/EkVTH0Ak84V6CgcmHVxM3zGESdpalZ+9B6NFWjy9nP7Oa2lK1i4cyZr8D7v2g== +"@uiw/react-color-saturation@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-saturation/-/react-color-saturation-2.3.3.tgz#2864e7a8e222425327536888c340032ba7fa42c0" + integrity sha512-bUWf/w9QBf0EGsPduXwQoeAOkKWQtcui8kHvwazqTZTm477Wk77Dkmqv0HLk4o0m2dv+ikh65qISygo+pcrcOQ== dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" + "@uiw/color-convert" "2.3.3" + "@uiw/react-drag-event-interactive" "2.3.3" -"@uiw/react-color-swatch@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-swatch/-/react-color-swatch-2.3.2.tgz#f5acac4c73da10d88075cf3c67f4fb7022f5430f" - integrity sha512-AjkEcSdlpxiFm9yull4WDujuHr0tD9/+XkLtcus/MH768zSQbb+rj6cY1nZ8L8FI6LRDGRaVJqFaXm4ZOAaIZw== +"@uiw/react-color-shade-slider@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-shade-slider/-/react-color-shade-slider-2.3.3.tgz#5eed9f64861cbea9811d30155c17e3c38a6be0e4" + integrity sha512-yZ9CX/VjjFUmXigoCe4afnii8V8cr2EInDXxoZXU/raotHhKh0C3eTt4INMneQ9irtir0hjRRtXDATT15aCV0w== dependencies: - "@uiw/color-convert" "2.3.2" + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" -"@uiw/react-color-wheel@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color-wheel/-/react-color-wheel-2.3.2.tgz#066ec384da3ea4e5728de3973bf9be27ca2670f6" - integrity sha512-AwZZusWq+nlNNEjif6ruryrgc/cVuQ0x6XbdIVUbiQekfHFv+LunHnMS4EtmX+yPiOVihTvBp8NpfrdN2jJ8hw== +"@uiw/react-color-sketch@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-sketch/-/react-color-sketch-2.3.3.tgz#4c5266735e59a4de58a3a1b4986c10682f3e78a0" + integrity sha512-wgxO2YfxEan7XgUhkkBSVL/c87ewSmf41d1XBAdSTY2/TP8Q0TkDcEqmMUV0A4Eug/Nvo1f4O6W6m5f3BNzoyg== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" + "@uiw/react-color-hue" "2.3.3" + "@uiw/react-color-saturation" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" + +"@uiw/react-color-slider@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-slider/-/react-color-slider-2.3.3.tgz#cbb4b8ec1fb52e9e313c5fef500e1e5a1b7ff5b3" + integrity sha512-NmgjiHoeCk29CEb507QUXvFNPl7q3qJQYrj1tXBQ0U3XqS1VAn5UKamyjqAjLRpbA6PSnBiFOjHFTsQ0ThCmnA== dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-drag-event-interactive" "2.3.2" + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" + +"@uiw/react-color-swatch@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-swatch/-/react-color-swatch-2.3.3.tgz#1fadce4a7bc24ff9e1d7c4a72f125b00c974ea39" + integrity sha512-UHgiS7OxeBWiw8h1q/lMy0AMnxyBFIbo89vTEePyQomirt71gVmCIDgmIoCvZfaH+btDV72IVrMg8vf28z3cWQ== + dependencies: + "@uiw/color-convert" "2.3.3" + +"@uiw/react-color-wheel@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color-wheel/-/react-color-wheel-2.3.3.tgz#c75098849215d0832e826a37abb0ebed96d72a97" + integrity sha512-PU9n2kirZwKxFxXEF1tcLk+rlzrq/zWqEW1SYPxWxROvuyZ5QRj7LWBeZjHLREK/z0tUdWfd7jS3gn2BenZfFw== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-drag-event-interactive" "2.3.3" "@uiw/react-color@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-color/-/react-color-2.3.2.tgz#a8a17cbdba00980f4f0d0886b54b9ae50ad5d1b6" - integrity sha512-PfyzYFIa16MKVd2FLFmV/+moznibDCDZB6AUwV6lrL7Mz+/jjcW1JDDdCRWMHC8e7uoC3EmnYAmnpj2eF0w2vw== - dependencies: - "@uiw/color-convert" "2.3.2" - "@uiw/react-color-alpha" "2.3.2" - "@uiw/react-color-block" "2.3.2" - "@uiw/react-color-chrome" "2.3.2" - "@uiw/react-color-circle" "2.3.2" - "@uiw/react-color-colorful" "2.3.2" - "@uiw/react-color-compact" "2.3.2" - "@uiw/react-color-editable-input" "2.3.2" - "@uiw/react-color-editable-input-hsla" "2.3.2" - "@uiw/react-color-editable-input-rgba" "2.3.2" - "@uiw/react-color-github" "2.3.2" - "@uiw/react-color-hue" "2.3.2" - "@uiw/react-color-material" "2.3.2" - "@uiw/react-color-name" "2.3.2" - "@uiw/react-color-saturation" "2.3.2" - "@uiw/react-color-shade-slider" "2.3.2" - "@uiw/react-color-sketch" "2.3.2" - "@uiw/react-color-slider" "2.3.2" - "@uiw/react-color-swatch" "2.3.2" - "@uiw/react-color-wheel" "2.3.2" - -"@uiw/react-drag-event-interactive@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.3.2.tgz#852447609d3d8c6b2a4a5822be58d6cb73f19756" - integrity sha512-lG5pJCtqbYBv7Dj0r12PE9q9yg7P2CzlQodw5ZHPY9GCSZVXHJc0g4lGvCbe/4Y8HYqM8aU4CYS8LplpX+mIQw== + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-color/-/react-color-2.3.3.tgz#dcfdcf0cf7436ec2045b9c159cbcfa9070bee0ad" + integrity sha512-pPosAUSStwHZMBR3Q/0nn2ALZGmV3gqCjYJlaAeW0jIFGW/vkzRiq0zFI/6eDvV/86KH6l54Lb2lDXINrsYahA== + dependencies: + "@uiw/color-convert" "2.3.3" + "@uiw/react-color-alpha" "2.3.3" + "@uiw/react-color-block" "2.3.3" + "@uiw/react-color-chrome" "2.3.3" + "@uiw/react-color-circle" "2.3.3" + "@uiw/react-color-colorful" "2.3.3" + "@uiw/react-color-compact" "2.3.3" + "@uiw/react-color-editable-input" "2.3.3" + "@uiw/react-color-editable-input-hsla" "2.3.3" + "@uiw/react-color-editable-input-rgba" "2.3.3" + "@uiw/react-color-github" "2.3.3" + "@uiw/react-color-hue" "2.3.3" + "@uiw/react-color-material" "2.3.3" + "@uiw/react-color-name" "2.3.3" + "@uiw/react-color-saturation" "2.3.3" + "@uiw/react-color-shade-slider" "2.3.3" + "@uiw/react-color-sketch" "2.3.3" + "@uiw/react-color-slider" "2.3.3" + "@uiw/react-color-swatch" "2.3.3" + "@uiw/react-color-wheel" "2.3.3" + +"@uiw/react-drag-event-interactive@2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@uiw/react-drag-event-interactive/-/react-drag-event-interactive-2.3.3.tgz#b5ae0bb1c93ce120931961bcf4594c3ff99164b8" + integrity sha512-LxR+pih/kkbSPkYJBpFVpSjAODVeDRLhLPKEAi5yKyh2V9zER8wTi8xeWcktGYLkuMAvXs42sMcwixwGyxeTBA== "@ungap/structured-clone@^1.2.0": version "1.2.0" @@ -5490,9 +5517,9 @@ ejs@^3.1.10: jake "^10.8.5" electron-to-chromium@^1.5.41: - version "1.5.66" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz#1e9b4bc7638ac02d3551eea1dbaeb0101ec5823f" - integrity sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ== + version "1.5.67" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz#66ebd2be4a77469ac2760ef5e9e460ba9a43a845" + integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== elkjs@^0.9.3: version "0.9.3" @@ -5825,16 +5852,16 @@ eslint@^8.42.0: text-table "^0.2.0" eslint@^9.13.0: - version "9.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.15.0.tgz#77c684a4e980e82135ebff8ee8f0a9106ce6b8a6" - integrity sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw== + version "9.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.16.0.tgz#66832e66258922ac0a626f803a9273e37747f2a6" + integrity sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.12.1" "@eslint/config-array" "^0.19.0" "@eslint/core" "^0.9.0" "@eslint/eslintrc" "^3.2.0" - "@eslint/js" "9.15.0" + "@eslint/js" "9.16.0" "@eslint/plugin-kit" "^0.2.3" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" @@ -6316,7 +6343,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6442,11 +6469,11 @@ goober@^2.1.16: integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g== gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.1.0.tgz#df8f0839c2d48caefc32a025a49294d39606c912" + integrity sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA== dependencies: - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.4" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" @@ -9440,6 +9467,13 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" +redlock@^5.0.0-beta.2: + version "5.0.0-beta.2" + resolved "https://registry.yarnpkg.com/redlock/-/redlock-5.0.0-beta.2.tgz#a629c07e07d001c0fdd9f2efa614144c4416fe44" + integrity sha512-2RDWXg5jgRptDrB1w9O/JgSZC0j7y4SlaXnor93H/UJm/QyDiFgBKNtrh0TI6oCXqYSaSoXxFh6Sd3VtYfhRXw== + dependencies: + node-abort-controller "^3.0.1" + reflect-metadata@^0.1.13: version "0.1.14" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" @@ -9551,30 +9585,30 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.20.0: - version "4.27.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.27.4.tgz#b23e4ef4fe4d0d87f5237dacf63f95a499503897" - integrity sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw== + version "4.28.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.0.tgz#eb8d28ed43ef60a18f21d0734d230ee79dd0de77" + integrity sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ== dependencies: "@types/estree" "1.0.6" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.27.4" - "@rollup/rollup-android-arm64" "4.27.4" - "@rollup/rollup-darwin-arm64" "4.27.4" - "@rollup/rollup-darwin-x64" "4.27.4" - "@rollup/rollup-freebsd-arm64" "4.27.4" - "@rollup/rollup-freebsd-x64" "4.27.4" - "@rollup/rollup-linux-arm-gnueabihf" "4.27.4" - "@rollup/rollup-linux-arm-musleabihf" "4.27.4" - "@rollup/rollup-linux-arm64-gnu" "4.27.4" - "@rollup/rollup-linux-arm64-musl" "4.27.4" - "@rollup/rollup-linux-powerpc64le-gnu" "4.27.4" - "@rollup/rollup-linux-riscv64-gnu" "4.27.4" - "@rollup/rollup-linux-s390x-gnu" "4.27.4" - "@rollup/rollup-linux-x64-gnu" "4.27.4" - "@rollup/rollup-linux-x64-musl" "4.27.4" - "@rollup/rollup-win32-arm64-msvc" "4.27.4" - "@rollup/rollup-win32-ia32-msvc" "4.27.4" - "@rollup/rollup-win32-x64-msvc" "4.27.4" + "@rollup/rollup-android-arm-eabi" "4.28.0" + "@rollup/rollup-android-arm64" "4.28.0" + "@rollup/rollup-darwin-arm64" "4.28.0" + "@rollup/rollup-darwin-x64" "4.28.0" + "@rollup/rollup-freebsd-arm64" "4.28.0" + "@rollup/rollup-freebsd-x64" "4.28.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.28.0" + "@rollup/rollup-linux-arm-musleabihf" "4.28.0" + "@rollup/rollup-linux-arm64-gnu" "4.28.0" + "@rollup/rollup-linux-arm64-musl" "4.28.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.28.0" + "@rollup/rollup-linux-riscv64-gnu" "4.28.0" + "@rollup/rollup-linux-s390x-gnu" "4.28.0" + "@rollup/rollup-linux-x64-gnu" "4.28.0" + "@rollup/rollup-linux-x64-musl" "4.28.0" + "@rollup/rollup-win32-arm64-msvc" "4.28.0" + "@rollup/rollup-win32-ia32-msvc" "4.28.0" + "@rollup/rollup-win32-x64-msvc" "4.28.0" fsevents "~2.3.2" rope-sequence@^1.3.0: @@ -9823,20 +9857,7 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.0.tgz#33d05ae0915fad1670bd0c4efcc07ccfabebe3b1" - integrity sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.3.2" - engine.io "~6.6.0" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - -socket.io@^4.5.1, socket.io@^4.8.1: +socket.io@4.8.1, socket.io@^4.5.1, socket.io@^4.8.1: version "4.8.1" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.1.tgz#fa0eaff965cc97fdf4245e8d4794618459f7558a" integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== @@ -10366,9 +10387,9 @@ trough@^2.0.0: integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.2.tgz#a6a6dff26117ac7965624fc118525971edc6a82a" - integrity sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw== + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-interface-checker@^0.1.9: version "0.1.13" @@ -10444,12 +10465,7 @@ tsconfig-paths@4.2.0, tsconfig-paths@^4.1.2, tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== - -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.8.0: +tslib@2.8.1, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==