diff --git a/Dockerfile b/Dockerfile index 70e13a5..a850ae6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ RUN apk add --no-cache curl \ COPY --from=build /app/config/config.template.yaml ./config/config.template.yaml COPY --from=build /app/package.json /app/yarn.lock ./ -RUN yarn install --production --frozen-lockfile && yarn cache clean +RUN yarn install --production --frozen-lockfile COPY --from=build /app/dist ./dist diff --git a/eslint.config.mjs b/eslint.config.mjs index e5aa415..7f1cc2f 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,11 +4,17 @@ import tseslint from 'typescript-eslint'; import prettierConfig from 'eslint-config-prettier'; import prettierRecommended from 'eslint-plugin-prettier/recommended'; -export default tseslint.config({ - files: ['**/*.js', '**/*.mjs', '**/*.ts'], - extends: [eslint.configs.recommended, ...tseslint.configs.recommended, prettierRecommended], - rules: { - ...prettierConfig.rules, - 'no-console': 'warn', +export default tseslint.config( + { + files: ['**/*.js', '**/*.mjs', '**/*.ts'], + extends: [eslint.configs.recommended, ...tseslint.configs.recommended], + rules: { + 'no-console': 'warn', + }, }, -}); + { + files: ['**/*.js', '**/*.mjs', '**/*.ts'], + extends: [prettierRecommended], + rules: prettierConfig.rules, + }, +); diff --git a/package.json b/package.json index 10e90b7..9d9c7e2 100644 --- a/package.json +++ b/package.json @@ -9,75 +9,71 @@ "start:dev": "nest start --watch", "start:prod": "node dist/main", "test": "jest --runInBand", - "format": "prettier --write \"{src,test}/**/*.ts\"", - "lint": "eslint \"{src,test}/**/*.ts\" --fix" + "format": "prettier --write \"{src,spec}/**/*.ts\"", + "lint": "eslint \"{src,spec}/**/*.ts\" --fix" }, "dependencies": { - "@aws-sdk/client-s3": "^3.651.1", - "@nestjs/common": "^10.4.1", + "@aws-sdk/client-s3": "^3.623.0", + "@nestjs/common": "^10.3.10", "@nestjs/config": "^3.2.3", - "@nestjs/core": "^10.4.1", + "@nestjs/core": "^10.3.10", "@nestjs/event-emitter": "^2.0.4", "@nestjs/jwt": "^10.2.0", "@nestjs/mongoose": "^10.0.10", - "@nestjs/platform-express": "^10.4.1", + "@nestjs/platform-express": "^10.3.10", "@nestjs/schedule": "^4.1.0", "@nestjs/swagger": "^7.4.0", - "axios": "^1.7.7", "bcrypt": "^5.1.1", - "cheerio": "^1.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "ioredis": "^5.4.1", "js-yaml": "^4.1.0", - "mongoose": "^8.6.2", + "mongoose": "^8.5.1", "mongoose-autopopulate": "^1.1.0", "ms": "^3.0.0-canary.1", "nest-winston": "^1.9.7", - "nodemailer": "^6.9.15", + "nodemailer": "^6.9.14", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", "uuid": "^10.0.0", - "winston": "^3.14.2", + "winston": "^3.13.1", "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { - "@commitlint/cli": "^19.5.0", - "@commitlint/config-conventional": "^19.5.0", - "@eslint/js": "^9.10.0", - "@nestjs/cli": "^10.4.5", - "@nestjs/schematics": "^10.1.4", - "@nestjs/testing": "^10.4.1", - "@swc/cli": "^0.4.1-nightly.20240914", - "@swc/core": "^1.7.26", - "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", + "@eslint/js": "^9.8.0", + "@nestjs/cli": "^10.4.2", + "@nestjs/schematics": "^10.1.2", + "@nestjs/testing": "^10.3.10", + "@swc/cli": "^0.4.0", + "@swc/core": "^1.7.3", "@types/bcrypt": "^5.0.2", - "@types/cheerio": "^0.22.35", "@types/eslint-config-prettier": "^6.11.3", "@types/eslint__js": "^8.42.3", "@types/express": "^4.17.21", - "@types/jest": "^29.5.13", + "@types/jest": "^29.5.12", "@types/js-yaml": "^4.0.9", - "@types/multer": "^1.4.12", - "@types/node": "^22.5.5", + "@types/multer": "^1.4.11", + "@types/node": "^20.14.10", "@types/nodemailer": "^6.4.15", "@types/supertest": "^6.0.2", "@types/uuid": "^10.0.0", - "eslint": "^9.10.0", + "eslint": "^9.8.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", - "husky": "^9.1.6", + "husky": "^9.0.11", "jest": "^29.7.0", - "lint-staged": "^15.2.10", + "lint-staged": "^15.2.7", "prettier": "^3.3.3", "source-map-support": "^0.5.21", "supertest": "^7.0.0", - "ts-jest": "^29.2.5", + "ts-jest": "^29.2.2", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.6.2", - "typescript-eslint": "^8.5.0" + "typescript": "^5.5.4", + "typescript-eslint": "^7.17.0" }, "resolutions": { "webpack": "^5.0.0", diff --git a/prettier.config.mjs b/prettier.config.mjs index 4070add..4251c99 100644 --- a/prettier.config.mjs +++ b/prettier.config.mjs @@ -9,32 +9,4 @@ export default { tabWidth: 2, trailingComma: 'all', useTabs: false, - plugins: ['@trivago/prettier-plugin-sort-imports'], - importOrderParserPlugins: ['typescript', 'decorators-legacy'], - importOrder: [ - // Nest - '^@nestjs', - - // Domain - '^@wink/auth', - '^@wink/member', - '^@wink/activity', - - // Common - '^@wink/(app|config|filter|interceptor|mongo|redis|s3)', - - // Utils - '^@wink/(event|logger|mail|swagger|validation)', - - // Test - '^@wink/test-mock', - - // Other - '^[./]', - - // Libraries - '', - ], - importOrderSeparation: true, - importOrderSortSpecifiers: true, }; diff --git a/src/common/app/app.module.ts b/src/common/app/app.module.ts index c063d86..3061350 100644 --- a/src/common/app/app.module.ts +++ b/src/common/app/app.module.ts @@ -1,21 +1,19 @@ +import { APP_PIPE, APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core'; import { Module } from '@nestjs/common'; import { ConfigModule, ConfigModuleOptions } from '@nestjs/config'; -import { APP_FILTER, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core'; -import { EventEmitterModule } from '@nestjs/event-emitter'; -import { JwtModule, JwtModuleAsyncOptions } from '@nestjs/jwt'; import { MongooseModule, MongooseModuleAsyncOptions } from '@nestjs/mongoose'; +import { JwtModule, JwtModuleAsyncOptions } from '@nestjs/jwt'; import { ScheduleModule } from '@nestjs/schedule'; - -import { AuthModule } from '@wink/auth/auth.module'; - -import { MemberModule } from '@wink/member/member.module'; - -import { ActivityModule } from '@wink/activity/activity.module'; +import { EventEmitterModule } from '@nestjs/event-emitter'; import { AppConfig, JwtConfig, MongoConfig } from '@wink/config'; import { DefaultExceptionFilter, NotFoundExceptionFilter } from '@wink/filter'; import { ApiResponseInterceptor } from '@wink/interceptor'; +import { AuthModule } from '@wink/auth/auth.module'; +import { MemberModule } from '@wink/member/member.module'; +import { ActivityModule } from '@wink/activity/activity.module'; + import { EventListenerModule } from '@wink/event'; import { Validation } from '@wink/validation'; diff --git a/src/common/config/app.config.ts b/src/common/config/app.config.ts index d7c2116..2bb3376 100644 --- a/src/common/config/app.config.ts +++ b/src/common/config/app.config.ts @@ -1,6 +1,6 @@ import { readFileSync } from 'fs'; -import { load } from 'js-yaml'; import { join } from 'path'; +import { load } from 'js-yaml'; type ConfigType = Record; diff --git a/src/common/database/mongo/mongo-model.factory.util.ts b/src/common/database/mongo/mongo-model.factory.util.ts index bd7cb96..5e6e448 100644 --- a/src/common/database/mongo/mongo-model.factory.util.ts +++ b/src/common/database/mongo/mongo-model.factory.util.ts @@ -1,54 +1,20 @@ -import { ModelDefinition } from '@nestjs/mongoose'; +import { AsyncModelFactory } from '@nestjs/mongoose'; import { Schema } from 'mongoose'; import AutoPopulate from 'mongoose-autopopulate'; -const convertToKST = (date: Date): Date => new Date(date.getTime() + 9 * 60 * 60 * 1000); - export class MongoModelFactory { - static generate(name: string, schema: Schema): ModelDefinition { - schema = MongoModelFactory.setSchemaOptions(schema); - - return { name, schema }; - } - - static generateRecursive( - name: string, - schema: Schema, - subSchemas: { type: string; schema: Schema }[], - ): ModelDefinition { - schema = MongoModelFactory.setSchemaOptions(schema); - subSchemas = subSchemas.map(({ type, schema }) => { - schema = MongoModelFactory.setSchemaOptions(schema); - - return { type, schema }; - }); - + static generate(name: string, schema: Schema): AsyncModelFactory { return { name, - schema, - discriminators: subSchemas.map(({ type, schema }) => { - return { name: type, schema }; - }), - }; - } - - private static setSchemaOptions(schema: Schema): Schema { - schema.set('versionKey', false); - schema.set('timestamps', true); - - schema.pre('save', function (next) { - if ('createdAt' in this) { - this['createdAt'] = convertToKST(new Date()); - } + useFactory: () => { + schema.set('timestamps', true); + schema.set('versionKey', false); - this['updatedAt'] = convertToKST(new Date()); + schema.plugin(AutoPopulate); - next(); - }); - - schema.plugin(AutoPopulate); - - return schema; + return schema; + }, + }; } } diff --git a/src/common/database/redis/redis.module.ts b/src/common/database/redis/redis.module.ts index a41c87f..23d90b8 100644 --- a/src/common/database/redis/redis.module.ts +++ b/src/common/database/redis/redis.module.ts @@ -1,5 +1,4 @@ import { DynamicModule, Module } from '@nestjs/common'; - import { RedisService } from './service'; export interface RedisModuleOptions { diff --git a/src/common/database/redis/service/redis.service.ts b/src/common/database/redis/service/redis.service.ts index bc8246e..e8f6612 100644 --- a/src/common/database/redis/service/redis.service.ts +++ b/src/common/database/redis/service/redis.service.ts @@ -27,11 +27,9 @@ export class RedisService { } async exists(key: string): Promise { - if (!this.group) { - throw new Error('Group is not set'); - } + if (!this.group) throw new Error('Group is not set'); - const _key = this.generateKey(key); + const _key = this.#generateKey(key); const exists = await this.redisClient.exists(_key); @@ -39,21 +37,17 @@ export class RedisService { } async get(key: string): Promise { - if (!this.group) { - throw new Error('Group is not set'); - } + if (!this.group) throw new Error('Group is not set'); - const _key = this.generateKey(key); + const _key = this.#generateKey(key); return (await this.redisClient.get(_key)) || ''; } async set(key: string, value: string, seconds: number = 0): Promise { - if (!this.group) { - throw new Error('Group is not set'); - } + if (!this.group) throw new Error('Group is not set'); - const _key = this.generateKey(key); + const _key = this.#generateKey(key); let event: RedisSetEvent | RedisSetTtlEvent; @@ -69,21 +63,17 @@ export class RedisService { } async delete(key: string): Promise { - if (!this.group) { - throw new Error('Group is not set'); - } + if (!this.group) throw new Error('Group is not set'); - const _key = this.generateKey(key); + const _key = this.#generateKey(key); await this.redisClient.del(_key); this.eventEmitter.emit(RedisDeleteEvent.EVENT_NAME, new RedisDeleteEvent(_key)); } - private generateKey(key: string): string { - if (!this.group) { - throw new Error('Group is not set'); - } + #generateKey(key: string): string { + if (!this.group) throw new Error('Group is not set'); return `${this.group}:${key}`; } diff --git a/src/common/http/filter/exception.filter.ts b/src/common/http/filter/exception.filter.ts index 4e3c0ff..1351222 100644 --- a/src/common/http/filter/exception.filter.ts +++ b/src/common/http/filter/exception.filter.ts @@ -5,7 +5,6 @@ import { HttpStatus, NotFoundException, } from '@nestjs/common'; - import { ApiException } from '@wink/swagger'; @Catch(ApiException) diff --git a/src/common/http/interceptor/api-response.interceptor.ts b/src/common/http/interceptor/api-response.interceptor.ts index b065303..80d674c 100644 --- a/src/common/http/interceptor/api-response.interceptor.ts +++ b/src/common/http/interceptor/api-response.interceptor.ts @@ -10,7 +10,7 @@ import { import { ApiException } from '@wink/swagger'; import { Response } from 'express'; -import { Observable, catchError, map, throwError } from 'rxjs'; +import { catchError, map, Observable, throwError } from 'rxjs'; @Injectable() export class ApiResponseInterceptor implements NestInterceptor { diff --git a/src/common/s3/service/s3.service.ts b/src/common/s3/service/s3.service.ts index b112199..330dea8 100644 --- a/src/common/s3/service/s3.service.ts +++ b/src/common/s3/service/s3.service.ts @@ -9,8 +9,9 @@ import { PutObjectCommand, S3Client, } from '@aws-sdk/client-s3'; -import { extname } from 'path'; + import { v4 as uuid } from 'uuid'; +import { extname } from 'path'; @Injectable() export class S3Service { @@ -33,9 +34,7 @@ export class S3Service { } async upload(file: Express.Multer.File): Promise { - if (!this.directory) { - throw new Error('Directory is not set'); - } + if (!this.directory) throw new Error('Directory is not set'); let _key = `${this.directory}/${uuid()}${extname(file.originalname)}`; _key = _key.replace(/ /g, '_'); @@ -57,9 +56,7 @@ export class S3Service { } async delete(key: string): Promise { - if (!this.directory) { - throw new Error('Directory is not set'); - } + if (!this.directory) throw new Error('Directory is not set'); const _key = `${this.directory}/${key}`; @@ -74,9 +71,7 @@ export class S3Service { } async getKeys(): Promise { - if (!this.directory) { - throw new Error('Directory is not set'); - } + if (!this.directory) throw new Error('Directory is not set'); const result = await this.s3Client.send( new ListObjectsV2Command({ @@ -92,9 +87,7 @@ export class S3Service { } extractKeyFromUrl(url: string): string { - if (!this.directory) { - throw new Error('Directory is not set'); - } + if (!this.directory) throw new Error('Directory is not set'); return url.split(`.com/`)[1].substring(this.directory.length + 1); } diff --git a/src/common/util/event/event-listener.module.ts b/src/common/util/event/event-listener.module.ts index 5bf0b66..55ee3ee 100644 --- a/src/common/util/event/event-listener.module.ts +++ b/src/common/util/event/event-listener.module.ts @@ -2,16 +2,12 @@ import { Module } from '@nestjs/common'; import { AuthServiceEventListener, - CommonAdminServiceEventListener, - MailEventListener, MemberAdminServiceEventListener, MemberServiceEventListener, - ProjectAdminServiceEventListener, + MailEventListener, RedisServiceEventListener, S3ServiceEventListener, SchedulerEventListener, - SocialAdminServiceEventListener, - StudyAdminServiceEventListener, } from './listener'; @Module({ @@ -19,10 +15,6 @@ import { AuthServiceEventListener, MemberAdminServiceEventListener, MemberServiceEventListener, - CommonAdminServiceEventListener, - ProjectAdminServiceEventListener, - StudyAdminServiceEventListener, - SocialAdminServiceEventListener, MailEventListener, RedisServiceEventListener, diff --git a/src/common/util/event/listener/service/activity/common.admin.service.event.listener.ts b/src/common/util/event/listener/service/activity/common.admin.service.event.listener.ts deleted file mode 100644 index 2ecdf03..0000000 --- a/src/common/util/event/listener/service/activity/common.admin.service.event.listener.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { OnEvent } from '@nestjs/event-emitter'; - -import { UploadEvent } from '../../../type'; - -@Injectable() -export class CommonAdminServiceEventListener { - private readonly logger = new Logger(CommonAdminServiceEventListener.name); - - @OnEvent(UploadEvent.EVENT_NAME) - onUpload({ member, file }: UploadEvent) { - this.logger.log(`Upload file from ${member.name} (file: ${file.path})`); - } -} diff --git a/src/common/util/event/listener/service/activity/project.admin.service.event.listener.ts b/src/common/util/event/listener/service/activity/project.admin.service.event.listener.ts deleted file mode 100644 index 119c076..0000000 --- a/src/common/util/event/listener/service/activity/project.admin.service.event.listener.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { OnEvent } from '@nestjs/event-emitter'; - -import { CreateProjectEvent, DeleteProjectEvent, UpdateProjectEvent } from '../../../type'; - -@Injectable() -export class ProjectAdminServiceEventListener { - private readonly logger = new Logger(ProjectAdminServiceEventListener.name); - - @OnEvent(CreateProjectEvent.EVENT_NAME) - onCreateProject({ member, project }: CreateProjectEvent) { - this.logger.log( - `Create project from ${member.name} (project: ${project.title} (${project._id}))`, - ); - } - - @OnEvent(UpdateProjectEvent.EVENT_NAME) - onUpdateProject({ member, project }: UpdateProjectEvent) { - this.logger.log( - `Update project from ${member.name} (project: ${project.title} (${project._id}))`, - ); - } - - @OnEvent(DeleteProjectEvent.EVENT_NAME) - onDeleteProject({ member, project }: DeleteProjectEvent) { - this.logger.log( - `Delete project from ${member.name} (project: ${project.title} (${project._id}))`, - ); - } -} diff --git a/src/common/util/event/listener/service/activity/social.admin.service.event.listener.ts b/src/common/util/event/listener/service/activity/social.admin.service.event.listener.ts deleted file mode 100644 index a058fc9..0000000 --- a/src/common/util/event/listener/service/activity/social.admin.service.event.listener.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { OnEvent } from '@nestjs/event-emitter'; - -import { CreateSocialEvent, DeleteSocialEvent, UpdateSocialEvent } from '../../../type'; - -@Injectable() -export class SocialAdminServiceEventListener { - private readonly logger = new Logger(SocialAdminServiceEventListener.name); - - @OnEvent(CreateSocialEvent.EVENT_NAME) - onCreateSocial({ member, social }: CreateSocialEvent) { - this.logger.log(`Create social from ${member.name} (social: ${social.title} (${social._id}))`); - } - - @OnEvent(UpdateSocialEvent.EVENT_NAME) - onUpdateSocial({ member, social }: UpdateSocialEvent) { - this.logger.log(`Update social from ${member.name} (social: ${social.title} (${social._id}))`); - } - - @OnEvent(DeleteSocialEvent.EVENT_NAME) - onDeleteSocial({ member, social }: DeleteSocialEvent) { - this.logger.log(`Delete social from ${member.name} (social: ${social.title} (${social._id}))`); - } -} diff --git a/src/common/util/event/listener/service/activity/study.admin.service.event.listener.ts b/src/common/util/event/listener/service/activity/study.admin.service.event.listener.ts deleted file mode 100644 index aaf3d2e..0000000 --- a/src/common/util/event/listener/service/activity/study.admin.service.event.listener.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { OnEvent } from '@nestjs/event-emitter'; - -import { - CreateCategoryEvent, - CreateStudyEvent, - DeleteCategoryEvent, - DeleteStudyEvent, - UpdateCategoryEvent, -} from '../../../type'; - -@Injectable() -export class StudyAdminServiceEventListener { - private readonly logger = new Logger(StudyAdminServiceEventListener.name); - - @OnEvent(CreateCategoryEvent.EVENT_NAME) - onCreateCategory({ member, category }: CreateCategoryEvent) { - this.logger.log( - `Create category from ${member.name} (study: ${category.name} (${category._id}))`, - ); - } - - @OnEvent(UpdateCategoryEvent.EVENT_NAME) - onUpdateCategory({ member, category }: UpdateCategoryEvent) { - this.logger.log( - `Update category from ${member.name} (study: ${category.name} (${category._id}))`, - ); - } - - @OnEvent(DeleteCategoryEvent.EVENT_NAME) - onDeleteCategory({ member, category }: DeleteCategoryEvent) { - this.logger.log( - `Delete category from ${member.name} (study: ${category.name} (${category._id}))`, - ); - } - - @OnEvent(CreateStudyEvent.EVENT_NAME) - onCreateStudy({ member, study }: CreateStudyEvent) { - this.logger.log(`Create study from ${member.name} (study: ${study.title} (${study._id}))`); - } - - @OnEvent(DeleteStudyEvent.EVENT_NAME) - onDeleteStudy({ member, study }: DeleteStudyEvent) { - this.logger.log(`Delete study from ${member.name} (study: ${study.title} (${study._id}))`); - } -} diff --git a/src/common/util/event/listener/service/index.ts b/src/common/util/event/listener/service/index.ts index b6f9b78..f2ed691 100644 --- a/src/common/util/event/listener/service/index.ts +++ b/src/common/util/event/listener/service/index.ts @@ -1,8 +1,3 @@ export * from './auth.service.event.listener'; export * from './member.admin.service.event.listener'; export * from './member.service.event.listener'; - -export * from './activity/common.admin.service.event.listener'; -export * from './activity/project.admin.service.event.listener'; -export * from './activity/study.admin.service.event.listener'; -export * from './activity/social.admin.service.event.listener'; diff --git a/src/common/util/event/listener/util/scheduler.event.listener.ts b/src/common/util/event/listener/util/scheduler.event.listener.ts index c4d940d..41cda61 100644 --- a/src/common/util/event/listener/util/scheduler.event.listener.ts +++ b/src/common/util/event/listener/util/scheduler.event.listener.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; -import { PurgeUnusedAvatarEvent, PurgeUnusedImageEvent } from '../../type'; +import { PurgeUnusedAvatarEvent } from '../../type'; @Injectable() export class SchedulerEventListener { @@ -9,11 +9,6 @@ export class SchedulerEventListener { @OnEvent(PurgeUnusedAvatarEvent.EVENT_NAME) onPurgeUnusedAvatar({ keys }: PurgeUnusedAvatarEvent) { - this.logger.log(`Purge unused ${keys.length} avatars.`); - } - - @OnEvent(PurgeUnusedImageEvent.EVENT_NAME) - onPurgeUnusedImage({ keys }: PurgeUnusedImageEvent) { - this.logger.log(`Purge unused ${keys.length} images.`); + this.logger.log(`Purge unused ${keys.length} avatars. (${keys.join(', ')})`); } } diff --git a/src/common/util/event/type/service/activity/common.admin.service.event.ts b/src/common/util/event/type/service/activity/common.admin.service.event.ts deleted file mode 100644 index a37aa57..0000000 --- a/src/common/util/event/type/service/activity/common.admin.service.event.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Member } from '@wink/member/schema'; - -export class UploadEvent { - public static readonly EVENT_NAME = 'activity.common.admin.upload'; - - constructor( - public readonly member: Member, - public readonly file: Express.Multer.File, - ) {} -} diff --git a/src/common/util/event/type/service/activity/project.admin.service.event.ts b/src/common/util/event/type/service/activity/project.admin.service.event.ts deleted file mode 100644 index 5ec2312..0000000 --- a/src/common/util/event/type/service/activity/project.admin.service.event.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Member } from '@wink/member/schema'; - -import { Project } from '@wink/activity/schema'; - -export class CreateProjectEvent { - public static readonly EVENT_NAME = 'activity.project.admin.create_project'; - - constructor( - public readonly member: Member, - public readonly project: Project, - ) {} -} - -export class UpdateProjectEvent { - public static readonly EVENT_NAME = 'activity.project.admin.update_project'; - - constructor( - public readonly member: Member, - public readonly project: Project, - ) {} -} - -export class DeleteProjectEvent { - public static readonly EVENT_NAME = 'activity.project.admin.delete_project'; - - constructor( - public readonly member: Member, - public readonly project: Project, - ) {} -} diff --git a/src/common/util/event/type/service/activity/social.admin.service.event.ts b/src/common/util/event/type/service/activity/social.admin.service.event.ts deleted file mode 100644 index 87d623a..0000000 --- a/src/common/util/event/type/service/activity/social.admin.service.event.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Member } from '@wink/member/schema'; - -import { Social } from '@wink/activity/schema'; - -export class CreateSocialEvent { - public static readonly EVENT_NAME = 'activity.social.admin.create_social'; - - constructor( - public readonly member: Member, - public readonly social: Social, - ) {} -} - -export class UpdateSocialEvent { - public static readonly EVENT_NAME = 'activity.social.admin.update_social'; - - constructor( - public readonly member: Member, - public readonly social: Social, - ) {} -} - -export class DeleteSocialEvent { - public static readonly EVENT_NAME = 'activity.social.admin.delete_social'; - - constructor( - public readonly member: Member, - public readonly social: Social, - ) {} -} diff --git a/src/common/util/event/type/service/activity/study.admin.service.event.ts b/src/common/util/event/type/service/activity/study.admin.service.event.ts deleted file mode 100644 index 246e958..0000000 --- a/src/common/util/event/type/service/activity/study.admin.service.event.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Member } from '@wink/member/schema'; - -import { Category, Study } from '@wink/activity/schema'; - -export class CreateCategoryEvent { - public static readonly EVENT_NAME = 'activity.study.admin.create_category'; - - constructor( - public readonly member: Member, - public readonly category: Category, - ) {} -} - -export class UpdateCategoryEvent { - public static readonly EVENT_NAME = 'activity.study.admin.update_category'; - - constructor( - public readonly member: Member, - public readonly category: Category, - ) {} -} - -export class DeleteCategoryEvent { - public static readonly EVENT_NAME = 'activity.study.admin.delete_category'; - - constructor( - public readonly member: Member, - public readonly category: Category, - ) {} -} - -export class CreateStudyEvent { - public static readonly EVENT_NAME = 'activity.study.admin.create_study'; - - constructor( - public readonly member: Member, - public readonly study: Study, - ) {} -} - -export class DeleteStudyEvent { - public static readonly EVENT_NAME = 'activity.study.admin.delete_study'; - - constructor( - public readonly member: Member, - public readonly study: Study, - ) {} -} diff --git a/src/common/util/event/type/service/index.ts b/src/common/util/event/type/service/index.ts index 4545e9c..1af773a 100644 --- a/src/common/util/event/type/service/index.ts +++ b/src/common/util/event/type/service/index.ts @@ -1,8 +1,3 @@ export * from './auth.service.event'; export * from './member.service.event'; export * from './member.admin.service.event'; - -export * from './activity/common.admin.service.event'; -export * from './activity/project.admin.service.event'; -export * from './activity/study.admin.service.event'; -export * from './activity/social.admin.service.event'; diff --git a/src/common/util/event/type/service/member.admin.service.event.ts b/src/common/util/event/type/service/member.admin.service.event.ts index 1bedf19..836a8e1 100644 --- a/src/common/util/event/type/service/member.admin.service.event.ts +++ b/src/common/util/event/type/service/member.admin.service.event.ts @@ -1,4 +1,5 @@ -import { Member, Role } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; +import { Member } from '@wink/member/schema'; export class ApproveWaitingMemberEvent { public static readonly EVENT_NAME = 'member.admin.approve_waiting_member'; diff --git a/src/common/util/event/type/util/scheduler.event.ts b/src/common/util/event/type/util/scheduler.event.ts index bdf27a5..e8d5051 100644 --- a/src/common/util/event/type/util/scheduler.event.ts +++ b/src/common/util/event/type/util/scheduler.event.ts @@ -3,9 +3,3 @@ export class PurgeUnusedAvatarEvent { constructor(public readonly keys: string[]) {} } - -export class PurgeUnusedImageEvent { - public static readonly EVENT_NAME = 'scheduler.purge_unused_image'; - - constructor(public readonly keys: string[]) {} -} diff --git a/src/common/util/logger/logger.service.ts b/src/common/util/logger/logger.service.ts index feee774..9d9d313 100644 --- a/src/common/util/logger/logger.service.ts +++ b/src/common/util/logger/logger.service.ts @@ -1,5 +1,7 @@ -import { WinstonModule, utilities } from 'nest-winston'; +import { utilities, WinstonModule } from 'nest-winston'; + import * as winston from 'winston'; + import 'winston-daily-rotate-file'; const dailyOptions = (level: string) => ({ diff --git a/src/common/util/swagger/decorator/api-custom-error-response.decorator.ts b/src/common/util/swagger/decorator/api-custom-error-response.decorator.ts index 82a686a..a257a23 100644 --- a/src/common/util/swagger/decorator/api-custom-error-response.decorator.ts +++ b/src/common/util/swagger/decorator/api-custom-error-response.decorator.ts @@ -1,4 +1,4 @@ -import { HttpException, HttpStatus, Type, applyDecorators } from '@nestjs/common'; +import { applyDecorators, HttpException, HttpStatus, Type } from '@nestjs/common'; import { ApiResponse, getSchemaPath } from '@nestjs/swagger'; import { ApiCustomResponseDto } from '../dto'; diff --git a/src/common/util/swagger/decorator/api-custom-response.decorator.ts b/src/common/util/swagger/decorator/api-custom-response.decorator.ts index c31a0f3..d1c3442 100644 --- a/src/common/util/swagger/decorator/api-custom-response.decorator.ts +++ b/src/common/util/swagger/decorator/api-custom-response.decorator.ts @@ -1,4 +1,4 @@ -import { HttpStatus, Type, applyDecorators } from '@nestjs/common'; +import { applyDecorators, HttpStatus, Type } from '@nestjs/common'; import { ApiExtraModels, ApiResponse, getSchemaPath } from '@nestjs/swagger'; import { ApiCustomResponseDto } from '../dto'; diff --git a/src/common/util/validation/decorator/numeric/max-value.decorator.ts b/src/common/util/validation/decorator/numeric/max-value.decorator.ts index 986907e..ec9bc71 100644 --- a/src/common/util/validation/decorator/numeric/max-value.decorator.ts +++ b/src/common/util/validation/decorator/numeric/max-value.decorator.ts @@ -1,4 +1,4 @@ -import { ValidationArguments, registerDecorator } from 'class-validator'; +import { registerDecorator, ValidationArguments } from 'class-validator'; export const MaxValue = (maxValue: number) => (object: NonNullable, propertyName: string) => { diff --git a/src/common/util/validation/decorator/numeric/min-value.decorator.ts b/src/common/util/validation/decorator/numeric/min-value.decorator.ts index 0747a9f..361e80d 100644 --- a/src/common/util/validation/decorator/numeric/min-value.decorator.ts +++ b/src/common/util/validation/decorator/numeric/min-value.decorator.ts @@ -1,4 +1,4 @@ -import { ValidationArguments, registerDecorator } from 'class-validator'; +import { registerDecorator, ValidationArguments } from 'class-validator'; export const MinValue = (minValue: number) => (object: NonNullable, propertyName: string) => { diff --git a/src/common/util/validation/decorator/string/custom/index.ts b/src/common/util/validation/decorator/string/custom/index.ts index de3b247..f34297f 100644 --- a/src/common/util/validation/decorator/string/custom/index.ts +++ b/src/common/util/validation/decorator/string/custom/index.ts @@ -5,4 +5,3 @@ export * from './is-mongo-id.decorator'; export * from './is-name.decorator'; export * from './is-password.decorator'; export * from './is-student-id.decorator'; -export * from './is-study-link.decorator'; diff --git a/src/common/util/validation/decorator/string/custom/is-study-link.decorator.ts b/src/common/util/validation/decorator/string/custom/is-study-link.decorator.ts deleted file mode 100644 index cec08b1..0000000 --- a/src/common/util/validation/decorator/string/custom/is-study-link.decorator.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { registerDecorator } from 'class-validator'; - -const STUDY_LINK_REGEXP = /^https:\/\/cs-kookmin-club\.tistory\.com\/\d+$/; - -export const IsStudyLink = () => (object: NonNullable, propertyName: string) => { - registerDecorator({ - target: object.constructor, - propertyName: propertyName, - options: { - message: '$property은(는) Kookmin Club Tistory URL 형식이어야 합니다.', - }, - validator: { - validate(value: unknown) { - return typeof value === 'string' && STUDY_LINK_REGEXP.test(value); - }, - }, - }); -}; diff --git a/src/common/util/validation/decorator/string/length.decorator.ts b/src/common/util/validation/decorator/string/length.decorator.ts index e4a7218..171cccf 100644 --- a/src/common/util/validation/decorator/string/length.decorator.ts +++ b/src/common/util/validation/decorator/string/length.decorator.ts @@ -1,4 +1,4 @@ -import { ValidationArguments, registerDecorator } from 'class-validator'; +import { registerDecorator, ValidationArguments } from 'class-validator'; export const Length = (length: number) => (object: NonNullable, propertyName: string) => { registerDecorator({ @@ -12,7 +12,7 @@ export const Length = (length: number) => (object: NonNullable, propert validate: (value: unknown, args: ValidationArguments) => { const [length] = args.constraints; - return typeof value === 'string' && value.length === length; + return typeof value === 'string' && value.length == length; }, }, }); diff --git a/src/common/util/validation/decorator/string/max-length.decorator.ts b/src/common/util/validation/decorator/string/max-length.decorator.ts index be88033..47b5dc2 100644 --- a/src/common/util/validation/decorator/string/max-length.decorator.ts +++ b/src/common/util/validation/decorator/string/max-length.decorator.ts @@ -1,4 +1,4 @@ -import { ValidationArguments, registerDecorator } from 'class-validator'; +import { registerDecorator, ValidationArguments } from 'class-validator'; export const MaxLength = (maxLength: number) => (object: NonNullable, propertyName: string) => { diff --git a/src/common/util/validation/decorator/string/min-length.decorator.ts b/src/common/util/validation/decorator/string/min-length.decorator.ts index 32ece69..a20d2ab 100644 --- a/src/common/util/validation/decorator/string/min-length.decorator.ts +++ b/src/common/util/validation/decorator/string/min-length.decorator.ts @@ -1,4 +1,4 @@ -import { ValidationArguments, registerDecorator } from 'class-validator'; +import { registerDecorator, ValidationArguments } from 'class-validator'; export const MinLength = (minLength: number) => (object: NonNullable, propertyName: string) => { diff --git a/src/common/util/validation/decorator/type/custom/index.ts b/src/common/util/validation/decorator/type/custom/index.ts deleted file mode 100644 index 2e98126..0000000 --- a/src/common/util/validation/decorator/type/custom/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './is-social-array.decorator'; diff --git a/src/common/util/validation/decorator/type/custom/is-social-array.decorator.ts b/src/common/util/validation/decorator/type/custom/is-social-array.decorator.ts deleted file mode 100644 index fcc2580..0000000 --- a/src/common/util/validation/decorator/type/custom/is-social-array.decorator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { registerDecorator } from 'class-validator'; - -export const IsSocialArray = () => (object: NonNullable, propertyName: string) => { - registerDecorator({ - target: object.constructor, - propertyName, - options: { - message: '$property은(는) 친목 활동 배열이어야 합니다.', - }, - validator: { - validate: (value: unknown) => { - return ( - Array.isArray(value) && - value.every( - (v) => - typeof v === 'object' && typeof v.content === 'string' && typeof v.image === 'string', - ) - ); - }, - }, - }); -}; diff --git a/src/common/util/validation/decorator/type/index.ts b/src/common/util/validation/decorator/type/index.ts index 5aa4a5a..e332c01 100644 --- a/src/common/util/validation/decorator/type/index.ts +++ b/src/common/util/validation/decorator/type/index.ts @@ -3,7 +3,3 @@ export * from './is-number.decorator'; export * from './is-number-string.decorator'; export * from './is-boolean.decorator'; export * from './is-enum.decorator'; - -export * from './is-string-array.decorator'; - -export * from './custom'; diff --git a/src/common/util/validation/decorator/type/is-string-array.decorator.ts b/src/common/util/validation/decorator/type/is-string-array.decorator.ts deleted file mode 100644 index dc747f2..0000000 --- a/src/common/util/validation/decorator/type/is-string-array.decorator.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { registerDecorator } from 'class-validator'; - -export const IsStringArray = () => (object: NonNullable, propertyName: string) => { - registerDecorator({ - target: object.constructor, - propertyName, - options: { - message: '$property은(는) 문자열 배열이어야 합니다.', - }, - validator: { - validate: (value: unknown) => { - return Array.isArray(value) && value.every((v) => typeof v === 'string'); - }, - }, - }); -}; diff --git a/src/domain/activity/activity.module.ts b/src/domain/activity/activity.module.ts index 1701de1..145ae83 100644 --- a/src/domain/activity/activity.module.ts +++ b/src/domain/activity/activity.module.ts @@ -1,86 +1,10 @@ import { Module } from '@nestjs/common'; -import { MongooseModule } from '@nestjs/mongoose'; -import { MemberModule } from '@wink/member/member.module'; - -import { PurgeUnusedImageJob } from '@wink/activity/common/util/scheduler'; -import { - ActivityAdminController, - ProjectAdminController, - ProjectController, - SocialAdminController, - SocialController, - StudyAdminController, - StudyController, -} from '@wink/activity/controller'; -import { - CategoryRepository, - ProjectRepository, - SocialRepository, - StudyRepository, -} from '@wink/activity/repository'; -import { - Activity, - ActivitySchema, - ActivityType, - Category, - CategorySchema, - ProjectSchema, - SocialSchema, - StudySchema, -} from '@wink/activity/schema'; -import { - ActivityAdminService, - ProjectAdminService, - ProjectService, - SocialAdminService, - SocialService, - StudyAdminService, - StudyService, -} from '@wink/activity/service'; - -import { MongoModelFactory } from '@wink/mongo'; -import { S3Module } from '@wink/s3'; - -const modelFactory1 = MongoModelFactory.generateRecursive(Activity.name, ActivitySchema, [ - { type: ActivityType.Project, schema: ProjectSchema }, - { type: ActivityType.Social, schema: SocialSchema }, - { type: ActivityType.Study, schema: StudySchema }, -]); - -const modelFactory2 = MongoModelFactory.generate(Category.name, CategorySchema); +import { ActivityController } from '@wink/activity/controller'; +import { ActivityService } from '@wink/activity/service'; @Module({ - imports: [ - MongooseModule.forFeature([modelFactory1, modelFactory2]), - S3Module.forRoot({ directory: 'activity' }), - MemberModule, - ], - controllers: [ - ActivityAdminController, - ProjectController, - ProjectAdminController, - StudyController, - StudyAdminController, - SocialController, - SocialAdminController, - ], - providers: [ - ActivityAdminService, - ProjectService, - ProjectAdminService, - StudyService, - StudyAdminService, - SocialService, - SocialAdminService, - - ProjectRepository, - StudyRepository, - CategoryRepository, - SocialRepository, - - PurgeUnusedImageJob, - ], - exports: [ProjectRepository, StudyRepository, CategoryRepository, SocialRepository], + controllers: [ActivityController], + providers: [ActivityService], }) export class ActivityModule {} diff --git a/src/domain/activity/common/controller/activity.admin.controller.ts b/src/domain/activity/common/controller/activity.admin.controller.ts deleted file mode 100644 index f7c80b0..0000000 --- a/src/domain/activity/common/controller/activity.admin.controller.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common'; -import { FileInterceptor } from '@nestjs/platform-express'; -import { ApiOperation, ApiTags } from '@nestjs/swagger'; - -import { AuthAdminAccount, AuthAdminAccountException, ReqMember } from '@wink/auth/guard'; - -import { Member } from '@wink/member/schema'; - -import { UploadResponseDto } from '@wink/activity/common/dto'; -import { ImageFilter, ImageFilterException } from '@wink/activity/common/util/multer'; -import { ActivityAdminService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/admin/activity') -@ApiTags('[Admin] Activity [공통]') -export class ActivityAdminController { - constructor(private readonly activityAdminService: ActivityAdminService) {} - - @Post('/upload') - @AuthAdminAccount() - @UseInterceptors(FileInterceptor('image', { fileFilter: ImageFilter })) - @ApiOperation({ summary: '사진 업로드' }) - @ApiCustomResponse() - @ApiCustomErrorResponse([...AuthAdminAccountException, ...ImageFilterException]) - async upload( - @ReqMember() member: Member, - @UploadedFile() file: Express.Multer.File, - ): Promise { - return this.activityAdminService.upload(member, file); - } -} diff --git a/src/domain/activity/common/controller/index.ts b/src/domain/activity/common/controller/index.ts deleted file mode 100644 index 7485bc6..0000000 --- a/src/domain/activity/common/controller/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './activity.admin.controller'; diff --git a/src/domain/activity/common/dto/index.ts b/src/domain/activity/common/dto/index.ts deleted file mode 100644 index 1c2564e..0000000 --- a/src/domain/activity/common/dto/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Response -export * from './response/upload.response.dto'; diff --git a/src/domain/activity/common/dto/response/upload.response.dto.ts b/src/domain/activity/common/dto/response/upload.response.dto.ts deleted file mode 100644 index c06bf1e..0000000 --- a/src/domain/activity/common/dto/response/upload.response.dto.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -export class UploadResponseDto { - @ApiProperty({ - description: '파일 URL', - example: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - }) - link!: string; -} diff --git a/src/domain/activity/common/exceptions/image-invalid-mime.exception.ts b/src/domain/activity/common/exceptions/image-invalid-mime.exception.ts deleted file mode 100644 index 7fad32d..0000000 --- a/src/domain/activity/common/exceptions/image-invalid-mime.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class ImageInvalidMimeException extends ApiException { - constructor() { - super({ - swagger: '사진 파일이 아닌 경우', - message: '사진 파일이 아닙니다.', - code: HttpStatus.BAD_REQUEST, - }); - } -} diff --git a/src/domain/activity/common/exceptions/image-too-large.exception.ts b/src/domain/activity/common/exceptions/image-too-large.exception.ts deleted file mode 100644 index 0c384cd..0000000 --- a/src/domain/activity/common/exceptions/image-too-large.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class ImageTooLargeException extends ApiException { - constructor() { - super({ - swagger: '사진의 용량이 너무 큰 경우', - message: '사진의 용량은 10MB를 넘을 수 없습니다.', - code: HttpStatus.BAD_REQUEST, - }); - } -} diff --git a/src/domain/activity/common/exceptions/index.ts b/src/domain/activity/common/exceptions/index.ts deleted file mode 100644 index 9513bdb..0000000 --- a/src/domain/activity/common/exceptions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './image-invalid-mime.exception'; -export * from './image-too-large.exception'; diff --git a/src/domain/activity/common/schema/activity.schema.ts b/src/domain/activity/common/schema/activity.schema.ts deleted file mode 100644 index 2fc4a59..0000000 --- a/src/domain/activity/common/schema/activity.schema.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Schema, SchemaFactory } from '@nestjs/mongoose'; - -import { ActivityType } from '@wink/activity/schema'; - -import { Schema as MongooseSchema } from 'mongoose'; - -@Schema({ discriminatorKey: 'type' }) -export class Activity { - readonly _id!: string; - readonly createdAt!: Date; - readonly updatedAt!: Date; - - type!: ActivityType; -} - -export const ActivitySchema: MongooseSchema = SchemaFactory.createForClass(Activity); diff --git a/src/domain/activity/common/schema/activity.type.ts b/src/domain/activity/common/schema/activity.type.ts deleted file mode 100644 index 200d1e7..0000000 --- a/src/domain/activity/common/schema/activity.type.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum ActivityType { - Project = 'Project', - Study = 'Study', - Social = 'Social', -} diff --git a/src/domain/activity/common/schema/index.ts b/src/domain/activity/common/schema/index.ts deleted file mode 100644 index b873e4a..0000000 --- a/src/domain/activity/common/schema/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './activity.type'; -export * from './activity.schema'; diff --git a/src/domain/activity/common/service/activity.admin.service.ts b/src/domain/activity/common/service/activity.admin.service.ts deleted file mode 100644 index 8bee82f..0000000 --- a/src/domain/activity/common/service/activity.admin.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; - -import { MemberRepository } from '@wink/member/repository'; -import { Member } from '@wink/member/schema'; - -import { UploadResponseDto } from '@wink/activity/common/dto'; - -import { S3Service } from '@wink/s3'; - -import { UploadEvent } from '@wink/event'; - -@Injectable() -export class ActivityAdminService { - constructor( - private readonly memberRepository: MemberRepository, - - @Inject('S3_SERVICE_ACTIVITY') private readonly activityService: S3Service, - - private readonly eventEmitter: EventEmitter2, - ) {} - - async upload(member: Member, file: Express.Multer.File): Promise { - const link = await this.activityService.upload(file); - - this.eventEmitter.emit(UploadEvent.EVENT_NAME, new UploadEvent(member, file)); - - return { link }; - } -} diff --git a/src/domain/activity/common/service/index.ts b/src/domain/activity/common/service/index.ts deleted file mode 100644 index d7013af..0000000 --- a/src/domain/activity/common/service/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './activity.admin.service'; diff --git a/src/domain/activity/common/util/multer/image-filter.util.ts b/src/domain/activity/common/util/multer/image-filter.util.ts deleted file mode 100644 index 337d016..0000000 --- a/src/domain/activity/common/util/multer/image-filter.util.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ImageInvalidMimeException, - ImageTooLargeException, -} from '@wink/activity/common/exceptions'; - -const IMAGE_MAX_SIZE = 1024 * 1024 * 10; - -export const ImageFilter = ( - _req: Request, - file: Express.Multer.File, - callback: (error: Error | null, success: boolean) => void, -) => { - if (!file.mimetype.startsWith('image/')) { - return callback(new ImageInvalidMimeException(), false); - } - - if (file.size > IMAGE_MAX_SIZE) { - return callback(new ImageTooLargeException(), false); - } - - callback(null, true); -}; - -export const ImageFilterException = [ImageInvalidMimeException, ImageTooLargeException]; diff --git a/src/domain/activity/common/util/multer/index.ts b/src/domain/activity/common/util/multer/index.ts deleted file mode 100644 index c69b9ce..0000000 --- a/src/domain/activity/common/util/multer/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './image-filter.util'; diff --git a/src/domain/activity/common/util/scheduler/index.ts b/src/domain/activity/common/util/scheduler/index.ts deleted file mode 100644 index 1010890..0000000 --- a/src/domain/activity/common/util/scheduler/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './purge-unused-image.job'; diff --git a/src/domain/activity/common/util/scheduler/purge-unused-image.job.ts b/src/domain/activity/common/util/scheduler/purge-unused-image.job.ts deleted file mode 100644 index aab4bb1..0000000 --- a/src/domain/activity/common/util/scheduler/purge-unused-image.job.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { Cron, CronExpression, Timeout } from '@nestjs/schedule'; - -import { ProjectRepository, SocialRepository } from '@wink/activity/repository'; - -import { S3Service } from '@wink/s3'; - -import { PurgeUnusedImageEvent } from '@wink/event'; - -import * as cheerio from 'cheerio'; - -@Injectable() -export class PurgeUnusedImageJob { - constructor( - private readonly projectRepository: ProjectRepository, - private readonly socialRepository: SocialRepository, - - @Inject('S3_SERVICE_ACTIVITY') private readonly activityService: S3Service, - - private readonly eventEmitter: EventEmitter2, - ) {} - - @Timeout(0) - async onTimeout() { - await this.job(); - } - - @Cron(CronExpression.EVERY_DAY_AT_6AM) - async onCron() { - await this.job(); - } - - private async job() { - const usedImages = [ - ...(await this.socialRepository.findAll()) - .flatMap((member) => member.contents) - .map((content) => content.image) - .map((image) => this.activityService.extractKeyFromUrl(image)), - ...(await this.projectRepository.findAll()) - .map((project) => project.content) - .flatMap((content) => this.toImagesFromHtml(content)) - .map((image) => this.activityService.extractKeyFromUrl(image)), - ]; - - const savedImages = await this.activityService.getKeys(); - - const unusedImages = savedImages.filter((a) => !usedImages.includes(a)); - - unusedImages.forEach((key) => this.activityService.delete(key)); - - this.eventEmitter.emit( - PurgeUnusedImageEvent.EVENT_NAME, - new PurgeUnusedImageEvent(unusedImages), - ); - } - - private toImagesFromHtml(html: string): string[] { - const $ = cheerio.load(html); - - const images: string[] = []; - $('img').each((_, elem) => { - const src = $(elem).attr('src'); - - if (src) { - images.push(src); - } - }); - - return images; - } -} diff --git a/src/domain/activity/controller.ts b/src/domain/activity/controller.ts deleted file mode 100644 index 3207f98..0000000 --- a/src/domain/activity/controller.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './common/controller'; - -export * from './project/controller'; -export * from './study/controller'; -export * from './social/controller'; diff --git a/src/domain/activity/controller/activity.controller.ts b/src/domain/activity/controller/activity.controller.ts new file mode 100644 index 0000000..7700f45 --- /dev/null +++ b/src/domain/activity/controller/activity.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('activity') +export class ActivityController {} diff --git a/src/domain/activity/controller/index.ts b/src/domain/activity/controller/index.ts new file mode 100644 index 0000000..f981d51 --- /dev/null +++ b/src/domain/activity/controller/index.ts @@ -0,0 +1 @@ +export * from './activity.controller'; diff --git a/src/domain/activity/dto.ts b/src/domain/activity/dto.ts deleted file mode 100644 index 169080f..0000000 --- a/src/domain/activity/dto.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './common/dto'; - -export * from './project/dto'; -export * from './study/dto'; -export * from './social/dto'; diff --git a/src/domain/activity/exception.ts b/src/domain/activity/exception.ts deleted file mode 100644 index a610478..0000000 --- a/src/domain/activity/exception.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './project/exception'; -export * from './study/exception'; -export * from './social/exception'; diff --git a/src/domain/activity/project/controller/index.ts b/src/domain/activity/project/controller/index.ts deleted file mode 100644 index b38d590..0000000 --- a/src/domain/activity/project/controller/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './project.controller'; -export * from './project.admin.controller'; diff --git a/src/domain/activity/project/controller/project.admin.controller.ts b/src/domain/activity/project/controller/project.admin.controller.ts deleted file mode 100644 index 7a1d066..0000000 --- a/src/domain/activity/project/controller/project.admin.controller.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Body, Controller, Delete, Patch, Put } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { AuthAdminAccount, AuthAdminAccountException, ReqMember } from '@wink/auth/guard'; - -import { Member } from '@wink/member/schema'; - -import { - CreateProjectRequestDto, - CreateProjectResponseDto, - DeleteProjectRequestDto, - UpdateProjectRequestDto, -} from '@wink/activity/dto'; -import { AlreadyExistsProjectException, ProjectNotFoundException } from '@wink/activity/exception'; -import { ProjectAdminService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/admin/activity/project') -@ApiTags('[Admin] Activity [프로젝트]') -export class ProjectAdminController { - constructor(private readonly projectAdminService: ProjectAdminService) {} - - @Put() - @AuthAdminAccount() - @ApiOperation({ summary: '프로젝트 생성' }) - @ApiProperty({ type: CreateProjectRequestDto }) - @ApiCustomResponse(CreateProjectResponseDto) - @ApiCustomErrorResponse([...AuthAdminAccountException, AlreadyExistsProjectException]) - async createProject( - @ReqMember() member: Member, - @Body() request: CreateProjectRequestDto, - ): Promise { - return this.projectAdminService.createProject(member, request); - } - - @Patch() - @AuthAdminAccount() - @ApiOperation({ summary: '프로젝트 수정' }) - @ApiProperty({ type: UpdateProjectRequestDto }) - @ApiCustomErrorResponse([ - ...AuthAdminAccountException, - ProjectNotFoundException, - AlreadyExistsProjectException, - ]) - async updateProject( - @ReqMember() member: Member, - @Body() request: UpdateProjectRequestDto, - ): Promise { - return this.projectAdminService.updateProject(member, request); - } - - @Delete() - @AuthAdminAccount() - @ApiOperation({ summary: '프로젝트 삭제' }) - @ApiProperty({ type: DeleteProjectRequestDto }) - @ApiCustomErrorResponse([...AuthAdminAccountException, ProjectNotFoundException]) - async deleteProject( - @ReqMember() member: Member, - @Body() request: DeleteProjectRequestDto, - ): Promise { - return this.projectAdminService.deleteProject(member, request); - } -} diff --git a/src/domain/activity/project/controller/project.controller.ts b/src/domain/activity/project/controller/project.controller.ts deleted file mode 100644 index d20def9..0000000 --- a/src/domain/activity/project/controller/project.controller.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Body, Controller, Get } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { - GetProjectRequestDto, - GetProjectResponseDto, - GetProjectsPageResponseDto, - GetProjectsRequestDto, - GetProjectsResponseDto, -} from '@wink/activity/dto'; -import { ProjectNotFoundException } from '@wink/activity/exception'; -import { ProjectService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/activity/project') -@ApiTags('Activity [프로젝트]') -export class ProjectController { - constructor(private readonly projectService: ProjectService) {} - - @Get('/detail') - @ApiOperation({ summary: '프로젝트 상세 조회' }) - @ApiProperty({ type: GetProjectRequestDto }) - @ApiCustomResponse(GetProjectResponseDto) - @ApiCustomErrorResponse([ProjectNotFoundException]) - async getProject(@Body() request: GetProjectRequestDto): Promise { - return this.projectService.getProject(request); - } - - @Get('/max') - @ApiOperation({ summary: '프로젝트 최대 페이지' }) - @ApiCustomResponse(GetProjectsPageResponseDto) - async getProjectsPage(): Promise { - return this.projectService.getProjectsPage(); - } - - @Get() - @ApiOperation({ summary: '프로젝트 목록' }) - @ApiProperty({ type: GetProjectsRequestDto }) - @ApiCustomResponse(GetProjectsResponseDto) - async getProjects(@Body() request: GetProjectsRequestDto): Promise { - return this.projectService.getProjects(request); - } -} diff --git a/src/domain/activity/project/dto/index.ts b/src/domain/activity/project/dto/index.ts deleted file mode 100644 index 1d24674..0000000 --- a/src/domain/activity/project/dto/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Request -export * from './request/create-project.request.dto'; -export * from './request/update-project.request.dto'; -export * from './request/get-project.request.dto'; -export * from './request/get-projects.request.dto'; -export * from './request/delete-project.request.dto'; - -// Response -export * from './response/create-project.response.dto'; -export * from './response/get-project.response.dto'; -export * from './response/get-projects.response.dto'; -export * from './response/get-projects-page.response.dto'; diff --git a/src/domain/activity/project/dto/request/create-project.request.dto.ts b/src/domain/activity/project/dto/request/create-project.request.dto.ts deleted file mode 100644 index bc3cc82..0000000 --- a/src/domain/activity/project/dto/request/create-project.request.dto.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class CreateProjectRequestDto { - @ApiProperty({ - description: '제목', - example: '공식 홈페이지를 만들어보자', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(4) - @StringValidation.MaxLength(100) - title!: string; - - @ApiProperty({ - description: '내용', - example: '공식 홈페이지 뚝딱뚝딱...', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(10) - content!: string; - - @ApiProperty({ - description: '태그', - example: ['웹', '프론트엔드', '백엔드'], - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsStringArray() - tags!: string[]; - - @ApiProperty({ - description: '이미지', - example: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsUrl() - image!: string; -} diff --git a/src/domain/activity/project/dto/request/delete-project.request.dto.ts b/src/domain/activity/project/dto/request/delete-project.request.dto.ts deleted file mode 100644 index 9aedf1e..0000000 --- a/src/domain/activity/project/dto/request/delete-project.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class DeleteProjectRequestDto { - @ApiProperty({ - description: '프로젝트 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - projectId!: string; -} diff --git a/src/domain/activity/project/dto/request/get-project.request.dto.ts b/src/domain/activity/project/dto/request/get-project.request.dto.ts deleted file mode 100644 index 49a64b2..0000000 --- a/src/domain/activity/project/dto/request/get-project.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class GetProjectRequestDto { - @ApiProperty({ - description: '프로젝트 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - projectId!: string; -} diff --git a/src/domain/activity/project/dto/request/get-projects.request.dto.ts b/src/domain/activity/project/dto/request/get-projects.request.dto.ts deleted file mode 100644 index 88ee42f..0000000 --- a/src/domain/activity/project/dto/request/get-projects.request.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, TypeValidation } from '@wink/validation'; - -export class GetProjectsRequestDto { - @ApiProperty({ - description: '페이지', - example: 1, - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsNumber() - page!: number; -} diff --git a/src/domain/activity/project/dto/request/update-project.request.dto.ts b/src/domain/activity/project/dto/request/update-project.request.dto.ts deleted file mode 100644 index 49ad14d..0000000 --- a/src/domain/activity/project/dto/request/update-project.request.dto.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class UpdateProjectRequestDto { - @ApiProperty({ - description: '프로젝트 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - projectId!: string; - - @ApiProperty({ - description: '제목', - example: '공식 홈페이지를 만들어보자', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(4) - @StringValidation.MaxLength(100) - title!: string; - - @ApiProperty({ - description: '내용', - example: '공식 홈페이지 뚝딱뚝딱...', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(10) - content!: string; - - @ApiProperty({ - description: '태그', - example: ['웹', '프론트엔드', '백엔드'], - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsStringArray() - tags!: string[]; - - @ApiProperty({ - description: '이미지', - example: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsUrl() - image!: string; -} diff --git a/src/domain/activity/project/dto/response/create-project.response.dto.ts b/src/domain/activity/project/dto/response/create-project.response.dto.ts deleted file mode 100644 index 0b51695..0000000 --- a/src/domain/activity/project/dto/response/create-project.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Project } from '@wink/activity/schema'; - -export class CreateProjectResponseDto { - @ApiProperty({ - description: '프로젝트', - example: {}, - }) - project!: Project; -} diff --git a/src/domain/activity/project/dto/response/get-project.response.dto.ts b/src/domain/activity/project/dto/response/get-project.response.dto.ts deleted file mode 100644 index 8bc8daf..0000000 --- a/src/domain/activity/project/dto/response/get-project.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Project } from '@wink/activity/schema'; - -export class GetProjectResponseDto { - @ApiProperty({ - description: '프로젝트', - example: {}, - }) - project!: Project; -} diff --git a/src/domain/activity/project/dto/response/get-projects-page.response.dto.ts b/src/domain/activity/project/dto/response/get-projects-page.response.dto.ts deleted file mode 100644 index f558a6d..0000000 --- a/src/domain/activity/project/dto/response/get-projects-page.response.dto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -export class GetProjectsPageResponseDto { - @ApiProperty({ - description: '최대 페이지', - example: 1, - }) - page!: number; -} diff --git a/src/domain/activity/project/dto/response/get-projects.response.dto.ts b/src/domain/activity/project/dto/response/get-projects.response.dto.ts deleted file mode 100644 index 6e923ad..0000000 --- a/src/domain/activity/project/dto/response/get-projects.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Project } from '@wink/activity/schema'; - -export class GetProjectsResponseDto { - @ApiProperty({ - description: '프로젝트 목록', - example: [], - }) - projects!: Project[]; -} diff --git a/src/domain/activity/project/exception/already-exists-project.exception.ts b/src/domain/activity/project/exception/already-exists-project.exception.ts deleted file mode 100644 index 66ae0db..0000000 --- a/src/domain/activity/project/exception/already-exists-project.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class AlreadyExistsProjectException extends ApiException { - constructor() { - super({ - swagger: '프로젝트가 이미 존재하는 경우', - message: '프로젝트가 이미 존재합니다.', - code: HttpStatus.CONFLICT, - }); - } -} diff --git a/src/domain/activity/project/exception/index.ts b/src/domain/activity/project/exception/index.ts deleted file mode 100644 index 8f2686e..0000000 --- a/src/domain/activity/project/exception/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './already-exists-project.exception'; -export * from './project-not-found.exception'; diff --git a/src/domain/activity/project/exception/project-not-found.exception.ts b/src/domain/activity/project/exception/project-not-found.exception.ts deleted file mode 100644 index 0361e7c..0000000 --- a/src/domain/activity/project/exception/project-not-found.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class ProjectNotFoundException extends ApiException { - constructor() { - super({ - swagger: '프로젝트를 찾을 수 없는 경우', - message: '프로젝트를 찾을 수 없습니다.', - code: HttpStatus.NOT_FOUND, - }); - } -} diff --git a/src/domain/activity/project/repository/index.ts b/src/domain/activity/project/repository/index.ts deleted file mode 100644 index 3e35c16..0000000 --- a/src/domain/activity/project/repository/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './project.repository'; diff --git a/src/domain/activity/project/repository/project.repository.ts b/src/domain/activity/project/repository/project.repository.ts deleted file mode 100644 index f74d792..0000000 --- a/src/domain/activity/project/repository/project.repository.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; - -import { Project } from '@wink/activity/schema'; - -import { Model } from 'mongoose'; - -@Injectable() -export class ProjectRepository { - constructor(@InjectModel(Project.name) private readonly projectModel: Model) {} - - // Create - async save(project: Partial): Promise { - return this.projectModel.create(project); - } - - // Read - async findAll(): Promise { - return this.projectModel.find().sort({ createdAt: -1 }).exec(); - } - - async findAllPage(page: number): Promise { - return this.projectModel - .find() - .sort({ createdAt: -1 }) - .skip((page - 1) * 10) - .limit(10) - .exec(); - } - - async findById(id: string): Promise { - return this.projectModel.findById(id).exec(); - } - - // Delete - async deleteById(id: string): Promise { - await this.projectModel.deleteOne({ _id: id }).exec(); - } - - // Exists - async existsById(id: string): Promise { - return !!(await this.projectModel.exists({ _id: id }).exec()); - } - - async existsByTitle(title: string): Promise { - return !!(await this.projectModel.exists({ title }).exec()); - } -} diff --git a/src/domain/activity/project/schema/index.ts b/src/domain/activity/project/schema/index.ts deleted file mode 100644 index 816c4ed..0000000 --- a/src/domain/activity/project/schema/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './project.schema'; diff --git a/src/domain/activity/project/schema/project.schema.ts b/src/domain/activity/project/schema/project.schema.ts deleted file mode 100644 index e52633f..0000000 --- a/src/domain/activity/project/schema/project.schema.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; - -import { Member } from '@wink/member/schema'; - -import { Activity } from '@wink/activity/schema'; - -import { Schema as MongooseSchema } from 'mongoose'; - -@Schema() -export class Project extends Activity { - @Prop({ type: MongooseSchema.Types.ObjectId, required: true, ref: 'Member', autopopulate: true }) - author!: Member; - - @Prop({ type: String, required: true }) - title!: string; - - @Prop({ type: String, required: true }) - content!: string; - - @Prop({ type: [String], required: false, default: [] }) - tags!: string[]; - - @Prop({ type: String, required: true }) - image!: string; -} - -export const ProjectSchema: MongooseSchema = SchemaFactory.createForClass(Project); diff --git a/src/domain/activity/project/service/index.ts b/src/domain/activity/project/service/index.ts deleted file mode 100644 index 30c5fb6..0000000 --- a/src/domain/activity/project/service/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './project.service'; -export * from './project.admin.service'; diff --git a/src/domain/activity/project/service/project.admin.service.ts b/src/domain/activity/project/service/project.admin.service.ts deleted file mode 100644 index 3748d99..0000000 --- a/src/domain/activity/project/service/project.admin.service.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; - -import { Member } from '@wink/member/schema'; - -import { - CreateProjectRequestDto, - CreateProjectResponseDto, - DeleteProjectRequestDto, - UpdateProjectRequestDto, -} from '@wink/activity/dto'; -import { AlreadyExistsProjectException, ProjectNotFoundException } from '@wink/activity/exception'; -import { ProjectRepository } from '@wink/activity/repository'; -import { Project } from '@wink/activity/schema'; - -import { CreateProjectEvent, DeleteProjectEvent, UpdateProjectEvent } from '@wink/event'; - -@Injectable() -export class ProjectAdminService { - constructor( - private readonly projectRepository: ProjectRepository, - - private readonly eventEmitter: EventEmitter2, - ) {} - - async createProject( - member: Member, - { title, content, tags, image }: CreateProjectRequestDto, - ): Promise { - if (!(await this.projectRepository.existsByTitle(title))) { - throw new AlreadyExistsProjectException(); - } - - const project: Partial = { - title, - content, - tags, - image, - author: member, - }; - - const savedProject = await this.projectRepository.save(project); - - this.eventEmitter.emit( - CreateProjectEvent.EVENT_NAME, - new CreateProjectEvent(member, savedProject), - ); - - return { project: savedProject }; - } - - async updateProject( - member: Member, - { projectId, title, content, tags, image }: UpdateProjectRequestDto, - ): Promise { - if (!(await this.projectRepository.existsById(projectId))) { - throw new ProjectNotFoundException(); - } - - const project = (await this.projectRepository.findById(projectId))!; - - if (title !== project.title && (await this.projectRepository.existsByTitle(title))) { - throw new AlreadyExistsProjectException(); - } - - project.title = title; - project.content = content; - project.tags = tags; - project.image = image; - - await this.projectRepository.save(project); - - this.eventEmitter.emit(UpdateProjectEvent.EVENT_NAME, new UpdateProjectEvent(member, project)); - } - - async deleteProject(member: Member, { projectId }: DeleteProjectRequestDto): Promise { - if (!(await this.projectRepository.existsById(projectId))) { - throw new ProjectNotFoundException(); - } - - const project = (await this.projectRepository.findById(projectId))!; - - await this.projectRepository.deleteById(projectId); - - this.eventEmitter.emit(DeleteProjectEvent.EVENT_NAME, new DeleteProjectEvent(member, project)); - } -} diff --git a/src/domain/activity/project/service/project.service.ts b/src/domain/activity/project/service/project.service.ts deleted file mode 100644 index 3f9813a..0000000 --- a/src/domain/activity/project/service/project.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -import { - GetProjectRequestDto, - GetProjectResponseDto, - GetProjectsPageResponseDto, - GetProjectsRequestDto, - GetProjectsResponseDto, -} from '@wink/activity/dto'; -import { ProjectNotFoundException } from '@wink/activity/exception'; -import { ProjectRepository } from '@wink/activity/repository'; - -@Injectable() -export class ProjectService { - constructor(private readonly projectRepository: ProjectRepository) {} - - async getProject({ projectId }: GetProjectRequestDto): Promise { - if (!(await this.projectRepository.existsById(projectId))) { - throw new ProjectNotFoundException(); - } - - const project = (await this.projectRepository.findById(projectId))!; - - return { project }; - } - - async getProjectsPage(): Promise { - const projects = await this.projectRepository.findAll(); - const page = Math.ceil(projects.length / 10); - - return { page }; - } - - async getProjects({ page }: GetProjectsRequestDto): Promise { - const projects = await this.projectRepository.findAllPage(page); - - return { projects }; - } -} diff --git a/src/domain/activity/repository.ts b/src/domain/activity/repository.ts deleted file mode 100644 index c28c953..0000000 --- a/src/domain/activity/repository.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './project/repository'; -export * from './study/repository'; -export * from './social/repository'; diff --git a/src/domain/activity/schema.ts b/src/domain/activity/schema.ts deleted file mode 100644 index 2fc4488..0000000 --- a/src/domain/activity/schema.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './common/schema'; - -export * from './project/schema'; -export * from './study/schema'; -export * from './social/schema'; diff --git a/src/domain/activity/service.ts b/src/domain/activity/service.ts deleted file mode 100644 index 7ae4fdf..0000000 --- a/src/domain/activity/service.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './common/service'; - -export * from './project/service'; -export * from './study/service'; -export * from './social/service'; diff --git a/src/domain/activity/service/activity.service.ts b/src/domain/activity/service/activity.service.ts new file mode 100644 index 0000000..93642de --- /dev/null +++ b/src/domain/activity/service/activity.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class ActivityService {} diff --git a/src/domain/activity/service/index.ts b/src/domain/activity/service/index.ts new file mode 100644 index 0000000..e1a330a --- /dev/null +++ b/src/domain/activity/service/index.ts @@ -0,0 +1 @@ +export * from './activity.service'; diff --git a/src/domain/activity/social/controller/index.ts b/src/domain/activity/social/controller/index.ts deleted file mode 100644 index d802248..0000000 --- a/src/domain/activity/social/controller/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './social.controller'; -export * from './social.admin.controller'; diff --git a/src/domain/activity/social/controller/social.admin.controller.ts b/src/domain/activity/social/controller/social.admin.controller.ts deleted file mode 100644 index ebd366c..0000000 --- a/src/domain/activity/social/controller/social.admin.controller.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Body, Controller, Delete, Patch, Put } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { AuthAdminAccount, AuthAdminAccountException, ReqMember } from '@wink/auth/guard'; - -import { Member } from '@wink/member/schema'; - -import { - CreateSocialRequestDto, - CreateSocialResponseDto, - DeleteSocialRequestDto, - UpdateSocialRequestDto, -} from '@wink/activity/dto'; -import { AlreadyExistsSocialException, SocialNotFoundException } from '@wink/activity/exception'; -import { SocialAdminService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/admin/activity/social') -@ApiTags('[Admin] Activity [친목]') -export class SocialAdminController { - constructor(private readonly socialAdminService: SocialAdminService) {} - - @Put() - @AuthAdminAccount() - @ApiOperation({ summary: '친목 활동 생성' }) - @ApiProperty({ type: CreateSocialRequestDto }) - @ApiCustomResponse(CreateSocialResponseDto) - @ApiCustomErrorResponse([...AuthAdminAccountException, AlreadyExistsSocialException]) - async createProject( - @ReqMember() member: Member, - @Body() request: CreateSocialRequestDto, - ): Promise { - return this.socialAdminService.createSocial(member, request); - } - - @Patch() - @AuthAdminAccount() - @ApiOperation({ summary: '친목 활동 수정' }) - @ApiProperty({ type: UpdateSocialRequestDto }) - @ApiCustomErrorResponse([ - ...AuthAdminAccountException, - SocialNotFoundException, - AlreadyExistsSocialException, - ]) - async updateProject( - @ReqMember() member: Member, - @Body() request: UpdateSocialRequestDto, - ): Promise { - return this.socialAdminService.updateSocial(member, request); - } - - @Delete() - @AuthAdminAccount() - @ApiOperation({ summary: '친목 활동 삭제' }) - @ApiProperty({ type: DeleteSocialRequestDto }) - @ApiCustomErrorResponse([...AuthAdminAccountException, SocialNotFoundException]) - async deleteProject( - @ReqMember() member: Member, - @Body() request: DeleteSocialRequestDto, - ): Promise { - return this.socialAdminService.deleteSocial(member, request); - } -} diff --git a/src/domain/activity/social/controller/social.controller.ts b/src/domain/activity/social/controller/social.controller.ts deleted file mode 100644 index 890629f..0000000 --- a/src/domain/activity/social/controller/social.controller.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Body, Controller, Get } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { - GetSocialRequestDto, - GetSocialResponseDto, - GetSocialsResponseDto, -} from '@wink/activity/dto'; -import { SocialNotFoundException } from '@wink/activity/exception'; -import { SocialService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/activity/social') -@ApiTags('Activity [친목]') -export class SocialController { - constructor(private readonly socialService: SocialService) {} - - @Get('/detail') - @ApiOperation({ summary: '친목 활동 상세 조회' }) - @ApiProperty({ type: GetSocialRequestDto }) - @ApiCustomResponse(GetSocialResponseDto) - @ApiCustomErrorResponse([SocialNotFoundException]) - async getProject(@Body() request: GetSocialRequestDto): Promise { - return this.socialService.getSocial(request); - } - - @Get() - @ApiOperation({ summary: '친목 활동 목록' }) - @ApiCustomResponse(GetSocialsResponseDto) - async getSocials(): Promise { - return this.socialService.getSocials(); - } -} diff --git a/src/domain/activity/social/dto/index.ts b/src/domain/activity/social/dto/index.ts deleted file mode 100644 index 6ed2c43..0000000 --- a/src/domain/activity/social/dto/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Request -export * from './request/create-social.request.dto'; -export * from './request/delete-social.request.dto'; -export * from './request/get-social.request.dto'; -export * from './request/update-social.request.dto'; - -// Response -export * from './response/create-social.response.dto'; -export * from './response/get-social.response.dto'; -export * from './response/get-socials.response.dto'; diff --git a/src/domain/activity/social/dto/request/create-social.request.dto.ts b/src/domain/activity/social/dto/request/create-social.request.dto.ts deleted file mode 100644 index 9090fa7..0000000 --- a/src/domain/activity/social/dto/request/create-social.request.dto.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Content } from '@wink/activity/schema'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class CreateSocialRequestDto { - @ApiProperty({ - description: '제목', - example: '2024년 개강총회 진행', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(4) - @StringValidation.MaxLength(100) - title!: string; - - @ApiProperty({ - description: '내용', - example: [ - { - content: '2024년에 개강총회를 진행했어요.', - image: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - }, - ], - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsSocialArray() - contents!: Content[]; -} diff --git a/src/domain/activity/social/dto/request/delete-social.request.dto.ts b/src/domain/activity/social/dto/request/delete-social.request.dto.ts deleted file mode 100644 index 6c179a1..0000000 --- a/src/domain/activity/social/dto/request/delete-social.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class DeleteSocialRequestDto { - @ApiProperty({ - description: '친목 활동 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - socialId!: string; -} diff --git a/src/domain/activity/social/dto/request/get-social.request.dto.ts b/src/domain/activity/social/dto/request/get-social.request.dto.ts deleted file mode 100644 index 8c534ac..0000000 --- a/src/domain/activity/social/dto/request/get-social.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class GetSocialRequestDto { - @ApiProperty({ - description: '친목 활동 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - socialId!: string; -} diff --git a/src/domain/activity/social/dto/request/update-social.request.dto.ts b/src/domain/activity/social/dto/request/update-social.request.dto.ts deleted file mode 100644 index d10c67b..0000000 --- a/src/domain/activity/social/dto/request/update-social.request.dto.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Content } from '@wink/activity/schema'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class UpdateSocialRequestDto { - @ApiProperty({ - description: '친목 활동 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - socialId!: string; - - @ApiProperty({ - description: '제목', - example: '2024년 개강총회 진행', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.MinLength(4) - @StringValidation.MaxLength(100) - title!: string; - - @ApiProperty({ - description: '내용', - example: [ - { - content: '2024년에 개강총회를 진행했어요.', - image: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - }, - ], - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsSocialArray() - contents!: Content[]; -} diff --git a/src/domain/activity/social/dto/response/create-social.response.dto.ts b/src/domain/activity/social/dto/response/create-social.response.dto.ts deleted file mode 100644 index 85415e5..0000000 --- a/src/domain/activity/social/dto/response/create-social.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Social } from '@wink/activity/schema'; - -export class CreateSocialResponseDto { - @ApiProperty({ - description: '친목 활동', - example: {}, - }) - social!: Social; -} diff --git a/src/domain/activity/social/dto/response/get-social.response.dto.ts b/src/domain/activity/social/dto/response/get-social.response.dto.ts deleted file mode 100644 index 892c24a..0000000 --- a/src/domain/activity/social/dto/response/get-social.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Social } from '@wink/activity/schema'; - -export class GetSocialResponseDto { - @ApiProperty({ - description: '친목 활동', - example: {}, - }) - social!: Social; -} diff --git a/src/domain/activity/social/dto/response/get-socials.response.dto.ts b/src/domain/activity/social/dto/response/get-socials.response.dto.ts deleted file mode 100644 index 525e945..0000000 --- a/src/domain/activity/social/dto/response/get-socials.response.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Social } from '@wink/activity/schema'; - -export class GetSocialsResponseDto { - @ApiProperty({ - description: '친목 활동 목록 (최근 6개)', - example: [], - }) - socials!: Social[]; -} diff --git a/src/domain/activity/social/exception/already-exists-social.exception.ts b/src/domain/activity/social/exception/already-exists-social.exception.ts deleted file mode 100644 index b687b3c..0000000 --- a/src/domain/activity/social/exception/already-exists-social.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class AlreadyExistsSocialException extends ApiException { - constructor() { - super({ - swagger: '친목 활동이 이미 존재하는 경우', - message: '친목 활동이 이미 존재합니다.', - code: HttpStatus.CONFLICT, - }); - } -} diff --git a/src/domain/activity/social/exception/index.ts b/src/domain/activity/social/exception/index.ts deleted file mode 100644 index 59aca6c..0000000 --- a/src/domain/activity/social/exception/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './already-exists-social.exception'; -export * from './social-not-found.exception'; diff --git a/src/domain/activity/social/exception/social-not-found.exception.ts b/src/domain/activity/social/exception/social-not-found.exception.ts deleted file mode 100644 index 5bcb13e..0000000 --- a/src/domain/activity/social/exception/social-not-found.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class SocialNotFoundException extends ApiException { - constructor() { - super({ - swagger: '친목 활동을 찾을 수 없는 경우', - message: '친목 활동을 찾을 수 없습니다.', - code: HttpStatus.NOT_FOUND, - }); - } -} diff --git a/src/domain/activity/social/repository/index.ts b/src/domain/activity/social/repository/index.ts deleted file mode 100644 index 6a86031..0000000 --- a/src/domain/activity/social/repository/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './social.repository'; diff --git a/src/domain/activity/social/repository/social.repository.ts b/src/domain/activity/social/repository/social.repository.ts deleted file mode 100644 index fda948c..0000000 --- a/src/domain/activity/social/repository/social.repository.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; - -import { Social } from '@wink/activity/schema'; - -import { Model } from 'mongoose'; - -@Injectable() -export class SocialRepository { - constructor(@InjectModel(Social.name) private readonly socialModel: Model) {} - - // Create - async save(social: Partial): Promise { - return this.socialModel.create(social); - } - - // Read - async findAll(): Promise { - return this.socialModel.find().sort({ createdAt: -1 }).limit(6).exec(); - } - - async findById(id: string): Promise { - return this.socialModel.findById(id).exec(); - } - - // Delete - async deleteById(id: string): Promise { - await this.socialModel.deleteOne({ _id: id }).exec(); - } - - // Exists - async existsById(id: string): Promise { - return !!(await this.socialModel.exists({ _id: id }).exec()); - } - - async existsByTitle(title: string): Promise { - return !!(await this.socialModel.exists({ title }).exec()); - } -} diff --git a/src/domain/activity/social/schema/index.ts b/src/domain/activity/social/schema/index.ts deleted file mode 100644 index 0db5a22..0000000 --- a/src/domain/activity/social/schema/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './social.schema'; diff --git a/src/domain/activity/social/schema/social.schema.ts b/src/domain/activity/social/schema/social.schema.ts deleted file mode 100644 index c0fbebe..0000000 --- a/src/domain/activity/social/schema/social.schema.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; - -import { Activity } from '@wink/activity/schema'; - -import { Schema as MongooseSchema } from 'mongoose'; - -@Schema() -export class Content { - @Prop({ type: String, required: true }) - content!: string; - - @Prop({ type: String, required: true }) - image!: string; -} - -@Schema() -export class Social extends Activity { - @Prop({ type: String, required: true }) - title!: string; - - @Prop({ type: [Content], required: true }) - contents!: Content[]; -} - -export const SocialSchema: MongooseSchema = SchemaFactory.createForClass(Social); diff --git a/src/domain/activity/social/service/index.ts b/src/domain/activity/social/service/index.ts deleted file mode 100644 index 347cca7..0000000 --- a/src/domain/activity/social/service/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './social.service'; -export * from './social.admin.service'; diff --git a/src/domain/activity/social/service/social.admin.service.ts b/src/domain/activity/social/service/social.admin.service.ts deleted file mode 100644 index f52d9bd..0000000 --- a/src/domain/activity/social/service/social.admin.service.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; - -import { Member } from '@wink/member/schema'; - -import { - CreateSocialRequestDto, - CreateSocialResponseDto, - DeleteSocialRequestDto, - UpdateSocialRequestDto, -} from '@wink/activity/dto'; -import { AlreadyExistsSocialException, SocialNotFoundException } from '@wink/activity/exception'; -import { SocialRepository } from '@wink/activity/repository'; -import { Social } from '@wink/activity/schema'; - -import { CreateSocialEvent, DeleteSocialEvent, UpdateSocialEvent } from '@wink/event'; - -@Injectable() -export class SocialAdminService { - constructor( - private readonly socialRepository: SocialRepository, - - private readonly eventEmitter: EventEmitter2, - ) {} - - async createSocial( - member: Member, - { title, contents }: CreateSocialRequestDto, - ): Promise { - if (!(await this.socialRepository.existsByTitle(title))) { - throw new AlreadyExistsSocialException(); - } - - const social: Partial = { - title, - contents, - }; - - const savedSocial = await this.socialRepository.save(social); - - this.eventEmitter.emit( - CreateSocialEvent.EVENT_NAME, - new CreateSocialEvent(member, savedSocial), - ); - - return { social: savedSocial }; - } - - async updateSocial( - member: Member, - { socialId, title, contents }: UpdateSocialRequestDto, - ): Promise { - if (!(await this.socialRepository.existsById(socialId))) { - throw new SocialNotFoundException(); - } - - const social = (await this.socialRepository.findById(socialId))!; - - if (title !== social.title && (await this.socialRepository.existsByTitle(title))) { - throw new AlreadyExistsSocialException(); - } - - social.title = title; - social.contents = contents; - - await this.socialRepository.save(social); - - this.eventEmitter.emit(UpdateSocialEvent.EVENT_NAME, new UpdateSocialEvent(member, social)); - } - - async deleteSocial(member: Member, { socialId }: DeleteSocialRequestDto): Promise { - if (!(await this.socialRepository.existsById(socialId))) { - throw new SocialNotFoundException(); - } - - const social = (await this.socialRepository.findById(socialId))!; - - await this.socialRepository.deleteById(socialId); - - this.eventEmitter.emit(DeleteSocialEvent.EVENT_NAME, new DeleteSocialEvent(member, social)); - } -} diff --git a/src/domain/activity/social/service/social.service.ts b/src/domain/activity/social/service/social.service.ts deleted file mode 100644 index c7c84c2..0000000 --- a/src/domain/activity/social/service/social.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -import { - GetSocialRequestDto, - GetSocialResponseDto, - GetSocialsResponseDto, -} from '@wink/activity/dto'; -import { SocialNotFoundException } from '@wink/activity/exception'; -import { SocialRepository } from '@wink/activity/repository'; - -@Injectable() -export class SocialService { - constructor(private readonly socialRepository: SocialRepository) {} - - async getSocial({ socialId }: GetSocialRequestDto): Promise { - if (!(await this.socialRepository.existsById(socialId))) { - throw new SocialNotFoundException(); - } - - const social = (await this.socialRepository.findById(socialId))!; - - return { social }; - } - - async getSocials(): Promise { - const socials = await this.socialRepository.findAll(); - - return { socials }; - } -} diff --git a/src/domain/activity/study/controller/index.ts b/src/domain/activity/study/controller/index.ts deleted file mode 100644 index d33eb93..0000000 --- a/src/domain/activity/study/controller/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './study.controller'; -export * from './study.admin.controller'; diff --git a/src/domain/activity/study/controller/study.admin.controller.ts b/src/domain/activity/study/controller/study.admin.controller.ts deleted file mode 100644 index 238bfe4..0000000 --- a/src/domain/activity/study/controller/study.admin.controller.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Body, Controller, Delete, Patch, Put } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { AuthAdminAccount, AuthAdminAccountException, ReqMember } from '@wink/auth/guard'; - -import { Member } from '@wink/member/schema'; - -import { - CreateCategoryRequestDto, - CreateCategoryResponseDto, - CreateStudyRequestDto, - CreateStudyResponseDto, - DeleteCategoryRequestDto, - DeleteStudyRequestDto, - UpdateCategoryRequestDto, -} from '@wink/activity/dto'; -import { - AlreadyExistsCategoryException, - AlreadyExistsStudyException, - CategoryNotFoundException, - StudyNotFoundException, -} from '@wink/activity/exception'; -import { StudyAdminService } from '@wink/activity/service'; - -import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; - -@Controller('/admin/activity/study') -@ApiTags('[Admin] Activity [스터디]') -export class StudyAdminController { - constructor(private readonly studyAdminService: StudyAdminService) {} - - @Put('/category') - @AuthAdminAccount() - @ApiOperation({ summary: '카테고리 생성' }) - @ApiProperty({ type: CreateStudyRequestDto }) - @ApiCustomResponse(CreateStudyResponseDto) - @ApiCustomErrorResponse([...AuthAdminAccountException, AlreadyExistsCategoryException]) - async createCategory( - @ReqMember() member: Member, - @Body() request: CreateCategoryRequestDto, - ): Promise { - return this.studyAdminService.createCategory(member, request); - } - - @Patch('/category') - @AuthAdminAccount() - @ApiOperation({ summary: '카테고리 수정' }) - @ApiProperty({ type: CreateStudyRequestDto }) - @ApiCustomResponse(CreateStudyResponseDto) - @ApiCustomErrorResponse([ - ...AuthAdminAccountException, - CategoryNotFoundException, - AlreadyExistsCategoryException, - ]) - async updateCategory( - @ReqMember() member: Member, - @Body() request: UpdateCategoryRequestDto, - ): Promise { - return this.studyAdminService.updateCategory(member, request); - } - - @Delete('/category') - @AuthAdminAccount() - @ApiOperation({ summary: '카테고리 삭제' }) - @ApiProperty({ type: CreateStudyRequestDto }) - @ApiCustomResponse(CreateStudyResponseDto) - @ApiCustomErrorResponse([...AuthAdminAccountException, CategoryNotFoundException]) - async deleteCategory( - @ReqMember() member: Member, - @Body() request: DeleteCategoryRequestDto, - ): Promise { - return this.studyAdminService.deleteCategory(member, request); - } - - @Put() - @AuthAdminAccount() - @ApiOperation({ summary: '스터디 생성' }) - @ApiProperty({ type: CreateStudyRequestDto }) - @ApiCustomResponse(CreateStudyResponseDto) - @ApiCustomErrorResponse([ - ...AuthAdminAccountException, - CategoryNotFoundException, - AlreadyExistsStudyException, - ]) - async createStudy( - @ReqMember() member: Member, - @Body() request: CreateStudyRequestDto, - ): Promise { - return this.studyAdminService.createStudy(member, request); - } - - @Delete() - @AuthAdminAccount() - @ApiOperation({ summary: '스터디 삭제' }) - @ApiProperty({ type: DeleteStudyRequestDto }) - @ApiCustomErrorResponse([...AuthAdminAccountException, StudyNotFoundException]) - async deleteStudy( - @ReqMember() member: Member, - @Body() request: DeleteStudyRequestDto, - ): Promise { - return this.studyAdminService.deleteStudy(member, request); - } -} diff --git a/src/domain/activity/study/controller/study.controller.ts b/src/domain/activity/study/controller/study.controller.ts deleted file mode 100644 index d97962b..0000000 --- a/src/domain/activity/study/controller/study.controller.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Body, Controller, Get } from '@nestjs/common'; -import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; - -import { - GetCategoriesResponseDto, - GetStudiesPageResponseDto, - GetStudiesRequestDto, - GetStudiesResponseDto, -} from '@wink/activity/dto'; -import { StudyService } from '@wink/activity/service'; - -import { ApiCustomResponse } from '@wink/swagger'; - -@Controller('/activity/study') -@ApiTags('Activity [스터디]') -export class StudyController { - constructor(private readonly studyService: StudyService) {} - - @Get('/category') - @ApiOperation({ summary: '스터디 카테고리 목록' }) - @ApiCustomResponse(GetCategoriesResponseDto) - async getCategories(): Promise { - return this.studyService.getCategories(); - } - - @Get('/max') - @ApiOperation({ summary: '스터디 최대 페이지' }) - @ApiCustomResponse(GetStudiesPageResponseDto) - async getStudiesPage(): Promise { - return this.studyService.getStudiesPage(); - } - - @Get() - @ApiOperation({ summary: '스터디 목록' }) - @ApiProperty({ type: GetStudiesRequestDto }) - @ApiCustomResponse(GetStudiesResponseDto) - async getStudies(@Body() request: GetStudiesRequestDto): Promise { - return this.studyService.getStudies(request); - } -} diff --git a/src/domain/activity/study/dto/index.ts b/src/domain/activity/study/dto/index.ts deleted file mode 100644 index 5ec39e2..0000000 --- a/src/domain/activity/study/dto/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Request -export * from './request/create-category.request.dto'; -export * from './request/create-study.request.dto'; -export * from './request/delete-category.request.dto'; -export * from './request/delete-study.request.dto'; -export * from './request/get-studies.request.dto'; -export * from './request/update-category.request.dto'; - -// Response -export * from './response/create-category.response.dto'; -export * from './response/create-study.response.dto'; -export * from './response/get-categories.response.dto'; -export * from './response/get-studies.response.dto'; -export * from './response/get-studies-page.response.dto'; diff --git a/src/domain/activity/study/dto/request/create-category.request.dto.ts b/src/domain/activity/study/dto/request/create-category.request.dto.ts deleted file mode 100644 index a09530f..0000000 --- a/src/domain/activity/study/dto/request/create-category.request.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, TypeValidation } from '@wink/validation'; - -export class CreateCategoryRequestDto { - @ApiProperty({ - description: '카테고리', - example: 'React.js 스터디', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - category!: string; -} diff --git a/src/domain/activity/study/dto/request/create-study.request.dto.ts b/src/domain/activity/study/dto/request/create-study.request.dto.ts deleted file mode 100644 index fadfc9e..0000000 --- a/src/domain/activity/study/dto/request/create-study.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class CreateStudyRequestDto { - @ApiProperty({ - description: '스터디 링크', - example: 'https://cs-kookmin-club.tistory.com/000', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsStudyLink() - link!: string; -} diff --git a/src/domain/activity/study/dto/request/delete-category.request.dto.ts b/src/domain/activity/study/dto/request/delete-category.request.dto.ts deleted file mode 100644 index 79b2ca5..0000000 --- a/src/domain/activity/study/dto/request/delete-category.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class DeleteCategoryRequestDto { - @ApiProperty({ - description: '카테고리 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - categoryId!: string; -} diff --git a/src/domain/activity/study/dto/request/delete-study.request.dto.ts b/src/domain/activity/study/dto/request/delete-study.request.dto.ts deleted file mode 100644 index deef0d3..0000000 --- a/src/domain/activity/study/dto/request/delete-study.request.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class DeleteStudyRequestDto { - @ApiProperty({ - description: '스터디 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - studyId!: string; -} diff --git a/src/domain/activity/study/dto/request/get-studies.request.dto.ts b/src/domain/activity/study/dto/request/get-studies.request.dto.ts deleted file mode 100644 index 5019498..0000000 --- a/src/domain/activity/study/dto/request/get-studies.request.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, TypeValidation } from '@wink/validation'; - -export class GetStudiesRequestDto { - @ApiProperty({ - description: '페이지', - example: 1, - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsNumber() - page!: number; -} diff --git a/src/domain/activity/study/dto/request/update-category.request.dto.ts b/src/domain/activity/study/dto/request/update-category.request.dto.ts deleted file mode 100644 index 5402153..0000000 --- a/src/domain/activity/study/dto/request/update-category.request.dto.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; - -export class UpdateCategoryRequestDto { - @ApiProperty({ - description: '카테고리 ID', - example: '1a2b3c4d5e6f7a8b9c0d1e2f', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - @StringValidation.IsMongoId() - categoryId!: string; - - @ApiProperty({ - description: '카테고리', - example: 'React.js 스터디', - }) - @CommonValidation.IsNotEmpty() - @TypeValidation.IsString() - category!: string; -} diff --git a/src/domain/activity/study/dto/response/create-category.response.dto.ts b/src/domain/activity/study/dto/response/create-category.response.dto.ts deleted file mode 100644 index 6aae748..0000000 --- a/src/domain/activity/study/dto/response/create-category.response.dto.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Category } from '@wink/activity/schema'; - -export class CreateCategoryResponseDto { - @ApiProperty({ - description: '카테고리', - example: { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - name: 'React.js 스터디', - }, - }) - category!: Category; -} diff --git a/src/domain/activity/study/dto/response/create-study.response.dto.ts b/src/domain/activity/study/dto/response/create-study.response.dto.ts deleted file mode 100644 index 53c56d6..0000000 --- a/src/domain/activity/study/dto/response/create-study.response.dto.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Study } from '@wink/activity/schema'; - -export class CreateStudyResponseDto { - @ApiProperty({ - description: '스터디', - example: { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - createdAt: '2024-08-01T00:00:00.000Z', - updatedAt: '2024-08-01T00:00:00.000Z', - title: '[React.js] 1주차 스터디', - content: 'React.js는 뭐 어쩌고 기반이고... Virtual Dom을 사용 어쩌고...', - author: '홍길동', - image: 'https://blog.kakaocdn.net/dn/.../img.png', - link: 'https://cs-kookmin-club.tistory.com/0', - uploadedAt: '2023-01-01T00:00:00.000Z', - category: { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - name: 'React.js', - }, - }, - }) - study!: Study; -} diff --git a/src/domain/activity/study/dto/response/get-categories.response.dto.ts b/src/domain/activity/study/dto/response/get-categories.response.dto.ts deleted file mode 100644 index 29394b2..0000000 --- a/src/domain/activity/study/dto/response/get-categories.response.dto.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Category } from '@wink/activity/schema'; - -export class GetCategoriesResponseDto { - @ApiProperty({ - description: '카테고리 목록', - type: [Category], - example: [ - { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - name: 'React.js 스터디', - }, - ], - }) - categories!: Category[]; -} diff --git a/src/domain/activity/study/dto/response/get-studies-page.response.dto.ts b/src/domain/activity/study/dto/response/get-studies-page.response.dto.ts deleted file mode 100644 index c3288c7..0000000 --- a/src/domain/activity/study/dto/response/get-studies-page.response.dto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -export class GetStudiesPageResponseDto { - @ApiProperty({ - description: '최대 페이지', - example: 1, - }) - page!: number; -} diff --git a/src/domain/activity/study/dto/response/get-studies.response.dto.ts b/src/domain/activity/study/dto/response/get-studies.response.dto.ts deleted file mode 100644 index b3033d3..0000000 --- a/src/domain/activity/study/dto/response/get-studies.response.dto.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; - -import { Study } from '@wink/activity/schema'; - -export class GetStudiesResponseDto { - @ApiProperty({ - description: '스터디 목록', - type: [Study], - example: [ - { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - createdAt: '2024-08-01T00:00:00.000Z', - updatedAt: '2024-08-01T00:00:00.000Z', - title: '[React.js] 1주차 스터디', - content: 'React.js는 뭐 어쩌고 기반이고... Virtual Dom을 사용 어쩌고...', - author: '홍길동', - image: 'https://blog.kakaocdn.net/dn/.../img.png', - link: 'https://cs-kookmin-club.tistory.com/0', - uploadedAt: '2023-01-01T00:00:00.000Z', - category: { - _id: '1a2b3c4d5e6f7a8b9c0d1e2f', - name: 'React.js', - }, - }, - ], - }) - studies!: Study[]; -} diff --git a/src/domain/activity/study/exception/already-exists-category.exception.ts b/src/domain/activity/study/exception/already-exists-category.exception.ts deleted file mode 100644 index 6397a22..0000000 --- a/src/domain/activity/study/exception/already-exists-category.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class AlreadyExistsCategoryException extends ApiException { - constructor() { - super({ - swagger: '카테고리가 이미 존재하는 경우', - message: '카테고리가 이미 존재합니다.', - code: HttpStatus.CONFLICT, - }); - } -} diff --git a/src/domain/activity/study/exception/already-exists-study.exception.ts b/src/domain/activity/study/exception/already-exists-study.exception.ts deleted file mode 100644 index c316d0c..0000000 --- a/src/domain/activity/study/exception/already-exists-study.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class AlreadyExistsStudyException extends ApiException { - constructor() { - super({ - swagger: '스터디가 이미 존재하는 경우', - message: '스터디가 이미 존재합니다.', - code: HttpStatus.CONFLICT, - }); - } -} diff --git a/src/domain/activity/study/exception/category-not-found.exception.ts b/src/domain/activity/study/exception/category-not-found.exception.ts deleted file mode 100644 index 6d05995..0000000 --- a/src/domain/activity/study/exception/category-not-found.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class CategoryNotFoundException extends ApiException { - constructor() { - super({ - swagger: '카테고리를 찾을 수 없는 경우', - message: '카테고리를 찾을 수 없습니다.', - code: HttpStatus.NOT_FOUND, - }); - } -} diff --git a/src/domain/activity/study/exception/index.ts b/src/domain/activity/study/exception/index.ts deleted file mode 100644 index 25a8e11..0000000 --- a/src/domain/activity/study/exception/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './already-exists-category.exception'; -export * from './already-exists-study.exception'; -export * from './category-not-found.exception'; -export * from './study-not-found.exception'; diff --git a/src/domain/activity/study/exception/study-not-found.exception.ts b/src/domain/activity/study/exception/study-not-found.exception.ts deleted file mode 100644 index 53c9c08..0000000 --- a/src/domain/activity/study/exception/study-not-found.exception.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HttpStatus } from '@nestjs/common'; - -import { ApiException } from '@wink/swagger'; - -export class StudyNotFoundException extends ApiException { - constructor() { - super({ - swagger: '스터디를 찾을 수 없는 경우', - message: '스터디를 찾을 수 없습니다.', - code: HttpStatus.NOT_FOUND, - }); - } -} diff --git a/src/domain/activity/study/repository/category.repository.ts b/src/domain/activity/study/repository/category.repository.ts deleted file mode 100644 index 7114ba5..0000000 --- a/src/domain/activity/study/repository/category.repository.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; - -import { Category } from '@wink/activity/schema'; - -import { Model } from 'mongoose'; - -@Injectable() -export class CategoryRepository { - constructor( - @InjectModel(Category.name) - private readonly categoryModel: Model, - ) {} - - // Create - async save(study: Partial): Promise { - return this.categoryModel.create(study); - } - - // Read - async findAll(): Promise { - return this.categoryModel.find().exec(); - } - - async findByName(name: string): Promise { - return this.categoryModel.findOne({ name }).exec(); - } - - async findById(id: string): Promise { - return this.categoryModel.findById(id).exec(); - } - - // Delete - async deleteById(id: string): Promise { - await this.categoryModel.deleteOne({ _id: id }).exec(); - } - - // Exists - async existsById(id: string): Promise { - return !!(await this.categoryModel.exists({ _id: id }).exec()); - } - - async existsByName(name: string): Promise { - return !!(await this.categoryModel.exists({ name }).exec()); - } -} diff --git a/src/domain/activity/study/repository/index.ts b/src/domain/activity/study/repository/index.ts deleted file mode 100644 index a1915db..0000000 --- a/src/domain/activity/study/repository/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './study.repository'; -export * from './category.repository'; diff --git a/src/domain/activity/study/repository/study.repository.ts b/src/domain/activity/study/repository/study.repository.ts deleted file mode 100644 index c693178..0000000 --- a/src/domain/activity/study/repository/study.repository.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; - -import { Study } from '@wink/activity/schema'; - -import { Model } from 'mongoose'; - -@Injectable() -export class StudyRepository { - constructor(@InjectModel(Study.name) private readonly studyModel: Model) {} - - // Create - async save(study: Partial): Promise { - return this.studyModel.create(study); - } - - // Read - async findAll(): Promise { - return this.studyModel.find().sort({ uploadedAt: -1 }).exec(); - } - - async findAllPage(page: number): Promise { - return this.studyModel - .find() - .sort({ uploadedAt: -1 }) - .skip((page - 1) * 10) - .limit(10) - .exec(); - } - - async findById(id: string): Promise { - return this.studyModel.findById(id).exec(); - } - - // Delete - async deleteById(id: string): Promise { - await this.studyModel.deleteOne({ _id: id }).exec(); - } - - // Exists - async existsById(id: string): Promise { - return !!(await this.studyModel.exists({ _id: id }).exec()); - } - - async existsByLink(link: string): Promise { - return !!(await this.studyModel.exists({ link }).exec()); - } -} diff --git a/src/domain/activity/study/schema/category.schema.ts b/src/domain/activity/study/schema/category.schema.ts deleted file mode 100644 index 5a7802b..0000000 --- a/src/domain/activity/study/schema/category.schema.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; - -import { Schema as MongooseSchema } from 'mongoose'; - -@Schema() -export class Category { - readonly _id!: string; - readonly createdAt!: Date; - readonly updatedAt!: Date; - - @Prop({ type: String, required: true }) - name!: string; -} - -export const CategorySchema: MongooseSchema = SchemaFactory.createForClass(Category); diff --git a/src/domain/activity/study/schema/index.ts b/src/domain/activity/study/schema/index.ts deleted file mode 100644 index 048f473..0000000 --- a/src/domain/activity/study/schema/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './study.schema'; -export * from './category.schema'; diff --git a/src/domain/activity/study/schema/study.schema.ts b/src/domain/activity/study/schema/study.schema.ts deleted file mode 100644 index a6ae92e..0000000 --- a/src/domain/activity/study/schema/study.schema.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; - -import { Activity, Category } from '@wink/activity/schema'; - -import { Schema as MongooseSchema } from 'mongoose'; - -@Schema() -export class Study extends Activity { - @Prop({ type: Date, required: true }) - uploadedAt!: Date; - - @Prop({ type: String, require: true }) - author!: string; - - @Prop({ type: String, required: true }) - title!: string; - - @Prop({ type: String, required: true }) - content!: string; - - @Prop({ type: String, required: true }) - image!: string; - - @Prop({ type: String, required: true }) - link!: string; - - @Prop({ - type: MongooseSchema.Types.ObjectId, - required: true, - ref: 'Category', - autopopulate: true, - }) - category!: Category; -} - -export const StudySchema: MongooseSchema = SchemaFactory.createForClass(Study); diff --git a/src/domain/activity/study/service/index.ts b/src/domain/activity/study/service/index.ts deleted file mode 100644 index 651f894..0000000 --- a/src/domain/activity/study/service/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './study.service'; -export * from './study.admin.service'; diff --git a/src/domain/activity/study/service/study.admin.service.ts b/src/domain/activity/study/service/study.admin.service.ts deleted file mode 100644 index 1c3e434..0000000 --- a/src/domain/activity/study/service/study.admin.service.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; - -import { Member } from '@wink/member/schema'; - -import { - CreateCategoryRequestDto, - CreateCategoryResponseDto, - CreateStudyRequestDto, - CreateStudyResponseDto, - DeleteCategoryRequestDto, - DeleteStudyRequestDto, - UpdateCategoryRequestDto, -} from '@wink/activity/dto'; -import { - AlreadyExistsCategoryException, - AlreadyExistsStudyException, - CategoryNotFoundException, - StudyNotFoundException, -} from '@wink/activity/exception'; -import { CategoryRepository, StudyRepository } from '@wink/activity/repository'; -import { Category, Study } from '@wink/activity/schema'; - -import { - CreateCategoryEvent, - CreateStudyEvent, - DeleteCategoryEvent, - DeleteStudyEvent, - UpdateCategoryEvent, -} from '@wink/event'; - -import axios from 'axios'; -import * as cheerio from 'cheerio'; - -@Injectable() -export class StudyAdminService { - constructor( - private readonly categoryRepository: CategoryRepository, - private readonly studyRepository: StudyRepository, - - private readonly eventEmitter: EventEmitter2, - ) {} - - async createCategory( - member: Member, - { category: name }: CreateCategoryRequestDto, - ): Promise { - if (await this.categoryRepository.existsByName(name)) { - throw new AlreadyExistsCategoryException(); - } - - const category: Partial = { name }; - - const savedCategory = await this.categoryRepository.save(category); - - this.eventEmitter.emit( - CreateCategoryEvent.EVENT_NAME, - new CreateCategoryEvent(member, savedCategory), - ); - - return { category: savedCategory }; - } - - async updateCategory( - member: Member, - { categoryId, category: name }: UpdateCategoryRequestDto, - ): Promise { - if (!(await this.categoryRepository.existsById(categoryId))) { - throw new CategoryNotFoundException(); - } - - const category = (await this.categoryRepository.findById(categoryId))!; - - if (name !== category.name && (await this.categoryRepository.existsByName(name))) { - throw new AlreadyExistsCategoryException(); - } - - category.name = name; - - await this.categoryRepository.save(category); - - this.eventEmitter.emit( - UpdateCategoryEvent.EVENT_NAME, - new UpdateCategoryEvent(member, category), - ); - } - - async deleteCategory(member: Member, { categoryId }: DeleteCategoryRequestDto): Promise { - if (!(await this.categoryRepository.existsById(categoryId))) { - throw new CategoryNotFoundException(); - } - - const category = (await this.categoryRepository.findById(categoryId))!; - - await this.categoryRepository.deleteById(categoryId); - - this.eventEmitter.emit( - DeleteCategoryEvent.EVENT_NAME, - new DeleteCategoryEvent(member, category), - ); - } - - async createStudy( - member: Member, - { link }: CreateStudyRequestDto, - ): Promise { - if (await this.studyRepository.existsByLink(link)) { - throw new AlreadyExistsStudyException(); - } - - const { data: html } = await axios.get(link); - const $ = cheerio.load(html); - - const title = $('meta[property="og:title"]').attr('content')!; - const content = $('meta[property="og:description"]').attr('content')!; - const author = $('meta[property="og.article.author"]').attr('content')!; - const image = $('meta[property="og:image"]').attr('content')!; - const rawUploadedAt = $('meta[property="article:published_time"]').attr('content')!; - const uploadedAt = new Date(new Date(rawUploadedAt).getTime() + 9 * 60 * 60 * 1000); - - const entryInfoMatch = html.match(/window\.T\.entryInfo\s*=\s*({[^}]*});/); - const entryInfo = entryInfoMatch ? JSON.parse(entryInfoMatch[1]) : null; - const categoryLabel = entryInfo['categoryLabel']; - const category = await this.categoryRepository.findByName(categoryLabel); - - if (!category) { - throw new CategoryNotFoundException(); - } - - const study: Partial = { - title, - content, - author, - image, - uploadedAt, - link, - category, - }; - - const createdStudy = await this.studyRepository.save(study); - - this.eventEmitter.emit(CreateStudyEvent.EVENT_NAME, new CreateStudyEvent(member, createdStudy)); - - return { - study: createdStudy, - }; - } - - async deleteStudy(member: Member, { studyId }: DeleteStudyRequestDto): Promise { - if (!(await this.studyRepository.existsById(studyId))) { - throw new StudyNotFoundException(); - } - - const study = (await this.studyRepository.findById(studyId))!; - - await this.studyRepository.deleteById(studyId); - - this.eventEmitter.emit(DeleteStudyEvent.EVENT_NAME, new DeleteStudyEvent(member, study)); - } -} diff --git a/src/domain/activity/study/service/study.service.ts b/src/domain/activity/study/service/study.service.ts deleted file mode 100644 index 917543a..0000000 --- a/src/domain/activity/study/service/study.service.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -import { - GetCategoriesResponseDto, - GetStudiesPageResponseDto, - GetStudiesRequestDto, - GetStudiesResponseDto, -} from '@wink/activity/dto'; -import { CategoryRepository, StudyRepository } from '@wink/activity/repository'; - -@Injectable() -export class StudyService { - constructor( - private readonly categoryRepository: CategoryRepository, - private readonly studyRepository: StudyRepository, - ) {} - - async getCategories(): Promise { - const categories = await this.categoryRepository.findAll(); - - return { categories }; - } - - async getStudies({ page }: GetStudiesRequestDto): Promise { - const studies = await this.studyRepository.findAllPage(page); - - return { studies }; - } - - async getStudiesPage(): Promise { - const studies = await this.studyRepository.findAll(); - const page = Math.ceil(studies.length / 10); - - return { page }; - } -} diff --git a/src/domain/auth/auth.module.ts b/src/domain/auth/auth.module.ts index 75930a7..b639ab7 100644 --- a/src/domain/auth/auth.module.ts +++ b/src/domain/auth/auth.module.ts @@ -6,7 +6,6 @@ import { AuthService } from '@wink/auth/service'; import { MemberModule } from '@wink/member/member.module'; import { RedisModule } from '@wink/redis'; - import { MailModule } from '@wink/mail'; @Module({ diff --git a/src/domain/auth/dto/request/login.request.dto.ts b/src/domain/auth/dto/request/login.request.dto.ts index d7a0fa8..0e801b7 100644 --- a/src/domain/auth/dto/request/login.request.dto.ts +++ b/src/domain/auth/dto/request/login.request.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; +import { CommonValidation, TypeValidation, StringValidation } from '@wink/validation'; export class LoginRequestDto { @ApiProperty({ diff --git a/src/domain/auth/dto/request/register.request.dto.ts b/src/domain/auth/dto/request/register.request.dto.ts index 49e486c..40f254b 100644 --- a/src/domain/auth/dto/request/register.request.dto.ts +++ b/src/domain/auth/dto/request/register.request.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; +import { CommonValidation, TypeValidation, StringValidation } from '@wink/validation'; export class RegisterRequestDto { @ApiProperty({ diff --git a/src/domain/auth/dto/request/send-code.request.dto.ts b/src/domain/auth/dto/request/send-code.request.dto.ts index 7e20b1f..240438a 100644 --- a/src/domain/auth/dto/request/send-code.request.dto.ts +++ b/src/domain/auth/dto/request/send-code.request.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; +import { CommonValidation, TypeValidation, StringValidation } from '@wink/validation'; export class SendCodeRequestDto { @ApiProperty({ diff --git a/src/domain/auth/dto/request/verify-code.request.dto.ts b/src/domain/auth/dto/request/verify-code.request.dto.ts index 805d8e7..2704fe2 100644 --- a/src/domain/auth/dto/request/verify-code.request.dto.ts +++ b/src/domain/auth/dto/request/verify-code.request.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; +import { CommonValidation, TypeValidation, StringValidation } from '@wink/validation'; export class VerifyCodeRequestDto { @ApiProperty({ diff --git a/src/domain/auth/dto/response/my-info.response.dto.ts b/src/domain/auth/dto/response/my-info.response.dto.ts index 94dcc72..a405cba 100644 --- a/src/domain/auth/dto/response/my-info.response.dto.ts +++ b/src/domain/auth/dto/response/my-info.response.dto.ts @@ -1,30 +1,79 @@ import { ApiProperty } from '@nestjs/swagger'; -import { Member } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; +import { MyInfoLinks } from '@wink/member/schema'; export class MyInfoResponseDto { @ApiProperty({ - description: '사용자', + description: '멤버 아이디', + example: '1a2b3c4d5e6f7a8b9c0d1e2f', + }) + memberId!: string; + + @ApiProperty({ + description: '계정 생성일', + example: '2024-01-01T00:00:00.000Z', + }) + createdAt!: Date; + + @ApiProperty({ + description: '계정 수정일', + example: '2024-01-01T00:00:00.000Z', + }) + updatedAt!: Date; + + @ApiProperty({ + description: '이름', + example: '홍길동', + }) + name!: string; + + @ApiProperty({ + description: '학번', + example: '20240001', + }) + studentId!: string; + + @ApiProperty({ + description: '이메일', + example: 'honggildong@kookmin.ac.kr', + }) + email!: string; + + @ApiProperty({ + description: '아이콘 URL', + example: + 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', + }) + avatar!: string | null; + + @ApiProperty({ + description: '자기소개', + example: '안녕하세요', + }) + description!: string | null; + + @ApiProperty({ + description: '링크', + type: Object, example: { - member: { - _id: '60f6b5c3f5d0e7b2c2a3c2b0', - createdAt: '2021-07-20T07:47:07.000Z', - updatedAt: '2021-07-20T07:47:07.000Z', - name: '홍길동', - studentId: '20240001', - email: 'honggildong@kookmin.ac.kr', - avatar: - 'https://kmu-wink.s3.ap-northeast-2.amazonaws.com/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.jpeg', - description: '안녕하세요', - link: { - github: 'https://github.com/hongildong', - instagram: 'https://www.instagram.com/hongildong/', - blog: 'https://hongildong.tistory.com/', - }, - role: 'MEMBER', - fee: true, - }, + github: 'https://github.com/hongildong', + instagram: 'https://www.instagram.com/hongildong/', + blog: 'https://hongildong.tistory.com/', }, }) - member!: Member; + link!: MyInfoLinks; + + @ApiProperty({ + description: '역할', + enum: Role, + example: Role.MEMBER, + }) + role!: Role | null; + + @ApiProperty({ + description: '회비 납부 여부', + example: true, + }) + fee!: boolean; } diff --git a/src/domain/auth/guard/auth.guard.ts b/src/domain/auth/guard/auth.guard.ts index 4837eff..2f131cc 100644 --- a/src/domain/auth/guard/auth.guard.ts +++ b/src/domain/auth/guard/auth.guard.ts @@ -1,13 +1,13 @@ +import { Reflector } from '@nestjs/core'; import { + applyDecorators, CanActivate, + createParamDecorator, ExecutionContext, Injectable, SetMetadata, UseGuards, - applyDecorators, - createParamDecorator, } from '@nestjs/common'; -import { Reflector } from '@nestjs/core'; import { JwtService, TokenExpiredError } from '@nestjs/jwt'; import { ApiBearerAuth } from '@nestjs/swagger'; @@ -17,9 +17,9 @@ import { UnauthorizedException, } from '@wink/auth/exception'; +import { Role } from '@wink/member/constant'; import { NotApprovedMemberException } from '@wink/member/exception'; import { MemberRepository } from '@wink/member/repository'; -import { Role } from '@wink/member/schema'; @Injectable() export class AuthGuard implements CanActivate { diff --git a/src/domain/auth/service/auth.service.ts b/src/domain/auth/service/auth.service.ts index a8f1e13..0df5648 100644 --- a/src/domain/auth/service/auth.service.ts +++ b/src/domain/auth/service/auth.service.ts @@ -1,7 +1,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { EventEmitter2 } from '@nestjs/event-emitter'; import { JwtService } from '@nestjs/jwt'; +import { EventEmitter2 } from '@nestjs/event-emitter'; import { LoginRequestDto, @@ -29,7 +29,6 @@ import { MemberRepository } from '@wink/member/repository'; import { Member, omitMember } from '@wink/member/schema'; import { RedisService } from '@wink/redis'; - import { LoginEvent, RefreshEvent, @@ -39,9 +38,9 @@ import { } from '@wink/event'; import { MailService, RegisterCompleteTemplate, VerifyCodeTemplate } from '@wink/mail'; -import * as bcrypt from 'bcrypt'; -import ms, { StringValue } from 'ms'; import { v4 as uuid } from 'uuid'; +import ms, { StringValue } from 'ms'; +import * as bcrypt from 'bcrypt'; @Injectable() export class AuthService { @@ -196,6 +195,6 @@ export class AuthService { } myInfo(member: Member): MyInfoResponseDto { - return { member: omitMember(member, ['approved']) }; + return omitMember(member, ['approved']); } } diff --git a/src/domain/member/schema/Role.ts b/src/domain/member/constant/Role.ts similarity index 100% rename from src/domain/member/schema/Role.ts rename to src/domain/member/constant/Role.ts diff --git a/src/domain/member/constant/index.ts b/src/domain/member/constant/index.ts new file mode 100644 index 0000000..940d536 --- /dev/null +++ b/src/domain/member/constant/index.ts @@ -0,0 +1 @@ +export * from './Role'; diff --git a/src/domain/member/controller/member.admin.controller.ts b/src/domain/member/controller/member.admin.controller.ts index 55c3b6f..d834885 100644 --- a/src/domain/member/controller/member.admin.controller.ts +++ b/src/domain/member/controller/member.admin.controller.ts @@ -1,7 +1,6 @@ import { Body, Controller, Get, Patch, Post } from '@nestjs/common'; import { ApiOperation, ApiProperty, ApiTags } from '@nestjs/swagger'; -import { SuperRoleException } from '@wink/auth/exception'; import { AuthAdminAccount, AuthAdminAccountException, ReqMember } from '@wink/auth/guard'; import { @@ -13,9 +12,11 @@ import { UpdateMemberRoleRequestDto, } from '@wink/member/dto'; import { NotApprovedMemberException, NotWaitingMemberException } from '@wink/member/exception'; -import { Member } from '@wink/member/schema'; import { MemberAdminService } from '@wink/member/service'; +import { SuperRoleException } from '@wink/auth/exception'; +import { Member } from '@wink/member/schema'; + import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; @Controller('/admin/member') diff --git a/src/domain/member/controller/member.controller.ts b/src/domain/member/controller/member.controller.ts index fe014b6..eea1dbe 100644 --- a/src/domain/member/controller/member.controller.ts +++ b/src/domain/member/controller/member.controller.ts @@ -16,12 +16,13 @@ import { AuthAccount, AuthAccountException, ReqMember } from '@wink/auth/guard'; import { GetMembersResponseDto, + UpdateMyAvatarRequestDto, UpdateMyAvatarResponseDto, UpdateMyInfoRequestDto, UpdateMyPasswordRequestDto, } from '@wink/member/dto'; -import { Member } from '@wink/member/schema'; import { MemberService } from '@wink/member/service'; +import { Member } from '@wink/member/schema'; import { AvatarFilter, AvatarFilterException } from '@wink/member/util/multer'; import { ApiCustomErrorResponse, ApiCustomResponse } from '@wink/swagger'; @@ -69,6 +70,7 @@ export class MemberController { @UseInterceptors(FileInterceptor('avatar', { fileFilter: AvatarFilter })) @ApiOperation({ summary: '내 프로필 사진 수정' }) @ApiConsumes('multipart/form-data') + @ApiProperty({ type: UpdateMyAvatarRequestDto }) @ApiCustomResponse(UpdateMyAvatarResponseDto) @ApiCustomErrorResponse([...AuthAccountException, ...AvatarFilterException]) async updateMyAvatar( diff --git a/src/domain/member/dto/index.ts b/src/domain/member/dto/index.ts index 0dd66b6..29d92b6 100644 --- a/src/domain/member/dto/index.ts +++ b/src/domain/member/dto/index.ts @@ -3,6 +3,7 @@ export * from './request/approve-waiting-member.request.dto'; export * from './request/reject-waiting-member.request.dto'; export * from './request/update-member-fee.request.dto'; export * from './request/update-member-role.request.dto'; +export * from './request/update-my-avatar.request.dto'; export * from './request/update-my-info.request.dto'; export * from './request/update-my-password.request.dto'; diff --git a/src/domain/member/dto/request/update-member-role.request.dto.ts b/src/domain/member/dto/request/update-member-role.request.dto.ts index b99b941..69b5be3 100644 --- a/src/domain/member/dto/request/update-member-role.request.dto.ts +++ b/src/domain/member/dto/request/update-member-role.request.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { Role } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; import { CommonValidation, StringValidation, TypeValidation } from '@wink/validation'; diff --git a/src/domain/member/dto/request/update-my-avatar.request.dto.ts b/src/domain/member/dto/request/update-my-avatar.request.dto.ts new file mode 100644 index 0000000..dfa3aa7 --- /dev/null +++ b/src/domain/member/dto/request/update-my-avatar.request.dto.ts @@ -0,0 +1,10 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class UpdateMyAvatarRequestDto { + @ApiProperty({ + description: '프로필 사진', + type: 'string', + format: 'binary', + }) + avatar!: Express.Multer.File; +} diff --git a/src/domain/member/dto/response/get-members.response.dto.ts b/src/domain/member/dto/response/get-members.response.dto.ts index 0fbbf33..31cda27 100644 --- a/src/domain/member/dto/response/get-members.response.dto.ts +++ b/src/domain/member/dto/response/get-members.response.dto.ts @@ -1,13 +1,14 @@ import { ApiProperty } from '@nestjs/swagger'; -import { MyInfoLinks, Role } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; +import { MyInfoLinks } from '@wink/member/schema'; export class EachGetMembersResponseDto { @ApiProperty({ description: '멤버 ID', example: '1a2b3c4d5e6f7a8b9c0d1e2f', }) - _id!: string; + memberId!: string; @ApiProperty({ description: '계정 생성일', diff --git a/src/domain/member/dto/response/get-waiting-members.response.dto.ts b/src/domain/member/dto/response/get-waiting-members.response.dto.ts index 25eb488..7d66456 100644 --- a/src/domain/member/dto/response/get-waiting-members.response.dto.ts +++ b/src/domain/member/dto/response/get-waiting-members.response.dto.ts @@ -5,7 +5,7 @@ export class EachGetWaitingMembersResponseDto { description: '멤버 ID', example: '1a2b3c4d5e6f7a8b9c0d1e2f', }) - _id!: string; + memberId!: string; @ApiProperty({ description: '이름', diff --git a/src/domain/member/member.module.ts b/src/domain/member/member.module.ts index 2d89c2c..6304ac7 100644 --- a/src/domain/member/member.module.ts +++ b/src/domain/member/member.module.ts @@ -2,20 +2,20 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { MemberAdminController, MemberController } from '@wink/member/controller'; -import { MemberRepository } from '@wink/member/repository'; -import { Member, MemberSchema } from '@wink/member/schema'; import { MemberAdminService, MemberService } from '@wink/member/service'; +import { Member, MemberSchema } from '@wink/member/schema'; +import { MemberRepository } from '@wink/member/repository'; import { PurgeUnusedAvatarJob } from '@wink/member/util/scheduler'; import { MongoModelFactory } from '@wink/mongo'; import { S3Module } from '@wink/s3'; - import { MailModule } from '@wink/mail'; const modelFactory = MongoModelFactory.generate(Member.name, MemberSchema); @Module({ - MongooseModule.forFeature([modelFactory]), + imports: [ + MongooseModule.forFeatureAsync([modelFactory]), S3Module.forRoot({ directory: 'avatar' }), MailModule, ], diff --git a/src/domain/member/repository/member.repository.ts b/src/domain/member/repository/member.repository.ts index b628aa3..fe26d13 100644 --- a/src/domain/member/repository/member.repository.ts +++ b/src/domain/member/repository/member.repository.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; +import { Role } from '@wink/member/constant'; import { Member } from '@wink/member/schema'; import { Model } from 'mongoose'; @@ -10,8 +11,8 @@ export class MemberRepository { constructor(@InjectModel(Member.name) private readonly memberModel: Model) {} // Create - async save(member: Partial): Promise { - return this.memberModel.create(member); + async save(Member: Partial): Promise { + return this.memberModel.create(Member); } // Read @@ -35,6 +36,43 @@ export class MemberRepository { return this.memberModel.findOne({ email }).select('+password').exec(); } + // Update + async updatePassword(id: string, password: string): Promise { + await this.memberModel.updateOne({ _id: id }, { password }).exec(); + } + + async updateDescription(id: string, description: string | null): Promise { + await this.memberModel.updateOne({ _id: id }, { description }).exec(); + } + + async updateGithub(id: string, githubUrl: string | null): Promise { + await this.memberModel.updateOne({ _id: id }, { 'link.github': githubUrl }).exec(); + } + + async updateInstagram(id: string, instagramUrl: string | null): Promise { + await this.memberModel.updateOne({ _id: id }, { 'link.instagram': instagramUrl }).exec(); + } + + async updateBlog(id: string, blog: string | null): Promise { + await this.memberModel.updateOne({ _id: id }, { 'link.blog': blog }).exec(); + } + + async updateAvatar(id: string, avatar: string | null): Promise { + await this.memberModel.updateOne({ _id: id }, { avatar }).exec(); + } + + async updateRoleById(id: string, role: Role): Promise { + await this.memberModel.updateOne({ _id: id }, { role }).exec(); + } + + async updateFeeById(id: string, fee: boolean): Promise { + await this.memberModel.updateOne({ _id: id }, { fee }).exec(); + } + + async updateApprovedById(id: string, approved: boolean): Promise { + await this.memberModel.updateOne({ _id: id }, { approved }).exec(); + } + // Delete async deleteById(id: string): Promise { await this.memberModel.deleteOne({ _id: id }).exec(); diff --git a/src/domain/member/schema/index.ts b/src/domain/member/schema/index.ts index 3cd4fee..e7b0bde 100644 --- a/src/domain/member/schema/index.ts +++ b/src/domain/member/schema/index.ts @@ -1,2 +1 @@ export * from './member.schema'; -export * from './Role'; diff --git a/src/domain/member/schema/member.schema.ts b/src/domain/member/schema/member.schema.ts index da614d3..4df8d14 100644 --- a/src/domain/member/schema/member.schema.ts +++ b/src/domain/member/schema/member.schema.ts @@ -1,6 +1,6 @@ import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; -import { Role } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; import { Schema as MongooseSchema } from 'mongoose'; @@ -60,7 +60,7 @@ export const pickMember = (member: Member, includeFields: (keyof Member)[] = const pickedDocument: Record = {}; includeFields.forEach((field) => { - pickedDocument[field] = _member[field]; + pickedDocument[field === '_id' ? 'memberId' : field] = _member[field]; }); return pickedDocument; @@ -70,11 +70,15 @@ export const omitMember = (member: Member, excludeFields: (keyof Member)[] = const _member: Member = '_doc' in member ? member._doc : member; const document = { ..._member }; + const memberId = document._id; + + excludeFields.push('_id'); excludeFields.forEach((field) => { delete document[field]; }); return { + memberId, ...document, }; }; diff --git a/src/domain/member/service/member.admin.service.ts b/src/domain/member/service/member.admin.service.ts index 9ac3d56..f785b93 100644 --- a/src/domain/member/service/member.admin.service.ts +++ b/src/domain/member/service/member.admin.service.ts @@ -3,6 +3,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter'; import { MemberNotFoundException, SuperRoleException } from '@wink/auth/exception'; +import { checkRoleHierarchy, Role } from '@wink/member/constant'; import { ApproveWaitingMemberRequestDto, EachGetMembersForAdminResponseDto, @@ -15,7 +16,7 @@ import { } from '@wink/member/dto'; import { NotApprovedMemberException, NotWaitingMemberException } from '@wink/member/exception'; import { MemberRepository } from '@wink/member/repository'; -import { Member, Role, checkRoleHierarchy, omitMember, pickMember } from '@wink/member/schema'; +import { Member, omitMember, pickMember } from '@wink/member/schema'; import { ApproveWaitingMemberEvent, @@ -56,10 +57,8 @@ export class MemberAdminService { throw new NotWaitingMemberException(); } - to.approved = true; - to.role = Role.MEMBER; - - await this.memberRepository.save(to); + await this.memberRepository.updateApprovedById(toId, true); + await this.memberRepository.updateRoleById(toId, Role.MEMBER); this.mailService.sendTemplate(to.email, new ApproveAccountTemplate(to.name)).then((_) => _); @@ -119,9 +118,7 @@ export class MemberAdminService { throw new SuperRoleException(); } - to.role = role; - - await this.memberRepository.save(to); + await this.memberRepository.updateRoleById(to._id, role); this.eventEmitter.emit(UpdateRoleEvent.EVENT_NAME, new UpdateRoleEvent(from, to, role)); } @@ -141,9 +138,7 @@ export class MemberAdminService { throw new SuperRoleException(); } - to.fee = fee; - - await this.memberRepository.save(to); + await this.memberRepository.updateFeeById(toId, fee); this.eventEmitter.emit(UpdateFeeEvent.EVENT_NAME, new UpdateFeeEvent(from, to, fee)); } diff --git a/src/domain/member/service/member.service.ts b/src/domain/member/service/member.service.ts index 0df321b..c489120 100644 --- a/src/domain/member/service/member.service.ts +++ b/src/domain/member/service/member.service.ts @@ -14,7 +14,6 @@ import { MemberRepository } from '@wink/member/repository'; import { Member, omitMember } from '@wink/member/schema'; import { S3Service } from '@wink/s3'; - import { DeleteMyAvatarEvent, UpdateMyAvatarEvent, @@ -47,12 +46,12 @@ export class MemberService { member: Member, { description, github, instagram, blog }: UpdateMyInfoRequestDto, ): Promise { - member.description = description; - member.link.github = github; - member.link.instagram = instagram; - member.link.blog = blog; + const { _id: id } = member; - await this.memberRepository.save(member); + await this.memberRepository.updateDescription(id, description); + await this.memberRepository.updateGithub(id, github); + await this.memberRepository.updateInstagram(id, instagram); + await this.memberRepository.updateBlog(id, blog); this.eventEmitter.emit( UpdateMyInfoEvent.EVENT_NAME, @@ -64,16 +63,17 @@ export class MemberService { member: Member, { password, newPassword }: UpdateMyPasswordRequestDto, ): Promise { - const fullMember = (await this.memberRepository.findByIdWithPassword(member._id))!; + const { _id: id } = member; + const fullMember = await this.memberRepository.findByIdWithPassword(id); - if (!(await bcrypt.compare(password, fullMember.password))) { + if (!(await bcrypt.compare(password, fullMember!.password))) { throw new WrongPasswordException(); } const salt = await bcrypt.genSalt(10); - fullMember.password = await bcrypt.hash(newPassword, salt); + const hash = await bcrypt.hash(newPassword, salt); - await this.memberRepository.save(fullMember); + await this.memberRepository.updatePassword(id, hash); this.eventEmitter.emit(UpdateMyPasswordEvent.EVENT_NAME, new UpdateMyPasswordEvent(member)); } @@ -82,12 +82,10 @@ export class MemberService { member: Member, file: Express.Multer.File, ): Promise { - const { avatar: original } = member; + const { _id: id, avatar: original } = member; const avatar = await this.avatarService.upload(file); - - member.avatar = avatar; - await this.memberRepository.save(member); + await this.memberRepository.updateAvatar(id, avatar); if (original) { const key = this.avatarService.extractKeyFromUrl(original); @@ -101,13 +99,13 @@ export class MemberService { } async deleteMyAvatar(member: Member): Promise { - if (member.avatar) { - const key = this.avatarService.extractKeyFromUrl(member.avatar); + const { _id: id, avatar } = member; - await this.avatarService.delete(key); + if (avatar) { + const key = this.avatarService.extractKeyFromUrl(avatar); - member.avatar = null; - await this.memberRepository.save(member); + await this.avatarService.delete(key); + await this.memberRepository.updateAvatar(id, null); this.eventEmitter.emit(DeleteMyAvatarEvent.EVENT_NAME, new DeleteMyAvatarEvent(member)); } diff --git a/src/domain/member/util/scheduler/purge-unused-avatar.job.ts b/src/domain/member/util/scheduler/purge-unused-avatar.job.ts index cc94c23..e14f8da 100644 --- a/src/domain/member/util/scheduler/purge-unused-avatar.job.ts +++ b/src/domain/member/util/scheduler/purge-unused-avatar.job.ts @@ -1,11 +1,10 @@ import { Inject, Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; import { Cron, CronExpression, Timeout } from '@nestjs/schedule'; +import { EventEmitter2 } from '@nestjs/event-emitter'; import { MemberRepository } from '@wink/member/repository'; import { S3Service } from '@wink/s3'; - import { PurgeUnusedAvatarEvent } from '@wink/event'; @Injectable() @@ -37,7 +36,7 @@ export class PurgeUnusedAvatarJob { const unusedAvatars = savedAvatars.filter((a) => !usedAvatars.includes(a)); - unusedAvatars.forEach((key) => this.avatarService.delete(key)); + unusedAvatars.forEach((key) => this.avatarService.delete(key).then((_) => _)); this.eventEmitter.emit( PurgeUnusedAvatarEvent.EVENT_NAME, diff --git a/test/auth/service.test.ts b/test/auth/service.test.ts index c1bbff8..bb41b06 100644 --- a/test/auth/service.test.ts +++ b/test/auth/service.test.ts @@ -1,3 +1,5 @@ +import { mockAuth, createNullMember, createRandomMember } from '@wink/test-mock'; + import { LoginRequestDto, RegisterRequestDto, @@ -19,8 +21,6 @@ import { Member } from '@wink/member/schema'; import { MailService } from '@wink/mail'; -import { createNullMember, createRandomMember, mockAuth } from '@wink/test-mock'; - import * as bcrypt from 'bcrypt'; describe('AuthService', () => { @@ -277,19 +277,17 @@ describe('AuthService', () => { // Then expect(result).toMatchObject({ - member: { - _id: member._id, - createdAt: member.createdAt, - updatedAt: member.updatedAt, - name: member.name, - studentId: member.studentId, - email: member.email, - avatar: member.avatar, - description: member.description, - link: member.link, - role: member.role, - fee: member.fee, - }, + memberId: member._id, + createdAt: member.createdAt, + updatedAt: member.updatedAt, + name: member.name, + studentId: member.studentId, + email: member.email, + avatar: member.avatar, + description: member.description, + link: member.link, + role: member.role, + fee: member.fee, }); }); }); diff --git a/test/auth/validation.test.ts b/test/auth/validation.test.ts index 0d15f7e..5829010 100644 --- a/test/auth/validation.test.ts +++ b/test/auth/validation.test.ts @@ -1,3 +1,5 @@ +import { Validation } from '@wink/validation'; + import { LoginRequestDto, RefreshRequestDto, @@ -6,8 +8,6 @@ import { VerifyCodeRequestDto, } from '@wink/auth/dto'; -import { Validation } from '@wink/validation'; - describe('AuthValidation', () => { let validation: Validation; diff --git a/test/member/admin-service.test.ts b/test/member/admin-service.test.ts index f4b1aad..a8b6d1a 100644 --- a/test/member/admin-service.test.ts +++ b/test/member/admin-service.test.ts @@ -1,3 +1,5 @@ +import { mockMember, createRandomMember, createRandomMembers } from '@wink/test-mock'; + import { SuperRoleException } from '@wink/auth/exception'; import { @@ -7,13 +9,12 @@ import { UpdateMemberRoleRequestDto, } from '@wink/member/dto'; import { NotApprovedMemberException, NotWaitingMemberException } from '@wink/member/exception'; -import { Member, Role } from '@wink/member/schema'; +import { Role } from '@wink/member/constant'; +import { Member } from '@wink/member/schema'; import { MemberAdminService } from '@wink/member/service'; import { MailService } from '@wink/mail'; -import { createRandomMember, createRandomMembers, mockMember } from '@wink/test-mock'; - describe('MemberAdminService', () => { let memberAdminService: MemberAdminService; let mailService: MailService; diff --git a/test/member/service.test.ts b/test/member/service.test.ts index 2399f9e..3c92f27 100644 --- a/test/member/service.test.ts +++ b/test/member/service.test.ts @@ -1,3 +1,5 @@ +import { mockMember, createRandomMember, createRandomMembers } from '@wink/test-mock'; + import { WrongPasswordException } from '@wink/auth/exception'; import { UpdateMyInfoRequestDto, UpdateMyPasswordRequestDto } from '@wink/member/dto'; @@ -6,11 +8,9 @@ import { MemberService } from '@wink/member/service'; import { S3Service } from '@wink/s3'; -import { createRandomMember, createRandomMembers, mockMember } from '@wink/test-mock'; - import * as bcrypt from 'bcrypt'; -import { Readable } from 'stream'; import { v4 as uuid } from 'uuid'; +import { Readable } from 'stream'; describe('MemberService', () => { let memberService: MemberService; diff --git a/test/member/validation.test.ts b/test/member/validation.test.ts index 75df0b0..a7b7c42 100644 --- a/test/member/validation.test.ts +++ b/test/member/validation.test.ts @@ -1,3 +1,6 @@ +import { Validation } from '@wink/validation'; + +import { Role } from '@wink/member/constant'; import { ApproveWaitingMemberRequestDto, RejectWaitingMemberRequestDto, @@ -6,9 +9,6 @@ import { UpdateMyInfoRequestDto, UpdateMyPasswordRequestDto, } from '@wink/member/dto'; -import { Role } from '@wink/member/schema'; - -import { Validation } from '@wink/validation'; describe('MemberValidation', () => { let validation: Validation; diff --git a/test/mock/module/auth.mock.ts b/test/mock/module/auth.mock.ts index 6921026..64903b5 100644 --- a/test/mock/module/auth.mock.ts +++ b/test/mock/module/auth.mock.ts @@ -1,7 +1,13 @@ -import { ConfigService } from '@nestjs/config'; -import { EventEmitterModule } from '@nestjs/event-emitter'; -import { JwtModule } from '@nestjs/jwt'; import { Test } from '@nestjs/testing'; +import { JwtModule } from '@nestjs/jwt'; +import { EventEmitterModule } from '@nestjs/event-emitter'; + +import { + mockConfigService, + mockMailService, + mockMemberRepository, + mockRedisService, +} from '@wink/test-mock'; import { AuthController } from '@wink/auth/controller'; import { AuthService } from '@wink/auth/service'; @@ -9,14 +15,9 @@ import { AuthService } from '@wink/auth/service'; import { MemberRepository } from '@wink/member/repository'; import { Member } from '@wink/member/schema'; +import { RedisService } from '@wink/redis'; import { MailService } from '@wink/mail'; - -import { - mockConfigService, - mockMailService, - mockMemberRepository, - mockRedisService, -} from '@wink/test-mock'; +import { ConfigService } from '@nestjs/config'; export const mockAuth = async () => { const memoryMemberRepository: Member[] = []; diff --git a/test/mock/module/member.mock.ts b/test/mock/module/member.mock.ts index 3c91d50..f079e31 100644 --- a/test/mock/module/member.mock.ts +++ b/test/mock/module/member.mock.ts @@ -1,6 +1,8 @@ -import { EventEmitterModule } from '@nestjs/event-emitter'; -import { JwtModule } from '@nestjs/jwt'; import { Test } from '@nestjs/testing'; +import { JwtModule } from '@nestjs/jwt'; +import { EventEmitterModule } from '@nestjs/event-emitter'; + +import { mockMailService, mockMemberRepository, mockS3Service } from '@wink/test-mock'; import { MemberAdminController, MemberController } from '@wink/member/controller'; import { MemberRepository } from '@wink/member/repository'; @@ -9,8 +11,6 @@ import { MemberAdminService, MemberService } from '@wink/member/service'; import { MailService } from '@wink/mail'; -import { mockMailService, mockMemberRepository, mockS3Service } from '@wink/test-mock'; - export const mockMember = async () => { const memoryMemberRepository: Member[] = []; diff --git a/test/mock/other/fake-members.mock.ts b/test/mock/other/fake-members.mock.ts index 4f767b2..2098596 100644 --- a/test/mock/other/fake-members.mock.ts +++ b/test/mock/other/fake-members.mock.ts @@ -1,7 +1,8 @@ -import { Member, Role } from '@wink/member/schema'; - import { v4 as uuid } from 'uuid'; +import { Role } from '@wink/member/constant'; +import { Member } from '@wink/member/schema'; + const randomDate = (start: Date, end: Date): Date => { return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); }; diff --git a/test/mock/repository/member-repository.mock.ts b/test/mock/repository/member-repository.mock.ts index 9e4f349..df69943 100644 --- a/test/mock/repository/member-repository.mock.ts +++ b/test/mock/repository/member-repository.mock.ts @@ -1,14 +1,15 @@ +import { Role } from '@wink/member/constant'; import { Member } from '@wink/member/schema'; +// noinspection t export const mockMemberRepository = (memory: Member[]) => ({ // Create save: jest.fn(async (member: Partial) => { - const index = memory.findIndex((m) => m._id === member._id); - if (index !== -1) { - memory[index] = { ...memory[index], ...member }; - } else { - memory.push(member as Member); - } + Object.assign(member, { + _id: member['_id'], + ...member, + }); + memory.push(member as Member); return member as Member; }), @@ -33,6 +34,70 @@ export const mockMemberRepository = (memory: Member[]) => ({ return memory.find((member) => member.email === email); }), + // Update + updatePassword: jest.fn(async (id: string, password: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.password = password; + } + }), + + updateDescription: jest.fn(async (id: string, description: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.description = description; + } + }), + + updateGithub: jest.fn(async (id: string, githubUrl: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.link.github = githubUrl; + } + }), + + updateInstagram: jest.fn(async (id: string, instagramUrl: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.link.instagram = instagramUrl; + } + }), + + updateBlog: jest.fn(async (id: string, blog: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.link.blog = blog; + } + }), + + updateAvatar: jest.fn(async (id: string, avatar: string) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.avatar = avatar; + } + }), + + updateRoleById: jest.fn(async (id: string, role: Role) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.role = role; + } + }), + + updateFeeById: jest.fn(async (id: string, fee: boolean) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.fee = fee; + } + }), + + updateApprovedById: jest.fn(async (id: string, approved: boolean) => { + const member = memory.find((member) => member._id === id); + if (member) { + member.approved = approved; + } + }), + // Delete deleteById: jest.fn(async (id: string) => { const index = memory.findIndex((member) => member._id === id); diff --git a/tsconfig.path.json b/tsconfig.path.json index a00128a..1e13e4d 100644 --- a/tsconfig.path.json +++ b/tsconfig.path.json @@ -4,25 +4,25 @@ "baseUrl": "./src", "paths": { // Common - "@wink/app": ["./common/app"], - "@wink/config": ["./common/config"], - "@wink/filter": ["./common/http/filter"], - "@wink/interceptor": ["./common/http/interceptor"], - "@wink/mongo": ["./common/database/mongo"], - "@wink/redis": ["./common/database/redis"], - "@wink/s3": ["./common/s3"], + "@wink/app": ["common/app"], + "@wink/config": ["common/config"], + "@wink/filter": ["common/http/filter"], + "@wink/interceptor": ["common/http/interceptor"], + "@wink/mongo": ["common/database/mongo"], + "@wink/redis": ["common/database/redis"], + "@wink/s3": ["common/s3"], // Utils - "@wink/event": ["./common/util/event"], - "@wink/logger": ["./common/util/logger"], - "@wink/mail": ["./common/util/mail"], - "@wink/swagger": ["./common/util/swagger"], - "@wink/validation": ["./common/util/validation"], + "@wink/event": ["common/util/event"], + "@wink/logger": ["common/util/logger"], + "@wink/mail": ["common/util/mail"], + "@wink/swagger": ["common/util/swagger"], + "@wink/validation": ["common/util/validation"], // Domain - "@wink/auth/*": ["./domain/auth/*"], - "@wink/member/*": ["./domain/member/*"], - "@wink/activity/*": ["./domain/activity/*"], + "@wink/auth/*": ["domain/auth/*"], + "@wink/member/*": ["domain/member/*"], + "@wink/activity/*": ["domain/activity/*"], // Test "@wink/test-mock": ["../test/mock"] diff --git a/yarn.lock b/yarn.lock index 15a0f02..2d166f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -113,476 +113,475 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-s3@^3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.651.1.tgz#d90f0560ccbf1b1a39973820d79c245d54bbbdae" - integrity sha512-xNm+ixNRcotyrHgjUGGEyara6kCKgDdW2EVjHBZa5T+tbmtyqezwH3UzbSDZ6MlNoLhJMfR7ozuwYTIOARoBfA== +"@aws-sdk/client-s3@^3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.623.0.tgz#165274181001700915af3241c57513271751d6b6" + integrity sha512-vEroSYEtbp5n289xsQnnAhKxg3R5NGkbhKXWpW1m7GGDsFihwVT9CVsDHpIW2Hvezz5ob65gB4ZAYMnJWZuUpA== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.651.1" - "@aws-sdk/client-sts" "3.651.1" - "@aws-sdk/core" "3.651.1" - "@aws-sdk/credential-provider-node" "3.651.1" - "@aws-sdk/middleware-bucket-endpoint" "3.649.0" - "@aws-sdk/middleware-expect-continue" "3.649.0" - "@aws-sdk/middleware-flexible-checksums" "3.651.1" - "@aws-sdk/middleware-host-header" "3.649.0" - "@aws-sdk/middleware-location-constraint" "3.649.0" - "@aws-sdk/middleware-logger" "3.649.0" - "@aws-sdk/middleware-recursion-detection" "3.649.0" - "@aws-sdk/middleware-sdk-s3" "3.651.1" - "@aws-sdk/middleware-ssec" "3.649.0" - "@aws-sdk/middleware-user-agent" "3.649.0" - "@aws-sdk/region-config-resolver" "3.649.0" - "@aws-sdk/signature-v4-multi-region" "3.651.1" - "@aws-sdk/types" "3.649.0" - "@aws-sdk/util-endpoints" "3.649.0" - "@aws-sdk/util-user-agent-browser" "3.649.0" - "@aws-sdk/util-user-agent-node" "3.649.0" - "@aws-sdk/xml-builder" "3.649.0" - "@smithy/config-resolver" "^3.0.6" - "@smithy/core" "^2.4.1" - "@smithy/eventstream-serde-browser" "^3.0.7" - "@smithy/eventstream-serde-config-resolver" "^3.0.4" - "@smithy/eventstream-serde-node" "^3.0.6" - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/hash-blob-browser" "^3.1.3" - "@smithy/hash-node" "^3.0.4" - "@smithy/hash-stream-node" "^3.1.3" - "@smithy/invalid-dependency" "^3.0.4" - "@smithy/md5-js" "^3.0.4" - "@smithy/middleware-content-length" "^3.0.6" - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-retry" "^3.0.16" - "@smithy/middleware-serde" "^3.0.4" - "@smithy/middleware-stack" "^3.0.4" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" + "@aws-sdk/client-sso-oidc" "3.623.0" + "@aws-sdk/client-sts" "3.623.0" + "@aws-sdk/core" "3.623.0" + "@aws-sdk/credential-provider-node" "3.623.0" + "@aws-sdk/middleware-bucket-endpoint" "3.620.0" + "@aws-sdk/middleware-expect-continue" "3.620.0" + "@aws-sdk/middleware-flexible-checksums" "3.620.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-location-constraint" "3.609.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-sdk-s3" "3.622.0" + "@aws-sdk/middleware-signing" "3.620.0" + "@aws-sdk/middleware-ssec" "3.609.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/signature-v4-multi-region" "3.622.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@aws-sdk/xml-builder" "3.609.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/eventstream-serde-browser" "^3.0.5" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.4" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-blob-browser" "^3.1.2" + "@smithy/hash-node" "^3.0.3" + "@smithy/hash-stream-node" "^3.1.2" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/md5-js" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.16" - "@smithy/util-defaults-mode-node" "^3.0.16" - "@smithy/util-endpoints" "^2.1.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-retry" "^3.0.4" - "@smithy/util-stream" "^3.1.4" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-stream" "^3.1.3" "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.3" + "@smithy/util-waiter" "^3.1.2" tslib "^2.6.2" -"@aws-sdk/client-sso-oidc@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.651.1.tgz#eade611662a4527b2f92cb2740fd0bac5815c195" - integrity sha512-PKwAyTJW8pgaPIXm708haIZWBAwNycs25yNcD7OQ3NLcmgGxvrx6bSlhPEGcvwdTYwQMJsdx8ls+khlYbLqTvQ== +"@aws-sdk/client-sso-oidc@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.623.0.tgz#cb463ffd74300b56d23ce9102c543f4529e811db" + integrity sha512-lMFEXCa6ES/FGV7hpyrppT1PiAkqQb51AbG0zVU3TIgI2IO4XX02uzMUXImRSRqRpGymRCbJCaCs9LtKvS/37Q== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.651.1" - "@aws-sdk/credential-provider-node" "3.651.1" - "@aws-sdk/middleware-host-header" "3.649.0" - "@aws-sdk/middleware-logger" "3.649.0" - "@aws-sdk/middleware-recursion-detection" "3.649.0" - "@aws-sdk/middleware-user-agent" "3.649.0" - "@aws-sdk/region-config-resolver" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@aws-sdk/util-endpoints" "3.649.0" - "@aws-sdk/util-user-agent-browser" "3.649.0" - "@aws-sdk/util-user-agent-node" "3.649.0" - "@smithy/config-resolver" "^3.0.6" - "@smithy/core" "^2.4.1" - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/hash-node" "^3.0.4" - "@smithy/invalid-dependency" "^3.0.4" - "@smithy/middleware-content-length" "^3.0.6" - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-retry" "^3.0.16" - "@smithy/middleware-serde" "^3.0.4" - "@smithy/middleware-stack" "^3.0.4" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" + "@aws-sdk/core" "3.623.0" + "@aws-sdk/credential-provider-node" "3.623.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.16" - "@smithy/util-defaults-mode-node" "^3.0.16" - "@smithy/util-endpoints" "^2.1.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-retry" "^3.0.4" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.651.1.tgz#8477ff1126a2816ae84ad27350df7b389597be4b" - integrity sha512-Fm8PoMgiBKmmKrY6QQUGj/WW6eIiQqC1I0AiVXfO+Sqkmxcg3qex+CZBAYrTuIDnvnc/89f9N4mdL8V9DRn03Q== +"@aws-sdk/client-sso@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.623.0.tgz#28b0ed680abd43c66f1376c7a907657b6ef8a8d5" + integrity sha512-oEACriysQMnHIVcNp7TD6D1nzgiHfYK0tmMBMbUxgoFuCBkW9g9QYvspHN+S9KgoePfMEXHuPUe9mtG9AH9XeA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.651.1" - "@aws-sdk/middleware-host-header" "3.649.0" - "@aws-sdk/middleware-logger" "3.649.0" - "@aws-sdk/middleware-recursion-detection" "3.649.0" - "@aws-sdk/middleware-user-agent" "3.649.0" - "@aws-sdk/region-config-resolver" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@aws-sdk/util-endpoints" "3.649.0" - "@aws-sdk/util-user-agent-browser" "3.649.0" - "@aws-sdk/util-user-agent-node" "3.649.0" - "@smithy/config-resolver" "^3.0.6" - "@smithy/core" "^2.4.1" - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/hash-node" "^3.0.4" - "@smithy/invalid-dependency" "^3.0.4" - "@smithy/middleware-content-length" "^3.0.6" - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-retry" "^3.0.16" - "@smithy/middleware-serde" "^3.0.4" - "@smithy/middleware-stack" "^3.0.4" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" + "@aws-sdk/core" "3.623.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.16" - "@smithy/util-defaults-mode-node" "^3.0.16" - "@smithy/util-endpoints" "^2.1.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-retry" "^3.0.4" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sts@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.651.1.tgz#c581e43a222f395004a111d566609b366ea4db43" - integrity sha512-4X2RqLqeDuVLk+Omt4X+h+Fa978Wn+zek/AM4HSPi4C5XzRBEFLRRtOQUvkETvIjbEwTYQhm0LdgzcBH4bUqIg== +"@aws-sdk/client-sts@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.623.0.tgz#184f80d711771db33bc5904e94e557c10d2efb28" + integrity sha512-iJNdx76SOw0YjHAUv8aj3HXzSu3TKI7qSGuR+OGATwA/kpJZDd+4+WYBdGtr8YK+hPrGGqhfecuCkEg805O5iA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.651.1" - "@aws-sdk/core" "3.651.1" - "@aws-sdk/credential-provider-node" "3.651.1" - "@aws-sdk/middleware-host-header" "3.649.0" - "@aws-sdk/middleware-logger" "3.649.0" - "@aws-sdk/middleware-recursion-detection" "3.649.0" - "@aws-sdk/middleware-user-agent" "3.649.0" - "@aws-sdk/region-config-resolver" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@aws-sdk/util-endpoints" "3.649.0" - "@aws-sdk/util-user-agent-browser" "3.649.0" - "@aws-sdk/util-user-agent-node" "3.649.0" - "@smithy/config-resolver" "^3.0.6" - "@smithy/core" "^2.4.1" - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/hash-node" "^3.0.4" - "@smithy/invalid-dependency" "^3.0.4" - "@smithy/middleware-content-length" "^3.0.6" - "@smithy/middleware-endpoint" "^3.1.1" - "@smithy/middleware-retry" "^3.0.16" - "@smithy/middleware-serde" "^3.0.4" - "@smithy/middleware-stack" "^3.0.4" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/url-parser" "^3.0.4" + "@aws-sdk/client-sso-oidc" "3.623.0" + "@aws-sdk/core" "3.623.0" + "@aws-sdk/credential-provider-node" "3.623.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" "@smithy/util-base64" "^3.0.0" "@smithy/util-body-length-browser" "^3.0.0" "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.16" - "@smithy/util-defaults-mode-node" "^3.0.16" - "@smithy/util-endpoints" "^2.1.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-retry" "^3.0.4" + "@smithy/util-defaults-mode-browser" "^3.0.14" + "@smithy/util-defaults-mode-node" "^3.0.14" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/core@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.651.1.tgz#75208b46b4b450a58ae48812fef9279a038246ef" - integrity sha512-eqOq3W39K+5QTP5GAXtmP2s9B7hhM2pVz8OPe5tqob8o1xQgkwdgHerf3FoshO9bs0LDxassU/fUSz1wlwqfqg== - dependencies: - "@smithy/core" "^2.4.1" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/property-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.1" - "@smithy/signature-v4" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/util-middleware" "^3.0.4" +"@aws-sdk/core@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.623.0.tgz#f02baaeb10f9ef639d9f7b3e86f02a8cc1b4a8ce" + integrity sha512-8Toq3X6trX/67obSdh4K0MFQY4f132bEbr1i0YPDWk/O3KdBt12mLC/sW3aVRnlIs110XMuX9yrWWqJ8fDW10g== + dependencies: + "@smithy/core" "^2.3.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.649.0.tgz#8832e8a3b396c54c3663c2730e41746969fb7e49" - integrity sha512-tViwzM1dauksA3fdRjsg0T8mcHklDa8EfveyiQKK6pUJopkqV6FQx+X5QNda0t/LrdEVlFZvwHNdXqOEfc83TA== +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.649.0.tgz#5c7f8556ea79f23435b0b637a96acf7367df9469" - integrity sha512-ODAJ+AJJq6ozbns6ejGbicpsQ0dyMOpnGlg0J9J0jITQ05DKQZ581hdB8APDOZ9N8FstShP6dLZflSj8jb5fNA== - dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/fetch-http-handler" "^3.2.5" - "@smithy/node-http-handler" "^3.2.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" - "@smithy/util-stream" "^3.1.4" +"@aws-sdk/credential-provider-http@3.622.0": + version "3.622.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz#db481fdef859849d07dd5870894f45df2debab3d" + integrity sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.651.1.tgz#09ee9abfd06c43ead021a1c051ef980292a796cc" - integrity sha512-yOzPC3GbwLZ8IYzke4fy70ievmunnBUni/MOXFE8c9kAIV+/RMC7IWx14nAAZm0gAcY+UtCXvBVZprFqmctfzA== - dependencies: - "@aws-sdk/credential-provider-env" "3.649.0" - "@aws-sdk/credential-provider-http" "3.649.0" - "@aws-sdk/credential-provider-process" "3.649.0" - "@aws-sdk/credential-provider-sso" "3.651.1" - "@aws-sdk/credential-provider-web-identity" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@smithy/credential-provider-imds" "^3.2.1" - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" +"@aws-sdk/credential-provider-ini@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.623.0.tgz#b8caaa4f6acee1f8d84c0a032f6b337e43071fd7" + integrity sha512-kvXA1SwGneqGzFwRZNpESitnmaENHGFFuuTvgGwtMe7mzXWuA/LkXdbiHmdyAzOo0iByKTCD8uetuwh3CXy4Pw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.623.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.651.1.tgz#bb45097e9f46d7a1251189611547e0a67ec600b6" - integrity sha512-QKA74Qs83FTUz3jS39kBuNbLAnm6cgDqomm7XS/BkYgtUq+1lI9WL97astNIuoYvumGIS58kuIa+I3ycOA4wgw== - dependencies: - "@aws-sdk/credential-provider-env" "3.649.0" - "@aws-sdk/credential-provider-http" "3.649.0" - "@aws-sdk/credential-provider-ini" "3.651.1" - "@aws-sdk/credential-provider-process" "3.649.0" - "@aws-sdk/credential-provider-sso" "3.651.1" - "@aws-sdk/credential-provider-web-identity" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@smithy/credential-provider-imds" "^3.2.1" - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" +"@aws-sdk/credential-provider-node@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.623.0.tgz#f21d521d30df615c545080e37671f79b6699a5b7" + integrity sha512-qDwCOkhbu5PfaQHyuQ+h57HEx3+eFhKdtIw7aISziWkGdFrMe07yIBd7TJqGe4nxXnRF1pfkg05xeOlMId997g== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.622.0" + "@aws-sdk/credential-provider-ini" "3.623.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.623.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.649.0.tgz#9924873a68cfec037c83f7bebf113ad86098bc79" - integrity sha512-6VYPQpEVpU+6DDS/gLoI40ppuNM5RPIEprK30qZZxnhTr5wyrGOeJ7J7wbbwPOZ5dKwta290BiJDU2ipV8Y9BQ== +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.651.1.tgz#3bce4f57a7f34f1d0e75808420233f40e25f28b7" - integrity sha512-7jeU+Jbn65aDaNjkjWDQcXwjNTzpYNKovkSSRmfVpP5WYiKerVS5mrfg3RiBeiArou5igCUtYcOKlRJiGRO47g== - dependencies: - "@aws-sdk/client-sso" "3.651.1" - "@aws-sdk/token-providers" "3.649.0" - "@aws-sdk/types" "3.649.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" +"@aws-sdk/credential-provider-sso@3.623.0": + version "3.623.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.623.0.tgz#c70757aabc5a6c80bb893c1e5b08401714052928" + integrity sha512-70LZhUb3l7cttEsg4A0S4Jq3qrCT/v5Jfyl8F7w1YZJt5zr3oPPcvDJxo/UYckFz4G4/5BhGa99jK8wMlNE9QA== + dependencies: + "@aws-sdk/client-sso" "3.623.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz#9b111964076ba238640c0a6338e5f6740d2d4510" - integrity sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ== +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.649.0.tgz#6fe42dad034bcafcb4ce4a82e53fd74c41ef43d5" - integrity sha512-ZdDICtUU4YZkrVllTUOH1Fj/F3WShLhkfNKJE3HJ/yj6pS8JS9P2lWzHiHkHiidjrHSxc6NuBo6vuZ+182XLbw== +"@aws-sdk/middleware-bucket-endpoint@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz#c5dc0e98b6209a91479cad6c2c74fbc5a3429fab" + integrity sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg== dependencies: - "@aws-sdk/types" "3.649.0" + "@aws-sdk/types" "3.609.0" "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" "@smithy/util-config-provider" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.649.0.tgz#c0c472e025c49b75ac9d2621d0a0b299b885cfef" - integrity sha512-pW2id/mWNd+L0/hZKp5yL3J+8rTwsamu9E69Hc5pM3qTF4K4DTZZ+A0sQbY6duIvZvc8IbQHbSMulBOLyWNP3A== +"@aws-sdk/middleware-expect-continue@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz#6a362c0f0696dc6749108a33de9998e0fa6b50ec" + integrity sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.651.1.tgz#e0b1ec9a7792ed212824cfa33803a61ba93739da" - integrity sha512-cFlXSzhdRKU1vOFTIYC3HzkN7Dwwcf07rKU1sB/PrDy4ztLhGgAwvcRwj2AqErZB62C5AdN4l7peB1Iw/oSxRQ== +"@aws-sdk/middleware-flexible-checksums@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz#42cd48cdc0ad9639545be000bf537969210ce8c5" + integrity sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" - "@aws-sdk/types" "3.649.0" + "@aws-sdk/types" "3.609.0" "@smithy/is-array-buffer" "^3.0.0" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" - "@smithy/util-middleware" "^3.0.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.649.0.tgz#ab7929cbf19ef9aeda0a16982a4753d0c5201822" - integrity sha512-PjAe2FocbicHVgNNwdSZ05upxIO7AgTPFtQLpnIAmoyzMcgv/zNB5fBn3uAnQSAeEPPCD+4SYVEUD1hw1ZBvEg== +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.649.0.tgz#66eadced47919177d674443942a829d89350cdda" - integrity sha512-O9AXhaFUQx34UTnp/cKCcaWW/IVk4mntlWfFjsIxvRatamKaY33b5fOiakGG+J1t0QFK0niDBSvOYUR1fdlHzw== +"@aws-sdk/middleware-location-constraint@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz#7ed82d71e5ddcd50683ef2bbde10d1cc2492057e" + integrity sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.649.0.tgz#6de0f7015b1039e23c0f008516a8492a334ac33e" - integrity sha512-qdqRx6q7lYC6KL/NT9x3ShTL0TBuxdkCczGzHzY3AnOoYUjnCDH7Vlq867O6MAvb4EnGNECFzIgtkZkQ4FhY5w== +"@aws-sdk/middleware-logger@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" + integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.649.0.tgz#1b4ed4d96aadaa18ee7900c5f8c8a7f91a49077e" - integrity sha512-IPnO4wlmaLRf6IYmJW2i8gJ2+UPXX0hDRv1it7Qf8DpBW+lGyF2rnoN7NrFX0WIxdGOlJF1RcOr/HjXb2QeXfQ== +"@aws-sdk/middleware-recursion-detection@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.651.1.tgz#ad4b0a862f0ed530b8757a8e0e4227d4863eea78" - integrity sha512-4BameU35aBSzrm3L/Iphc6vFLRhz6sBwgQf09mqPA2ZlX/YFqVe8HbS8wM4DG02W8A2MRTnHXRIfFoOrErp2sw== +"@aws-sdk/middleware-sdk-s3@3.622.0": + version "3.622.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.622.0.tgz#4c056cc3b5d9e332a13328dd22f0f8576f8627eb" + integrity sha512-tX9wZ2ALx5Ez4bkY+SvSj6DpNZ6TmY4zlsVsdgV95LZFLjNwqnZkKkS+uKnsIyLBiBp6g92JVQwnUEIp7ov2Zw== dependencies: - "@aws-sdk/core" "3.651.1" - "@aws-sdk/types" "3.649.0" + "@aws-sdk/types" "3.609.0" "@aws-sdk/util-arn-parser" "3.568.0" - "@smithy/core" "^2.4.1" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/protocol-http" "^4.1.1" - "@smithy/signature-v4" "^4.1.1" - "@smithy/smithy-client" "^3.3.0" - "@smithy/types" "^3.4.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.4" - "@smithy/util-stream" "^3.1.4" + "@smithy/util-stream" "^3.1.3" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.649.0.tgz#2a946fea6d85164409d40b0279d89c91e2520758" - integrity sha512-r/WBIpX+Kcx+AV5vJ+LbdDOuibk7spBqcFK2LytQjOZKPksZNRAM99khbFe9vr9S1+uDmCLVjAVkIfQ5seJrOw== +"@aws-sdk/middleware-signing@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.620.0.tgz#8aface959d610732b0a5ede6f2c48119b33c4f3f" + integrity sha512-gxI7rubiaanUXaLfJ4NybERa9MGPNg2Ycl/OqANsozrBnR3Pw8vqy3EuVImQOyn2pJ2IFvl8ZPoSMHf4pX56FQ== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.649.0.tgz#16be52850fd754797aeb0633232b41fd1504dd89" - integrity sha512-q6sO10dnCXoxe9thobMJxekhJumzd1j6dxcE1+qJdYKHJr6yYgWbogJqrLCpWd30w0lEvnuAHK8lN2kWLdJxJw== +"@aws-sdk/middleware-ssec@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz#b87a8bc6133f3f6bdc6801183d0f9dad3f93cf9f" + integrity sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg== dependencies: - "@aws-sdk/types" "3.649.0" - "@aws-sdk/util-endpoints" "3.649.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.649.0.tgz#bb45a3c4c53f80ad0c66d6f6dc62223eb8af5656" - integrity sha512-xURBvdQXvRvca5Du8IlC5FyCj3pkw8Z75+373J3Wb+vyg8GjD14HfKk1Je1HCCQDyIE9VB/scYDcm9ri0ppePw== +"@aws-sdk/middleware-user-agent@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" + integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/types" "^3.4.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.4" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.651.1": - version "3.651.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.651.1.tgz#37f57afd9998f563f42a634b6b115612ce5ef5b6" - integrity sha512-aLPCMq4c/A9DmdZLhufWOgfHN2Vgft65dB2tfbATjs6kZjusSaDFxWzjmWX3y8i2ZQ+vU0nAkkWIHFJdf+47fA== +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.651.1" - "@aws-sdk/types" "3.649.0" - "@smithy/protocol-http" "^4.1.1" - "@smithy/signature-v4" "^4.1.1" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@aws-sdk/token-providers@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.649.0.tgz#19a9bb26c191e4fe761f73a2f818cda2554a7767" - integrity sha512-ZBqr+JuXI9RiN+4DSZykMx5gxpL8Dr3exIfFhxMiwAP3DQojwl0ub8ONjMuAjq9OvmX6n+jHZL6fBnNgnNFC8w== +"@aws-sdk/signature-v4-multi-region@3.622.0": + version "3.622.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.622.0.tgz#f8feebdc8e4716eb079df805e5930e275343878f" + integrity sha512-K7ddofVNzwTFRjmLZLfs/v+hiE9m5LguajHk8WULxXQgkcDI3nPgOfmMMGuslYohaQhRwW+ic+dzYlateLUudQ== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/property-provider" "^3.1.4" - "@smithy/shared-ini-file-loader" "^3.1.5" - "@smithy/types" "^3.4.0" + "@aws-sdk/middleware-sdk-s3" "3.622.0" + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/types@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.649.0.tgz#a6828e6338dc755e0c30b5f77321e63425a88aed" - integrity sha512-PuPw8RysbhJNlaD2d/PzOTf8sbf4Dsn2b7hwyGh7YVG3S75yTpxSAZxrnhKsz9fStgqFmnw/jUfV/G+uQAeTVw== +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== dependencies: - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/types@^3.222.0": +"@aws-sdk/types@3.609.0", "@aws-sdk/types@^3.222.0": version "3.609.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== @@ -597,14 +596,14 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.649.0.tgz#0f359a87ddbe8a4dbce11a8f7f9e295a3b9e6612" - integrity sha512-bZI1Wc3R/KibdDVWFxX/N4AoJFG4VJ92Dp4WYmOrVD6VPkb8jPz7ZeiYc7YwPl8NoDjYyPneBV0lEoK/V8OKAA== +"@aws-sdk/util-endpoints@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" + integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/types" "^3.4.0" - "@smithy/util-endpoints" "^2.1.0" + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": @@ -614,35 +613,35 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz#fa533fe882757f82b7b9f2927dda8111f3601b33" - integrity sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg== +"@aws-sdk/util-user-agent-browser@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" + integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz#715e490b190fe7fb7df0d83be7e84a31be99cb11" - integrity sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA== +"@aws-sdk/util-user-agent-node@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== dependencies: - "@aws-sdk/types" "3.649.0" - "@smithy/node-config-provider" "^3.1.5" - "@smithy/types" "^3.4.0" + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.649.0": - version "3.649.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.649.0.tgz#b61ecce737444a3b2f2102f00544db1ef7a90e2e" - integrity sha512-XVESKkK7m5LdCVzZ3NvAja40BEyCrfPqtaiFAAhJIvW2U1Edyugf2o3XikuQY62crGT6BZagxJFgOiLKvuTiTg== +"@aws-sdk/xml-builder@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz#eeb3d5cde000a23cfeeefe0354b6193440dc7d87" + integrity sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA== dependencies: - "@smithy/types" "^3.4.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== @@ -676,25 +675,6 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.23.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" - integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== - dependencies: - "@babel/types" "^7.25.6" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" @@ -716,28 +696,6 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.22.20": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.23.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" @@ -769,19 +727,12 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.24.7": +"@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== @@ -816,13 +767,6 @@ dependencies: "@babel/types" "^7.25.2" -"@babel/parser@^7.20.5", "@babel/parser@^7.23.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" - integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== - dependencies: - "@babel/types" "^7.25.6" - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -921,7 +865,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": +"@babel/template@^7.25.0", "@babel/template@^7.3.3": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== @@ -930,22 +874,6 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse@7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": version "7.25.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" @@ -959,14 +887,6 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" @@ -976,15 +896,6 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@babel/types@^7.17.0", "@babel/types@^7.23.0", "@babel/types@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" - integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== - dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1000,87 +911,87 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== -"@commitlint/cli@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.5.0.tgz#a6e2f7f8397ddf9abd5ee5870e30a1bf51b7be2b" - integrity sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== - dependencies: - "@commitlint/format" "^19.5.0" - "@commitlint/lint" "^19.5.0" - "@commitlint/load" "^19.5.0" - "@commitlint/read" "^19.5.0" - "@commitlint/types" "^19.5.0" - tinyexec "^0.3.0" +"@commitlint/cli@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39" + integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g== + dependencies: + "@commitlint/format" "^19.3.0" + "@commitlint/lint" "^19.2.2" + "@commitlint/load" "^19.2.0" + "@commitlint/read" "^19.2.1" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" yargs "^17.0.0" -"@commitlint/config-conventional@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz#f838cdaed0e0e223cdc2e865f055d474a49fe18c" - integrity sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== +"@commitlint/config-conventional@^19.2.2": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz#1f4e6975d428985deacf2b3ff6547e02c9302054" + integrity sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" conventional-changelog-conventionalcommits "^7.0.2" -"@commitlint/config-validator@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.5.0.tgz#f0a4eda2109fc716ef01bb8831af9b02e3a1e568" - integrity sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw== +"@commitlint/config-validator@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz#052b181a30da6b4fc16dc5230f4589ac95e0bc81" + integrity sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" ajv "^8.11.0" -"@commitlint/ensure@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.5.0.tgz#b087374a6a0a0140e5925a82901d234885d9f6dd" - integrity sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg== +"@commitlint/ensure@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.0.3.tgz#d172b1b72ca88cbd317ea1ee79f3a03dbaccc76e" + integrity sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" lodash.startcase "^4.4.0" lodash.upperfirst "^4.3.1" -"@commitlint/execute-rule@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz#c13da8c03ea0379f30856111e27d57518e25b8a2" - integrity sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg== +"@commitlint/execute-rule@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz#928fb239ae8deec82a6e3b05ec9cfe20afa83856" + integrity sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw== -"@commitlint/format@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.5.0.tgz#d879db2d97d70ae622397839fb8603d56e85a250" - integrity sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A== +"@commitlint/format@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.3.0.tgz#48dd9e6930d41eb0ca19f36159ee940c5b25d857" + integrity sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" chalk "^5.3.0" -"@commitlint/is-ignored@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz#f8b7f365887acc1e3bdb31b17117bb435585dddf" - integrity sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== +"@commitlint/is-ignored@^19.2.2": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz#503ddcf908ac6b2bc4586a49cb53893a1856f5b2" + integrity sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" semver "^7.6.0" -"@commitlint/lint@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.5.0.tgz#f4e162e7857a1c0694b20b92527704897558ff70" - integrity sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== - dependencies: - "@commitlint/is-ignored" "^19.5.0" - "@commitlint/parse" "^19.5.0" - "@commitlint/rules" "^19.5.0" - "@commitlint/types" "^19.5.0" - -"@commitlint/load@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.5.0.tgz#67f90a294894d1f99b930b6152bed2df44a81794" - integrity sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA== - dependencies: - "@commitlint/config-validator" "^19.5.0" - "@commitlint/execute-rule" "^19.5.0" - "@commitlint/resolve-extends" "^19.5.0" - "@commitlint/types" "^19.5.0" +"@commitlint/lint@^19.2.2": + version "19.2.2" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.2.2.tgz#57f69e24bd832a7dcce8ebf82d11e3bf03ccc2a9" + integrity sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA== + dependencies: + "@commitlint/is-ignored" "^19.2.2" + "@commitlint/parse" "^19.0.3" + "@commitlint/rules" "^19.0.3" + "@commitlint/types" "^19.0.3" + +"@commitlint/load@^19.2.0": + version "19.2.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295" + integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/execute-rule" "^19.0.0" + "@commitlint/resolve-extends" "^19.1.0" + "@commitlint/types" "^19.0.3" chalk "^5.3.0" cosmiconfig "^9.0.0" cosmiconfig-typescript-loader "^5.0.0" @@ -1088,69 +999,70 @@ lodash.merge "^4.6.2" lodash.uniq "^4.5.0" -"@commitlint/message@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.5.0.tgz#c062d9a1d2b3302c3a8cac25d6d1125ea9c019b2" - integrity sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ== +"@commitlint/message@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.0.0.tgz#f789dd1b7a1f9c784578e0111f46cc3fecf5a531" + integrity sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw== -"@commitlint/parse@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.5.0.tgz#b450dad9b5a95ac5ba472d6d0fdab822dce946fc" - integrity sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw== +"@commitlint/parse@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.0.3.tgz#a2d09876d458e17ad0e1695b04f41af8b50a41c2" + integrity sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA== dependencies: - "@commitlint/types" "^19.5.0" + "@commitlint/types" "^19.0.3" conventional-changelog-angular "^7.0.0" conventional-commits-parser "^5.0.0" -"@commitlint/read@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.5.0.tgz#601f9f1afe69852b0f28aa81cd455b40979fad6b" - integrity sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ== +"@commitlint/read@^19.2.1": + version "19.2.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f" + integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw== dependencies: - "@commitlint/top-level" "^19.5.0" - "@commitlint/types" "^19.5.0" + "@commitlint/top-level" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" git-raw-commits "^4.0.0" minimist "^1.2.8" - tinyexec "^0.3.0" -"@commitlint/resolve-extends@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz#f3ec33e12d10df90cae0bfad8e593431fb61b18e" - integrity sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA== +"@commitlint/resolve-extends@^19.1.0": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz#fa5b8f921e9c8d76f53624c35bf25b9676bd73fa" + integrity sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg== dependencies: - "@commitlint/config-validator" "^19.5.0" - "@commitlint/types" "^19.5.0" + "@commitlint/config-validator" "^19.0.3" + "@commitlint/types" "^19.0.3" global-directory "^4.0.1" import-meta-resolve "^4.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" -"@commitlint/rules@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.5.0.tgz#2a72ab506d49d7f33eda56f0ae072a3479429e74" - integrity sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== +"@commitlint/rules@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.0.3.tgz#de647a9055847cae4f3ae32b4798096b604584f3" + integrity sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw== dependencies: - "@commitlint/ensure" "^19.5.0" - "@commitlint/message" "^19.5.0" - "@commitlint/to-lines" "^19.5.0" - "@commitlint/types" "^19.5.0" + "@commitlint/ensure" "^19.0.3" + "@commitlint/message" "^19.0.0" + "@commitlint/to-lines" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" -"@commitlint/to-lines@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.5.0.tgz#e4b7f34f09064568c96a74de4f1fc9f466c4d472" - integrity sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ== +"@commitlint/to-lines@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.0.0.tgz#aa6618eb371bafbc0cd3b48f0db565c4a40462c6" + integrity sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw== -"@commitlint/top-level@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.5.0.tgz#0017ffe39b5ba3611a1debd62efe28803601a14f" - integrity sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng== +"@commitlint/top-level@^19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.0.0.tgz#9c44d7cec533bb9598bfae9658737e2d6a903605" + integrity sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ== dependencies: find-up "^7.0.0" -"@commitlint/types@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.5.0.tgz#c5084d1231d4dd50e40bdb656ee7601f691400b3" - integrity sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg== +"@commitlint/types@^19.0.3": + version "19.0.3" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.0.3.tgz#feff4ecac2b5c359f2a57f9ab094b2ac80ef0266" + integrity sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA== dependencies: "@types/conventional-commits-parser" "^5.0.0" chalk "^5.3.0" @@ -1183,10 +1095,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== -"@eslint/config-array@^0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" - integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== +"@eslint/config-array@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910" + integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA== dependencies: "@eslint/object-schema" "^2.1.4" debug "^4.3.1" @@ -1207,23 +1119,16 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.10.0", "@eslint/js@^9.10.0": - version "9.10.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.10.0.tgz#eaa3cb0baec497970bb29e43a153d0d5650143c6" - integrity sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g== +"@eslint/js@9.8.0", "@eslint/js@^9.8.0": + version "9.8.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.8.0.tgz#ae9bc14bb839713c5056f5018bcefa955556d3a4" + integrity sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA== "@eslint/object-schema@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== -"@eslint/plugin-kit@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz#809b95a0227ee79c3195adfb562eb94352e77974" - integrity sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ== - dependencies: - levn "^0.4.1" - "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" @@ -1580,10 +1485,10 @@ dependencies: sparse-bitfield "^3.0.3" -"@nestjs/cli@^10.4.5": - version "10.4.5" - resolved "https://registry.yarnpkg.com/@nestjs/cli/-/cli-10.4.5.tgz#d6563b87e8ca1d0f256c19a7847dbcc96c76a88e" - integrity sha512-FP7Rh13u8aJbHe+zZ7hM0CC4785g9Pw4lz4r2TTgRtf0zTxSWMkJaPEwyjX8SK9oWK2GsYxl+fKpwVZNbmnj9A== +"@nestjs/cli@^10.4.2": + version "10.4.2" + resolved "https://registry.yarnpkg.com/@nestjs/cli/-/cli-10.4.2.tgz#b71c9aacbdd92cebd81add5c4a4bf60b5a184c98" + integrity sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A== dependencies: "@angular-devkit/core" "17.3.8" "@angular-devkit/schematics" "17.3.8" @@ -1602,13 +1507,13 @@ tsconfig-paths "4.2.0" tsconfig-paths-webpack-plugin "4.1.0" typescript "5.3.3" - webpack "5.94.0" + webpack "5.92.1" webpack-node-externals "3.0.0" -"@nestjs/common@^10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.1.tgz#6f8aab84eebe7a4574134dcd9bf7f0129df393f6" - integrity sha512-4CkrDx0s4XuWqFjX8WvOFV7Y6RGJd0P2OBblkhZS7nwoctoSuW5pyEa8SWak6YHNGrHRpFb6ymm5Ai4LncwRVA== +"@nestjs/common@^10.3.10": + version "10.3.10" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.3.10.tgz#d8825d55a50a04e33080c9188e6a5b03235d19f2" + integrity sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg== dependencies: uid "2.0.2" iterare "1.2.1" @@ -1623,10 +1528,10 @@ dotenv-expand "10.0.0" lodash "4.17.21" -"@nestjs/core@^10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.4.1.tgz#55dd1be59dae380cde8a19288926fcf8423dd4cf" - integrity sha512-9I1WdfOBCCHdUm+ClBJupOuZQS6UxzIWHIq6Vp1brAA5ZKl/Wq6BVwSsbnUJGBy3J3PM2XHmR0EQ4fwX3nR7lA== +"@nestjs/core@^10.3.10": + version "10.3.10" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-10.3.10.tgz#508090c3ca36488a8e24a9e5939c2f37426e48f4" + integrity sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ== dependencies: uid "2.0.2" "@nuxtjs/opencollective" "0.3.2" @@ -1660,10 +1565,10 @@ resolved "https://registry.yarnpkg.com/@nestjs/mongoose/-/mongoose-10.0.10.tgz#1206df06b6f744f62b0bd7502074c13f17177739" integrity sha512-3Ff60ock8nwlAJC823TG91Qy+Qc6av+ddIb6n6wlFsTK0akDF/aTcagX8cF8uI8mWxCWjEwEsgv99vo6p0yJ+w== -"@nestjs/platform-express@^10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.4.1.tgz#65d3b5a08c79b938a50464887408f78ce5d5932c" - integrity sha512-ccfqIDAq/bg1ShLI5KGtaLaYGykuAdvCi57ohewH7eKJSIpWY1DQjbgKlFfXokALYUq1YOMGqjeZ244OWHfDQg== +"@nestjs/platform-express@^10.3.10": + version "10.3.10" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-10.3.10.tgz#45fa006605913d5aaa31bf99073136ad639939b4" + integrity sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA== dependencies: body-parser "1.20.2" cors "2.8.5" @@ -1679,7 +1584,7 @@ cron "3.1.7" uuid "10.0.0" -"@nestjs/schematics@^10.0.1": +"@nestjs/schematics@^10.0.1", "@nestjs/schematics@^10.1.2": version "10.1.3" resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-10.1.3.tgz#8bd80ab9fab6a02586524bd2c545b0ea787cf62c" integrity sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg== @@ -1690,17 +1595,6 @@ jsonc-parser "3.3.1" pluralize "8.0.0" -"@nestjs/schematics@^10.1.4": - version "10.1.4" - resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-10.1.4.tgz#e445b856eefce9bd338c5fc1cf2c95f0985849cf" - integrity sha512-QpY8ez9cTvXXPr3/KBrtSgXQHMSV6BkOUYy2c2TTe6cBqriEdGnCYqGl8cnfrQl3632q3lveQPaZ/c127dHsEw== - dependencies: - "@angular-devkit/core" "17.3.8" - "@angular-devkit/schematics" "17.3.8" - comment-json "4.2.3" - jsonc-parser "3.3.1" - pluralize "8.0.0" - "@nestjs/swagger@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-7.4.0.tgz#e61dbefdfc1d4011327a256896953c74e511c850" @@ -1713,10 +1607,10 @@ path-to-regexp "3.2.0" swagger-ui-dist "5.17.14" -"@nestjs/testing@^10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-10.4.1.tgz#146c0161ab98524ea9fafe4ca5316229d1e44387" - integrity sha512-pR+su5+YGqCLH0RhhVkPowQK7FCORU0/PWAywPK7LScAOtD67ZoviZ7hAU4vnGdwkg4HCB0D7W8Bkg19CGU8Xw== +"@nestjs/testing@^10.3.10": + version "10.3.10" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-10.3.10.tgz#6ed3c821fddf868665cc5ddc8591ee6eaab8a916" + integrity sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA== dependencies: tslib "2.6.3" @@ -1784,12 +1678,12 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@smithy/abort-controller@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.4.tgz#7cb22871f7392319c565d1d9ab3cb04e635c4dd9" - integrity sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ== +"@smithy/abort-controller@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.1.tgz#291210611ff6afecfc198d0ca72d5771d8461d16" + integrity sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" "@smithy/chunked-blob-reader-native@^3.0.0": @@ -1807,135 +1701,133 @@ dependencies: tslib "^2.6.2" -"@smithy/config-resolver@^3.0.6", "@smithy/config-resolver@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.8.tgz#8717ea934f1d72474a709fc3535d7b8a11de2e33" - integrity sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw== +"@smithy/config-resolver@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.5.tgz#727978bba7ace754c741c259486a19d3083431fd" + integrity sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA== dependencies: - "@smithy/node-config-provider" "^3.1.7" - "@smithy/types" "^3.4.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.6" + "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/core@^2.4.1": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.4.3.tgz#18344c2ff63f748f625ebc5171755816f3043849" - integrity sha512-4LTusLqFMRVQUfC3RNuTg6IzYTeJNpydRdTKq7J5wdEyIRQSu3rGIa3s80mgG2hhe6WOZl9IqTSo1pgbn6EHhA== - dependencies: - "@smithy/middleware-endpoint" "^3.1.3" - "@smithy/middleware-retry" "^3.0.18" - "@smithy/middleware-serde" "^3.0.6" - "@smithy/protocol-http" "^4.1.3" - "@smithy/smithy-client" "^3.3.2" - "@smithy/types" "^3.4.2" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.6" - "@smithy/util-utf8" "^3.0.0" +"@smithy/core@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.3.2.tgz#4a1e3da41d2a3a494cbc6bd1fc6eeb26b2e27184" + integrity sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.14" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/credential-provider-imds@^3.2.1", "@smithy/credential-provider-imds@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.3.tgz#93314e58e4f81f2b641de6efac037c7a3250c050" - integrity sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg== +"@smithy/credential-provider-imds@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz#0e0e7ddaff1a8633cb927aee1056c0ab506b7ecf" + integrity sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA== dependencies: - "@smithy/node-config-provider" "^3.1.7" - "@smithy/property-provider" "^3.1.6" - "@smithy/types" "^3.4.2" - "@smithy/url-parser" "^3.0.6" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" tslib "^2.6.2" -"@smithy/eventstream-codec@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.5.tgz#2b0d65818425d60e043b8e9d8dee9c6744de0e7b" - integrity sha512-6pu+PT2r+5ZnWEV3vLV1DzyrpJ0TmehQlniIDCSpZg6+Ji2SfOI38EqUyQ+O8lotVElCrfVc9chKtSMe9cmCZQ== +"@smithy/eventstream-codec@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz#4a1c72b34400631b829241151984a1ad8c4f963c" + integrity sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" "@smithy/util-hex-encoding" "^3.0.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^3.0.7": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.9.tgz#bb71b836a8755dd5d5fed85ac2fa500702f60544" - integrity sha512-PiQLo6OQmZAotJweIcObL1H44gkvuJACKMNqpBBe5Rf2Ax1DOcGi/28+feZI7yTe1ERHlQQaGnm8sSkyDUgsMg== +"@smithy/eventstream-serde-browser@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.5.tgz#3e971afd2b8a02a098af8decc4b9e3f35296d6a2" + integrity sha512-dEyiUYL/ekDfk+2Ra4GxV+xNnFoCmk1nuIXg+fMChFTrM2uI/1r9AdiTYzPqgb72yIv/NtAj6C3dG//1wwgakQ== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.8" - "@smithy/types" "^3.4.2" + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.6.tgz#538862ef05e549c0ef97b060100a5ffbb5d7adfb" - integrity sha512-iew15It+c7WfnVowWkt2a7cdPp533LFJnpjDQgfZQcxv2QiOcyEcea31mnrk5PVbgo0nNH3VbYGq7myw2q/F6A== +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz#f852e096d0ad112363b4685e1d441088d1fce67a" + integrity sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^3.0.6": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.8.tgz#0221c555f2851fd847b041f27a6231945822018f" - integrity sha512-6m+wI+fT0na+6oao6UqALVA38fsScCpoG5UO/A8ZSyGLnPM2i4MS1cFUhpuALgvLMxfYoTCh7qSeJa0aG4IWpQ== +"@smithy/eventstream-serde-node@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.4.tgz#6301752ca51b3ebabcd2dec112f1dacd990de4c1" + integrity sha512-mjlG0OzGAYuUpdUpflfb9zyLrBGgmQmrobNT8b42ZTsGv/J03+t24uhhtVEKG/b2jFtPIHF74Bq+VUtbzEKOKg== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.8" - "@smithy/types" "^3.4.2" + "@smithy/eventstream-serde-universal" "^3.0.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.8.tgz#0dac5365e3bb349960999b10a4a3c66b77b79dc3" - integrity sha512-09tqzIQ6e+7jLqGvRji1yJoDbL/zob0OFhq75edgStWErGLf16+yI5hRc/o9/YAybOhUZs/swpW2SPn892G5Gg== +"@smithy/eventstream-serde-universal@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.4.tgz#6754de5b94bdc286d8ef1d6bcf22d80f6ab68f30" + integrity sha512-Od9dv8zh3PgOD7Vj4T3HSuox16n0VG8jJIM2gvKASL6aCtcS8CfHZDWe1Ik3ZXW6xBouU+45Q5wgoliWDZiJ0A== dependencies: - "@smithy/eventstream-codec" "^3.1.5" - "@smithy/types" "^3.4.2" + "@smithy/eventstream-codec" "^3.1.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/fetch-http-handler@^3.2.5", "@smithy/fetch-http-handler@^3.2.7": - version "3.2.7" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.7.tgz#30520ca939fb817d3eb3ab9445ddc0f6c1df2960" - integrity sha512-Ra6IPI1spYLO+t62/3jQbodjOwAbto9wlpJdHZwkycm0Kit+GVpzHW/NMmSgY4rK1bjJ4qLAmCnaBzePO5Nkkg== +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz#c754de7e0ff2541b73ac9ba7cc955940114b3d62" + integrity sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg== dependencies: - "@smithy/protocol-http" "^4.1.3" - "@smithy/querystring-builder" "^3.0.6" - "@smithy/types" "^3.4.2" + "@smithy/protocol-http" "^4.1.0" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" "@smithy/util-base64" "^3.0.0" tslib "^2.6.2" -"@smithy/hash-blob-browser@^3.1.3": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.5.tgz#db1cf756647f8f39b4214403482750afbb8f2236" - integrity sha512-Vi3eoNCmao4iKglS80ktYnBOIqZhjbDDwa1IIbF/VaJ8PsHnZTQ5wSicicPrU7nTI4JPFn92/txzWkh4GlK18Q== +"@smithy/hash-blob-browser@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz#90281c1f183d93686fb4f26107f1819644d68829" + integrity sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg== dependencies: "@smithy/chunked-blob-reader" "^3.0.0" "@smithy/chunked-blob-reader-native" "^3.0.0" - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/hash-node@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.6.tgz#7c1a869afcbd411eac04c4777dd193ea7ac4e588" - integrity sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q== +"@smithy/hash-node@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.3.tgz#82c5cb7b0f1a29ee7319081853d2d158c07dff24" + integrity sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" "@smithy/util-buffer-from" "^3.0.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/hash-stream-node@^3.1.3": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.5.tgz#4c8d290f6e4d55fdb143d65d645031da12af7fc1" - integrity sha512-61CyFCzqN3VBfcnGX7mof/rkzLb8oHjm4Lr6ZwBIRpBssBb8d09ChrZAqinP2rUrA915BRNkq9NpJz18N7+3hQ== +"@smithy/hash-stream-node@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz#89f0290ae44b113863878e75b10c484ff48af71c" + integrity sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.6.tgz#3b3e30a55b92341412626b412fe919929871eeb1" - integrity sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ== +"@smithy/invalid-dependency@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz#8d9fd70e3a94b565a4eba4ffbdc95238e1930528" + integrity sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -1952,161 +1844,161 @@ dependencies: tslib "^2.6.2" -"@smithy/md5-js@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.6.tgz#cb8881ffef4ffbf68b0daf52d8add30dc57e3a7a" - integrity sha512-Ze690T8O3M5SVbb70WormwrKzVf9QQRtIuxtJDgpUQDkmt+PtdYDetBbyCbF9ryupxLw6tgzWKgwffAShhVIXQ== +"@smithy/md5-js@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.3.tgz#55ee40aa24075b096c39f7910590c18ff7660c98" + integrity sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^3.0.6": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.8.tgz#4e1c1631718e4d6dfe9a06f37faa90de92e884ed" - integrity sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og== +"@smithy/middleware-content-length@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz#1680aa4fb2a1c0505756103c9a5c2916307d9035" + integrity sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw== dependencies: - "@smithy/protocol-http" "^4.1.3" - "@smithy/types" "^3.4.2" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^3.1.1", "@smithy/middleware-endpoint@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.3.tgz#8c84d40c9d26b77e2bbb99721fd4a3d379828505" - integrity sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg== - dependencies: - "@smithy/middleware-serde" "^3.0.6" - "@smithy/node-config-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.7" - "@smithy/types" "^3.4.2" - "@smithy/url-parser" "^3.0.6" - "@smithy/util-middleware" "^3.0.6" +"@smithy/middleware-endpoint@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz#9b8a496d87a68ec43f3f1a0139868d6765a88119" + integrity sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw== + dependencies: + "@smithy/middleware-serde" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" -"@smithy/middleware-retry@^3.0.16", "@smithy/middleware-retry@^3.0.18": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.18.tgz#58372e264ca0c3a35f0526c531eb433ed8472df0" - integrity sha512-YU1o/vYob6vlqZdd97MN8cSXRToknLXhFBL3r+c9CZcnxkO/rgNZ++CfgX2vsmnEKvlqdi26+SRtSzlVp5z6Mg== - dependencies: - "@smithy/node-config-provider" "^3.1.7" - "@smithy/protocol-http" "^4.1.3" - "@smithy/service-error-classification" "^3.0.6" - "@smithy/smithy-client" "^3.3.2" - "@smithy/types" "^3.4.2" - "@smithy/util-middleware" "^3.0.6" - "@smithy/util-retry" "^3.0.6" +"@smithy/middleware-retry@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz#739e8bac6e465e0cda26446999db614418e79da3" + integrity sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ== + dependencies: + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" tslib "^2.6.2" uuid "^9.0.1" -"@smithy/middleware-serde@^3.0.4", "@smithy/middleware-serde@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.6.tgz#9f7a9c152989b59c12865ef3a17acbdb7b6a1566" - integrity sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag== +"@smithy/middleware-serde@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" + integrity sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/middleware-stack@^3.0.4", "@smithy/middleware-stack@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.6.tgz#e63d09b3e292b7a46ac3b9eb482973701de15a6f" - integrity sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg== +"@smithy/middleware-stack@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" + integrity sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/node-config-provider@^3.1.5", "@smithy/node-config-provider@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.7.tgz#6ae71aeff45e8c9792720986f0b1623cf6da671f" - integrity sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg== +"@smithy/node-config-provider@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" + integrity sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ== dependencies: - "@smithy/property-provider" "^3.1.6" - "@smithy/shared-ini-file-loader" "^3.1.7" - "@smithy/types" "^3.4.2" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/node-http-handler@^3.2.0", "@smithy/node-http-handler@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.2.2.tgz#1e659d52ba4d27123efc7b8a5c1abe76f97ea915" - integrity sha512-42Cy4/oT2O+00aiG1iQ7Kd7rE6q8j7vI0gFfnMlUiATvyo8vefJkhb7O10qZY0jAqo5WZdUzfl9IV6wQ3iMBCg== +"@smithy/node-http-handler@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz#be4195e45639e690d522cd5f11513ea822ff9d5f" + integrity sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg== dependencies: - "@smithy/abort-controller" "^3.1.4" - "@smithy/protocol-http" "^4.1.3" - "@smithy/querystring-builder" "^3.0.6" - "@smithy/types" "^3.4.2" + "@smithy/abort-controller" "^3.1.1" + "@smithy/protocol-http" "^4.1.0" + "@smithy/querystring-builder" "^3.0.3" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/property-provider@^3.1.4", "@smithy/property-provider@^3.1.6": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.6.tgz#141a245ad8cac074d29a836ec992ef7dc3363bf7" - integrity sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw== +"@smithy/property-provider@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" + integrity sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/protocol-http@^4.1.1", "@smithy/protocol-http@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.3.tgz#91d894ec7d82c012c5674cb3e209800852f05abd" - integrity sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw== +"@smithy/protocol-http@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.0.tgz#23519d8f45bf4f33960ea5415847bc2b620a010b" + integrity sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/querystring-builder@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.6.tgz#bcb718b860697dca5257ca38dc8041a4696c486f" - integrity sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg== +"@smithy/querystring-builder@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" + integrity sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" "@smithy/util-uri-escape" "^3.0.0" tslib "^2.6.2" -"@smithy/querystring-parser@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.6.tgz#f30e7e244fa674d77bdfd3c65481c5dc0aa083ef" - integrity sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg== +"@smithy/querystring-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" + integrity sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/service-error-classification@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.6.tgz#e0ca00b79d9ccf00795284e01cfdc48b43b81d76" - integrity sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg== +"@smithy/service-error-classification@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz#73484255060a094aa9372f6cd972dcaf97e3ce80" + integrity sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" -"@smithy/shared-ini-file-loader@^3.1.5", "@smithy/shared-ini-file-loader@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.7.tgz#bdcf3f0213c3c5779c3fbb41580e9a217ad52e8f" - integrity sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA== +"@smithy/shared-ini-file-loader@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" + integrity sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/signature-v4@^4.1.1": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.3.tgz#1a5adc19563b8cf8f28ae1ada4d6cda7d351943d" - integrity sha512-YD2KYSCEEeFHcWZ1E3mLdAaHl8T/TANh6XwmocQ6nPcTdBfh4N5fusgnblnWDlnlU1/cUqEq3PiGi22GmT2Lkg== +"@smithy/signature-v4@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.1.0.tgz#251ff43dc1f4ad66776122732fea9e56efc56443" + integrity sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag== dependencies: "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.3" - "@smithy/types" "^3.4.2" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.6" + "@smithy/util-middleware" "^3.0.3" "@smithy/util-uri-escape" "^3.0.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^3.3.0", "@smithy/smithy-client@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.3.2.tgz#0c5511525f3e64ac5132d513c38d5d0d4a770719" - integrity sha512-RKDfhF2MTwXl7jan5d7QfS9eCC6XJbO3H+EZAvLQN8A5in4ib2Ml4zoeLo57w9QrqFekBPcsoC2hW3Ekw4vQ9Q== - dependencies: - "@smithy/middleware-endpoint" "^3.1.3" - "@smithy/middleware-stack" "^3.0.6" - "@smithy/protocol-http" "^4.1.3" - "@smithy/types" "^3.4.2" - "@smithy/util-stream" "^3.1.6" +"@smithy/smithy-client@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.12.tgz#fb6386816ff8a5c50eab7503d4ee3ba2e4ebac63" + integrity sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA== + dependencies: + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" tslib "^2.6.2" "@smithy/types@^3.3.0": @@ -2116,20 +2008,13 @@ dependencies: tslib "^2.6.2" -"@smithy/types@^3.4.0", "@smithy/types@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.4.2.tgz#aa2d087922d57205dbad68df8a45c848699c551e" - integrity sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.4", "@smithy/url-parser@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.6.tgz#98b426f9a492e0c992fcd5dceac35444c2632837" - integrity sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ== +"@smithy/url-parser@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" + integrity sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A== dependencies: - "@smithy/querystring-parser" "^3.0.6" - "@smithy/types" "^3.4.2" + "@smithy/querystring-parser" "^3.0.3" + "@smithy/types" "^3.3.0" tslib "^2.6.2" "@smithy/util-base64@^3.0.0": @@ -2178,37 +2063,37 @@ dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.16": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.18.tgz#c3904b71db96c9b99861fc2017fea503fcff12a4" - integrity sha512-/eveCzU6Z6Yw8dlYQLA4rcK30XY0E4L3lD3QFHm59mzDaWYelrXE1rlynuT3J6qxv+5yNy3a1JuzhG5hk5hcmw== +"@smithy/util-defaults-mode-browser@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz#21f3ebcb07b9d6ae1274b9d655c38bdac59e5c06" + integrity sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w== dependencies: - "@smithy/property-provider" "^3.1.6" - "@smithy/smithy-client" "^3.3.2" - "@smithy/types" "^3.4.2" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^3.0.16": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.18.tgz#6b46911f2f749bb048cdc287d7237be9d58f4a6b" - integrity sha512-9cfzRjArtOFPlTYRREJk00suUxVXTgbrzVncOyMRTUeMKnecG/YentLF3cORa+R6mUOMSrMSnT18jos1PKqK6Q== - dependencies: - "@smithy/config-resolver" "^3.0.8" - "@smithy/credential-provider-imds" "^3.2.3" - "@smithy/node-config-provider" "^3.1.7" - "@smithy/property-provider" "^3.1.6" - "@smithy/smithy-client" "^3.3.2" - "@smithy/types" "^3.4.2" +"@smithy/util-defaults-mode-node@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz#6bb9e837282e84bbf5093dbcd120fcd296593f7a" + integrity sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ== + dependencies: + "@smithy/config-resolver" "^3.0.5" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/smithy-client" "^3.1.12" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/util-endpoints@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.2.tgz#e1d789d598da9ab955b8cf3257ab2f263c35031a" - integrity sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ== +"@smithy/util-endpoints@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz#e3a7a4d1c41250bfd2b2d890d591273a7d8934be" + integrity sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg== dependencies: - "@smithy/node-config-provider" "^3.1.7" - "@smithy/types" "^3.4.2" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" tslib "^2.6.2" "@smithy/util-hex-encoding@^3.0.0": @@ -2218,31 +2103,31 @@ dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^3.0.4", "@smithy/util-middleware@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.6.tgz#463c41e74d6e8d758f6cceba4dbed4dc5a4afe50" - integrity sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ== +"@smithy/util-middleware@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" + integrity sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw== dependencies: - "@smithy/types" "^3.4.2" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/util-retry@^3.0.4", "@smithy/util-retry@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.6.tgz#297de1cd5a836fb957ab2ad3439041e848815499" - integrity sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg== +"@smithy/util-retry@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.3.tgz#9b2ac0dbb1c81f69812a8affa4d772bebfc0e049" + integrity sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w== dependencies: - "@smithy/service-error-classification" "^3.0.6" - "@smithy/types" "^3.4.2" + "@smithy/service-error-classification" "^3.0.3" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@smithy/util-stream@^3.1.4", "@smithy/util-stream@^3.1.6": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.6.tgz#424dbb4e321129807e5fb01d961ef902ee7c04f8" - integrity sha512-lQEUfTx1ht5CRdvIjdAN/gUL6vQt2wSARGGLaBHNe+iJSkRHlWzY+DOn0mFTmTgyU3jcI5n9DkT5gTzYuSOo6A== +"@smithy/util-stream@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.1.3.tgz#699ee2397cc1d474e46d2034039d5263812dca64" + integrity sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw== dependencies: - "@smithy/fetch-http-handler" "^3.2.7" - "@smithy/node-http-handler" "^3.2.2" - "@smithy/types" "^3.4.2" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/types" "^3.3.0" "@smithy/util-base64" "^3.0.0" "@smithy/util-buffer-from" "^3.0.0" "@smithy/util-hex-encoding" "^3.0.0" @@ -2272,19 +2157,19 @@ "@smithy/util-buffer-from" "^3.0.0" tslib "^2.6.2" -"@smithy/util-waiter@^3.1.3": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.5.tgz#56b3a0fa6498ed22dfee7f40c64d13a54dd04fcc" - integrity sha512-jYOSvM3H6sZe3CHjzD2VQNCjWBJs+4DbtwBMvUp9y5EnnwNa7NQxTeYeQw0CKCAdGGZ3QvVkyJmvbvs5M/B10A== +"@smithy/util-waiter@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.1.2.tgz#2d40c3312f3537feee763459a19acafab4c75cf3" + integrity sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw== dependencies: - "@smithy/abort-controller" "^3.1.4" - "@smithy/types" "^3.4.2" + "@smithy/abort-controller" "^3.1.1" + "@smithy/types" "^3.3.0" tslib "^2.6.2" -"@swc/cli@^0.4.1-nightly.20240914": - version "0.4.1-nightly.20240914" - resolved "https://registry.yarnpkg.com/@swc/cli/-/cli-0.4.1-nightly.20240914.tgz#c20a5f60a5af26976683fc69997c42e2edad1b5f" - integrity sha512-mpsF0+pq40uu9nZnhkzaA0gdivORTZnJNUFfuUGEzC1DgEEgmKDgisRWpBgA3p7xQPCpYlhkH5cTbsOkqar2Mg== +"@swc/cli@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@swc/cli/-/cli-0.4.0.tgz#8f55091d660f24977f62dabcf5d3649505cd0eb0" + integrity sha512-4JdVrPtF/4rCMXp6Q1h5I6YkYZrCCcqod7Wk97ZQq7K8vNGzJUryBv4eHCvqx5sJOJBrbYm9fcswe1B0TygNoA== dependencies: "@mole-inc/bin-wrapper" "^8.0.1" "@swc/counter" "^0.1.3" @@ -2296,74 +2181,74 @@ slash "3.0.0" source-map "^0.7.3" -"@swc/core-darwin-arm64@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz#5f4096c00e71771ca1b18c824f0c92a052c70760" - integrity sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw== - -"@swc/core-darwin-x64@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz#867b7a4f094e6b64201090ca5fcbf3da7d0f3e22" - integrity sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ== - -"@swc/core-linux-arm-gnueabihf@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz#35bb43894def296d92aaa2cc9372d48042f37777" - integrity sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q== - -"@swc/core-linux-arm64-gnu@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz#8e2321cc4ec84cbfed8f8e16ff1ed7b854450443" - integrity sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q== - -"@swc/core-linux-arm64-musl@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz#b1c16e4b23ffa9ff19973eda6ffee35d2a7de7b0" - integrity sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg== - -"@swc/core-linux-x64-gnu@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz#388e2cc13a010cd28787aead2cecf31eb491836d" - integrity sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w== - -"@swc/core-linux-x64-musl@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz#51e0ff30981f26d7a5b97a7a7b5b291bad050d1a" - integrity sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ== - -"@swc/core-win32-arm64-msvc@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz#a7fdcc4074c34ee6a026506b594d00323383c11f" - integrity sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA== - -"@swc/core-win32-ia32-msvc@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz#ae7be6dde798eebee2000b8fd84e01a439b5bd6a" - integrity sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ== - -"@swc/core-win32-x64-msvc@1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz#310d607004d7319085a4dec20c0c38c3405cc05b" - integrity sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w== - -"@swc/core@^1.7.26": - version "1.7.26" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.26.tgz#beda9b82063fcec7b56c958804a4d175aecf9a9d" - integrity sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw== +"@swc/core-darwin-arm64@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.6.tgz#16deedb286caf7b4519d3e39f121e276bc573e72" + integrity sha512-6lYHey84ZzsdtC7UuPheM4Rm0Inzxm6Sb8U6dmKc4eCx8JL0LfWG4LC5RsdsrTxnjTsbriWlnhZBffh8ijUHIQ== + +"@swc/core-darwin-x64@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.6.tgz#d54cfa083d5bef0eb2a852568bbc6f6c5e5bae97" + integrity sha512-Fyl+8aH9O5rpx4O7r2KnsPpoi32iWoKOYKiipeTbGjQ/E95tNPxbmsz4yqE8Ovldcga60IPJ5OKQA3HWRiuzdw== + +"@swc/core-linux-arm-gnueabihf@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.6.tgz#d92b5022f872c9da6b246a16b01ec074288b94b0" + integrity sha512-2WxYTqFaOx48GKC2cbO1/IntA+w+kfCFy436Ij7qRqqtV/WAvTM9TC1OmiFbqq436rSot52qYmX8fkwdB5UcLQ== + +"@swc/core-linux-arm64-gnu@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.6.tgz#3e14000de714cefe097ee244498758f993bb0c81" + integrity sha512-TBEGMSe0LhvPe4S7E68c7VzgT3OMu4VTmBLS7B2aHv4v8uZO92Khpp7L0WqgYU1y5eMjk+XLDLi4kokiNHv/Hg== + +"@swc/core-linux-arm64-musl@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.6.tgz#69edbe4b1f62e7d35fde180bd714ad23a6749c25" + integrity sha512-QI8QGL0HGT42tj7F1A+YAzhGkJjUcvvTfI1e2m704W0Enl2/UIK9v5D1zvQzYwusRyKuaQfbeBRYDh0NcLOGLg== + +"@swc/core-linux-x64-gnu@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.6.tgz#b766e32e5e3549f7c0b83d7a798886810290fa5a" + integrity sha512-61AYVzhjuNQAVIKKWOJu3H0/pFD28RYJGxnGg3YMhvRLRyuWNyY5Nyyj2WkKcz/ON+g38Arlz00NT1LDIViRLg== + +"@swc/core-linux-x64-musl@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.6.tgz#833b77654b48bf04b27263a798cc306d7c378192" + integrity sha512-hQFznpfLK8XajfAAN9Cjs0w/aVmO7iu9VZvInyrTCRcPqxV5O+rvrhRxKvC1LRMZXr5M6JRSRtepp5w+TK4kAw== + +"@swc/core-win32-arm64-msvc@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.6.tgz#0cc81edb4478863d1b64942329fadbc90321ffdf" + integrity sha512-Aqsd9afykVMuekzjm4X4TDqwxmG4CrzoOSFe0hZrn9SMio72l5eAPnMtYoe5LsIqtjV8MNprLfXaNbjHjTegmA== + +"@swc/core-win32-ia32-msvc@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.6.tgz#47965dbf55f06d87f0bcd3198fca0b3515a7daf9" + integrity sha512-9h0hYnOeRVNeQgHQTvD1Im67faNSSzBZ7Adtxyu9urNLfBTJilMllFd2QuGHlKW5+uaT6ZH7ZWDb+c/enx7Lcg== + +"@swc/core-win32-x64-msvc@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.6.tgz#89f0b151d3e8a9539f7915631759a406ebc14ed2" + integrity sha512-izeoB8glCSe6IIDQmrVm6bvR9muk9TeKgmtY7b6l1BwL4BFnTUk4dMmpbntT90bEVQn3JPCaPtUG4HfL8VuyuA== + +"@swc/core@^1.7.3": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.6.tgz#04fbe99660ac83d341c6447ff52e04706bea6f36" + integrity sha512-FZxyao9eQks1MRmUshgsZTmlg/HB2oXK5fghkoWJm/1CU2q2kaJlVDll2as5j+rmWiwkp0Gidlq8wlXcEEAO+g== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.12" optionalDependencies: - "@swc/core-darwin-arm64" "1.7.26" - "@swc/core-darwin-x64" "1.7.26" - "@swc/core-linux-arm-gnueabihf" "1.7.26" - "@swc/core-linux-arm64-gnu" "1.7.26" - "@swc/core-linux-arm64-musl" "1.7.26" - "@swc/core-linux-x64-gnu" "1.7.26" - "@swc/core-linux-x64-musl" "1.7.26" - "@swc/core-win32-arm64-msvc" "1.7.26" - "@swc/core-win32-ia32-msvc" "1.7.26" - "@swc/core-win32-x64-msvc" "1.7.26" + "@swc/core-darwin-arm64" "1.7.6" + "@swc/core-darwin-x64" "1.7.6" + "@swc/core-linux-arm-gnueabihf" "1.7.6" + "@swc/core-linux-arm64-gnu" "1.7.6" + "@swc/core-linux-arm64-musl" "1.7.6" + "@swc/core-linux-x64-gnu" "1.7.6" + "@swc/core-linux-x64-musl" "1.7.6" + "@swc/core-win32-arm64-msvc" "1.7.6" + "@swc/core-win32-ia32-msvc" "1.7.6" + "@swc/core-win32-x64-msvc" "1.7.6" "@swc/counter@^0.1.3": version "0.1.3" @@ -2389,18 +2274,6 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@trivago/prettier-plugin-sort-imports@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" - integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== - dependencies: - "@babel/generator" "7.17.7" - "@babel/parser" "^7.20.5" - "@babel/traverse" "7.23.2" - "@babel/types" "7.17.0" - javascript-natural-sort "0.7.1" - lodash "^4.17.21" - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -2479,13 +2352,6 @@ "@types/node" "*" "@types/responselike" "^1.0.0" -"@types/cheerio@^0.22.35": - version "0.22.35" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.35.tgz#0d16dc1f24d426231c181b9c31847f673867595f" - integrity sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA== - dependencies: - "@types/node" "*" - "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -2594,10 +2460,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^29.5.13": - version "29.5.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.13.tgz#8bc571659f401e6a719a7bf0dbcb8b78c71a8adc" - integrity sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg== +"@types/jest@^29.5.12": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2641,10 +2507,10 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/multer@^1.4.12": - version "1.4.12" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7" - integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg== +"@types/multer@^1.4.11": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.11.tgz#c70792670513b4af1159a2b60bf48cc932af55c5" + integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== dependencies: "@types/express" "*" @@ -2655,12 +2521,12 @@ dependencies: undici-types "~6.13.0" -"@types/node@^22.5.5": - version "22.5.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" - integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA== +"@types/node@^20.14.10": + version "20.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e" + integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ== dependencies: - undici-types "~6.19.2" + undici-types "~5.26.4" "@types/nodemailer@^6.4.15": version "6.4.15" @@ -2765,85 +2631,85 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz#7c1863693a98371703686e1c0fac64ffc576cdb1" - integrity sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw== +"@typescript-eslint/eslint-plugin@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.5.0" - "@typescript-eslint/type-utils" "8.5.0" - "@typescript-eslint/utils" "8.5.0" - "@typescript-eslint/visitor-keys" "8.5.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.5.0.tgz#d590e1ef9f31f26d423999ad3f687723247e6bcc" - integrity sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw== +"@typescript-eslint/parser@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== dependencies: - "@typescript-eslint/scope-manager" "8.5.0" - "@typescript-eslint/types" "8.5.0" - "@typescript-eslint/typescript-estree" "8.5.0" - "@typescript-eslint/visitor-keys" "8.5.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz#385341de65b976f02b295b8aca54bb4ffd6b5f07" - integrity sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "8.5.0" - "@typescript-eslint/visitor-keys" "8.5.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/type-utils@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz#6215b23aa39dbbd8dde0a4ef9ee0f745410c29b1" - integrity sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "8.5.0" - "@typescript-eslint/utils" "8.5.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.5.0.tgz#4465d99331d1276f8fb2030e4f9c73fe01a05bf9" - integrity sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/typescript-estree@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz#6e5758cf2f63aa86e9ddfa4e284e2e0b81b87557" - integrity sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "8.5.0" - "@typescript-eslint/visitor-keys" "8.5.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" - fast-glob "^3.3.2" + globby "^11.1.0" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.5.0.tgz#4d4ffed96d0654546a37faa5b84bdce16d951634" - integrity sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.5.0" - "@typescript-eslint/types" "8.5.0" - "@typescript-eslint/typescript-estree" "8.5.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/visitor-keys@8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz#13028df3b866d2e3e2e2cc4193cf2c1e0e04c4bf" - integrity sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "8.5.0" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": @@ -3185,6 +3051,11 @@ array-timsort@^1.0.3: resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3200,15 +3071,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" @@ -3344,11 +3206,6 @@ body-parser@1.20.2: type-is "~1.6.18" unpipe "1.0.0" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - bowser@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" @@ -3386,7 +3243,7 @@ browserslist@^4.21.10, browserslist@^4.23.1: node-releases "^2.0.18" update-browserslist-db "^1.1.0" -bs-logger@^0.2.6: +bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== @@ -3516,35 +3373,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81" - integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.1.0" - encoding-sniffer "^0.2.0" - htmlparser2 "^9.1.0" - parse5 "^7.1.2" - parse5-htmlparser2-tree-adapter "^7.0.0" - parse5-parser-stream "^7.1.2" - undici "^6.19.5" - whatwg-mimetype "^4.0.0" - chokidar@3.6.0, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -3950,22 +3778,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - dargs@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" @@ -4081,35 +3893,12 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1, domutils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" + path-type "^4.0.0" dot-prop@^5.1.0: version "5.3.0" @@ -4187,14 +3976,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding-sniffer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5" - integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg== - dependencies: - iconv-lite "^0.6.3" - whatwg-encoding "^3.1.1" - end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -4210,11 +3991,6 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4318,17 +4094,16 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@^9.10.0: - version "9.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.10.0.tgz#0bd74d7fe4db77565d0e7f57c7df6d2b04756806" - integrity sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw== +eslint@^9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.8.0.tgz#a4f4a090c8ea2d10864d89a6603e02ce9f649f0f" + integrity sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" - "@eslint/config-array" "^0.18.0" + "@eslint/config-array" "^0.17.1" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.10.0" - "@eslint/plugin-kit" "^0.1.0" + "@eslint/js" "9.8.0" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -4351,6 +4126,7 @@ eslint@^9.10.0: is-glob "^4.0.0" is-path-inside "^3.0.3" json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" @@ -4449,7 +4225,7 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@~8.0.1: +execa@^8.0.1, execa@~8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== @@ -4558,7 +4334,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.5, fast-glob@^3.3.2: +fast-glob@^3.2.5, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -4736,11 +4512,6 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - foreground-child@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" @@ -4946,6 +4717,18 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -5034,16 +4817,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" - integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.1.0" - entities "^4.5.0" - http-cache-semantics@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -5086,10 +4859,10 @@ human-signals@^5.0.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== -husky@^9.1.6: - version "9.1.6" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" - integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== +husky@^9.0.11: + version "9.1.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.4.tgz#926fd19c18d345add5eab0a42b2b6d9a80259b34" + integrity sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA== hyperdyperid@^1.2.0: version "1.2.0" @@ -5103,13 +4876,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -5415,11 +5181,6 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -javascript-natural-sort@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" - integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== - jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -5954,10 +5715,10 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^15.2.10: - version "15.2.10" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.10.tgz#92ac222f802ba911897dcf23671da5bb80643cd2" - integrity sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg== +lint-staged@^15.2.7: + version "15.2.8" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.8.tgz#5e19eb7b4dbb922f56fafb4635b44ee3c92f7322" + integrity sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ== dependencies: chalk "~5.3.0" commander "~12.1.0" @@ -5965,7 +5726,7 @@ lint-staged@^15.2.10: execa "~8.0.1" lilconfig "~3.1.2" listr2 "~8.2.4" - micromatch "~4.0.8" + micromatch "~4.0.7" pidtree "~0.6.0" string-argv "~0.3.2" yaml "~2.5.0" @@ -6058,7 +5819,7 @@ lodash.kebabcase@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== -lodash.memoize@^4.1.2: +lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -6185,7 +5946,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@^1.1.1, make-error@^1.3.6: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -6232,7 +5993,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -6242,7 +6003,7 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.0, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.4, micromatch@~4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== @@ -6250,14 +6011,6 @@ micromatch@^4.0.0, micromatch@^4.0.4: braces "^3.0.3" picomatch "^2.3.1" -micromatch@~4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -6393,10 +6146,10 @@ mongodb-connection-string-url@^3.0.0: "@types/whatwg-url" "^11.0.2" whatwg-url "^13.0.0" -mongodb@6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.8.0.tgz#680450f113cdea6d2d9f7121fe57cd29111fd2ce" - integrity sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw== +mongodb@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.7.0.tgz#f86e51e6530e6a2ca4a99d7cfdf6f409223ac199" + integrity sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA== dependencies: "@mongodb-js/saslprep" "^1.1.5" bson "^6.7.0" @@ -6407,14 +6160,14 @@ mongoose-autopopulate@^1.1.0: resolved "https://registry.yarnpkg.com/mongoose-autopopulate/-/mongoose-autopopulate-1.1.0.tgz#6c89baa2a5b3f9c04a68d65a80f85c0fc56c2227" integrity sha512-nTlTMlu1fLQ1bmJT7ILKbZmPGt2fHErLO4UJwzMDsHSigjtUYz0l3nvFhg511QkOkZcKBRzOnPn3DmmLIUENzg== -mongoose@^8.6.2: - version "8.6.2" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-8.6.2.tgz#7fa1bfbf7f37e1f71efdf6febf6dc1c3f217dd3c" - integrity sha512-ErbDVvuUzUfyQpXvJ6sXznmZDICD8r6wIsa0VKjJtB6/LZncqwUn5Um040G1BaNo6L3Jz+xItLSwT0wZmSmUaQ== +mongoose@^8.5.1: + version "8.5.2" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-8.5.2.tgz#73b40ce778f3fc66407aba3c3157795cdd278543" + integrity sha512-GZB4rHMdYfGatV+23IpCrqFbyCOjCNOHXgWbirr92KRwTEncBrtW3kgU9vmpKjsGf7nMmnAy06SwWUv1vhDkSg== dependencies: bson "^6.7.0" kareem "2.6.3" - mongodb "6.8.0" + mongodb "6.7.0" mpath "0.9.0" mquery "5.0.0" ms "2.1.3" @@ -6549,10 +6302,10 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== -nodemailer@^6.9.15: - version "6.9.15" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.15.tgz#57b79dc522be27e0e47ac16cc860aa0673e62e04" - integrity sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ== +nodemailer@^6.9.14: + version "6.9.14" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.14.tgz#845fda981f9fd5ac264f4446af908a7c78027f75" + integrity sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA== nopt@^5.0.0: version "5.0.0" @@ -6602,13 +6355,6 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -6784,28 +6530,6 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5-parser-stream@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1" - integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== - dependencies: - parse5 "^7.0.0" - -parse5@^7.0.0, parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -6965,11 +6689,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -7228,7 +6947,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -7259,7 +6978,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -7439,11 +7158,6 @@ source-map@0.7.4, source-map@^0.7.3, source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7764,11 +7478,6 @@ thingies@^1.20.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinyexec@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.0.tgz#ed60cfce19c17799d4a241e06b31b0ec2bee69e6" - integrity sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7845,20 +7554,20 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-jest@^29.2.5: - version "29.2.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" - integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== +ts-jest@^29.2.2: + version "29.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" + integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== dependencies: - bs-logger "^0.2.6" + bs-logger "0.x" ejs "^3.1.10" - fast-json-stable-stringify "^2.1.0" + fast-json-stable-stringify "2.x" jest-util "^29.0.0" json5 "^2.2.3" - lodash.memoize "^4.1.2" - make-error "^1.3.6" - semver "^7.6.3" - yargs-parser "^21.1.1" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" ts-loader@^9.5.1: version "9.5.1" @@ -7943,24 +7652,24 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.5.0.tgz#041f6c302d0e9a8e116a33d60b0bb19f34036dd7" - integrity sha512-uD+XxEoSIvqtm4KE97etm32Tn5MfaZWgWfMMREStLxR6JzvHkc2Tkj7zhTEK5XmtpTmKHNnG8Sot6qDfhHtR1Q== +typescript-eslint@^7.17.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.18.0.tgz#e90d57649b2ad37a7475875fa3e834a6d9f61eb2" + integrity sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA== dependencies: - "@typescript-eslint/eslint-plugin" "8.5.0" - "@typescript-eslint/parser" "8.5.0" - "@typescript-eslint/utils" "8.5.0" + "@typescript-eslint/eslint-plugin" "7.18.0" + "@typescript-eslint/parser" "7.18.0" + "@typescript-eslint/utils" "7.18.0" typescript@5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -typescript@^5.6.2: - version "5.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" - integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== +typescript@^5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== uid@2.0.2: version "2.0.2" @@ -7969,21 +7678,16 @@ uid@2.0.2: dependencies: "@lukeed/csprng" "^1.0.0" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici-types@~6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici@^6.19.5: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" - integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== - unicorn-magic@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" @@ -8100,7 +7804,7 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.94.0, webpack@^5.0.0: +webpack@5.92.1, webpack@^5.0.0: version "5.93.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== @@ -8130,18 +7834,6 @@ webpack@5.94.0, webpack@^5.0.0: watchpack "^2.4.1" webpack-sources "^3.2.3" -whatwg-encoding@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" - integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" - integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== - whatwg-url@^13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-13.0.0.tgz#b7b536aca48306394a34e44bda8e99f332410f8f" @@ -8198,10 +7890,10 @@ winston-transport@^4.7.0: readable-stream "^3.6.2" triple-beam "^1.3.0" -winston@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.14.2.tgz#94ce5fd26d374f563c969d12f0cd9c641065adab" - integrity sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg== +winston@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.1.tgz#53ddadb9c2332eb12cff8306413b3480dc82b6c3" + integrity sha512-SvZit7VFNvXRzbqGHsv5KSmgbEYR5EiQfDAL9gxYkRqa934Hnk++zze0wANKtMHcy/gI4W/3xmSDwlhf865WGw== dependencies: "@colors/colors" "^1.6.0" "@dabh/diagnostics" "^2.0.2" @@ -8308,7 +8000,7 @@ yaml@~2.5.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== -yargs-parser@21.1.1, yargs-parser@^21.1.1: +yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==