From f33db22e2fe46ecfc968059471d5e03070449ef3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 22 Jun 2026 10:26:29 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 15 + .env.example | 11 + .gitea/workflows/main.yml | 108 + .gitignore | 44 + .prettierrc | 7 + Dockerfile | 47 + nest-cli.json | 8 + package.json | 59 + pnpm-lock.yaml | 5175 +++++++++++++++++ src/app.module.ts | 117 + .../decorators/current-admin.decorator.ts | 22 + src/common/decorators/index.ts | 3 + src/common/decorators/public.decorator.ts | 8 + src/common/decorators/roles.decorator.ts | 13 + src/common/dto/api-response.dto.ts | 39 + src/common/filters/all-exceptions.filter.ts | 101 + src/common/filters/index.ts | 1 + src/common/guards/index.ts | 2 + src/common/guards/jwt-auth.guard.ts | 65 + src/common/guards/roles.guard.ts | 35 + src/common/interceptors/index.ts | 1 + .../interceptors/transform.interceptor.ts | 33 + src/common/middlewares/index.ts | 1 + src/common/middlewares/upload.middleware.ts | 63 + src/config/configuration.ts | 47 + src/config/swagger.config.ts | 22 + src/entities/admin.entity.ts | 43 + src/entities/banner.entity.ts | 42 + src/entities/index.ts | 9 + src/entities/manual.entity.ts | 78 + src/entities/message.entity.ts | 38 + src/entities/news-category.entity.ts | 31 + src/entities/news.entity.ts | 58 + src/entities/product-category.entity.ts | 34 + src/entities/product.entity.ts | 60 + src/entities/site-config.entity.ts | 58 + src/entities/team.entity.ts | 44 + src/main.ts | 167 + .../admin-user/admin-user.controller.ts | 87 + src/modules/admin-user/admin-user.module.ts | 12 + src/modules/admin-user/admin-user.service.ts | 107 + src/modules/admin-user/dto/admin-user.dto.ts | 107 + src/modules/auth/auth.controller.ts | 40 + src/modules/auth/auth.module.ts | 14 + src/modules/auth/auth.service.ts | 109 + src/modules/auth/dto/login.dto.ts | 39 + src/modules/banner/banner.controller.ts | 76 + src/modules/banner/banner.module.ts | 12 + src/modules/banner/banner.service.ts | 79 + src/modules/banner/dto/banner.dto.ts | 70 + src/modules/manual/dto/manual.dto.ts | 76 + src/modules/manual/manual.controller.ts | 91 + src/modules/manual/manual.module.ts | 12 + src/modules/manual/manual.service.ts | 200 + src/modules/message/dto/message.dto.ts | 67 + src/modules/message/message.controller.ts | 56 + src/modules/message/message.module.ts | 12 + src/modules/message/message.service.ts | 67 + .../news-category/dto/news-category.dto.ts | 44 + .../news-category/news-category.controller.ts | 72 + .../news-category/news-category.module.ts | 13 + .../news-category/news-category.service.ts | 66 + src/modules/news/dto/news.dto.ts | 87 + src/modules/news/news.controller.ts | 77 + src/modules/news/news.module.ts | 13 + src/modules/news/news.service.ts | 105 + .../dto/product-category.dto.ts | 44 + .../product-category.controller.ts | 72 + .../product-category.module.ts | 13 + .../product-category.service.ts | 65 + src/modules/product/dto/product.dto.ts | 86 + src/modules/product/product.controller.ts | 83 + src/modules/product/product.module.ts | 13 + src/modules/product/product.service.ts | 114 + .../site-config/dto/site-config.dto.ts | 61 + .../site-config/site-config.controller.ts | 33 + src/modules/site-config/site-config.module.ts | 13 + .../site-config/site-config.service.ts | 44 + src/modules/team/dto/team.dto.ts | 60 + src/modules/team/team.controller.ts | 72 + src/modules/team/team.module.ts | 12 + src/modules/team/team.service.ts | 74 + src/modules/upload/upload.controller.ts | 36 + src/modules/upload/upload.module.ts | 7 + src/types/express.d.ts | 10 + src/utils/crypto.util.ts | 16 + src/utils/file.util.ts | 14 + src/utils/index.ts | 2 + tsconfig.build.json | 4 + tsconfig.json | 27 + uploads/2026/06/1781692209397_uqobwr.jpg | Bin 0 -> 341413 bytes 91 files changed, 9494 insertions(+) create mode 100644 .env create mode 100644 .env.example create mode 100644 .gitea/workflows/main.yml create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 nest-cli.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/app.module.ts create mode 100644 src/common/decorators/current-admin.decorator.ts create mode 100644 src/common/decorators/index.ts create mode 100644 src/common/decorators/public.decorator.ts create mode 100644 src/common/decorators/roles.decorator.ts create mode 100644 src/common/dto/api-response.dto.ts create mode 100644 src/common/filters/all-exceptions.filter.ts create mode 100644 src/common/filters/index.ts create mode 100644 src/common/guards/index.ts create mode 100644 src/common/guards/jwt-auth.guard.ts create mode 100644 src/common/guards/roles.guard.ts create mode 100644 src/common/interceptors/index.ts create mode 100644 src/common/interceptors/transform.interceptor.ts create mode 100644 src/common/middlewares/index.ts create mode 100644 src/common/middlewares/upload.middleware.ts create mode 100644 src/config/configuration.ts create mode 100644 src/config/swagger.config.ts create mode 100644 src/entities/admin.entity.ts create mode 100644 src/entities/banner.entity.ts create mode 100644 src/entities/index.ts create mode 100644 src/entities/manual.entity.ts create mode 100644 src/entities/message.entity.ts create mode 100644 src/entities/news-category.entity.ts create mode 100644 src/entities/news.entity.ts create mode 100644 src/entities/product-category.entity.ts create mode 100644 src/entities/product.entity.ts create mode 100644 src/entities/site-config.entity.ts create mode 100644 src/entities/team.entity.ts create mode 100644 src/main.ts create mode 100644 src/modules/admin-user/admin-user.controller.ts create mode 100644 src/modules/admin-user/admin-user.module.ts create mode 100644 src/modules/admin-user/admin-user.service.ts create mode 100644 src/modules/admin-user/dto/admin-user.dto.ts create mode 100644 src/modules/auth/auth.controller.ts create mode 100644 src/modules/auth/auth.module.ts create mode 100644 src/modules/auth/auth.service.ts create mode 100644 src/modules/auth/dto/login.dto.ts create mode 100644 src/modules/banner/banner.controller.ts create mode 100644 src/modules/banner/banner.module.ts create mode 100644 src/modules/banner/banner.service.ts create mode 100644 src/modules/banner/dto/banner.dto.ts create mode 100644 src/modules/manual/dto/manual.dto.ts create mode 100644 src/modules/manual/manual.controller.ts create mode 100644 src/modules/manual/manual.module.ts create mode 100644 src/modules/manual/manual.service.ts create mode 100644 src/modules/message/dto/message.dto.ts create mode 100644 src/modules/message/message.controller.ts create mode 100644 src/modules/message/message.module.ts create mode 100644 src/modules/message/message.service.ts create mode 100644 src/modules/news-category/dto/news-category.dto.ts create mode 100644 src/modules/news-category/news-category.controller.ts create mode 100644 src/modules/news-category/news-category.module.ts create mode 100644 src/modules/news-category/news-category.service.ts create mode 100644 src/modules/news/dto/news.dto.ts create mode 100644 src/modules/news/news.controller.ts create mode 100644 src/modules/news/news.module.ts create mode 100644 src/modules/news/news.service.ts create mode 100644 src/modules/product-category/dto/product-category.dto.ts create mode 100644 src/modules/product-category/product-category.controller.ts create mode 100644 src/modules/product-category/product-category.module.ts create mode 100644 src/modules/product-category/product-category.service.ts create mode 100644 src/modules/product/dto/product.dto.ts create mode 100644 src/modules/product/product.controller.ts create mode 100644 src/modules/product/product.module.ts create mode 100644 src/modules/product/product.service.ts create mode 100644 src/modules/site-config/dto/site-config.dto.ts create mode 100644 src/modules/site-config/site-config.controller.ts create mode 100644 src/modules/site-config/site-config.module.ts create mode 100644 src/modules/site-config/site-config.service.ts create mode 100644 src/modules/team/dto/team.dto.ts create mode 100644 src/modules/team/team.controller.ts create mode 100644 src/modules/team/team.module.ts create mode 100644 src/modules/team/team.service.ts create mode 100644 src/modules/upload/upload.controller.ts create mode 100644 src/modules/upload/upload.module.ts create mode 100644 src/types/express.d.ts create mode 100644 src/utils/crypto.util.ts create mode 100644 src/utils/file.util.ts create mode 100644 src/utils/index.ts create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json create mode 100644 uploads/2026/06/1781692209397_uqobwr.jpg diff --git a/.env b/.env new file mode 100644 index 0000000..abb00c8 --- /dev/null +++ b/.env @@ -0,0 +1,15 @@ +# 服务端口 +PORT=3000 +# MySQL数据库配置 +DB_HOST=localhost +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=123456 +DB_NAME=corp_website +# JWT鉴权固定配置 +JWT_SECRET=corp_website_secret_key_2026ai +JWT_EXPIRES_IN=7d +# 文件上传目录 +UPLOAD_ROOT=./uploads +# 运行环境 +NODE_ENV=development diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ef2683c --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +# 复制为 .env 并按需修改 +PORT=3001 +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=root +DB_NAME=corp_website +JWT_SECRET=corp_website_secret_key_2026ai +JWT_EXPIRES_IN=7d +UPLOAD_ROOT=./uploads +NODE_ENV=development diff --git a/.gitea/workflows/main.yml b/.gitea/workflows/main.yml new file mode 100644 index 0000000..e38522a --- /dev/null +++ b/.gitea/workflows/main.yml @@ -0,0 +1,108 @@ +name: main + +on: + push: + branches: ["main"] + workflow_dispatch: + +jobs: + build-and-push: + name: Build and push to Aliyun ACR + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: https://gitee.com/zsqai/checkout@v4 + + # 准备环境变量文件:将 .env.production 复制为 .env + - name: Prepare .env file for production + run: cp .env.production .env + + - name: Set up Docker Buildx + uses: https://gitee.com/zsqai/setup-buildx-action@v3 + + - name: Login to Aliyun Container Registry + uses: https://gitee.com/zsqai/login-action@v3 + with: + registry: ${{ vars.ALIYUN_REGISTRY }} + username: ${{ vars.ALIYUN_USERNAME }} + password: ${{ secrets.ALIYUN_PASSWORD }} + + - name: Build and push Docker image + uses: https://gitee.com/zsqai/build-push-action@v5 + with: + context: . + push: true + tags: | + ${{ vars.ALIYUN_REGISTRY }}/${{ vars.ALIYUN_NAMESPACE }}/${{ vars.ALIYUN_REPO }}:latest + ${{ vars.ALIYUN_REGISTRY }}/${{ vars.ALIYUN_NAMESPACE }}/${{ vars.ALIYUN_REPO }}:${{ github.sha }} + + deploy: + name: Deploy to server + runs-on: ubuntu-latest + needs: build-and-push + environment: + name: production + url: http://${{ vars.HOST }}:8084 + steps: + - name: Deploy via SSH + uses: https://gitee.com/zsqai/ssh-action@v1.0.3 + with: + host: ${{ vars.HOST }} + username: root + password: ${{ secrets.DEV_HOST_PASSWORD }} + port: 22 + script_stop: true + script: | + set -e + echo "=== 开始部署 $(date) ===" + + # 登录阿里云镜像仓库 + docker login --username=${{ vars.ALIYUN_USERNAME }} \ + --password=${{ secrets.ALIYUN_PASSWORD }} \ + ${{ vars.ALIYUN_REGISTRY }} + + # 拉取最新镜像 + docker pull ${{ vars.ALIYUN_REGISTRY }}/${{ vars.ALIYUN_NAMESPACE }}/${{ vars.ALIYUN_REPO }}:latest + + # 停止并删除旧容器 + docker stop ai-personage-api 2>/dev/null || true + docker rm ai-personage-api 2>/dev/null || true + + # 启动新容器(不再需要 -e 参数,因为环境变量已打包在镜像内) + docker run -d \ + --name ai-personage-api \ + --restart always \ + -p 8084:3002 \ + ${{ vars.ALIYUN_REGISTRY }}/${{ vars.ALIYUN_NAMESPACE }}/${{ vars.ALIYUN_REPO }}:latest + + # 清理旧镜像 + docker image prune -f + + # 检查容器状态 + sleep 5 + if docker ps --format '{{.Names}}' | grep -q "^ai-personage-api$"; then + echo "✓ 容器启动成功" + docker logs --tail 20 ai-personage-api + else + echo "✗ 容器启动失败" + docker logs ai-personage-api + exit 1 + fi + + notify: + name: Send notification + runs-on: ubuntu-latest + needs: [build-and-push, deploy] + if: always() + steps: + - name: Deployment result + run: | + if [ "${{ needs.deploy.result }}" == "success" ]; then + echo "✓ 部署成功" + echo "分支: ${{ github.ref_name }}" + echo "提交: ${{ github.sha }}" + echo "时间: $(date)" + else + echo "✗ 部署失败,请检查 CI 最终日志" + exit 1 + fi \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5d1630 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# ---------- 系统 / 编辑器 ---------- +.DS_Store +Thumbs.db +.idea/ +.vscode/ +*.swp +*.swo + +# ---------- Node / pnpm ---------- +node_modules/ +.pnpm-store/ +pnpm-debug.log* +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnp.* +.pnp.js + +# ---------- 构建产物 ---------- +dist/ +build/ +out/ +.next/ +.turbo/ +*.tsbuildinfo + +# ---------- 环境变量(敏感信息不入库) ---------- +# 后端主配置文件按文档要求生成 .env,但强烈建议提交时改为 .env.example +server/.env +client/.env.local + +# ---------- 上传文件(运行时产物) ---------- +server/uploads/ + +# ---------- 日志 ---------- +*.log +logs/ + +# ---------- 测试覆盖率 ---------- +coverage/ + +# ---------- 缓存 ---------- +.cache/ +.eslintcache diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..8b0e83d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "semi": true, + "printWidth": 100, + "tabWidth": 2 +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..31a08bf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,47 @@ +# 构建阶段 +FROM crpi-jlsdxetsdmy4ckxh.cn-shenzhen.personal.cr.aliyuncs.com/zsq_proxy/node:20-alpine AS build +WORKDIR /app + +# 添加构建参数 +ARG BUILD_VERSION +ARG BUILD_TIME +ARG CACHE_BUST + +ENV BUILD_VERSION=$BUILD_VERSION +ENV BUILD_TIME=$BUILD_TIME + +# 强制打破 Docker 缓存 +RUN echo "Cache bust: ${CACHE_BUST} - ${BUILD_VERSION} - ${BUILD_TIME}" + +# 安装 pnpm +RUN npm install -g pnpm && \ + pnpm config set registry https://registry.npmmirror.com + +COPY package*.json ./ +# 如果项目有 pnpm-lock.yaml,取消注释下面一行 +# COPY pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . + +# 强制清理 .next +RUN rm -rf .next + +# 构建 +RUN pnpm build + +# 部署阶段 +FROM crpi-jlsdxetsdmy4ckxh.cn-shenzhen.personal.cr.aliyuncs.com/zsq_proxy/node:20-alpine AS app +WORKDIR /app + +ENV NODE_ENV=production +ENV NODE_OPTIONS="--max-old-space-size=4096" + +COPY --from=build /app/.next ./.next +COPY --from=build /app/public ./public +COPY --from=build /app/package.json ./package.json +COPY --from=build /app/node_modules ./node_modules + +EXPOSE 3003 + +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..f9aa683 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bec28ce --- /dev/null +++ b/package.json @@ -0,0 +1,59 @@ +{ + "name": "corp-official-website-server", + "version": "1.0.0", + "description": "corp-official-website NestJS 10 backend", + "private": true, + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" + }, + "dependencies": { + "@nestjs/common": "^10.2.10", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "^10.2.10", + "@nestjs/jwt": "^10.2.0", + "@nestjs/passport": "^10.0.2", + "@nestjs/platform-express": "^10.2.10", + "@nestjs/serve-static": "^4.0.0", + "@nestjs/swagger": "^7.1.16", + "@nestjs/typeorm": "^10.0.1", + "bcrypt": "^5.1.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "multer": "^1.4.5-lts.1", + "mysql2": "^3.6.5", + "nest-winston": "^1.9.4", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.1", + "typeorm": "^0.3.17", + "winston": "^3.11.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.2.1", + "@nestjs/schematics": "^10.0.2", + "@nestjs/testing": "^10.2.10", + "@types/bcrypt": "^5.0.2", + "@types/express": "^4.17.21", + "@types/multer": "^1.4.11", + "@types/node": "^20.9.2", + "@types/passport-jwt": "^3.0.13", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", + "eslint": "^8.54.0", + "prettier": "^3.1.0", + "source-map-support": "^0.5.21", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.2.2" + }, + "pnpm": { + "onlyBuiltDependencies": ["bcrypt", "@nestjs/core"] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..19c7577 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5175 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@nestjs/common': + specifier: ^10.2.10 + version: 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/config': + specifier: ^3.1.1 + version: 3.3.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2) + '@nestjs/core': + specifier: ^10.2.10 + version: 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/jwt': + specifier: ^10.2.0 + version: 10.2.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)) + '@nestjs/passport': + specifier: ^10.0.2 + version: 10.0.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0) + '@nestjs/platform-express': + specifier: ^10.2.10 + version: 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22) + '@nestjs/serve-static': + specifier: ^4.0.0 + version: 4.0.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(express@4.22.1) + '@nestjs/swagger': + specifier: ^7.1.16 + version: 7.4.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14) + '@nestjs/typeorm': + specifier: ^10.0.1 + version: 10.0.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.30(mysql2@3.22.5(@types/node@20.19.43))(ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3))) + bcrypt: + specifier: ^5.1.1 + version: 5.1.1 + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 + class-validator: + specifier: ^0.14.0 + version: 0.14.4 + multer: + specifier: ^1.4.5-lts.1 + version: 1.4.5-lts.2 + mysql2: + specifier: ^3.6.5 + version: 3.22.5(@types/node@20.19.43) + nest-winston: + specifier: ^1.9.4 + version: 1.10.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(winston@3.19.0) + passport: + specifier: ^0.6.0 + version: 0.6.0 + passport-jwt: + specifier: ^4.0.1 + version: 4.0.1 + reflect-metadata: + specifier: ^0.1.13 + version: 0.1.14 + rxjs: + specifier: ^7.8.1 + version: 7.8.2 + typeorm: + specifier: ^0.3.17 + version: 0.3.30(mysql2@3.22.5(@types/node@20.19.43))(ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3)) + winston: + specifier: ^3.11.0 + version: 3.19.0 + devDependencies: + '@nestjs/cli': + specifier: ^10.2.1 + version: 10.4.9 + '@nestjs/schematics': + specifier: ^10.0.2 + version: 10.2.3(chokidar@3.6.0)(typescript@5.9.3) + '@nestjs/testing': + specifier: ^10.2.10 + version: 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/platform-express@10.4.22) + '@types/bcrypt': + specifier: ^5.0.2 + version: 5.0.2 + '@types/express': + specifier: ^4.17.21 + version: 4.17.25 + '@types/multer': + specifier: ^1.4.11 + version: 1.4.13 + '@types/node': + specifier: ^20.9.2 + version: 20.19.43 + '@types/passport-jwt': + specifier: ^3.0.13 + version: 3.0.13 + '@typescript-eslint/eslint-plugin': + specifier: ^6.14.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^6.14.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + eslint: + specifier: ^8.54.0 + version: 8.57.1 + prettier: + specifier: ^3.1.0 + version: 3.8.4 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + ts-loader: + specifier: ^9.5.1 + version: 9.6.1(typescript@5.9.3)(webpack@5.97.1) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.19.43)(typescript@5.9.3) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + typescript: + specifier: ^5.2.2 + version: 5.9.3 + +packages: + + '@angular-devkit/core@17.3.11': + resolution: {integrity: sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@17.3.11': + resolution: {integrity: sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular-devkit/schematics@17.3.11': + resolution: {integrity: sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.8': + resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@ljharb/through@2.3.14': + resolution: {integrity: sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==} + engines: {node: '>= 0.4'} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + + '@nestjs/cli@10.4.9': + resolution: {integrity: sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==} + engines: {node: '>= 16.14'} + hasBin: true + peerDependencies: + '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 + '@swc/core': ^1.3.62 + peerDependenciesMeta: + '@swc/cli': + optional: true + '@swc/core': + optional: true + + '@nestjs/common@10.4.22': + resolution: {integrity: sha512-fxJ4v85nDHaqT1PmfNCQ37b/jcv2OojtXTaK1P2uAXhzLf9qq6WNUOFvxBrV4fhQek1EQoT1o9oj5xAZmv3NRw==} + peerDependencies: + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/config@3.3.0': + resolution: {integrity: sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + rxjs: ^7.1.0 + + '@nestjs/core@10.4.22': + resolution: {integrity: sha512-6IX9+VwjiKtCjx+mXVPncpkQ5ZjKfmssOZPFexmT+6T9H9wZ3svpYACAo7+9e7Nr9DZSoRZw3pffkJP7Z0UjaA==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + '@nestjs/websockets': ^10.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nestjs/jwt@10.2.0': + resolution: {integrity: sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + + '@nestjs/mapped-types@2.0.5': + resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/passport@10.0.3': + resolution: {integrity: sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + passport: ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 + + '@nestjs/platform-express@10.4.22': + resolution: {integrity: sha512-ySSq7Py/DFozzZdNDH67m/vHoeVdphDniWBnl6q5QVoXldDdrZIHLXLRMPayTDh5A95nt7jjJzmD4qpTbNQ6tA==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + + '@nestjs/schematics@10.2.3': + resolution: {integrity: sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==} + peerDependencies: + typescript: '>=4.8.2' + + '@nestjs/serve-static@4.0.2': + resolution: {integrity: sha512-cT0vdWN5ar7jDI2NKbhf4LcwJzU4vS5sVpMkVrHuyLcltbrz6JdGi1TfIMMatP2pNiq5Ie/uUdPSFDVaZX/URQ==} + peerDependencies: + '@fastify/static': ^6.5.0 || ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + express: ^4.18.1 + fastify: ^4.7.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + express: + optional: true + fastify: + optional: true + + '@nestjs/swagger@7.4.2': + resolution: {integrity: sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/testing@10.4.22': + resolution: {integrity: sha512-HO9aPus3bAedAC+jKVAA8jTdaj4fs5M9fing4giHrcYV2txe9CvC1l1WAjwQ9RDhEHdugjY4y+FZA/U/YqPZrA==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + + '@nestjs/typeorm@10.0.2': + resolution: {integrity: sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 + reflect-metadata: ^0.1.13 || ^0.2.0 + rxjs: ^7.2.0 + typeorm: ^0.3.0 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxtjs/opencollective@0.3.2': + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@so-ric/colorspace@1.1.6': + resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + + '@sqltools/formatter@1.2.5': + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + + '@tokenizer/inflate@0.2.7': + resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/bcrypt@5.0.2': + resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/express-serve-static-core@4.19.8': + resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} + + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonwebtoken@9.0.10': + resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + + '@types/jsonwebtoken@9.0.5': + resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/multer@1.4.13': + resolution: {integrity: sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==} + + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + + '@types/passport-jwt@3.0.13': + resolution: {integrity: sha512-fjHaC6Bv8EpMMqzTnHP32SXlZGaNfBPC/Po5dmRGYi2Ky7ljXPbGnOy+SxZqa6iZvFgVhoJ1915Re3m93zmcfA==} + + '@types/passport-strategy@0.2.38': + resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==} + + '@types/passport@1.0.17': + resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==} + + '@types/qs@6.15.1': + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} + + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} + engines: {node: '>=14'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + aproba@2.1.0: + resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.10.37: + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} + engines: {node: '>=6.0.0'} + hasBin: true + + bcrypt@5.1.1: + resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} + engines: {node: '>= 10.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-convert@3.1.3: + resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} + engines: {node: '>=14.6'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-name@2.1.0: + resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} + engines: {node: '>=12.20'} + + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} + engines: {node: '>=18'} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@5.0.3: + resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.375: + resolution: {integrity: sha512-ZWP5eB4BVPW/ZYo9252hQZHZ5XavtsTgpbhcmMmRwymavC5AsLWQWBPaKMeNd2LW0KGby5HPXvj7+sr4ta5j/Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.24.0: + resolution: {integrity: sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} + engines: {node: '>= 0.10.0'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-type@20.4.1: + resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==} + engines: {node: '>=18'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} + engines: {node: '>= 0.8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fork-ts-checker-webpack-plugin@9.0.2: + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + inquirer@9.2.15: + resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==} + engines: {node: '>=18'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.2: + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@3.2.3: + resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + libphonenumber-js@1.13.6: + resolution: {integrity: sha512-NdB6O6QvlGMCoG003m0YIKG2+Xw7DjmCZhmc1RH+K6HncADUbRf8TZeLegxBBN1VFyPHcNpPTKpIhYLXzJVy1Q==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} + engines: {node: '>=6.11.5'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@1.4.5-lts.2: + resolution: {integrity: sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==} + engines: {node: '>= 6.0.0'} + deprecated: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version. + + multer@2.0.2: + resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} + engines: {node: '>= 10.16.0'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mysql2@3.22.5: + resolution: {integrity: sha512-95uZ2TrPWAZdwpB3vvvDbmEMcNG8yIeNCyu6GUcr/QnWEE/wXm7+mhOCsdQfWQDTV7qYT/PDUZ4U4UPP4AsXqQ==} + engines: {node: '>= 8.0'} + peerDependencies: + '@types/node': '>= 8' + + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nest-winston@1.10.2: + resolution: {integrity: sha512-Z9IzL/nekBOF/TEwBHUJDiDPMaXUcFquUQOFavIRet6xF0EbuWnOzslyN/ksgzG+fITNgXhMdrL/POp9SdaFxA==} + peerDependencies: + '@nestjs/common': ^5.0.0 || ^6.6.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + winston: ^3.0.0 + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + passport-jwt@4.0.1: + resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==} + + passport-strategy@1.0.0: + resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} + engines: {node: '>= 0.4.0'} + + passport@0.6.0: + resolution: {integrity: sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==} + engines: {node: '>= 0.4.0'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + + path-to-regexp@0.2.5: + resolution: {integrity: sha512-l6qtdDPIkmAmzEO6egquYDfqQGPMRNGjYtrU13HAXb3YSRrt7HSb1sJY0pKp6o2bAa86tSB6iwaW2JbthPKr7Q==} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pause@0.0.1: + resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.1: + resolution: {integrity: sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==} + engines: {node: '>=12'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.8.4: + resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + engines: {node: '>=14'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} + engines: {node: '>= 0.8.0'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + sql-escaper@1.3.3: + resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} + engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} + + sql-highlight@6.1.0: + resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==} + engines: {node: '>=14'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strtok3@10.3.5: + resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + swagger-ui-dist@5.17.14: + resolution: {integrity: sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@minify-html/node': '*' + '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' + esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@minify-html/node': + optional: true + '@swc/core': + optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true + uglify-js: + optional: true + + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} + engines: {node: '>=10'} + hasBin: true + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-loader@9.6.1: + resolution: {integrity: sha512-8FMHnmxtpncUAu0ZjkqpXnOTlwc9eY95esH8WVN94guTPPdkg2ofVdiVM5j8L2lmjiGerXd56zXb/D2JyVQPLg==} + engines: {node: '>=12.0.0'} + peerDependencies: + loader-utils: '*' + typescript: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + loader-utils: + optional: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths-webpack-plugin@4.2.0: + resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typeorm@0.3.30: + resolution: {integrity: sha512-8T35PzjefOdqc2ZR9mwLQj0pUGp6lQhMbK2EvVMwJVJWlaoHm0v/Q6dThNOZkFchD+0yMg8gwjKM28ePiLSXSQ==} + engines: {node: '>=16.13.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + '@sap/hana-client': ^2.14.22 + better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 + ioredis: ^5.0.4 + mongodb: ^5.8.0 || ^6.0.0 + mssql: ^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 || ^5.0.14 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 || ^3.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + watchpack@2.5.2: + resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-node-externals@3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + + webpack-sources@3.5.0: + resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} + engines: {node: '>=10.13.0'} + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.19.0: + resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} + engines: {node: '>= 12.0.0'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@angular-devkit/core@17.3.11(chokidar@3.6.0)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.1 + picomatch: 4.0.1 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 + + '@angular-devkit/schematics-cli@17.3.11(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.3.11(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + ansi-colors: 4.1.3 + inquirer: 9.2.15 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@17.3.11(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.3.11(chokidar@3.6.0) + jsonc-parser: 3.2.1 + magic-string: 0.30.8 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.29.7': {} + + '@borewit/text-codec@0.2.2': {} + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.8': + dependencies: + '@so-ric/colorspace': 1.1.6 + enabled: 2.0.0 + kuler: 2.0.0 + + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.2.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@ljharb/through@2.3.14': + dependencies: + call-bind: 1.0.9 + + '@lukeed/csprng@1.1.0': {} + + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.1.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.8.4 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@microsoft/tsdoc@0.15.1': {} + + '@nestjs/cli@10.4.9': + dependencies: + '@angular-devkit/core': 17.3.11(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + '@angular-devkit/schematics-cli': 17.3.11(chokidar@3.6.0) + '@nestjs/schematics': 10.2.3(chokidar@3.6.0)(typescript@5.7.2) + chalk: 4.1.2 + chokidar: 3.6.0 + cli-table3: 0.6.5 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.2)(webpack@5.97.1) + glob: 10.4.5 + inquirer: 8.2.6 + node-emoji: 1.11.0 + ora: 5.4.1 + tree-kill: 1.2.2 + tsconfig-paths: 4.2.0 + tsconfig-paths-webpack-plugin: 4.2.0 + typescript: 5.7.2 + webpack: 5.97.1 + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + - webpack-cli + + '@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + dependencies: + file-type: 20.4.1 + iterare: 1.2.1 + reflect-metadata: 0.1.14 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.4 + transitivePeerDependencies: + - supports-color + + '@nestjs/config@3.3.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + dotenv: 16.4.5 + dotenv-expand: 10.0.0 + lodash: 4.17.21 + rxjs: 7.8.2 + + '@nestjs/core@10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.3.0 + reflect-metadata: 0.1.14 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22) + transitivePeerDependencies: + - encoding + + '@nestjs/jwt@10.2.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@types/jsonwebtoken': 9.0.5 + jsonwebtoken: 9.0.2 + + '@nestjs/mapped-types@2.0.5(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + reflect-metadata: 0.1.14 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.4 + + '@nestjs/passport@10.0.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + passport: 0.6.0 + + '@nestjs/platform-express@10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + body-parser: 1.20.4 + cors: 2.8.5 + express: 4.22.1 + multer: 2.0.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.7.2)': + dependencies: + '@angular-devkit/core': 17.3.11(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + comment-json: 4.2.5 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 5.7.2 + transitivePeerDependencies: + - chokidar + + '@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.9.3)': + dependencies: + '@angular-devkit/core': 17.3.11(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + comment-json: 4.2.5 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 5.9.3 + transitivePeerDependencies: + - chokidar + + '@nestjs/serve-static@4.0.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(express@4.22.1)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + path-to-regexp: 0.2.5 + optionalDependencies: + express: 4.22.1 + + '@nestjs/swagger@7.4.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14) + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 3.3.0 + reflect-metadata: 0.1.14 + swagger-ui-dist: 5.17.14 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.4 + + '@nestjs/testing@10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/platform-express@10.4.22)': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + tslib: 2.8.1 + optionalDependencies: + '@nestjs/platform-express': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22) + + '@nestjs/typeorm@10.0.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.30(mysql2@3.22.5(@types/node@20.19.43))(ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3)))': + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2) + reflect-metadata: 0.1.14 + rxjs: 7.8.2 + typeorm: 0.3.30(mysql2@3.22.5(@types/node@20.19.43))(ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3)) + uuid: 9.0.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@nuxtjs/opencollective@0.3.2': + dependencies: + chalk: 4.1.2 + consola: 2.15.3 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@so-ric/colorspace@1.1.6': + dependencies: + color: 5.0.3 + text-hex: 1.0.0 + + '@sqltools/formatter@1.2.5': {} + + '@tokenizer/inflate@0.2.7': + dependencies: + debug: 4.4.3 + fflate: 0.8.3 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + + '@tsconfig/node10@1.0.12': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/bcrypt@5.0.2': + dependencies: + '@types/node': 20.19.43 + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.19.43 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.19.43 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.9 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.9': {} + + '@types/express-serve-static-core@4.19.8': + dependencies: + '@types/node': 20.19.43 + '@types/qs': 6.15.1 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@4.17.25': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.8 + '@types/qs': 6.15.1 + '@types/serve-static': 1.15.10 + + '@types/http-errors@2.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/jsonwebtoken@9.0.10': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 20.19.43 + + '@types/jsonwebtoken@9.0.5': + dependencies: + '@types/node': 20.19.43 + + '@types/mime@1.3.5': {} + + '@types/ms@2.1.0': {} + + '@types/multer@1.4.13': + dependencies: + '@types/express': 4.17.25 + + '@types/node@20.19.43': + dependencies: + undici-types: 6.21.0 + + '@types/passport-jwt@3.0.13': + dependencies: + '@types/express': 4.17.25 + '@types/jsonwebtoken': 9.0.10 + '@types/passport-strategy': 0.2.38 + + '@types/passport-strategy@0.2.38': + dependencies: + '@types/express': 4.17.25 + '@types/passport': 1.0.17 + + '@types/passport@1.0.17': + dependencies: + '@types/express': 4.17.25 + + '@types/qs@6.15.1': {} + + '@types/range-parser@1.2.7': {} + + '@types/semver@7.7.1': {} + + '@types/send@0.17.6': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.19.43 + + '@types/send@1.2.1': + dependencies: + '@types/node': 20.19.43 + + '@types/serve-static@1.15.10': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 20.19.43 + '@types/send': 0.17.6 + + '@types/triple-beam@1.3.5': {} + + '@types/validator@13.15.10': {} + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.8.4 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.3 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.8.4 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.1 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + eslint: 8.57.1 + semver: 7.8.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.1': {} + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abbrev@1.1.1: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn-walk@8.3.5: + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv-formats@2.1.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv-keywords@3.5.2(ajv@6.15.0): + dependencies: + ajv: 6.15.0 + + ajv-keywords@5.1.0(ajv@8.20.0): + dependencies: + ajv: 8.20.0 + fast-deep-equal: 3.1.3 + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + ansis@4.3.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + app-root-path@3.1.0: {} + + append-field@1.0.0: {} + + aproba@2.1.0: {} + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-timsort@1.0.3: {} + + array-union@2.1.0: {} + + async@3.2.6: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + aws-ssl-profiles@1.1.2: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.10.37: {} + + bcrypt@5.1.1: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 5.1.0 + transitivePeerDependencies: + - encoding + - supports-color + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.4: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.14.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.37 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.375 + node-releases: 2.0.47 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001799: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + chrome-trace-event@1.0.4: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.4: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.6 + validator: 13.15.35 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-convert@3.1.3: + dependencies: + color-name: 2.1.0 + + color-name@1.1.4: {} + + color-name@2.1.0: {} + + color-string@2.1.4: + dependencies: + color-name: 2.1.0 + + color-support@1.1.3: {} + + color@5.0.3: + dependencies: + color-convert: 3.1.3 + color-string: 2.1.4 + + commander@2.20.3: {} + + commander@4.1.1: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + consola@2.15.3: {} + + console-control-strings@1.1.0: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.7: {} + + cookie@0.7.2: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.7.2): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.2.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.7.2 + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + dayjs@1.11.21: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dedent@1.7.2: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + delegates@1.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-libc@2.1.2: {} + + diff@4.0.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dotenv-expand@10.0.0: {} + + dotenv@16.4.5: {} + + dotenv@16.6.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.375: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + + encodeurl@2.0.0: {} + + enhanced-resolve@5.24.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.1 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.2.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + events@3.3.0: {} + + express@4.22.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.4 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.14.2 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.1.2: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fecha@4.2.3: {} + + fflate@0.8.3: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-type@20.4.1: + dependencies: + '@tokenizer/inflate': 0.2.7 + strtok3: 10.3.5 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.4.2: {} + + fn.name@1.1.0: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1): + dependencies: + '@babel/code-frame': 7.29.7 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.7.2) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.5 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.8.4 + tapable: 2.3.3 + typescript: 5.7.2 + webpack: 5.97.1 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-monkey@1.1.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gauge@3.0.2: + dependencies: + aproba: 2.1.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-unicode@2.0.1: {} + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.18.1 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + inquirer@9.2.15: + dependencies: + '@ljharb/through': 2.3.14 + ansi-escapes: 4.3.2 + chalk: 5.6.2 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.18.1 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-property@1.0.2: {} + + is-stream@2.0.1: {} + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + + is-unicode-supported@0.1.0: {} + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterare@1.2.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.19.43 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.2.1: {} + + jsonc-parser@3.3.1: {} + + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.3 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.8.4 + + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.8.4 + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.3: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kuler@2.0.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + libphonenumber-js@1.13.6: {} + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.2: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash@4.17.21: {} + + lodash@4.18.1: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + long@5.3.2: {} + + lru-cache@10.4.3: {} + + lru.min@1.1.4: {} + + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-error@1.3.6: {} + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + memfs@3.5.3: + dependencies: + fs-monkey: 1.1.0 + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.1.1 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.3: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + multer@1.4.5-lts.2: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + multer@2.0.2: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 2.0.0 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + mute-stream@0.0.8: {} + + mute-stream@1.0.0: {} + + mysql2@3.22.5(@types/node@20.19.43): + dependencies: + '@types/node': 20.19.43 + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.2 + long: 5.3.2 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + sql-escaper: 1.3.3 + + named-placeholders@1.1.6: + dependencies: + lru.min: 1.1.4 + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + + nest-winston@1.10.2(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(winston@3.19.0): + dependencies: + '@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2) + fast-safe-stringify: 2.1.1 + winston: 3.19.0 + + node-abort-controller@3.1.1: {} + + node-addon-api@5.1.0: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.18.1 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-releases@2.0.47: {} + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + passport-jwt@4.0.1: + dependencies: + jsonwebtoken: 9.0.3 + passport-strategy: 1.0.0 + + passport-strategy@1.0.0: {} + + passport@0.6.0: + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + utils-merge: 1.0.1 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + + path-to-regexp@0.1.13: {} + + path-to-regexp@0.2.5: {} + + path-to-regexp@3.3.0: {} + + path-type@4.0.0: {} + + pause@0.0.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.1: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.1.0: {} + + prelude-ls@1.2.1: {} + + prettier@3.8.4: {} + + process-nextick-args@2.0.1: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + qs@6.14.2: + dependencies: + side-channel: 1.1.1 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + reflect-metadata@0.1.14: {} + + reflect-metadata@0.2.2: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.1.0: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-async@2.4.1: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.15.0 + ajv-keywords: 3.5.2(ajv@6.15.0) + + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) + + semver@6.3.1: {} + + semver@7.8.4: {} + + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + source-map@0.7.6: {} + + sql-escaper@1.3.3: {} + + sql-highlight@6.1.0: {} + + stack-trace@0.0.10: {} + + statuses@2.0.2: {} + + streamsearch@1.1.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strtok3@10.3.5: + dependencies: + '@tokenizer/token': 0.3.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + swagger-ui-dist@5.17.14: {} + + symbol-observable@4.0.0: {} + + tapable@2.3.3: {} + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + terser-webpack-plugin@5.6.1(webpack@5.97.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.48.0 + webpack: 5.97.1 + + terser@5.48.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-hex@1.0.0: {} + + text-table@0.2.0: {} + + through@2.3.8: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + token-types@6.1.2: + dependencies: + '@borewit/text-codec': 0.2.2 + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + tr46@0.0.3: {} + + tree-kill@1.2.2: {} + + triple-beam@1.4.1: {} + + ts-api-utils@1.4.3(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-loader@9.6.1(typescript@5.9.3)(webpack@5.97.1): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.24.0 + micromatch: 4.0.8 + semver: 7.8.4 + source-map: 0.7.6 + typescript: 5.9.3 + webpack: 5.97.1 + + ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.19.43 + acorn: 8.17.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.4 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths-webpack-plugin@4.2.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.24.0 + tapable: 2.3.3 + tsconfig-paths: 4.2.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typedarray@0.0.6: {} + + typeorm@0.3.30(mysql2@3.22.5(@types/node@20.19.43))(ts-node@10.9.2(@types/node@20.19.43)(typescript@5.9.3)): + dependencies: + '@sqltools/formatter': 1.2.5 + ansis: 4.3.1 + app-root-path: 3.1.0 + buffer: 6.0.3 + dayjs: 1.11.21 + debug: 4.4.3 + dedent: 1.7.2 + dotenv: 16.6.1 + glob: 10.5.0 + reflect-metadata: 0.2.2 + sha.js: 2.4.12 + sql-highlight: 6.1.0 + tslib: 2.8.1 + uuid: 11.1.1 + yargs: 17.7.2 + optionalDependencies: + mysql2: 3.22.5(@types/node@20.19.43) + ts-node: 10.9.2(@types/node@20.19.43)(typescript@5.9.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + typescript@5.7.2: {} + + typescript@5.9.3: {} + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.5.0: {} + + undici-types@6.21.0: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@11.1.1: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + validator@13.15.35: {} + + vary@1.1.2: {} + + watchpack@2.5.2: + dependencies: + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@3.0.1: {} + + webpack-node-externals@3.0.0: {} + + webpack-sources@3.5.0: {} + + webpack@5.97.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.9 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.0 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.2 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(webpack@5.97.1) + watchpack: 2.5.2 + webpack-sources: 3.5.0 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.19.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.8 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + wrappy@1.0.2: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..c5c0af7 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,117 @@ +import { MiddlewareConsumer, Module, NestModule, RequestMethod } from '@nestjs/common'; +import { ConfigModule, ConfigService } from '@nestjs/config'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { APP_GUARD } from '@nestjs/core'; +import { JwtModule } from '@nestjs/jwt'; +import { ServeStaticModule } from '@nestjs/serve-static'; + +import configuration from './config/configuration'; + +import { JwtAuthGuard, RolesGuard } from './common/guards'; +import { UploadMiddleware } from './common/middlewares'; + +import { Admin } from './entities/admin.entity'; +import { Banner } from './entities/banner.entity'; +import { Manual } from './entities/manual.entity'; +import { Message } from './entities/message.entity'; +import { NewsCategory } from './entities/news-category.entity'; +import { News } from './entities/news.entity'; +import { ProductCategory } from './entities/product-category.entity'; +import { Product } from './entities/product.entity'; +import { SiteConfig } from './entities/site-config.entity'; +import { Team } from './entities/team.entity'; + +import { AuthModule } from './modules/auth/auth.module'; +import { AdminUserModule } from './modules/admin-user/admin-user.module'; +import { BannerModule } from './modules/banner/banner.module'; +import { ManualModule } from './modules/manual/manual.module'; +import { MessageModule } from './modules/message/message.module'; +import { NewsCategoryModule } from './modules/news-category/news-category.module'; +import { NewsModule } from './modules/news/news.module'; +import { ProductCategoryModule } from './modules/product-category/product-category.module'; +import { ProductModule } from './modules/product/product.module'; +import { SiteConfigModule } from './modules/site-config/site-config.module'; +import { TeamModule } from './modules/team/team.module'; +import { UploadModule } from './modules/upload/upload.module'; + +import path from 'path'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + load: [configuration], + }), + TypeOrmModule.forRootAsync({ + inject: [ConfigService], + useFactory: (config: ConfigService) => ({ + type: 'mysql', + host: config.get('database.host'), + port: config.get('database.port'), + username: config.get('database.user'), + password: config.get('database.password'), + database: config.get('database.name'), + autoLoadEntities: true, + synchronize: false, + timezone: '+08:00', + charset: 'utf8mb4', + logging: config.get('nodeEnv') === 'development', + }), + }), + JwtModule.registerAsync({ + global: true, + inject: [ConfigService], + useFactory: (config: ConfigService) => ({ + secret: config.get('jwt.secret'), + signOptions: { expiresIn: config.get('jwt.expiresIn') }, + }), + }), + ServeStaticModule.forRoot({ + rootPath: path.resolve( + process.cwd(), + (process.env.UPLOAD_ROOT ?? './uploads').replace(/^\.\/?/, ''), + ), + serveRoot: '/uploads', + serveStaticOptions: { index: false }, + }), + TypeOrmModule.forFeature([ + Admin, + Banner, + Manual, + Message, + NewsCategory, + News, + ProductCategory, + Product, + SiteConfig, + Team, + ]), + AuthModule, + AdminUserModule, + BannerModule, + ManualModule, + MessageModule, + NewsCategoryModule, + NewsModule, + ProductCategoryModule, + ProductModule, + SiteConfigModule, + TeamModule, + UploadModule, + ], + providers: [ + // JwtAuthGuard 依赖 JwtService + Reflector,必须用 DI 注册 + { provide: APP_GUARD, useClass: JwtAuthGuard }, + // RolesGuard 读取 @Roles() 元数据校验角色权限 + { provide: APP_GUARD, useClass: RolesGuard }, + ], +}) +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer): void { + // middleware 在 global prefix 应用之前注册,路径用不带前缀的内部路径 + consumer.apply(UploadMiddleware).forRoutes({ + path: 'admin/upload', + method: RequestMethod.POST, + }); + } +} diff --git a/src/common/decorators/current-admin.decorator.ts b/src/common/decorators/current-admin.decorator.ts new file mode 100644 index 0000000..2f024b6 --- /dev/null +++ b/src/common/decorators/current-admin.decorator.ts @@ -0,0 +1,22 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; + +/** + * 当前登录管理员信息(由 JwtAuthGuard 解析后挂到 req.admin) + */ +export interface CurrentAdminPayload { + id: number; + username: string; + nickname: string; + role: 'super_admin' | 'normal'; +} + +export const CurrentAdmin = createParamDecorator( + (data: keyof CurrentAdminPayload | undefined, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const admin: CurrentAdminPayload | undefined = request.admin; + if (!admin) { + return undefined; + } + return data ? admin[data] : admin; + }, +); diff --git a/src/common/decorators/index.ts b/src/common/decorators/index.ts new file mode 100644 index 0000000..578ddca --- /dev/null +++ b/src/common/decorators/index.ts @@ -0,0 +1,3 @@ +export * from './current-admin.decorator'; +export * from './public.decorator'; +export * from './roles.decorator'; diff --git a/src/common/decorators/public.decorator.ts b/src/common/decorators/public.decorator.ts new file mode 100644 index 0000000..41e13de --- /dev/null +++ b/src/common/decorators/public.decorator.ts @@ -0,0 +1,8 @@ +import { SetMetadata } from '@nestjs/common'; + +/** + * 标记接口为公开(无需 JWT)。 + * 与 JwtAuthGuard 配合:守卫读取 IS_PUBLIC 元数据后跳过校验。 + */ +export const IS_PUBLIC_KEY = 'isPublic'; +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/src/common/decorators/roles.decorator.ts b/src/common/decorators/roles.decorator.ts new file mode 100644 index 0000000..d7fdb0f --- /dev/null +++ b/src/common/decorators/roles.decorator.ts @@ -0,0 +1,13 @@ +import { SetMetadata } from '@nestjs/common'; + +/** 管理员角色类型 */ +export type AdminRole = 'super_admin' | 'normal'; + +/** 元数据 key:标记接口所需角色 */ +export const ROLES_KEY = 'roles'; + +/** + * 标记接口所需的角色。配合 RolesGuard 使用: + * @Roles('super_admin') 仅超级管理员可访问 + */ +export const Roles = (...roles: AdminRole[]) => SetMetadata(ROLES_KEY, roles); diff --git a/src/common/dto/api-response.dto.ts b/src/common/dto/api-response.dto.ts new file mode 100644 index 0000000..2300518 --- /dev/null +++ b/src/common/dto/api-response.dto.ts @@ -0,0 +1,39 @@ +/** + * 统一响应体 + * 成功:{ code:200, msg:'操作成功', data:{} } + * 错误:{ code:401/400/403/500, msg:'错误提示', data:null } + */ +export class ApiResponse { + code: number; + msg: string; + data: T | null; + + constructor(code: number, msg: string, data: T | null = null) { + this.code = code; + this.msg = msg; + this.data = data; + } + + static success(data: T, msg = '操作成功'): ApiResponse { + return new ApiResponse(200, msg, data); + } + + static error(code: number, msg: string): ApiResponse { + return new ApiResponse(code, msg, null); + } +} + +/** 分页查询结果通用结构 */ +export interface PaginatedResult { + list: T[]; + total: number; + page: number; + pageSize: number; +} + +/** 通用分页 DTO 基类 */ +export class PaginationDto { + page: number; + pageSize: number; + keyword?: string; +} diff --git a/src/common/filters/all-exceptions.filter.ts b/src/common/filters/all-exceptions.filter.ts new file mode 100644 index 0000000..e3da2dd --- /dev/null +++ b/src/common/filters/all-exceptions.filter.ts @@ -0,0 +1,101 @@ +import { + ArgumentsHost, + Catch, + ExceptionFilter, + HttpException, + HttpStatus, + Logger, +} from '@nestjs/common'; +import { Request, Response } from 'express'; +import { QueryFailedError } from 'typeorm'; + +/** MySQL 驱动抛出的错误对象结构(部分字段) */ +interface MysqlDriverError { + code?: string; + errno?: number; + sqlMessage?: string; + sqlState?: string; +} + +/** + * 将 MySQL 驱动错误码翻译为面向用户的中文提示。 + * 不暴露原始 SQL / 英文消息给前端。 + */ +function describeDbError(err: MysqlDriverError): string { + switch (err.code) { + case 'ER_BAD_FIELD_ERROR': + return '数据库字段缺失,请联系管理员执行最新的数据库升级脚本'; + case 'ER_NO_SUCH_TABLE': + return '数据库表不存在,请联系管理员核对数据库结构'; + case 'ER_DUP_ENTRY': + return '数据重复,请检查唯一字段(如登录账号)'; + case 'ER_ROW_IS_REFERENCED_2': + case 'ER_ROW_IS_REFERENCED': + return '该记录被其他数据引用,无法删除或修改'; + case 'ER_DATA_TOO_LONG': + return '输入内容过长,请精简后重试'; + case 'ER_BAD_NULL_ERROR': + return '缺少必填字段,请补全后重试'; + case 'ER_LOCK_WAIT_TIMEOUT': + case 'ER_LOCK_DEADLOCK': + return '数据库繁忙,请稍后重试'; + default: + return '服务器内部错误,请稍后重试'; + } +} + +/** + * 全局异常过滤器 + * 把所有异常统一包装成 { code, msg, data:null } 结构。 + * 所有面向用户的提示均为中文,原始英文错误仅输出到服务端日志。 + */ +@Catch() +export class AllExceptionsFilter implements ExceptionFilter { + private readonly logger = new Logger(AllExceptionsFilter.name); + + catch(exception: unknown, host: ArgumentsHost): void { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const request = ctx.getRequest(); + + const isHttp = exception instanceof HttpException; + const status = isHttp + ? exception.getStatus() + : HttpStatus.INTERNAL_SERVER_ERROR; + + let message = '服务器内部错误'; + if (isHttp) { + const res = exception.getResponse(); + if (typeof res === 'string') { + message = res; + } else if (typeof res === 'object' && res !== null) { + const r = res as { message?: unknown }; + message = Array.isArray(r.message) + ? r.message.join(';') + : String(r.message ?? message); + } + } else if (exception instanceof QueryFailedError) { + // TypeORM 查询失败:底层 MySQL 错误统一翻译为中文 + const driverErr = ( + exception as { driverError?: MysqlDriverError } + ).driverError; + message = describeDbError( + driverErr ?? (exception as unknown as MysqlDriverError), + ); + this.logger.error(exception.stack); + } else if (exception instanceof Error) { + // 其他未识别错误:不直接暴露英文 message,统一中文兜底 + message = '服务器内部错误,请稍后重试'; + this.logger.error(exception.stack); + } + + const code = status; + response.status(status).json({ + code, + msg: message, + data: null, + path: request.url, + timestamp: new Date().toISOString(), + }); + } +} diff --git a/src/common/filters/index.ts b/src/common/filters/index.ts new file mode 100644 index 0000000..03c9c30 --- /dev/null +++ b/src/common/filters/index.ts @@ -0,0 +1 @@ +export * from './all-exceptions.filter'; diff --git a/src/common/guards/index.ts b/src/common/guards/index.ts new file mode 100644 index 0000000..e174be2 --- /dev/null +++ b/src/common/guards/index.ts @@ -0,0 +1,2 @@ +export * from './jwt-auth.guard'; +export * from './roles.guard'; diff --git a/src/common/guards/jwt-auth.guard.ts b/src/common/guards/jwt-auth.guard.ts new file mode 100644 index 0000000..fcada09 --- /dev/null +++ b/src/common/guards/jwt-auth.guard.ts @@ -0,0 +1,65 @@ +import { + CanActivate, + ExecutionContext, + Injectable, + UnauthorizedException, +} from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { JwtService } from '@nestjs/jwt'; +import { Request } from 'express'; +import { IS_PUBLIC_KEY } from '../decorators/public.decorator'; + +const DEFAULT_JWT_SECRET = 'corp_website_secret_key_2026ai'; + +/** + * JWT 全局守卫 + * - 通过 @Public() 装饰的接口跳过校验(前台公开接口) + * - 其余接口要求请求头携带 Authorization: Bearer + */ +@Injectable() +export class JwtAuthGuard implements CanActivate { + constructor( + private readonly reflector: Reflector, + private readonly jwtService: JwtService, + ) {} + + async canActivate(context: ExecutionContext): Promise { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + if (isPublic) { + return true; + } + + const request = context.switchToHttp().getRequest(); + const token = this.extractToken(request); + if (!token) { + throw new UnauthorizedException('未登录或登录已过期'); + } + + try { + const payload = await this.jwtService.verifyAsync<{ + id: number; + username: string; + nickname: string; + role: 'super_admin' | 'normal'; + }>(token, { + secret: process.env.JWT_SECRET ?? DEFAULT_JWT_SECRET, + }); + request.admin = payload; + } catch { + throw new UnauthorizedException('登录凭证无效'); + } + return true; + } + + private extractToken(request: Request): string | null { + const authHeader = request.headers.authorization ?? ''; + const [type, token] = authHeader.split(' '); + if (type === 'Bearer' && token) { + return token.trim(); + } + return null; + } +} diff --git a/src/common/guards/roles.guard.ts b/src/common/guards/roles.guard.ts new file mode 100644 index 0000000..f36e5fb --- /dev/null +++ b/src/common/guards/roles.guard.ts @@ -0,0 +1,35 @@ +import { + CanActivate, + ExecutionContext, + ForbiddenException, + Injectable, +} from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { ROLES_KEY, type AdminRole } from '../decorators/roles.decorator'; + +/** + * 角色守卫(全局注册,由 @Roles() 元数据驱动) + * - 未声明 @Roles() 的接口:放行(仅需登录) + * - 声明 @Roles('super_admin') 的接口:要求 request.admin.role === 'super_admin' + */ +@Injectable() +export class RolesGuard implements CanActivate { + constructor(private readonly reflector: Reflector) {} + + canActivate(context: ExecutionContext): boolean { + const required = this.reflector.getAllAndOverride( + ROLES_KEY, + [context.getHandler(), context.getClass()], + ); + if (!required || required.length === 0) { + return true; + } + + const request = context.switchToHttp().getRequest(); + const role: AdminRole | undefined = request.admin?.role; + if (!role || !required.includes(role)) { + throw new ForbiddenException('权限不足,需要超级管理员账号'); + } + return true; + } +} diff --git a/src/common/interceptors/index.ts b/src/common/interceptors/index.ts new file mode 100644 index 0000000..0546468 --- /dev/null +++ b/src/common/interceptors/index.ts @@ -0,0 +1 @@ +export * from './transform.interceptor'; diff --git a/src/common/interceptors/transform.interceptor.ts b/src/common/interceptors/transform.interceptor.ts new file mode 100644 index 0000000..4626221 --- /dev/null +++ b/src/common/interceptors/transform.interceptor.ts @@ -0,0 +1,33 @@ +import { + CallHandler, + ExecutionContext, + Injectable, + NestInterceptor, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ApiResponse } from '../dto/api-response.dto'; + +/** + * 全局统一响应拦截器 + * 把所有 controller 返回值包装成 { code, msg, data } 结构 + */ +@Injectable() +export class TransformInterceptor + implements NestInterceptor> +{ + intercept( + context: ExecutionContext, + next: CallHandler, + ): Observable> { + return next.handle().pipe( + map((data) => { + // 如果已经是 ApiResponse,则原样返回 + if (data instanceof ApiResponse) { + return data; + } + return ApiResponse.success(data) as ApiResponse; + }), + ); + } +} diff --git a/src/common/middlewares/index.ts b/src/common/middlewares/index.ts new file mode 100644 index 0000000..c861c6a --- /dev/null +++ b/src/common/middlewares/index.ts @@ -0,0 +1 @@ +export * from './upload.middleware'; diff --git a/src/common/middlewares/upload.middleware.ts b/src/common/middlewares/upload.middleware.ts new file mode 100644 index 0000000..b3d3bd0 --- /dev/null +++ b/src/common/middlewares/upload.middleware.ts @@ -0,0 +1,63 @@ +import { + Injectable, + NestMiddleware, + BadRequestException, +} from '@nestjs/common'; +import { Request, Response, NextFunction } from 'express'; +import multer, { Multer } from 'multer'; +import path from 'path'; +import fs from 'fs'; + +const ALLOWED_MIME = ['image/jpeg', 'image/png', 'image/webp']; +const MAX_SIZE = 2 * 1024 * 1024; // 2M + +/** + * 文件上传中间件(按日期分文件夹) + * 单图字段名固定:file + */ +@Injectable() +export class UploadMiddleware implements NestMiddleware { + private readonly upload: Multer; + + constructor() { + const root = process.env.UPLOAD_ROOT ?? './uploads'; + this.upload = multer({ + storage: multer.diskStorage({ + destination: (_req, _file, cb) => { + const date = new Date(); + const dir = path.join( + process.cwd(), + root.replace(/^\.\/?/, ''), + `${date.getFullYear()}/${String(date.getMonth() + 1).padStart(2, '0')}`, + ); + fs.mkdirSync(dir, { recursive: true }); + cb(null, dir); + }, + filename: (_req, file, cb) => { + const ext = path.extname(file.originalname).toLowerCase(); + const name = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}${ext}`; + cb(null, name); + }, + }), + fileFilter: (_req, file, cb) => { + if (ALLOWED_MIME.includes(file.mimetype)) { + cb(null, true); + } else { + // FileFilterCallback 重载:错误时只传 Error,不传 acceptFile + cb(new Error('仅支持 jpg/png/jpeg/webp 格式图片')); + } + }, + limits: { fileSize: MAX_SIZE }, + }); + } + + use(req: Request, _res: Response, next: NextFunction): void { + this.upload.single('file')(req, _res, (err) => { + if (err) { + next(new BadRequestException(err.message ?? '文件上传失败')); + return; + } + next(); + }); + } +} diff --git a/src/config/configuration.ts b/src/config/configuration.ts new file mode 100644 index 0000000..5d262f0 --- /dev/null +++ b/src/config/configuration.ts @@ -0,0 +1,47 @@ +/** + * 全局环境变量解析 + * 所有配置项从这里统一读取,禁止在业务代码中直接 process.env + */ +export interface AppConfig { + /** 服务端口 */ + port: number; + /** 运行环境 */ + nodeEnv: string; + /** 文件上传根目录 */ + uploadRoot: string; + /** 数据库配置 */ + database: { + host: string; + port: number; + user: string; + password: string; + name: string; + }; + /** JWT 配置 */ + jwt: { + secret: string; + expiresIn: string; + }; +} + +export default (): AppConfig => { + const port = parseInt(process.env.PORT ?? '3001', 10); + const dbPort = parseInt(process.env.DB_PORT ?? '3306', 10); + + return { + port: Number.isNaN(port) ? 3001 : port, + nodeEnv: process.env.NODE_ENV ?? 'development', + uploadRoot: process.env.UPLOAD_ROOT ?? './uploads', + database: { + host: process.env.DB_HOST ?? '127.0.0.1', + port: Number.isNaN(dbPort) ? 3306 : dbPort, + user: process.env.DB_USER ?? 'root', + password: process.env.DB_PASSWORD ?? '', + name: process.env.DB_NAME ?? 'corp_website', + }, + jwt: { + secret: process.env.JWT_SECRET ?? 'corp_website_secret_key_2026ai', + expiresIn: process.env.JWT_EXPIRES_IN ?? '7d', + }, + }; +}; diff --git a/src/config/swagger.config.ts b/src/config/swagger.config.ts new file mode 100644 index 0000000..0bdc1b3 --- /dev/null +++ b/src/config/swagger.config.ts @@ -0,0 +1,22 @@ +import { DocumentBuilder } from '@nestjs/swagger'; + +/** + * Swagger 全局配置 + * 访问地址:http://localhost:3001/api-docs + */ +export const swaggerOptions = new DocumentBuilder() + .setTitle('企业官方网站 接口文档') + .setDescription('Next14 + Nest10 + JWT + MySQL8 全栈项目后端 API') + .setVersion('1.0.0') + .addBearerAuth( + { + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT', + name: 'Authorization', + description: '请输入 JWT Token,格式:Bearer xxxxx', + in: 'header', + }, + 'admin-token', + ) + .build(); diff --git a/src/entities/admin.entity.ts b/src/entities/admin.entity.ts new file mode 100644 index 0000000..0ce6fcc --- /dev/null +++ b/src/entities/admin.entity.ts @@ -0,0 +1,43 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 后台管理员表 admin + */ +@Entity('admin') +export class Admin { + /** 主键ID */ + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 登录账号 */ + @Column({ type: 'varchar', length: 50, comment: '登录账号' }) + username: string; + + /** 加密密码(bcrypt) */ + @Column({ type: 'varchar', length: 100, comment: '加密密码', select: false }) + password: string; + + /** 管理员名称 */ + @Column({ type: 'varchar', length: 50, comment: '管理员名称' }) + nickname: string; + + /** 头像地址 */ + @Column({ type: 'varchar', length: 255, default: '', comment: '头像地址' }) + avatar: string; + + /** 角色:super_admin 超级管理员 / normal 普通管理员 */ + @Column({ type: 'varchar', length: 20, default: 'normal', comment: '角色' }) + role: 'super_admin' | 'normal'; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/banner.entity.ts b/src/entities/banner.entity.ts new file mode 100644 index 0000000..69b8a46 --- /dev/null +++ b/src/entities/banner.entity.ts @@ -0,0 +1,42 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 首页轮播图 banner + */ +@Entity('banner') +export class Banner { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 轮播标题 */ + @Column({ type: 'varchar', length: 100, comment: '轮播标题' }) + title: string; + + /** 图片地址 */ + @Column({ type: 'varchar', length: 255, comment: '图片地址' }) + image: string; + + /** 跳转链接 */ + @Column({ type: 'varchar', length: 255, default: '', comment: '跳转链接' }) + link: string; + + /** 排序值(越小越靠前) */ + @Column({ type: 'int', default: 0, comment: '排序值' }) + sort: number; + + /** 是否展示 1是 0否 */ + @Column({ type: 'tinyint', name: 'is_show', default: 1, comment: '是否展示 1是0否' }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/index.ts b/src/entities/index.ts new file mode 100644 index 0000000..83fade1 --- /dev/null +++ b/src/entities/index.ts @@ -0,0 +1,9 @@ +export * from './admin.entity'; +export * from './banner.entity'; +export * from './message.entity'; +export * from './news-category.entity'; +export * from './news.entity'; +export * from './product-category.entity'; +export * from './product.entity'; +export * from './site-config.entity'; +export * from './team.entity'; diff --git a/src/entities/manual.entity.ts b/src/entities/manual.entity.ts new file mode 100644 index 0000000..6f8d2e4 --- /dev/null +++ b/src/entities/manual.entity.ts @@ -0,0 +1,78 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 使用手册表 manual + * - 自引用 parentId 实现多级树形结构 + * - type=0 为目录节点(无 content),type=1 为文档节点(有 content) + */ +@Entity('manual') +export class Manual { + /** 主键ID */ + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 父节点ID,NULL 表示根节点 */ + @Column({ + name: 'parent_id', + type: 'int', + unsigned: true, + nullable: true, + comment: '父节点ID,NULL=根节点', + }) + parentId: number | null; + + /** 标题 */ + @Column({ type: 'varchar', length: 200, comment: '标题' }) + title: string; + + /** 节点类型:0=目录 1=文档 */ + @Column({ + type: 'tinyint', + default: 1, + comment: '类型:0=目录节点 1=文档节点', + }) + type: number; + + /** 文档正文(富文本 HTML 或 Markdown;目录节点为 null) */ + @Column({ + type: 'longtext', + nullable: true, + comment: '文档正文(目录节点为空)', + }) + content: string | null; + + /** 正文格式:html=富文本 markdown=Markdown */ + @Column({ + name: 'content_format', + type: 'varchar', + length: 10, + default: 'html', + comment: '正文格式:html=富文本 markdown=Markdown', + }) + contentFormat: 'html' | 'markdown'; + + /** 排序值,越小越靠前 */ + @Column({ type: 'int', default: 0, comment: '排序值' }) + sort: number; + + /** 是否显示:1显示 0隐藏 */ + @Column({ + name: 'is_show', + type: 'tinyint', + default: 1, + comment: '是否显示 1是0否', + }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/message.entity.ts b/src/entities/message.entity.ts new file mode 100644 index 0000000..c80eeac --- /dev/null +++ b/src/entities/message.entity.ts @@ -0,0 +1,38 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, +} from 'typeorm'; + +/** + * 客户留言 message + */ +@Entity('message') +export class Message { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 访客姓名 */ + @Column({ type: 'varchar', length: 50, comment: '访客姓名' }) + name: string; + + /** 联系电话 */ + @Column({ type: 'varchar', length: 20, comment: '联系电话' }) + phone: string; + + /** 邮箱 */ + @Column({ type: 'varchar', length: 100, default: '', comment: '邮箱' }) + email: string; + + /** 留言内容 */ + @Column({ type: 'text', comment: '留言内容' }) + content: string; + + /** 0未读 1已读 */ + @Column({ type: 'tinyint', name: 'is_read', default: 0, comment: '0未读1已读' }) + isRead: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; +} diff --git a/src/entities/news-category.entity.ts b/src/entities/news-category.entity.ts new file mode 100644 index 0000000..bc2998a --- /dev/null +++ b/src/entities/news-category.entity.ts @@ -0,0 +1,31 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 新闻分类 news_category + */ +@Entity('news_category') +export class NewsCategory { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + @Column({ type: 'varchar', length: 100, comment: '分类名称' }) + name: string; + + @Column({ type: 'int', default: 0, comment: '排序' }) + sort: number; + + @Column({ type: 'tinyint', name: 'is_show', default: 1 }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/news.entity.ts b/src/entities/news.entity.ts new file mode 100644 index 0000000..c971195 --- /dev/null +++ b/src/entities/news.entity.ts @@ -0,0 +1,58 @@ +import { + Column, + CreateDateColumn, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { NewsCategory } from './news-category.entity'; + +/** + * 新闻资讯 news + */ +@Entity('news') +@Index('idx_category', ['categoryId']) +export class News { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + @Column({ type: 'int', unsigned: true, name: 'category_id' }) + categoryId: number; + + @ManyToOne(() => NewsCategory) + @JoinColumn({ name: 'category_id', referencedColumnName: 'id' }) + category?: NewsCategory; + + /** 新闻标题 */ + @Column({ type: 'varchar', length: 200, comment: '新闻标题' }) + title: string; + + /** 封面图 */ + @Column({ type: 'varchar', length: 255, default: '', comment: '封面图' }) + cover: string; + + /** 简介 */ + @Column({ type: 'varchar', length: 500, default: '', comment: '简介' }) + intro: string; + + /** 新闻正文富文本 */ + @Column({ type: 'longtext', comment: '新闻正文富文本' }) + content: string; + + /** 是否置顶 */ + @Column({ type: 'tinyint', name: 'is_top', default: 0, comment: '是否置顶' }) + isTop: number; + + /** 状态:1发布 0草稿 */ + @Column({ type: 'tinyint', default: 1, comment: '1发布 0草稿' }) + status: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/product-category.entity.ts b/src/entities/product-category.entity.ts new file mode 100644 index 0000000..512dd84 --- /dev/null +++ b/src/entities/product-category.entity.ts @@ -0,0 +1,34 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 产品分类 product_category + */ +@Entity('product_category') +export class ProductCategory { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 分类名称 */ + @Column({ type: 'varchar', length: 100, comment: '分类名称' }) + name: string; + + /** 排序值 */ + @Column({ type: 'int', default: 0, comment: '排序' }) + sort: number; + + /** 是否展示 */ + @Column({ type: 'tinyint', name: 'is_show', default: 1 }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/product.entity.ts b/src/entities/product.entity.ts new file mode 100644 index 0000000..38b8e70 --- /dev/null +++ b/src/entities/product.entity.ts @@ -0,0 +1,60 @@ +import { + Column, + CreateDateColumn, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { ProductCategory } from './product-category.entity'; + +/** + * 产品 product + */ +@Entity('product') +@Index('idx_category', ['categoryId']) +export class Product { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 分类ID */ + @Column({ type: 'int', unsigned: true, name: 'category_id', comment: '分类ID' }) + categoryId: number; + + /** 所属分类(仅用于查询关联,不映射物理外键) */ + @ManyToOne(() => ProductCategory) + @JoinColumn({ name: 'category_id', referencedColumnName: 'id' }) + category?: ProductCategory; + + /** 产品名称 */ + @Column({ type: 'varchar', length: 100, comment: '产品名称' }) + name: string; + + /** 封面图 */ + @Column({ type: 'varchar', length: 255, comment: '封面图' }) + cover: string; + + /** 简短描述 */ + @Column({ type: 'text', nullable: true, comment: '简短描述' }) + desc: string | null; + + /** 详情富文本 */ + @Column({ type: 'longtext', nullable: true, comment: '详情富文本' }) + content: string | null; + + /** 排序值 */ + @Column({ type: 'int', default: 0 }) + sort: number; + + /** 上下架 1上架 0下架 */ + @Column({ type: 'tinyint', name: 'is_show', default: 1, comment: '上下架' }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/site-config.entity.ts b/src/entities/site-config.entity.ts new file mode 100644 index 0000000..a18da66 --- /dev/null +++ b/src/entities/site-config.entity.ts @@ -0,0 +1,58 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 网站基础配置 site_config(仅单条数据 id=1) + */ +@Entity('site_config') +export class SiteConfig { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 网站名称 */ + @Column({ name: 'site_name', type: 'varchar', length: 100, comment: '网站名称' }) + siteName: string; + + /** logo 图片 */ + @Column({ type: 'varchar', length: 255, default: '', comment: 'logo图片' }) + logo: string; + + /** 联系电话 */ + @Column({ type: 'varchar', length: 50, default: '', comment: '联系电话' }) + tel: string; + + /** 公司地址 */ + @Column({ type: 'varchar', length: 255, default: '', comment: '公司地址' }) + address: string; + + /** 商务邮箱 */ + @Column({ type: 'varchar', length: 100, default: '', comment: '商务邮箱' }) + email: string; + + /** 底部版权 */ + @Column({ type: 'varchar', length: 255, default: '', comment: '底部版权' }) + copyright: string; + + /** 备案号 */ + @Column({ type: 'varchar', length: 100, default: '', comment: '备案号' }) + icp: string; + + /** 企业简介标题 */ + @Column({ name: 'about_title', type: 'varchar', length: 100, default: '', comment: '企业简介标题' }) + aboutTitle: string; + + /** 企业简介正文 */ + @Column({ name: 'about_content', type: 'longtext', nullable: true, comment: '企业简介正文' }) + aboutContent: string | null; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/entities/team.entity.ts b/src/entities/team.entity.ts new file mode 100644 index 0000000..5a50e68 --- /dev/null +++ b/src/entities/team.entity.ts @@ -0,0 +1,44 @@ +import { + Column, + CreateDateColumn, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; + +/** + * 团队成员 team + */ +@Entity('team') +export class Team { + @PrimaryGeneratedColumn({ type: 'int', unsigned: true }) + id: number; + + /** 姓名 */ + @Column({ type: 'varchar', length: 50, comment: '姓名' }) + name: string; + + /** 职位 */ + @Column({ type: 'varchar', length: 100, comment: '职位' }) + position: string; + + /** 头像 */ + @Column({ type: 'varchar', length: 255, comment: '头像' }) + avatar: string; + + /** 个人简介 */ + @Column({ type: 'text', nullable: true, comment: '个人简介' }) + desc: string | null; + + @Column({ type: 'int', default: 0 }) + sort: number; + + @Column({ type: 'tinyint', name: 'is_show', default: 1 }) + isShow: number; + + @CreateDateColumn({ name: 'created_at', type: 'datetime' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at', type: 'datetime' }) + updatedAt: Date; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..588e516 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,167 @@ +import { NestFactory } from '@nestjs/core'; +import { NestExpressApplication } from '@nestjs/platform-express'; +import { ValidationPipe, Logger, type INestApplication } from '@nestjs/common'; +import { SwaggerModule } from '@nestjs/swagger'; +import { WinstonModule } from 'nest-winston'; +import * as winston from 'winston'; +import { DataSource } from 'typeorm'; + +import { AppModule } from './app.module'; +import { swaggerOptions } from './config/swagger.config'; +import { AllExceptionsFilter } from './common/filters'; +import { TransformInterceptor } from './common/interceptors'; + +/** + * 启动期自动升级:确保 admin 表存在 role 字段(角色权限控制所需)。 + * - 通过 information_schema 检测,缺失时自动 ALTER TABLE 添加 + * - 默认 'normal',并将 id=1 的初始管理员置为 'super_admin' + * - 已有 role 字段时跳过,幂等 + */ +async function ensureAdminRoleColumn(app: INestApplication): Promise { + const dataSource = app.get(DataSource); + const rows = (await dataSource.query( + `SELECT COUNT(*) AS cnt + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'admin' + AND COLUMN_NAME = 'role'`, + )) as Array<{ cnt: number | string }>; + const exists = Number(rows?.[0]?.cnt ?? 0) > 0; + if (exists) return; + + Logger.warn('检测到 admin 表缺少 role 字段,正在自动升级数据库...', 'Migration'); + await dataSource.query( + "ALTER TABLE `admin` ADD COLUMN `role` varchar(20) NOT NULL DEFAULT 'normal' " + + "COMMENT '角色:super_admin 超级管理员 / normal 普通管理员' AFTER `avatar`", + ); + await dataSource.query( + "UPDATE `admin` SET `role` = 'super_admin' WHERE `id` = 1", + ); + Logger.log('admin 表 role 字段已自动升级完成,初始 admin 已置为超级管理员', 'Migration'); +} + +/** + * 启动期自动升级:确保 manual 表存在(使用手册模块)。 + * - 表不存在时自动 CREATE TABLE + * - 已存在则跳过,幂等 + */ +async function ensureManualTable(app: INestApplication): Promise { + const dataSource = app.get(DataSource); + const rows = (await dataSource.query( + `SELECT COUNT(*) AS cnt + FROM information_schema.TABLES + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'manual'`, + )) as Array<{ cnt: number | string }>; + const exists = Number(rows?.[0]?.cnt ?? 0) > 0; + if (exists) return; + + Logger.warn('检测到 manual 表不存在,正在自动创建...', 'Migration'); + await dataSource.query( + `CREATE TABLE \`manual\` ( + \`id\` int unsigned NOT NULL AUTO_INCREMENT, + \`parent_id\` int unsigned DEFAULT NULL COMMENT '父节点ID,NULL=根节点', + \`title\` varchar(200) NOT NULL COMMENT '标题', + \`type\` tinyint(1) NOT NULL DEFAULT 1 COMMENT '类型:0=目录节点 1=文档节点', + \`content\` longtext COMMENT '文档正文(目录节点为空)', + \`content_format\` varchar(10) NOT NULL DEFAULT 'html' COMMENT '正文格式:html=富文本 markdown=Markdown', + \`sort\` int NOT NULL DEFAULT 0 COMMENT '排序值', + \`is_show\` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否显示 1是0否', + \`created_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + \`updated_at\` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (\`id\`), + KEY \`idx_parent\` (\`parent_id\`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='使用手册'`, + ); + Logger.log('manual 表已自动创建完成', 'Migration'); +} + +/** + * 启动期自动升级:确保 manual 表存在 content_format 字段(持久化正文格式)。 + * - 仅在 manual 表已存在但缺少该字段时执行 + * - 幂等 + */ +async function ensureManualContentFormatColumn( + app: INestApplication, +): Promise { + const dataSource = app.get(DataSource); + const rows = (await dataSource.query( + `SELECT COUNT(*) AS cnt + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'manual' + AND COLUMN_NAME = 'content_format'`, + )) as Array<{ cnt: number | string }>; + const exists = Number(rows?.[0]?.cnt ?? 0) > 0; + if (exists) return; + + Logger.warn( + '检测到 manual 表缺少 content_format 字段,正在自动升级数据库...', + 'Migration', + ); + await dataSource.query( + "ALTER TABLE `manual` ADD COLUMN `content_format` varchar(10) NOT NULL DEFAULT 'html' " + + "COMMENT '正文格式:html=富文本 markdown=Markdown' AFTER `content`", + ); + Logger.log( + 'manual 表 content_format 字段已自动升级完成', + 'Migration', + ); +} + +async function bootstrap(): Promise { + const app = await NestFactory.create(AppModule, { + logger: WinstonModule.createLogger({ + transports: [ + new winston.transports.Console({ + format: winston.format.combine( + winston.format.timestamp(), + winston.format.colorize(), + winston.format.printf(({ level, message, timestamp }) => { + return `${timestamp} ${level}: ${message}`; + }), + ), + }), + ], + }), + }); + + app.setGlobalPrefix('api'); + + // 全局管道(DTO + class-validator) + // 注意:app.module.ts 的 APP_PIPE/APP_FILTER/APP_INTERCEPTOR 已删除, + // 这里统一注册避免重复执行;APP_GUARD(JwtAuthGuard 需要 DI)保留在 app.module.ts。 + app.useGlobalPipes( + new ValidationPipe({ + whitelist: true, + transform: true, + forbidNonWhitelisted: false, + }), + ); + + // 全局过滤器 + 响应拦截器 + app.useGlobalFilters(new AllExceptionsFilter()); + app.useGlobalInterceptors(new TransformInterceptor()); + + // 跨域放行(前端 3000 -> 后端 3001) + app.enableCors({ + origin: true, + credentials: true, + }); + + // Swagger 文档 + const document = SwaggerModule.createDocument(app, swaggerOptions); + SwaggerModule.setup('api-docs', app, document); + + // 启动期自动迁移:补齐 admin.role 字段、确保 manual 表存在 + await ensureAdminRoleColumn(app); + await ensureManualTable(app); + await ensureManualContentFormatColumn(app); + + const port = parseInt(process.env.PORT ?? '3001', 10); + await app.listen(port); + Logger.log(`🚀 后端服务已启动: http://localhost:${port}`, 'Bootstrap'); + Logger.log(`📘 Swagger 文档地址: http://localhost:${port}/api-docs`, 'Bootstrap'); +} + +void bootstrap(); diff --git a/src/modules/admin-user/admin-user.controller.ts b/src/modules/admin-user/admin-user.controller.ts new file mode 100644 index 0000000..4f11342 --- /dev/null +++ b/src/modules/admin-user/admin-user.controller.ts @@ -0,0 +1,87 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { CurrentAdmin, Roles } from '@/common/decorators'; +import { Admin } from '@/entities/admin.entity'; +import { AdminUserService } from './admin-user.service'; +import { + CreateAdminUserDto, + QueryAdminUserDto, + ResetPasswordDto, + UpdateAdminUserDto, +} from './dto/admin-user.dto'; + +@ApiTags('管理员账号 AdminUser') +@Controller() +export class AdminUserController { + constructor(private readonly service: AdminUserService) {} + + @ApiBearerAuth('admin-token') + @Get('admin/admin-user') + @ApiOperation({ summary: '后台-管理员账号分页' }) + paginate( + @Query() query: QueryAdminUserDto, + ): Promise> { + return this.service.paginate(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/admin-user/:id') + @ApiOperation({ summary: '后台-管理员账号详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/admin-user') + @Roles('super_admin') + @ApiOperation({ summary: '后台-新增管理员账号(仅超管)' }) + create(@Body() dto: CreateAdminUserDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/admin-user/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-修改管理员账号(名称/头像/角色,仅超管)' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateAdminUserDto, + @CurrentAdmin('id') currentAdminId: number, + ): Promise { + return this.service.update(id, dto, currentAdminId); + } + + @ApiBearerAuth('admin-token') + @Put('admin/admin-user/:id/password') + @Roles('super_admin') + @ApiOperation({ summary: '后台-重置管理员密码(仅超管)' }) + resetPassword( + @Param('id', ParseIntPipe) id: number, + @Body() dto: ResetPasswordDto, + ): Promise { + return this.service.resetPassword(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/admin-user/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除管理员账号(不能删自己,仅超管)' }) + remove( + @Param('id', ParseIntPipe) id: number, + @CurrentAdmin('id') currentAdminId: number, + ): Promise { + return this.service.remove(id, currentAdminId); + } +} diff --git a/src/modules/admin-user/admin-user.module.ts b/src/modules/admin-user/admin-user.module.ts new file mode 100644 index 0000000..9831aee --- /dev/null +++ b/src/modules/admin-user/admin-user.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Admin } from '@/entities/admin.entity'; +import { AdminUserController } from './admin-user.controller'; +import { AdminUserService } from './admin-user.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Admin])], + controllers: [AdminUserController], + providers: [AdminUserService], +}) +export class AdminUserModule {} diff --git a/src/modules/admin-user/admin-user.service.ts b/src/modules/admin-user/admin-user.service.ts new file mode 100644 index 0000000..cdcef15 --- /dev/null +++ b/src/modules/admin-user/admin-user.service.ts @@ -0,0 +1,107 @@ +import { + BadRequestException, + ConflictException, + ForbiddenException, + Injectable, + NotFoundException, +} from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { Admin } from '@/entities/admin.entity'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import type { AdminRole } from '@/common/decorators'; +import { hashPassword } from '@/utils/crypto.util'; +import { + CreateAdminUserDto, + QueryAdminUserDto, + ResetPasswordDto, + UpdateAdminUserDto, +} from './dto/admin-user.dto'; + +@Injectable() +export class AdminUserService { + constructor( + @InjectRepository(Admin) + private readonly repo: Repository, + ) {} + + async paginate(query: QueryAdminUserDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.repo.createQueryBuilder('a').orderBy('a.id', 'DESC'); + if (query.keyword) { + qb.andWhere('(a.username LIKE :kw OR a.nickname LIKE :kw)', { + kw: `%${query.keyword}%`, + }); + } + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('管理员不存在'); + return item; + } + + async create(dto: CreateAdminUserDto): Promise { + const exists = await this.repo.findOne({ + where: { username: dto.username }, + }); + if (exists) { + throw new ConflictException('登录账号已存在'); + } + const hashed = await hashPassword(dto.password); + const entity = this.repo.create({ + username: dto.username, + password: hashed, + nickname: dto.nickname, + avatar: dto.avatar ?? '', + role: dto.role ?? 'normal', + }); + return this.repo.save(entity); + } + + /** + * 修改管理员账号(名称/头像/角色) + * - 不允许超管把自己降级为普通(避免系统没有超管) + */ + async update( + id: number, + dto: UpdateAdminUserDto, + currentAdminId: number, + ): Promise { + const item = await this.detail(id); + item.nickname = dto.nickname; + item.avatar = dto.avatar ?? ''; + if (dto.role && dto.role !== item.role) { + if ( + id === currentAdminId && + item.role === 'super_admin' && + dto.role !== 'super_admin' + ) { + throw new ForbiddenException('不能将自己降级为普通管理员'); + } + item.role = dto.role; + } + await this.repo.save(item); + } + + async resetPassword(id: number, dto: ResetPasswordDto): Promise { + const item = await this.detail(id); + item.password = await hashPassword(dto.newPassword); + await this.repo.save(item); + } + + async remove(id: number, currentAdminId: number): Promise { + if (id === currentAdminId) { + throw new BadRequestException('不能删除当前登录的管理员账号'); + } + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/admin-user/dto/admin-user.dto.ts b/src/modules/admin-user/dto/admin-user.dto.ts new file mode 100644 index 0000000..29dbd1d --- /dev/null +++ b/src/modules/admin-user/dto/admin-user.dto.ts @@ -0,0 +1,107 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsIn, + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, + MinLength, +} from 'class-validator'; +import type { AdminRole } from '@/common/decorators'; + +export class CreateAdminUserDto { + @ApiProperty({ + description: '登录账号(手机号/邮箱/自定义)', + example: 'admin', + }) + @IsString() + @IsNotEmpty({ message: '登录账号不能为空' }) + @MinLength(2, { message: '账号至少 2 个字符' }) + @MaxLength(50, { message: '账号最多 50 个字符' }) + username: string; + + @ApiProperty({ description: '初始密码(至少 6 位)', example: '123456' }) + @IsString() + @IsNotEmpty({ message: '密码不能为空' }) + @MinLength(6, { message: '密码至少 6 位' }) + @MaxLength(50, { message: '密码最多 50 个字符' }) + password: string; + + @ApiProperty({ description: '管理员名称' }) + @IsString() + @IsNotEmpty({ message: '名称不能为空' }) + @MaxLength(50) + nickname: string; + + @ApiPropertyOptional({ description: '头像地址' }) + @IsString() + @IsOptional() + avatar?: string; + + @ApiPropertyOptional({ + description: '角色:super_admin 超级管理员 / normal 普通管理员', + default: 'normal', + enum: ['super_admin', 'normal'], + }) + @IsString() + @IsIn(['super_admin', 'normal'], { message: '角色取值不合法' }) + @IsOptional() + role?: AdminRole; +} + +export class UpdateAdminUserDto { + @ApiProperty({ description: '管理员名称' }) + @IsString() + @IsNotEmpty({ message: '名称不能为空' }) + @MaxLength(50) + nickname: string; + + @ApiPropertyOptional({ description: '头像地址' }) + @IsString() + @IsOptional() + avatar?: string; + + @ApiPropertyOptional({ + description: '角色:super_admin 超级管理员 / normal 普通管理员', + enum: ['super_admin', 'normal'], + }) + @IsString() + @IsIn(['super_admin', 'normal'], { message: '角色取值不合法' }) + @IsOptional() + role?: AdminRole; +} + +export class ResetPasswordDto { + @ApiProperty({ description: '新密码(至少 6 位)' }) + @IsString() + @IsNotEmpty({ message: '新密码不能为空' }) + @MinLength(6, { message: '新密码至少 6 位' }) + @MaxLength(50, { message: '新密码最多 50 个字符' }) + newPassword: string; +} + +export class QueryAdminUserDto { + @ApiPropertyOptional({ description: '页码', default: 1 }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + page?: number; + + @ApiPropertyOptional({ description: '每页数量', default: 10 }) + @IsInt() + @Min(1) + @Max(100) + @IsOptional() + @Type(() => Number) + pageSize?: number; + + @ApiPropertyOptional({ description: '关键词(账号/名称)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts new file mode 100644 index 0000000..b15fd68 --- /dev/null +++ b/src/modules/auth/auth.controller.ts @@ -0,0 +1,40 @@ +import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { AuthService } from './auth.service'; +import { + ChangePasswordDto, + LoginDto, + AdminLoginResult, +} from './dto/login.dto'; +import { CurrentAdmin, Public } from '@/common/decorators'; + +@ApiTags('管理员鉴权 Auth') +@Controller('admin/auth') +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @Public() + @Post('login') + @ApiOperation({ summary: '管理员登录', description: '无需 token,返回 JWT' }) + login(@Body() dto: LoginDto): Promise { + return this.authService.login(dto); + } + + @ApiBearerAuth('admin-token') + @Get('profile') + @ApiOperation({ summary: '获取当前登录管理员信息' }) + profile(@CurrentAdmin('id') adminId: number) { + return this.authService.getProfile(adminId); + } + + @ApiBearerAuth('admin-token') + @Post('change-password') + @ApiOperation({ summary: '修改当前管理员密码' }) + changePassword( + @CurrentAdmin('id') adminId: number, + @Body() dto: ChangePasswordDto, + ): Promise { + return this.authService.changePassword(adminId, dto); + } +} diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts new file mode 100644 index 0000000..9edd1db --- /dev/null +++ b/src/modules/auth/auth.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Admin } from '@/entities/admin.entity'; +import { AuthController } from './auth.controller'; +import { AuthService } from './auth.service'; + +@Module({ + // JwtModule 已在 AppModule 以 global: true 注册,无需再 import + imports: [TypeOrmModule.forFeature([Admin])], + controllers: [AuthController], + providers: [AuthService], + exports: [AuthService], +}) +export class AuthModule {} diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts new file mode 100644 index 0000000..5abb904 --- /dev/null +++ b/src/modules/auth/auth.service.ts @@ -0,0 +1,109 @@ +import { + BadRequestException, + Injectable, + NotFoundException, + UnauthorizedException, +} from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { JwtService } from '@nestjs/jwt'; + +import { Admin } from '@/entities/admin.entity'; +import { comparePassword, hashPassword } from '@/utils/crypto.util'; +import { + AdminLoginResult, + ChangePasswordDto, + LoginDto, +} from './dto/login.dto'; + +/** 默认初始密码(init_db.sql 中管理员 password 为空,首次启动会自动加密写入此密码) */ +const DEFAULT_INIT_PASSWORD = '123456'; + +@Injectable() +export class AuthService { + constructor( + @InjectRepository(Admin) + private readonly adminRepo: Repository, + private readonly jwtService: JwtService, + ) {} + + /** + * 管理员登录 + * 兼容 init_db.sql 写入的空密码:首次登录会自动 bcrypt 加密 123456 + */ + async login(dto: LoginDto): Promise { + const admin = await this.adminRepo + .createQueryBuilder('a') + .addSelect('a.password') + .where('a.username = :username', { username: dto.username }) + .getOne(); + if (!admin) { + throw new UnauthorizedException('账号或密码错误'); + } + + // 初始空密码 → 自动加密默认密码 + if (!admin.password) { + admin.password = await hashPassword(DEFAULT_INIT_PASSWORD); + await this.adminRepo.update(admin.id, { password: admin.password }); + } + + const ok = await comparePassword(dto.password, admin.password); + if (!ok) { + throw new UnauthorizedException('账号或密码错误'); + } + + const token = await this.jwtService.signAsync({ + id: admin.id, + username: admin.username, + nickname: admin.nickname, + role: admin.role, + }); + + return { + token, + admin: { + id: admin.id, + username: admin.username, + nickname: admin.nickname, + avatar: admin.avatar ?? '', + role: admin.role, + }, + }; + } + + /** 获取当前登录管理员信息 */ + async getProfile(adminId: number): Promise { + return this.adminRepo.findOne({ where: { id: adminId } }); + } + + /** 修改密码 */ + async changePassword( + adminId: number, + dto: ChangePasswordDto, + ): Promise { + if (dto.oldPassword === dto.newPassword) { + throw new BadRequestException('新密码不能与原密码相同'); + } + const admin = await this.adminRepo + .createQueryBuilder('a') + .addSelect('a.password') + .where('a.id = :id', { id: adminId }) + .getOne(); + if (!admin) { + throw new NotFoundException('管理员不存在'); + } + + if (!admin.password) { + admin.password = await hashPassword(DEFAULT_INIT_PASSWORD); + await this.adminRepo.update(admin.id, { password: admin.password }); + } + + const ok = await comparePassword(dto.oldPassword, admin.password); + if (!ok) { + throw new BadRequestException('原密码错误'); + } + + const hashed = await hashPassword(dto.newPassword); + await this.adminRepo.update(admin.id, { password: hashed }); + } +} diff --git a/src/modules/auth/dto/login.dto.ts b/src/modules/auth/dto/login.dto.ts new file mode 100644 index 0000000..df0216c --- /dev/null +++ b/src/modules/auth/dto/login.dto.ts @@ -0,0 +1,39 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsString, MinLength, MaxLength } from 'class-validator'; + +export class LoginDto { + @ApiProperty({ description: '登录账号', example: 'admin' }) + @IsString() + @MinLength(2, { message: '账号至少 2 个字符' }) + @MaxLength(50, { message: '账号最多 50 个字符' }) + username: string; + + @ApiProperty({ description: '登录密码', example: '123456' }) + @IsString() + @MinLength(6, { message: '密码至少 6 个字符' }) + @MaxLength(50, { message: '密码最多 50 个字符' }) + password: string; +} + +export class ChangePasswordDto { + @ApiProperty({ description: '原密码' }) + @IsString() + @MinLength(6) + oldPassword: string; + + @ApiProperty({ description: '新密码(至少 6 位)' }) + @IsString() + @MinLength(6, { message: '新密码至少 6 位' }) + newPassword: string; +} + +export interface AdminLoginResult { + token: string; + admin: { + id: number; + username: string; + nickname: string; + avatar: string; + role: 'super_admin' | 'normal'; + }; +} diff --git a/src/modules/banner/banner.controller.ts b/src/modules/banner/banner.controller.ts new file mode 100644 index 0000000..89208f7 --- /dev/null +++ b/src/modules/banner/banner.controller.ts @@ -0,0 +1,76 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { BannerService } from './banner.service'; +import { + CreateBannerDto, + QueryBannerDto, + UpdateBannerDto, +} from './dto/banner.dto'; +import { Public, Roles } from '@/common/decorators'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { Banner } from '@/entities/banner.entity'; + +@ApiTags('轮播图 Banner') +@Controller() +export class BannerController { + constructor(private readonly service: BannerService) {} + + // ---------- 前台公开 ---------- + @Public() + @Get('public/banner') + @ApiOperation({ summary: '前台-轮播图列表' }) + publicList(): Promise { + return this.service.findPublicList(); + } + + // ---------- 后台 ---------- + @ApiBearerAuth('admin-token') + @Get('admin/banner') + @ApiOperation({ summary: '后台-轮播图分页' }) + paginate(@Query() query: QueryBannerDto): Promise> { + return this.service.paginate(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/banner/:id') + @ApiOperation({ summary: '后台-轮播图详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/banner') + @ApiOperation({ summary: '后台-新增轮播图' }) + create(@Body() dto: CreateBannerDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/banner/:id') + @ApiOperation({ summary: '后台-修改轮播图' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateBannerDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/banner/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除轮播图(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/banner/banner.module.ts b/src/modules/banner/banner.module.ts new file mode 100644 index 0000000..7ab4130 --- /dev/null +++ b/src/modules/banner/banner.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Banner } from '@/entities/banner.entity'; +import { BannerController } from './banner.controller'; +import { BannerService } from './banner.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Banner])], + controllers: [BannerController], + providers: [BannerService], +}) +export class BannerModule {} diff --git a/src/modules/banner/banner.service.ts b/src/modules/banner/banner.service.ts new file mode 100644 index 0000000..f988b77 --- /dev/null +++ b/src/modules/banner/banner.service.ts @@ -0,0 +1,79 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { Banner } from '@/entities/banner.entity'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { + CreateBannerDto, + QueryBannerDto, + UpdateBannerDto, +} from './dto/banner.dto'; + +@Injectable() +export class BannerService { + constructor( + @InjectRepository(Banner) + private readonly repo: Repository, + ) {} + + // ---------- 前台公开 ---------- + /** 前台展示列表(仅 is_show=1,按 sort 升序) */ + async findPublicList(): Promise { + return this.repo.find({ + where: { isShow: 1 }, + order: { sort: 'ASC', id: 'DESC' }, + }); + } + + // ---------- 后台 ---------- + async paginate(query: QueryBannerDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.repo.createQueryBuilder('b').orderBy('b.sort', 'ASC').addOrderBy('b.id', 'DESC'); + if (query.keyword) { + qb.andWhere('b.title LIKE :kw', { kw: `%${query.keyword}%` }); + } + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) { + throw new NotFoundException('轮播图不存在'); + } + return item; + } + + async create(dto: CreateBannerDto): Promise { + const entity = this.repo.create({ + title: dto.title, + image: dto.image, + link: dto.link ?? '', + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + return this.repo.save(entity); + } + + async update(id: number, dto: UpdateBannerDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + title: dto.title, + image: dto.image, + link: dto.link ?? '', + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/banner/dto/banner.dto.ts b/src/modules/banner/dto/banner.dto.ts new file mode 100644 index 0000000..535ae18 --- /dev/null +++ b/src/modules/banner/dto/banner.dto.ts @@ -0,0 +1,70 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateBannerDto { + @ApiProperty({ description: '轮播标题' }) + @IsString() + @IsNotEmpty({ message: '标题不能为空' }) + @MaxLength(100) + title: string; + + @ApiProperty({ description: '图片地址' }) + @IsString() + @IsNotEmpty({ message: '图片不能为空' }) + image: string; + + @ApiPropertyOptional({ description: '跳转链接', default: '' }) + @IsString() + @IsOptional() + @MaxLength(255) + link?: string; + + @ApiPropertyOptional({ description: '排序值', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '是否展示 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateBannerDto extends CreateBannerDto {} + +export class QueryBannerDto { + @ApiPropertyOptional({ description: '页码', default: 1 }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + page?: number; + + @ApiPropertyOptional({ description: '每页数量', default: 10 }) + @IsInt() + @Min(1) + @Max(100) + @IsOptional() + @Type(() => Number) + pageSize?: number; + + @ApiPropertyOptional({ description: '关键词(标题)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/manual/dto/manual.dto.ts b/src/modules/manual/dto/manual.dto.ts new file mode 100644 index 0000000..e102a5e --- /dev/null +++ b/src/modules/manual/dto/manual.dto.ts @@ -0,0 +1,76 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsIn, + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateManualDto { + @ApiPropertyOptional({ description: '父节点ID,NULL=根节点' }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + parentId?: number | null; + + @ApiProperty({ description: '标题' }) + @IsString() + @IsNotEmpty({ message: '标题不能为空' }) + @MaxLength(200) + title: string; + + @ApiPropertyOptional({ + description: '类型:0=目录节点 1=文档节点', + default: 1, + }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + type?: number; + + @ApiPropertyOptional({ description: '正文(富文本/Markdown,目录节点为空)' }) + @IsString() + @IsOptional() + content?: string | null; + + @ApiPropertyOptional({ + description: '正文格式:html=富文本 markdown=Markdown', + default: 'html', + }) + @IsIn(['html', 'markdown']) + @IsOptional() + contentFormat?: 'html' | 'markdown'; + + @ApiPropertyOptional({ description: '排序值', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '是否显示 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateManualDto extends CreateManualDto {} + +export class QueryManualDto { + @ApiPropertyOptional({ description: '关键词(标题)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/manual/manual.controller.ts b/src/modules/manual/manual.controller.ts new file mode 100644 index 0000000..61574a4 --- /dev/null +++ b/src/modules/manual/manual.controller.ts @@ -0,0 +1,91 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { Public, Roles } from '@/common/decorators'; +import { Manual } from '@/entities/manual.entity'; +import { ManualService, type ManualTreeNode } from './manual.service'; +import { + CreateManualDto, + QueryManualDto, + UpdateManualDto, +} from './dto/manual.dto'; + +@ApiTags('使用手册 Manual') +@Controller() +export class ManualController { + constructor(private readonly service: ManualService) {} + + // ---------- 前台 ---------- + @Public() + @Get('public/manual/tree') + @ApiOperation({ summary: '前台-使用手册树形菜单' }) + publicTree(): Promise { + return this.service.findPublicTree(); + } + + @Public() + @Get('public/manual/:id') + @ApiOperation({ summary: '前台-使用手册文档详情' }) + publicDetail( + @Param('id', ParseIntPipe) id: number, + ): Promise { + return this.service.findPublicDetail(id); + } + + // ---------- 后台 ---------- + @ApiBearerAuth('admin-token') + @Get('admin/manual') + @ApiOperation({ summary: '后台-使用手册全部节点(扁平)' }) + list(@Query() query: QueryManualDto): Promise { + return this.service.findAll(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/manual/tree') + @ApiOperation({ summary: '后台-使用手册树形结构' }) + tree(): Promise { + return this.service.findAdminTree(); + } + + @ApiBearerAuth('admin-token') + @Get('admin/manual/:id') + @ApiOperation({ summary: '后台-使用手册节点详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/manual') + @ApiOperation({ summary: '后台-新增使用手册节点' }) + create(@Body() dto: CreateManualDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/manual/:id') + @ApiOperation({ summary: '后台-修改使用手册节点' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateManualDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/manual/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除使用手册节点(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/manual/manual.module.ts b/src/modules/manual/manual.module.ts new file mode 100644 index 0000000..fecf28e --- /dev/null +++ b/src/modules/manual/manual.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Manual } from '@/entities/manual.entity'; +import { ManualController } from './manual.controller'; +import { ManualService } from './manual.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Manual])], + controllers: [ManualController], + providers: [ManualService], +}) +export class ManualModule {} diff --git a/src/modules/manual/manual.service.ts b/src/modules/manual/manual.service.ts new file mode 100644 index 0000000..ce80096 --- /dev/null +++ b/src/modules/manual/manual.service.ts @@ -0,0 +1,200 @@ +import { + BadRequestException, + Injectable, + NotFoundException, +} from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository, Like } from 'typeorm'; +import { Manual } from '@/entities/manual.entity'; +import { + CreateManualDto, + QueryManualDto, + UpdateManualDto, +} from './dto/manual.dto'; + +/** 树节点(不含正文,用于菜单渲染) */ +export interface ManualTreeNode { + id: number; + parentId: number | null; + title: string; + type: number; + sort: number; + isShow: number; + children: ManualTreeNode[]; +} + +@Injectable() +export class ManualService { + constructor( + @InjectRepository(Manual) + private readonly repo: Repository, + ) {} + + // ---------- 前台 ---------- + + /** 前台-获取可见的树形菜单(不含正文) */ + async findPublicTree(): Promise { + const nodes = await this.repo.find({ + where: { isShow: 1 }, + order: { sort: 'ASC', id: 'ASC' }, + }); + return this.buildTree(nodes); + } + + /** 前台-获取文档详情(含正文) */ + async findPublicDetail(id: number): Promise { + const item = await this.repo.findOne({ where: { id, isShow: 1 } }); + if (!item) throw new NotFoundException('文档不存在或已下架'); + return item; + } + + // ---------- 后台 ---------- + + /** 后台-全部节点(扁平,含 parent 信息,供列表/下拉用) */ + async findAll(query?: QueryManualDto): Promise { + const where = query?.keyword + ? { title: Like(`%${query.keyword}%`) } + : undefined; + return this.repo.find({ + where, + order: { sort: 'ASC', id: 'ASC' }, + }); + } + + /** 后台-获取所有节点的树形结构 */ + async findAdminTree(): Promise { + const nodes = await this.repo.find({ + order: { sort: 'ASC', id: 'ASC' }, + }); + return this.buildTree(nodes); + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('节点不存在'); + return item; + } + + async create(dto: CreateManualDto): Promise { + if (dto.parentId) { + const parent = await this.repo.findOne({ + where: { id: dto.parentId }, + }); + if (!parent) { + throw new BadRequestException('父节点不存在'); + } + } + const type = dto.type ?? 1; + return this.repo.save( + this.repo.create({ + parentId: dto.parentId ?? null, + title: dto.title, + type, + content: type === 0 ? null : dto.content ?? null, + contentFormat: + type === 0 ? 'html' : (dto.contentFormat ?? 'html'), + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }), + ); + } + + async update(id: number, dto: UpdateManualDto): Promise { + const item = await this.detail(id); + + // 校验父节点 + let newParentId: number | null = dto.parentId ?? null; + if (newParentId) { + if (newParentId === id) { + throw new BadRequestException('不能将自身设为父节点'); + } + const parent = await this.repo.findOne({ + where: { id: newParentId }, + }); + if (!parent) { + throw new BadRequestException('父节点不存在'); + } + // 简单环路检测:父节点不能是自身的子孙 + if (await this.isDescendant(id, newParentId)) { + throw new BadRequestException('不能将节点移动到其子节点下'); + } + } + + const type = dto.type ?? item.type; + Object.assign(item, { + parentId: newParentId, + title: dto.title, + type, + content: type === 0 ? null : dto.content ?? null, + contentFormat: + type === 0 + ? 'html' + : (dto.contentFormat ?? item.contentFormat ?? 'html'), + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + const item = await this.detail(id); + const childCount = await this.repo.count({ + where: { parentId: id }, + }); + if (childCount > 0) { + throw new BadRequestException('该节点下还有子节点,请先删除子节点'); + } + await this.repo.remove(item); + } + + // ---------- 工具 ---------- + + /** 判断 targetId 是否是 nodeId 的子孙(用于环路检测) */ + private async isDescendant( + nodeId: number, + targetId: number, + ): Promise { + const stack = [nodeId]; + const visited = new Set(); + while (stack.length > 0) { + const cur = stack.pop()!; + if (visited.has(cur)) continue; + visited.add(cur); + const children = await this.repo.find({ + where: { parentId: cur }, + select: ['id'], + }); + for (const c of children) { + if (c.id === targetId) return true; + stack.push(c.id); + } + } + return false; + } + + /** 扁平节点列表构建为树 */ + private buildTree(nodes: Manual[]): ManualTreeNode[] { + const map = new Map(); + const roots: ManualTreeNode[] = []; + for (const n of nodes) { + map.set(n.id, { + id: n.id, + parentId: n.parentId, + title: n.title, + type: n.type, + sort: n.sort, + isShow: n.isShow, + children: [], + }); + } + for (const n of nodes) { + const node = map.get(n.id)!; + if (n.parentId && map.has(n.parentId)) { + map.get(n.parentId)!.children.push(node); + } else { + roots.push(node); + } + } + return roots; + } +} diff --git a/src/modules/message/dto/message.dto.ts b/src/modules/message/dto/message.dto.ts new file mode 100644 index 0000000..a11977f --- /dev/null +++ b/src/modules/message/dto/message.dto.ts @@ -0,0 +1,67 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + IsEmail, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateMessageDto { + @ApiProperty({ description: '访客姓名' }) + @IsString() + @IsNotEmpty({ message: '姓名不能为空' }) + @MaxLength(50) + name: string; + + @ApiProperty({ description: '联系电话' }) + @IsString() + @IsNotEmpty({ message: '电话不能为空' }) + @MaxLength(20) + phone: string; + + @ApiPropertyOptional({ description: '邮箱' }) + @IsEmail({}, { message: '邮箱格式不正确' }) + @IsOptional() + @MaxLength(100) + email?: string; + + @ApiProperty({ description: '留言内容' }) + @IsString() + @IsNotEmpty({ message: '留言内容不能为空' }) + content: string; +} + +export class QueryMessageDto { + @ApiPropertyOptional({ description: '页码', default: 1 }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + page?: number; + + @ApiPropertyOptional({ description: '每页数量', default: 10 }) + @IsInt() + @Min(1) + @Max(100) + @IsOptional() + @Type(() => Number) + pageSize?: number; + + @ApiPropertyOptional({ description: '是否已读 0未读 1已读' }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isRead?: number; + + @ApiPropertyOptional({ description: '关键词' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/message/message.controller.ts b/src/modules/message/message.controller.ts new file mode 100644 index 0000000..043ffc4 --- /dev/null +++ b/src/modules/message/message.controller.ts @@ -0,0 +1,56 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { Public, Roles } from '@/common/decorators'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { Message } from '@/entities/message.entity'; +import { MessageService } from './message.service'; +import { + CreateMessageDto, + QueryMessageDto, +} from './dto/message.dto'; + +@ApiTags('留言 Message') +@Controller() +export class MessageController { + constructor(private readonly service: MessageService) {} + + @Public() + @Post('public/message') + @ApiOperation({ summary: '前台-访客提交留言' }) + submit(@Body() dto: CreateMessageDto): Promise { + return this.service.submit(dto); + } + + @ApiBearerAuth('admin-token') + @Get('admin/message') + @ApiOperation({ summary: '后台-留言分页' }) + paginate(@Query() query: QueryMessageDto): Promise> { + return this.service.paginate(query); + } + + @ApiBearerAuth('admin-token') + @Put('admin/message/:id/read') + @ApiOperation({ summary: '后台-留言标记已读' }) + markRead(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.markRead(id); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/message/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除留言(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/message/message.module.ts b/src/modules/message/message.module.ts new file mode 100644 index 0000000..a0ba3ad --- /dev/null +++ b/src/modules/message/message.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Message } from '@/entities/message.entity'; +import { MessageController } from './message.controller'; +import { MessageService } from './message.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Message])], + controllers: [MessageController], + providers: [MessageService], +}) +export class MessageModule {} diff --git a/src/modules/message/message.service.ts b/src/modules/message/message.service.ts new file mode 100644 index 0000000..046aee5 --- /dev/null +++ b/src/modules/message/message.service.ts @@ -0,0 +1,67 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { Message } from '@/entities/message.entity'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { + CreateMessageDto, + QueryMessageDto, +} from './dto/message.dto'; + +@Injectable() +export class MessageService { + constructor( + @InjectRepository(Message) + private readonly repo: Repository, + ) {} + + /** 前台访客提交留言 */ + async submit(dto: CreateMessageDto): Promise { + return this.repo.save( + this.repo.create({ + name: dto.name, + phone: dto.phone, + email: dto.email ?? '', + content: dto.content, + }), + ); + } + + /** 后台分页 */ + async paginate(query: QueryMessageDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.repo + .createQueryBuilder('m') + .orderBy('m.is_read', 'ASC') + .addOrderBy('m.id', 'DESC'); + if (typeof query.isRead === 'number') { + qb.andWhere('m.is_read = :ir', { ir: query.isRead }); + } + if (query.keyword) { + qb.andWhere( + '(m.name LIKE :kw OR m.phone LIKE :kw OR m.content LIKE :kw)', + { kw: `%${query.keyword}%` }, + ); + } + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async markRead(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('留言不存在'); + item.isRead = 1; + await this.repo.save(item); + } + + async remove(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('留言不存在'); + await this.repo.delete(id); + } +} diff --git a/src/modules/news-category/dto/news-category.dto.ts b/src/modules/news-category/dto/news-category.dto.ts new file mode 100644 index 0000000..0ba2ad1 --- /dev/null +++ b/src/modules/news-category/dto/news-category.dto.ts @@ -0,0 +1,44 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateNewsCategoryDto { + @ApiProperty({ description: '分类名称' }) + @IsString() + @IsNotEmpty({ message: '分类名称不能为空' }) + @MaxLength(100) + name: string; + + @ApiPropertyOptional({ description: '排序', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '是否展示 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateNewsCategoryDto extends CreateNewsCategoryDto {} + +export class QueryNewsCategoryDto { + @ApiPropertyOptional({ description: '关键词' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/news-category/news-category.controller.ts b/src/modules/news-category/news-category.controller.ts new file mode 100644 index 0000000..4d7ee12 --- /dev/null +++ b/src/modules/news-category/news-category.controller.ts @@ -0,0 +1,72 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Public, Roles } from '@/common/decorators'; +import { NewsCategory } from '@/entities/news-category.entity'; +import { NewsCategoryService } from './news-category.service'; +import { + CreateNewsCategoryDto, + QueryNewsCategoryDto, + UpdateNewsCategoryDto, +} from './dto/news-category.dto'; + +@ApiTags('新闻分类 NewsCategory') +@Controller() +export class NewsCategoryController { + constructor(private readonly service: NewsCategoryService) {} + + @Public() + @Get('public/news-category') + @ApiOperation({ summary: '前台-新闻分类列表' }) + publicList(): Promise { + return this.service.findPublicList(); + } + + @ApiBearerAuth('admin-token') + @Get('admin/news-category') + @ApiOperation({ summary: '后台-新闻分类全部列表' }) + list(@Query() query: QueryNewsCategoryDto): Promise { + return this.service.findAll(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/news-category/:id') + @ApiOperation({ summary: '后台-新闻分类详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/news-category') + @ApiOperation({ summary: '后台-新增新闻分类' }) + create(@Body() dto: CreateNewsCategoryDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/news-category/:id') + @ApiOperation({ summary: '后台-修改新闻分类' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateNewsCategoryDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/news-category/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除新闻分类(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/news-category/news-category.module.ts b/src/modules/news-category/news-category.module.ts new file mode 100644 index 0000000..456a5a3 --- /dev/null +++ b/src/modules/news-category/news-category.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { NewsCategory } from '@/entities/news-category.entity'; +import { NewsCategoryController } from './news-category.controller'; +import { NewsCategoryService } from './news-category.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([NewsCategory])], + controllers: [NewsCategoryController], + providers: [NewsCategoryService], + exports: [NewsCategoryService], +}) +export class NewsCategoryModule {} diff --git a/src/modules/news-category/news-category.service.ts b/src/modules/news-category/news-category.service.ts new file mode 100644 index 0000000..4ee3a37 --- /dev/null +++ b/src/modules/news-category/news-category.service.ts @@ -0,0 +1,66 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { NewsCategory } from '@/entities/news-category.entity'; +import { + CreateNewsCategoryDto, + QueryNewsCategoryDto, + UpdateNewsCategoryDto, +} from './dto/news-category.dto'; + +@Injectable() +export class NewsCategoryService { + constructor( + @InjectRepository(NewsCategory) + private readonly repo: Repository, + ) {} + + async findPublicList(): Promise { + return this.repo.find({ + where: { isShow: 1 }, + order: { sort: 'ASC', id: 'DESC' }, + }); + } + + async findAll(query?: QueryNewsCategoryDto): Promise { + const qb = this.repo + .createQueryBuilder('c') + .orderBy('c.sort', 'ASC') + .addOrderBy('c.id', 'DESC'); + if (query?.keyword) { + qb.andWhere('c.name LIKE :kw', { kw: `%${query.keyword}%` }); + } + return qb.getMany(); + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('分类不存在'); + return item; + } + + async create(dto: CreateNewsCategoryDto): Promise { + return this.repo.save( + this.repo.create({ + name: dto.name, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }), + ); + } + + async update(id: number, dto: UpdateNewsCategoryDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + name: dto.name, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/news/dto/news.dto.ts b/src/modules/news/dto/news.dto.ts new file mode 100644 index 0000000..c361f46 --- /dev/null +++ b/src/modules/news/dto/news.dto.ts @@ -0,0 +1,87 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateNewsDto { + @ApiProperty({ description: '分类ID' }) + @IsInt() + @Min(1) + @Type(() => Number) + categoryId: number; + + @ApiProperty({ description: '新闻标题' }) + @IsString() + @IsNotEmpty({ message: '标题不能为空' }) + @MaxLength(200) + title: string; + + @ApiPropertyOptional({ description: '封面图' }) + @IsString() + @IsOptional() + cover?: string; + + @ApiPropertyOptional({ description: '简介' }) + @IsString() + @IsOptional() + @MaxLength(500) + intro?: string; + + @ApiProperty({ description: '正文富文本' }) + @IsString() + @IsNotEmpty({ message: '正文不能为空' }) + content: string; + + @ApiPropertyOptional({ description: '是否置顶 1是0否', default: 0 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isTop?: number; + + @ApiPropertyOptional({ description: '状态 1发布 0草稿', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + status?: number; +} + +export class UpdateNewsDto extends CreateNewsDto {} + +export class QueryNewsDto { + @ApiPropertyOptional({ description: '页码', default: 1 }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + page?: number; + + @ApiPropertyOptional({ description: '每页数量', default: 10 }) + @IsInt() + @Min(1) + @Max(100) + @IsOptional() + @Type(() => Number) + pageSize?: number; + + @ApiPropertyOptional({ description: '分类ID' }) + @IsInt() + @IsOptional() + @Type(() => Number) + categoryId?: number; + + @ApiPropertyOptional({ description: '关键词(标题)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/news/news.controller.ts b/src/modules/news/news.controller.ts new file mode 100644 index 0000000..2186941 --- /dev/null +++ b/src/modules/news/news.controller.ts @@ -0,0 +1,77 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { Public, Roles } from '@/common/decorators'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { News } from '@/entities/news.entity'; +import { NewsService } from './news.service'; +import { CreateNewsDto, QueryNewsDto, UpdateNewsDto } from './dto/news.dto'; + +@ApiTags('新闻 News') +@Controller() +export class NewsController { + constructor(private readonly service: NewsService) {} + + @Public() + @Get('public/news') + @ApiOperation({ summary: '前台-新闻分页' }) + publicPaginate(@Query() query: QueryNewsDto): Promise> { + return this.service.publicPaginate(query); + } + + @Public() + @Get('public/news/:id') + @ApiOperation({ summary: '前台-新闻详情' }) + publicDetail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.publicDetail(id); + } + + @ApiBearerAuth('admin-token') + @Get('admin/news') + @ApiOperation({ summary: '后台-新闻分页' }) + paginate(@Query() query: QueryNewsDto): Promise> { + return this.service.paginate(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/news/:id') + @ApiOperation({ summary: '后台-新闻详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/news') + @ApiOperation({ summary: '后台-新增新闻' }) + create(@Body() dto: CreateNewsDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/news/:id') + @ApiOperation({ summary: '后台-修改新闻' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateNewsDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/news/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除新闻(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/news/news.module.ts b/src/modules/news/news.module.ts new file mode 100644 index 0000000..33eeccb --- /dev/null +++ b/src/modules/news/news.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { News } from '@/entities/news.entity'; +import { NewsCategory } from '@/entities/news-category.entity'; +import { NewsController } from './news.controller'; +import { NewsService } from './news.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([News, NewsCategory])], + controllers: [NewsController], + providers: [NewsService], +}) +export class NewsModule {} diff --git a/src/modules/news/news.service.ts b/src/modules/news/news.service.ts new file mode 100644 index 0000000..521debd --- /dev/null +++ b/src/modules/news/news.service.ts @@ -0,0 +1,105 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { News } from '@/entities/news.entity'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { CreateNewsDto, QueryNewsDto, UpdateNewsDto } from './dto/news.dto'; + +@Injectable() +export class NewsService { + constructor( + @InjectRepository(News) + private readonly repo: Repository, + ) {} + + // ---------- 前台 ---------- + async publicPaginate(query: QueryNewsDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.buildQb(query).andWhere('n.status = 1'); + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async publicDetail(id: number): Promise { + const item = await this.repo.findOne({ + where: { id, status: 1 }, + relations: ['category'], + }); + if (!item) throw new NotFoundException('新闻不存在或未发布'); + return item; + } + + // ---------- 后台 ---------- + async paginate(query: QueryNewsDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.buildQb(query); + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ + where: { id }, + relations: ['category'], + }); + if (!item) throw new NotFoundException('新闻不存在'); + return item; + } + + async create(dto: CreateNewsDto): Promise { + return this.repo.save( + this.repo.create({ + categoryId: dto.categoryId, + title: dto.title, + cover: dto.cover ?? '', + intro: dto.intro ?? '', + content: dto.content, + isTop: dto.isTop ?? 0, + status: dto.status ?? 1, + }), + ); + } + + async update(id: number, dto: UpdateNewsDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + categoryId: dto.categoryId, + title: dto.title, + cover: dto.cover ?? '', + intro: dto.intro ?? '', + content: dto.content, + isTop: dto.isTop ?? 0, + status: dto.status ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } + + private buildQb(query: QueryNewsDto) { + const qb = this.repo + .createQueryBuilder('n') + .leftJoinAndSelect('n.category', 'c') + .orderBy('n.isTop', 'DESC') + .addOrderBy('n.id', 'DESC'); + if (query.categoryId) { + qb.andWhere('n.category_id = :cid', { cid: query.categoryId }); + } + if (query.keyword) { + qb.andWhere('n.title LIKE :kw', { kw: `%${query.keyword}%` }); + } + return qb; + } +} diff --git a/src/modules/product-category/dto/product-category.dto.ts b/src/modules/product-category/dto/product-category.dto.ts new file mode 100644 index 0000000..72001e3 --- /dev/null +++ b/src/modules/product-category/dto/product-category.dto.ts @@ -0,0 +1,44 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateProductCategoryDto { + @ApiProperty({ description: '分类名称' }) + @IsString() + @IsNotEmpty({ message: '分类名称不能为空' }) + @MaxLength(100) + name: string; + + @ApiPropertyOptional({ description: '排序', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '是否展示 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateProductCategoryDto extends CreateProductCategoryDto {} + +export class QueryProductCategoryDto { + @ApiPropertyOptional({ description: '关键词' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/product-category/product-category.controller.ts b/src/modules/product-category/product-category.controller.ts new file mode 100644 index 0000000..8520dfa --- /dev/null +++ b/src/modules/product-category/product-category.controller.ts @@ -0,0 +1,72 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Public, Roles } from '@/common/decorators'; +import { ProductCategory } from '@/entities/product-category.entity'; +import { ProductCategoryService } from './product-category.service'; +import { + CreateProductCategoryDto, + QueryProductCategoryDto, + UpdateProductCategoryDto, +} from './dto/product-category.dto'; + +@ApiTags('产品分类 ProductCategory') +@Controller() +export class ProductCategoryController { + constructor(private readonly service: ProductCategoryService) {} + + @Public() + @Get('public/product-category') + @ApiOperation({ summary: '前台-产品分类列表' }) + publicList(): Promise { + return this.service.findPublicList(); + } + + @ApiBearerAuth('admin-token') + @Get('admin/product-category') + @ApiOperation({ summary: '后台-产品分类全部列表' }) + list(@Query() query: QueryProductCategoryDto): Promise { + return this.service.findAll(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/product-category/:id') + @ApiOperation({ summary: '后台-产品分类详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/product-category') + @ApiOperation({ summary: '后台-新增产品分类' }) + create(@Body() dto: CreateProductCategoryDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/product-category/:id') + @ApiOperation({ summary: '后台-修改产品分类' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateProductCategoryDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/product-category/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除产品分类(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/product-category/product-category.module.ts b/src/modules/product-category/product-category.module.ts new file mode 100644 index 0000000..3cd17e3 --- /dev/null +++ b/src/modules/product-category/product-category.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ProductCategory } from '@/entities/product-category.entity'; +import { ProductCategoryController } from './product-category.controller'; +import { ProductCategoryService } from './product-category.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([ProductCategory])], + controllers: [ProductCategoryController], + providers: [ProductCategoryService], + exports: [ProductCategoryService], +}) +export class ProductCategoryModule {} diff --git a/src/modules/product-category/product-category.service.ts b/src/modules/product-category/product-category.service.ts new file mode 100644 index 0000000..7ed9c77 --- /dev/null +++ b/src/modules/product-category/product-category.service.ts @@ -0,0 +1,65 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { ProductCategory } from '@/entities/product-category.entity'; +import { + CreateProductCategoryDto, + QueryProductCategoryDto, + UpdateProductCategoryDto, +} from './dto/product-category.dto'; + +@Injectable() +export class ProductCategoryService { + constructor( + @InjectRepository(ProductCategory) + private readonly repo: Repository, + ) {} + + async findPublicList(): Promise { + return this.repo.find({ + where: { isShow: 1 }, + order: { sort: 'ASC', id: 'DESC' }, + }); + } + + async findAll(query?: QueryProductCategoryDto): Promise { + const qb = this.repo + .createQueryBuilder('c') + .orderBy('c.sort', 'ASC') + .addOrderBy('c.id', 'DESC'); + if (query?.keyword) { + qb.andWhere('c.name LIKE :kw', { kw: `%${query.keyword}%` }); + } + return qb.getMany(); + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('分类不存在'); + return item; + } + + async create(dto: CreateProductCategoryDto): Promise { + const entity = this.repo.create({ + name: dto.name, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + return this.repo.save(entity); + } + + async update(id: number, dto: UpdateProductCategoryDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + name: dto.name, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/product/dto/product.dto.ts b/src/modules/product/dto/product.dto.ts new file mode 100644 index 0000000..0d9bbbb --- /dev/null +++ b/src/modules/product/dto/product.dto.ts @@ -0,0 +1,86 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateProductDto { + @ApiProperty({ description: '分类ID' }) + @IsInt() + @Min(1) + @Type(() => Number) + categoryId: number; + + @ApiProperty({ description: '产品名称' }) + @IsString() + @IsNotEmpty({ message: '产品名称不能为空' }) + @MaxLength(100) + name: string; + + @ApiProperty({ description: '封面图' }) + @IsString() + @IsNotEmpty({ message: '封面图不能为空' }) + cover: string; + + @ApiPropertyOptional({ description: '简短描述' }) + @IsString() + @IsOptional() + desc?: string; + + @ApiPropertyOptional({ description: '详情富文本' }) + @IsString() + @IsOptional() + content?: string; + + @ApiPropertyOptional({ description: '排序', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '上下架 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateProductDto extends CreateProductDto {} + +export class QueryProductDto { + @ApiPropertyOptional({ description: '页码', default: 1 }) + @IsInt() + @Min(1) + @IsOptional() + @Type(() => Number) + page?: number; + + @ApiPropertyOptional({ description: '每页数量', default: 10 }) + @IsInt() + @Min(1) + @Max(100) + @IsOptional() + @Type(() => Number) + pageSize?: number; + + @ApiPropertyOptional({ description: '分类ID' }) + @IsInt() + @IsOptional() + @Type(() => Number) + categoryId?: number; + + @ApiPropertyOptional({ description: '关键词(名称)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/product/product.controller.ts b/src/modules/product/product.controller.ts new file mode 100644 index 0000000..a79b220 --- /dev/null +++ b/src/modules/product/product.controller.ts @@ -0,0 +1,83 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; + +import { Public, Roles } from '@/common/decorators'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { Product } from '@/entities/product.entity'; +import { ProductService } from './product.service'; +import { + CreateProductDto, + QueryProductDto, + UpdateProductDto, +} from './dto/product.dto'; + +@ApiTags('产品 Product') +@Controller() +export class ProductController { + constructor(private readonly service: ProductService) {} + + // ---------- 前台 ---------- + @Public() + @Get('public/product') + @ApiOperation({ summary: '前台-产品分页' }) + publicPaginate(@Query() query: QueryProductDto): Promise> { + return this.service.publicPaginate(query); + } + + @Public() + @Get('public/product/:id') + @ApiOperation({ summary: '前台-产品详情' }) + publicDetail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.publicDetail(id); + } + + // ---------- 后台 ---------- + @ApiBearerAuth('admin-token') + @Get('admin/product') + @ApiOperation({ summary: '后台-产品分页' }) + paginate(@Query() query: QueryProductDto): Promise> { + return this.service.paginate(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/product/:id') + @ApiOperation({ summary: '后台-产品详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/product') + @ApiOperation({ summary: '后台-新增产品' }) + create(@Body() dto: CreateProductDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/product/:id') + @ApiOperation({ summary: '后台-修改产品' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateProductDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/product/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除产品(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/product/product.module.ts b/src/modules/product/product.module.ts new file mode 100644 index 0000000..9a963bd --- /dev/null +++ b/src/modules/product/product.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Product } from '@/entities/product.entity'; +import { ProductCategory } from '@/entities/product-category.entity'; +import { ProductController } from './product.controller'; +import { ProductService } from './product.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Product, ProductCategory])], + controllers: [ProductController], + providers: [ProductService], +}) +export class ProductModule {} diff --git a/src/modules/product/product.service.ts b/src/modules/product/product.service.ts new file mode 100644 index 0000000..cd84ae3 --- /dev/null +++ b/src/modules/product/product.service.ts @@ -0,0 +1,114 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { Product } from '@/entities/product.entity'; +import { PaginatedResult } from '@/common/dto/api-response.dto'; +import { + CreateProductDto, + QueryProductDto, + UpdateProductDto, +} from './dto/product.dto'; + +@Injectable() +export class ProductService { + constructor( + @InjectRepository(Product) + private readonly repo: Repository, + ) {} + + // ---------- 前台 ---------- + async publicPaginate(query: QueryProductDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 12; + const qb = this.repo + .createQueryBuilder('p') + .leftJoinAndSelect('p.category', 'c') + .where('p.is_show = 1') + .orderBy('p.sort', 'ASC') + .addOrderBy('p.id', 'DESC'); + if (query.categoryId) { + qb.andWhere('p.category_id = :cid', { cid: query.categoryId }); + } + if (query.keyword) { + qb.andWhere('p.name LIKE :kw', { kw: `%${query.keyword}%` }); + } + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async publicDetail(id: number): Promise { + const item = await this.repo.findOne({ + where: { id, isShow: 1 }, + relations: ['category'], + }); + if (!item) throw new NotFoundException('产品不存在或已下架'); + return item; + } + + // ---------- 后台 ---------- + async paginate(query: QueryProductDto): Promise> { + const page = query.page ?? 1; + const pageSize = query.pageSize ?? 10; + const qb = this.repo + .createQueryBuilder('p') + .leftJoinAndSelect('p.category', 'c') + .orderBy('p.sort', 'ASC') + .addOrderBy('p.id', 'DESC'); + if (query.categoryId) { + qb.andWhere('p.category_id = :cid', { cid: query.categoryId }); + } + if (query.keyword) { + qb.andWhere('p.name LIKE :kw', { kw: `%${query.keyword}%` }); + } + const [list, total] = await qb + .skip((page - 1) * pageSize) + .take(pageSize) + .getManyAndCount(); + return { list, total, page, pageSize }; + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ + where: { id }, + relations: ['category'], + }); + if (!item) throw new NotFoundException('产品不存在'); + return item; + } + + async create(dto: CreateProductDto): Promise { + const entity = this.repo.create({ + categoryId: dto.categoryId, + name: dto.name, + cover: dto.cover, + desc: dto.desc ?? null, + content: dto.content ?? null, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + return this.repo.save(entity); + } + + async update(id: number, dto: UpdateProductDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + categoryId: dto.categoryId, + name: dto.name, + cover: dto.cover, + desc: dto.desc ?? null, + content: dto.content ?? null, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/site-config/dto/site-config.dto.ts b/src/modules/site-config/dto/site-config.dto.ts new file mode 100644 index 0000000..c258229 --- /dev/null +++ b/src/modules/site-config/dto/site-config.dto.ts @@ -0,0 +1,61 @@ +import { ApiPropertyOptional } from '@nestjs/swagger'; +import { + IsOptional, + IsString, + MaxLength, +} from 'class-validator'; + +export class UpdateSiteConfigDto { + @ApiPropertyOptional({ description: '网站名称' }) + @IsString() + @IsOptional() + @MaxLength(100) + siteName?: string; + + @ApiPropertyOptional({ description: 'logo 图片地址' }) + @IsString() + @IsOptional() + @MaxLength(255) + logo?: string; + + @ApiPropertyOptional({ description: '联系电话' }) + @IsString() + @IsOptional() + @MaxLength(50) + tel?: string; + + @ApiPropertyOptional({ description: '公司地址' }) + @IsString() + @IsOptional() + @MaxLength(255) + address?: string; + + @ApiPropertyOptional({ description: '商务邮箱' }) + @IsString() + @IsOptional() + @MaxLength(100) + email?: string; + + @ApiPropertyOptional({ description: '底部版权' }) + @IsString() + @IsOptional() + @MaxLength(255) + copyright?: string; + + @ApiPropertyOptional({ description: '备案号' }) + @IsString() + @IsOptional() + @MaxLength(100) + icp?: string; + + @ApiPropertyOptional({ description: '企业简介标题' }) + @IsString() + @IsOptional() + @MaxLength(100) + aboutTitle?: string; + + @ApiPropertyOptional({ description: '企业简介正文(富文本)' }) + @IsString() + @IsOptional() + aboutContent?: string; +} diff --git a/src/modules/site-config/site-config.controller.ts b/src/modules/site-config/site-config.controller.ts new file mode 100644 index 0000000..c85cbeb --- /dev/null +++ b/src/modules/site-config/site-config.controller.ts @@ -0,0 +1,33 @@ +import { Body, Controller, Get, Put } from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Public } from '@/common/decorators'; +import { SiteConfig } from '@/entities/site-config.entity'; +import { SiteConfigService } from './site-config.service'; +import { UpdateSiteConfigDto } from './dto/site-config.dto'; + +@ApiTags('网站配置 SiteConfig') +@Controller() +export class SiteConfigController { + constructor(private readonly service: SiteConfigService) {} + + @Public() + @Get('public/site-config') + @ApiOperation({ summary: '前台-获取网站基础配置' }) + get(): Promise { + return this.service.get(); + } + + @ApiBearerAuth('admin-token') + @Get('admin/site-config') + @ApiOperation({ summary: '后台-获取网站配置' }) + adminGet(): Promise { + return this.service.get(); + } + + @ApiBearerAuth('admin-token') + @Put('admin/site-config') + @ApiOperation({ summary: '后台-修改网站配置' }) + update(@Body() dto: UpdateSiteConfigDto): Promise { + return this.service.update(dto); + } +} diff --git a/src/modules/site-config/site-config.module.ts b/src/modules/site-config/site-config.module.ts new file mode 100644 index 0000000..5823f55 --- /dev/null +++ b/src/modules/site-config/site-config.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { SiteConfig } from '@/entities/site-config.entity'; +import { SiteConfigController } from './site-config.controller'; +import { SiteConfigService } from './site-config.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([SiteConfig])], + controllers: [SiteConfigController], + providers: [SiteConfigService], + exports: [SiteConfigService], +}) +export class SiteConfigModule {} diff --git a/src/modules/site-config/site-config.service.ts b/src/modules/site-config/site-config.service.ts new file mode 100644 index 0000000..a9a642c --- /dev/null +++ b/src/modules/site-config/site-config.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { SiteConfig } from '@/entities/site-config.entity'; +import { UpdateSiteConfigDto } from './dto/site-config.dto'; + +const SINGLETON_ID = 1; + +@Injectable() +export class SiteConfigService { + constructor( + @InjectRepository(SiteConfig) + private readonly repo: Repository, + ) {} + + /** + * 获取唯一站点配置;不存在则自动初始化一条 + */ + async get(): Promise { + let one = await this.repo.findOne({ where: { id: SINGLETON_ID } }); + if (!one) { + one = this.repo.create({ + id: SINGLETON_ID, + siteName: '企业官方网站', + logo: '', + tel: '', + address: '', + email: '', + copyright: '', + icp: '', + aboutTitle: '', + aboutContent: null, + }); + one = await this.repo.save(one); + } + return one; + } + + async update(dto: UpdateSiteConfigDto): Promise { + const one = await this.get(); + Object.assign(one, dto); + return this.repo.save(one); + } +} diff --git a/src/modules/team/dto/team.dto.ts b/src/modules/team/dto/team.dto.ts new file mode 100644 index 0000000..9a99cdf --- /dev/null +++ b/src/modules/team/dto/team.dto.ts @@ -0,0 +1,60 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + Max, + MaxLength, + Min, +} from 'class-validator'; + +export class CreateTeamDto { + @ApiProperty({ description: '姓名' }) + @IsString() + @IsNotEmpty() + @MaxLength(50) + name: string; + + @ApiProperty({ description: '职位' }) + @IsString() + @IsNotEmpty() + @MaxLength(100) + position: string; + + @ApiProperty({ description: '头像' }) + @IsString() + @IsNotEmpty() + avatar: string; + + @ApiPropertyOptional({ description: '个人简介' }) + @IsString() + @IsOptional() + desc?: string; + + @ApiPropertyOptional({ description: '排序', default: 0 }) + @IsInt() + @Min(0) + @Max(99999) + @IsOptional() + @Type(() => Number) + sort?: number; + + @ApiPropertyOptional({ description: '是否展示 1是0否', default: 1 }) + @IsInt() + @Min(0) + @Max(1) + @IsOptional() + @Type(() => Number) + isShow?: number; +} + +export class UpdateTeamDto extends CreateTeamDto {} + +export class QueryTeamDto { + @ApiPropertyOptional({ description: '关键词(姓名/职位)' }) + @IsString() + @IsOptional() + keyword?: string; +} diff --git a/src/modules/team/team.controller.ts b/src/modules/team/team.controller.ts new file mode 100644 index 0000000..e4f1630 --- /dev/null +++ b/src/modules/team/team.controller.ts @@ -0,0 +1,72 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + ParseIntPipe, + Post, + Put, + Query, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Public, Roles } from '@/common/decorators'; +import { Team } from '@/entities/team.entity'; +import { TeamService } from './team.service'; +import { + CreateTeamDto, + QueryTeamDto, + UpdateTeamDto, +} from './dto/team.dto'; + +@ApiTags('团队 Team') +@Controller() +export class TeamController { + constructor(private readonly service: TeamService) {} + + @Public() + @Get('public/team') + @ApiOperation({ summary: '前台-团队成员列表' }) + publicList(): Promise { + return this.service.findPublicList(); + } + + @ApiBearerAuth('admin-token') + @Get('admin/team') + @ApiOperation({ summary: '后台-团队成员列表' }) + list(@Query() query: QueryTeamDto): Promise { + return this.service.findAll(query); + } + + @ApiBearerAuth('admin-token') + @Get('admin/team/:id') + @ApiOperation({ summary: '后台-团队成员详情' }) + detail(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.detail(id); + } + + @ApiBearerAuth('admin-token') + @Post('admin/team') + @ApiOperation({ summary: '后台-新增团队成员' }) + create(@Body() dto: CreateTeamDto): Promise { + return this.service.create(dto); + } + + @ApiBearerAuth('admin-token') + @Put('admin/team/:id') + @ApiOperation({ summary: '后台-修改团队成员' }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() dto: UpdateTeamDto, + ): Promise { + return this.service.update(id, dto); + } + + @ApiBearerAuth('admin-token') + @Delete('admin/team/:id') + @Roles('super_admin') + @ApiOperation({ summary: '后台-删除团队成员(仅超管)' }) + remove(@Param('id', ParseIntPipe) id: number): Promise { + return this.service.remove(id); + } +} diff --git a/src/modules/team/team.module.ts b/src/modules/team/team.module.ts new file mode 100644 index 0000000..1b31368 --- /dev/null +++ b/src/modules/team/team.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Team } from '@/entities/team.entity'; +import { TeamController } from './team.controller'; +import { TeamService } from './team.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Team])], + controllers: [TeamController], + providers: [TeamService], +}) +export class TeamModule {} diff --git a/src/modules/team/team.service.ts b/src/modules/team/team.service.ts new file mode 100644 index 0000000..5ccc631 --- /dev/null +++ b/src/modules/team/team.service.ts @@ -0,0 +1,74 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository, Like } from 'typeorm'; +import { Team } from '@/entities/team.entity'; +import { + CreateTeamDto, + QueryTeamDto, + UpdateTeamDto, +} from './dto/team.dto'; + +@Injectable() +export class TeamService { + constructor( + @InjectRepository(Team) + private readonly repo: Repository, + ) {} + + async findPublicList(): Promise { + return this.repo.find({ + where: { isShow: 1 }, + order: { sort: 'ASC', id: 'DESC' }, + }); + } + + async findAll(query?: QueryTeamDto): Promise { + const where = query?.keyword + ? [ + { name: Like(`%${query.keyword}%`) }, + { position: Like(`%${query.keyword}%`) }, + ] + : undefined; + return this.repo.find({ + where, + order: { sort: 'ASC', id: 'DESC' }, + }); + } + + async detail(id: number): Promise { + const item = await this.repo.findOne({ where: { id } }); + if (!item) throw new NotFoundException('成员不存在'); + return item; + } + + async create(dto: CreateTeamDto): Promise { + return this.repo.save( + this.repo.create({ + name: dto.name, + position: dto.position, + avatar: dto.avatar, + desc: dto.desc ?? null, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }), + ); + } + + async update(id: number, dto: UpdateTeamDto): Promise { + const item = await this.detail(id); + Object.assign(item, { + name: dto.name, + position: dto.position, + avatar: dto.avatar, + desc: dto.desc ?? null, + sort: dto.sort ?? 0, + isShow: dto.isShow ?? 1, + }); + await this.repo.save(item); + } + + async remove(id: number): Promise { + await this.detail(id); + await this.repo.delete(id); + } +} diff --git a/src/modules/upload/upload.controller.ts b/src/modules/upload/upload.controller.ts new file mode 100644 index 0000000..0cd8cfe --- /dev/null +++ b/src/modules/upload/upload.controller.ts @@ -0,0 +1,36 @@ +import { + Controller, + Post, + Req, + BadRequestException, +} from '@nestjs/common'; +import { ApiBearerAuth, ApiConsumes, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Request } from 'express'; +import { filePathToUrl } from '@/utils/file.util'; + +export interface UploadResult { + url: string; + filename: string; +} + +@ApiBearerAuth('admin-token') +@ApiTags('文件上传 Upload') +@Controller('admin/upload') +export class UploadController { + @Post() + @ApiConsumes('multipart/form-data') + @ApiOperation({ + summary: '上传图片', + description: '仅支持 jpg/png/jpeg/webp,单图 2M 上限', + }) + upload(@Req() req: Request): UploadResult { + const file = (req as Request & { file?: Express.Multer.File }).file; + if (!file) { + throw new BadRequestException('请上传文件'); + } + return { + url: filePathToUrl(file.path), + filename: file.filename, + }; + } +} diff --git a/src/modules/upload/upload.module.ts b/src/modules/upload/upload.module.ts new file mode 100644 index 0000000..b002ca9 --- /dev/null +++ b/src/modules/upload/upload.module.ts @@ -0,0 +1,7 @@ +import { Module } from '@nestjs/common'; +import { UploadController } from './upload.controller'; + +@Module({ + controllers: [UploadController], +}) +export class UploadModule {} diff --git a/src/types/express.d.ts b/src/types/express.d.ts new file mode 100644 index 0000000..b5a0669 --- /dev/null +++ b/src/types/express.d.ts @@ -0,0 +1,10 @@ +import { CurrentAdminPayload } from '@/common/decorators/current-admin.decorator'; + +declare module 'express' { + interface Request { + /** JWT 守卫解析后挂载的当前管理员信息 */ + admin?: CurrentAdminPayload; + /** multer 上传后的文件(仅 /admin/upload 路由) */ + file?: Express.Multer.File; + } +} diff --git a/src/utils/crypto.util.ts b/src/utils/crypto.util.ts new file mode 100644 index 0000000..0b873a5 --- /dev/null +++ b/src/utils/crypto.util.ts @@ -0,0 +1,16 @@ +import * as bcrypt from 'bcrypt'; + +const SALT_ROUNDS = 10; + +/** bcrypt 加密明文密码 */ +export async function hashPassword(plain: string): Promise { + return bcrypt.hash(plain, SALT_ROUNDS); +} + +/** bcrypt 校验密码 */ +export async function comparePassword( + plain: string, + hashed: string, +): Promise { + return bcrypt.compare(plain, hashed); +} diff --git a/src/utils/file.util.ts b/src/utils/file.util.ts new file mode 100644 index 0000000..2eb7a15 --- /dev/null +++ b/src/utils/file.util.ts @@ -0,0 +1,14 @@ +import path from 'path'; + +/** + * 把磁盘绝对路径转换成可访问的相对 URL + * 例如:/Users/xxx/server/uploads/2026/01/abc.jpg -> /uploads/2026/01/abc.jpg + */ +export function filePathToUrl(absPath: string): string { + const root = (process.env.UPLOAD_ROOT ?? './uploads').replace(/^\.\/?/, ''); + const idx = absPath.replace(/\\/g, '/').indexOf(root); + if (idx >= 0) { + return '/' + absPath.replace(/\\/g, '/').slice(idx).replace(/^\/+/, '/'); + } + return '/' + path.basename(absPath); +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..23a263b --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './crypto.util'; +export * from './file.util'; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..185f105 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "rootDir": "./src", + "skipLibCheck": true, + "strictNullChecks": true, + "noImplicitAny": true, + "strict": true, + "strictPropertyInitialization": false, + "noEmitOnError": false, + "esModuleInterop": true, + "resolveJsonModule": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist", "test"] +} diff --git a/uploads/2026/06/1781692209397_uqobwr.jpg b/uploads/2026/06/1781692209397_uqobwr.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05e13e6ed1c55b3ab11e263ab84d6787831d8bd9 GIT binary patch literal 341413 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%0D|WH86!*hNAb4C z(2cFA=$f6_T$A3*K7$6ooMdU#Gqaar&3{7hwmvm*aAfh0TPhg2E{o)Q6_aSbJ<{dV zH7JF?wGjDz>&W#z8u!DuGTL5!tIH&XAa<&dY8Tcwg8tfeg89$kUfJRQ02OE+Ac=I} z5#C#WXdvXW_55q;&j$tj-Omn$`IAOtnnZ^O<|B{Bt*H@+^Bi{wTkmIz^`8`cJGl8T z^a-N8vSla9LHDc2CW37|q*|4{wo!)v08)6*(AJQxW2U7kLw$_~Vpx&oft=$s-hONp z1oii(t0N4@<%H}#1v?q*unOx;KnVwE$b4fy)ZAfAK$UOrXNqT0aQ_961v20#ns^1$?^$1nTV;BaZe-O3!eNXh%T=A;o@h8rG0pmaUy3+p`wg^;v= zyd)9V(w`d3ftftj2iBs?s3tjqC!!HRc*{q+GOjv+XdUmVqw@tPb1$ljRolHbvqqqF zJ?VkfMnaUx&QEGlAYvEI5)PvxfD|i)QW6N8J#)#WYz@Gf7o3v3(>WkN+4uT$N17LR z?@U1PjAnowINEl*M!fvgZDInIiznv;+K{pkTg;L~+ky`q(~6XJ-w-lv!j(M*02{JV zj#GC-P3RFstt5fDB9$@>DhQY5>F8)1l@JiIfPQ>X0x($%bCM4r_oFz;Sv;oB3ibk( zfFOpzT;*7Ir8z%+Q)3U9_Y?ruRV^+)Qy)D402MoU+%Y2%!ytN69PQlr$l!mpDNf)R zx~{-E1FZljK&kUAjCdoZDI+ewDFeCnqz3{pUuqbA&s9r#@6%e4+rDJH16I`|dJ-c^}B!B*_Ns2ll6hc8R~7K*Kxb*eLvFA4d*YC}WK+3zA;U2KDurAEgckEK zav1O_qD91RSxMc{cc*3pi)EOcmt`Rc?MSVMfwH?5NPlxk!N8D=sm}w_ns$~8w3Ws{ z^)y+I%#Csdy5RZ2$tSQBo4S%lcjRNGDc|LWCnb&P)fRBg>Ag8MbTsAZ3mxv!Nr(zv5ujE4;x6J;1x81g5#BmLB`hP zng~@{K3QT_InS*P!%MqpV7tL;EXTosWQeq0Zsx~YX_F!L zv}!YrxaN*zH5b^UDBPfA^WMLw{{Z+VABzUR`#)(Y@q+Lcw<9?t75u)lDzRO|HT?zu z0Kp)2?>ph=iFD?NZUbK<#KC?Jd;Kf6J}01O}RW~%w4pP6&~JklAJa7z#N`L2F-+O{Y=Cu*?-`_{0n9;}JNR@nUR{{VuH>89)9M014PV`I;!HTX|( zq|0OgKXr%FzoHM@n#w(E;Lf3IXrb=carz4Wd7$w2zDX||vo3n(zH2qd(2V{#{pafZ z4+ktRy&2nlJdIOPxk)Dkk-QID_xnPnN=Ug zYe00zM>!oU$fusuzLH1P)ytcDBRgzZz-0sJK~%xpAP4DM-`V%vV$Fc4&Yh?~%C@b~ zt#p5__(i)%H}(!K?2Ka^yY~q#KvBgvZ0e}qZLwqbt6{u1t`N=k0rIywJ!$LVop4De zbl^c56u;N3xpf-h{A1`~wDST+ZBO866U(3ZcKnTXDdAmkDubl1f8MDV!kXh8e`Tus z?xgtdE$YSorefZQ*zc#)gm%3gUw#syAg$E4LpGwU!y)fA6}HJ{)UXmzHjNZm%X>dz2^qP+S*_ zzQ+_dmW50pMIx3b9St%$WZMP6U$lpPn|r9QR*&J%wfngMEht~PyR|R;E1hQue6O*% zJbc_{pZr8jrD^RB`0!>gOPmkczHgoagFKH)cz`zbDi8NK>0XGR4z*@DxYQLv>(4)x zaeoo@9|(LOvAWj&A$X%h@OF;B>I~Cn^7H8pdpRzB{ij)B@X&4fYI!;431#uVA=|M` z+ptyhRPcLJAF^1VwriKRS~iY9<+R4XGyW%k!AA6}VRNT^BJiF5rh_WFzll0${hJSe z>0g_EJ@~8fH{zYs%j2&b_>)|Rkd{(Pe#55@!0Fi>dJ)L4-*|Jv%J_ukiPF~fN9Gv* zJ*7+dTA#CD6Mt^6g1!M4Rz4TLo8o@I7F5{j*lPx1)D1@?r=b07;O~gPx5vkS8AoxZ zcxzqKz83gqLPyv?N|hvDHwOYf1e_U+Z7dgD7yw z;H+Ts2Su-ie`(*@yZ#b{pU2)0wpH;3nwc8L*a7{ikNvA(&%P%3e;i%$xOm;4(;f%- zuPmafz++_H34RwpFJ@ake@VI1?rfGzYrWR@P@Z|mIsGg1uj0qUOYZ{TT-{kj*Pa}^ zW8@rX>_qlH)%p@+c;qm{8$~L%E>Q4Qv(9QAN5cAliZtCvP1PYpvt_}^&V9$BujRZ& zIpOO2DvHPYA;Fwc930hnK4>?pKQ8ngR{KY}((bg`u5_JB!M7#cEP(2#B2-q-* zK-(EORUHSguTKStalMb$ar`%yaUD5SQA($h-2Kn+$BR5Y;@v(iOF_J|*C279Iwu%U zsIB=hpy34M^a8&PG+z<;lfpW*T8D>qd;JdidPtz3&$cVQ0I)$&@ zH=1l&+y3$Xb?Ur|Dj~5^hof+ZbK>HPr^5$L4sNRp?8Syj)+JAo3LX zn2i{dlEhHu5RlRZkc@CCvhK<%2OGHrcBql$U<+4E#cQ!En0QRm{isnNG3aeu(#{hazK(EQ58 zX}24pTp#%U)XsB%anzoe1ar{W!+H*_2CZQpsAP@b?R)SS2a5je@V~;mK3PFls=s}E zw$I{@H{(oBXNq&E{oaeBM)E4A!iwlrF5SzummM-Y5&BcrnHV}VqmGQH1bq!6u#<6& zmK3-?hQE4?NcaQOd?E3V$37TjveSG{*U&Hgx?VTh4m|)JE9t)se$k#2@l;7;;_08m z*ZCe@j?sGt?^X@>Px7yYAb_OiU8D+08B0412G3gTt2j8M)y2p%rx_oKuh^f0U+`UBV$19r2kjg1*G%y=L;&6+ z@NfDg`04XlT#iZW*F1N~uj11~@rQ}LD|Kac;r&|j(n$^u*$DhHJ6F*fU+ooPeB#H& zdP-^250$QM$KF5QVmhC#eD*hn@EC;o;bzRgwCXLM$ND>b4E?b`X3yGA)@eQtd{prN z0Eu;X1MNCZ%)-Z3iMy}%b@2q_zd`L^P5juwS07LZ@~`u4&^%RdtXpZCriXoVs?BV{ z?PO;F#zDxz?0xvJ)DPL`{tEH?SbPDS`y<6(FVwz2_$iJ~o8yboeSN2&`f=1h+S}r6U9YBMXj{ zicVw05OLeJ03gEvSIuyG@1a*90TQz37-K=m^7ogJ`i|6uZVE~>ob?B#02m9r?P$+H zig+~QFft(`B;@DTkmL;VxIB8AFr>+oDzOaKl=0X>j?@a|rQ@&Zhx&<#*49>n|FWns} za^HBi3XEZB0j@TvGKk>=pdC#}Lz3+1yGo2>tu!f8>lzK^a#{ORNK!*>k=(B&bf5qX z1_2ouuML`bCw3M^E@Q!RDHj`+K4nrk&w54Ne4s)W8X&+)ES+aGn-AE=W2>!pjZkVbFQ>AY~|<96VHl%S8Nz*4Hz?R z88HK}tEzdL)gR-61BQ|8ztASA({gnF#`B5#T#{urs@DN+KZ>fbXGicvxw!^R@G6c{ z1?uC`cvK!OE?B!hyc1FwzYHt@h?#WfozI{sDqB!QvNz)WNCuXbl zP;=J7|6V;BxQ{a>j<4x-$^7ry$+F3q>?I8>z8!#X$tmZVmUj_)41B&7(fi07-`^d( zjs(1=u@g|^{Kn08RfHs~yc-}17wDCtp#I39P@eB=HbWliWl4ekO zv;ev%Ke>}aKfJnDM=Pw4xoe&EJPU+b2^$m_?*6T-97ba}<|fUmGqC?y3u=X(Bx(0aloMA+z8^#H5^KQA}!BYq*Qiq6Kixn zljszF~(*6gnd6qr95%{xIm?@FGOhW=_L-QJiz4w zbHQJxf;11vTuGi=fBGHXOfhjz0{1jAINI#R6B38Co)041oqrx4700`1I46CWy{AP! zMJ=Hr7R>{Y_|Jnt%{9q)cL@S(XX`<6 z*9Y-10+;yy<(3x#19-p$FaK3a;hohNDV02BOLYNbZq+2*@2L4!*phO@RjhA$rg$uK5## zn$^W}DW|KkYcr)1)6j=RV~01PkX za&1bF@^hjl`B}_Eqi#LAn{h#Zn9P#V6SZzK8%mSRGI$dQr&d;4K%B*#d#38DsJ;kq zCTq9K+#zxD7?uGC0o*i&8gK!c#IW%6l9T76osQ(ue9}exH8h6eUdl(B^B;)fDd6_O zllTuw1NB)_LWxYLap+XjZ`a=}iSD7zcN(+# z2mAS+U!3uU@t`ikS^4fMMrW{RuN>_qbVWYGuJyBXW{Na|<8k%-OWff$;ZOZ|(j|x# z`U-i+1JVDoT@vGYp>HyMC5`^PDeU{!x~DuyYH0uhHc$4@y2<( zVpGvwI5**ax2fbL23J_3AI;RfK-XXcw@3yVK1^THzrBhG+;F+x&Ch1ImC&E3sM2jU zbRH+iHw;=&2>dN?GQRx}Afi*|5ltDAc0L4pUr7&O?OW(G>02nDU~7j) zX1pti0;9ekigz)y4@$;hUQ-<0Lu+*}bxAO>XmjKh`)Qs0lJnEMpy1h-`@U7G^ztm2 zSoR5JNyl$dUWVR5rGs?fAMXRxFaPAs z{1Q?hMu@95d1Q+x4KxE;c24eXfg4^MO>aah+GzJ9Hq{a!^;oo<;&J!cZ!@Sw!0!m^ zI^5pf#rno&EEg~w-pl5OT=@=u_v|0wkxIMz$WKh?K+Q=l;X z%9I62>{)OA=d8!It_6Mc7YvR(34=I4f7dR3o*ACnA0q(s+El=gR~>U3KFB`{SD0An z5VJw|gYK@I7>NXXrqLIv^mbmdzr))J-(5awCkoJB=Ta8>(9-&82ck94ItnJmrC#xs5)5kHl3C{+zb4}j<12lyM zf2Ahb3GDZML%^cp-v|@B0Sf1!6iM*25po>A&hZspmZwfhkE}>gIPMkBt^hL2UIn6C z26}ObuDABk@=j@yL>!3Te}El@PZXf2%TW*qvn|t z7e^=oZi%+O4Ri?Y$ee4wjX@!Cf?ZU0zkA5Kd*mYuAQ4334<*FnXrZJq?+*yIAxqnu zr+x(fYTg(tiC}i|zvo5q7Jm=O?mIbur(5=}?tCk)i%;fYk=7&vVeM%eKFyaU-w>vbo)Qbi_eq5>i6LJLNx1jGpn%TJm3Svt=sjc9?u^>V zRcq8gz)LW)9&)rHLc1D}2tLvVzisJk;U;v5+oBggW$2-sX1MS~mU1{&PNeUI;7n@y zv~8Xn0#~{f+Wh+?q<@grReBaHOKLkqWV;}#1g^JNeFAe4Zb-0g>r^zuJX|mRo zTw<)Ov5wZ#_vU!PRuk;6FfC5v=S0N1VDkV2B`yyE7UpnKXRT*Lgf6=UpeEkuV~yzV zGR6L%>&5DRwl;Zx;*M=j_URX|p>c?rkEp=thYk6M zOFc#5goY~bxOiWUIE)VJzD7`@O#m|(jmmu;)3hl|9|Sa;*zAMf`v&3fD<$z1u|Mn@ zmKViRF26OzZm!q#Qibrdh?x~O1N+q3oszgeevPMrdlceQlqQg+- zY2F;V@MCo^(f>l>e%#>|K%U#V+6mn*w>A#NClQ}mO@Se7^Ye#YM! zEwvtpmMqL5UA`Pf56Fbe(E}PefBcz^-Cf9ueEJ2bnbj=af|)hY4;IV zlimft=8}mL=PVnmy_)h>SNP!-A{xq#VVIF;4dz7@KM;Yu&^StS0srT{Xtg(`m|5Nr zD|8lnu_`b?&7M?t{XEJy*Oe8bnJO(m%$6syr>%*JZS^TjV5&lr3hx)7f(;LN zYuB}b#sqkTCW^|6rNr$bn%D*ioezWWDp^39X8L8~pT`->mzVuee^E}F5Wxs|s(4b+ zUZSjv_eOOG&9)>$(Er8}`c>*E2BE5PZt{9zFZTY$Fn;IDz za6K+D59inlx4$2wgP5X<4=Bjz*r!(l&QE^;1p}7e>qd}CfLy~B-jjs$FEL#0> zEft6t1r{C(01MtOWvBnfF1Py5oyi4*6Cdp~nB3ELhJo4ZPgfz&!n?)xO+APpPItIp zv0Dcsb;lJ@`WkJ40+RcU>eJ*zcY8;CTMSLJPEOx#Q8ZrT0H13F^ddT_mw0-BwiF9gCTaIoVjy`o#IJ z)UEQSGanhfK~hEYY3V>G`Wf~LdR0N38O)~Z z?%@@gC)oe_>$Cq%xr>sARhbyT8^G|Q`r7IG17(q1M}Qr1$G56jRLY46i^&7`?E>z= z?){Q1KQDV>GT4L5Dz$FeCG)E=()xs=8R0pf$UHyWly}jVRpv$ks0`d#wDVp#4%SK; zCXv_6_Q?ChNO)Tf?mNMoV|Lah@7(dF3~WspTSPLGN9ptQ?fhBM@<8l@Y64G}S5W~8 zGXuqE)Q*JVD%S`gaHwL9E0xpc1MlPKvc-@4zBip zopy_d>?gkbdCg9}306isT!nQsysk%8!p);P$=N3PsV@Zs_|6cy%%5olqn|U$*zOs| zYewL!_x$*Z*OCPp`zUb;O+vf(bI_sQ!A)AIs$HMD4v;edt~tIUes%tlyC>7WQ-u!t zGiJHRwCPI0JD7!{Gkfkio0do37Hv~J|ITfV<;5iAG%dwItTT>uex zeoVrDy|Ee{^y9?>=Eblt<-;8%NlI4k{7l53^OUPFu*DT1b^cNY>w>|pIvxH27DzUL zhrduUJ*&)$kDT3IHY(X7q)DM;-%TU#Qz$mum?tLZu4C?`?kDqTv87PT0P;=$u-$qX z89I98`646n!JCfF@fy$(T?Be=z3qKZ=iBlleuU>e$*(oBDyyw)h5e-Rega$$@ZVs4 zB=j{j&~~+{FfrT-njWR%@oF;Maggssn`tVOQcp1ayP#^)= z^6kZJ?I!g3e%n?B9kA0U{7@9n+v`xy&<>OKa|zOL*PieuY)3s7xvRByVGf8P7?O+M9UZ)85D?_>qvZSCWo^qg zjT4;D)PTm@I0OvWlAo{+-OX==(khdYtXy8whn}vy{W?+M!I-3>{C*p|+yqYNxJdhH`bG*+I(9#%^J3QT-ryUG z`*d;hj350K;lm>W?lXyLiSFj+F=@gCa$?@h4$82qT_6~NUY+CjI6qfNAM8{9o-R4A zrCqDUbp9u|8YPcLYLS$nur3#8V@mb#uyGWo;+%C|4|Mukxil4W!Y ziq1b?o%?#j6bC**%>342N+hZ0BnwzVE@UX;5YfBXV#L%T)PQ-D)r4M*&5buXEG@%U z(+e;_Qe8me$JNZNvhm{lsY?W5Az3}CJ*E>aPYGFQ!==sA~lt4KSNCfXiv#=r+dcJsM=%=5<(&%3R}iez>#r_y2FEYcNn+i z<=Ud&UM62_&gM9I|ePODVLF^%-LxZ+O#ikK0PSMt`X*!YN9EwX=U^vXUzv5 zMpA6EY3`~M5$EGZDt9JBs|_cI^+nLRPJGCl)19k;izG&KqSn)$GL!9TcTx53gK@Fh zj@Aa{OhO-dqocwn0c1KM6)5>M(ejA?A4XE&aqr$xnAL{>ejCyI0T*9e%qEl%&D{qg zmk-{cj)6X{%bIvM?MCtZGogDoNNO`~^Cc&@SA0QmkjbS6?x2=}jRCDY1sK5`siRtC zKr|QqcZvvGeD7c!;X|Q%U+Bj4rBRo11bDuUJ0B@pP~jUQ2OMfMN(p({TKdaZSY$ZH z`D1q%*x7`PVJ`IhbH%!ieP+5)rtSA9+H0Ya30+%Qp$q;)$j>6;)Ftr_b>2d-2=+Zs z=0~6MSCQ2z??ej;;vD&0Yi?3b7n|s-LO*Gi(*CGsM-L8Gkb4I+FEdv7G6JP3Uh9m2 zo@^(vo?kml!2$lycm0C=iVl4q{Y208P5u-G3q>*aHi#Q&Y`QjI_;Io^8IW z4sCjx`a;*zCVvZASF6SrM@%9g*TdbUA^tAi>9d8|8;77&6~l5|)J5WI&gPh#)AzVy z!=+(v@@w@y^(XGn#IAC<__iOn*#3;-OjRA6r%Mf?-y-*2KSTbQh_(ia0PJB=7_T334i`e;_SwH?W{Av$3u1TE$m6-^NI$%ivsel!B=sy zEO*tV#B!mQp(N{Bj`NF#NNysw4i8GA$+BmpS}3IlpXcN6>XRFE6a@Nfrfa@*5wIv| zi+Dw>mWcE#wP|d6>a0d#Pan`f{$XW#Na*m!Xp`1wejyW+HlDs0^D zMlzBwP?PY4T)dqO3hVo0na6T6Pra3Y**!*a5TqF`HIlu-GY;diZgRI0e4#fIfvYA{ zdWU}9LM(S-OInF!7sV8cTADX*b!VnOxu(hI;}&V)kQGO%8m5wyE9epXWE5duT@$yP@(uL5o$tD3y~W^j z&!irMF3;9K0O^tLlb%gZ>Jx&g6r-;7w(6yn>vH@vzrt4`)F>0e)TVco#$9rz$-%c% zV$u_yZ*o%QZplQc@J=l6M+X0U9!n9RCly2%z*C#5JJNMkva9IA21$3|&}SZ*+J0HX z!CV8+nbaZ1Rxru$t{QNbWE8N~unc03}R3{j&2N)7!?b8KGNu2Lc;Q>%?ub;Qmk603KU&#-Wp(u8D`~1 z_Dn#yWp>^G>5xmFYP>yyX-=9t!?*+W5_Gon^sTT^*LBN8FYHg%rp}z?F05L2lX*$k zzJw#H?%vzOyA=ycoZkb-L3w8Du`WiPbMm_1_c?@7_9N*{GbfS+fln6lnkV$F)Hagn z=FwKYNA}?~V)n#=UrYvDuH)LAHsl&|<$Ztr)pxt$3|%Xoo9&#*BRGwDwvLf-nvC1I z07au~6FdWR9R$;+j}?ETq~d*G6lzq32*xNC=pM~^elcWklRC+~qsmu~nwn_Z#NiGrv;Eoj)@(`Iz@wlBV*@Xuk9!M8NwNORO4a7NbtG^c2@U)W>m*E_D#eo* zT)*lo(fDksI(gUga;K2Az}3()2v5gITECHHPYnSM8qjX<@)VgKGz44D*ztN_MJKe2 z>Hb-MlV2&YQW&KbJUjH{C!QZC{^6QWF@;(5hBlY+S_*usOs=bYOuV3>z}iFBAoMvY zfkbF%p+wQuI3=N`LL5nSvhCQ?s_c}s+?LT=kGsta>i5ce zI6q@L02Fli%~*Vzw`n!jA8dD8e>^KTB1g{6vX^yu6jwF5b>rx7N2Mw>dM`S%g)G|p z7N(Cw`!HG^Y5v`ZOYow_?5wAJM|zAto5jB7E=zE_M0Y9?mF7~z}sJ8$TnJx)E zW_q_+JyaF$2W*13yaew|REp=u!j%LQ*^xG~hRGx>r&rRPQD^F_N4v*!(!d!K z%%eTj-+;GQk=O#B%J!L8}n67wH{)?eYe9Cg?SU4{w2pH8=>vD4kRv9Q)>x!*UaLI53iG8o-TSjnJ4 zfIc|GQ;{`|77D*SO>HBq{F!G~i>r^#LxHR_K{Js*4|uGDr^=I`Z@i)iG8r1N{Uvnz zP>rW0Ei}DGFgg=zHf+tmPb30rCl!BotXnJusL^1)Nk@q6SyHkswXBw(g9pH&iX7;Q z_Y9*i_6h^ODZ98d4N$@M5RLUvlYrH(4xZCzjU3sVas;JXU&)50o82uhxEDJ8Lwh+0 za;{G-{S%;U0VW%a`NA=u4hx$tfdUQZ1VQEZ88^6?Usn|%lL=L`Gq5heeUnO#C#&#N zTiNXja$S7+tX~Nbyhe83Nso~@-A%CJep~yxb%1e0Bs~e)xe4}!xL|YJEKV0()l6%` z-Rb|DP?!r8vb@;5&$j7sj3$qQKdpXDFe9RQZ!;d?!V>y@Z^i<+Y{|4i#VT1;%`5;x zl%I;gp`_^2p0^4E*>($8u{v5KL!lv{o+cTIy{E~6KN&!pSQ$Yxt=CQR-cxPYeXA60 z;v4un->e&^^IrFp2-k0bWE8`klUwkPH%qb21=zl+k6b{KqFK{aO3OSKW~?A zb4L0pYVo44rh`N>|9SvP6^R3CuM*J-4yW*2bjQ113QWgl9d1krW3y)4m-)4lIW3MrFtc}Sg| z1M_P6WOLK7+~ zt=Z}Sp7`5);o{LL%^F^|AfR)st|0#2<8_PcuWap35ADQd2Mby-h4f?p{Z7h}2bSxu zb+TAG`BS{26H*OagU|gcb$A~&pf=U!z7Z4iNTyErp&8;<;^X5^?s{L`0fOY}IPoZ8 z-%VKUPnFEE+;mMb@`a81~K9U<>I@<@a5M?swo1p8~*InrUg*1B>e5}u!u zRxkRRMflOn#)qXmjVcDi^0k5m!gM~W_jLMnIninll5#2qJ`#CpdE5W@1t*u4C;Rb% zl5Fwod#X{tXi3j-X@gp=VPb&0=5~GSH~UJ*pQIc1-s3JKzr~B?K89?cS`4W4F}`T1 zmJoAZ(0uRjZ+UtB4?uPwhpR!co%OGgy}(3o=xCm3Zlyfs=0}*_$c`t;r{=rSppceP z0qH^Bfu7FPe}EV(zWnYEfob0_e-Oefef|{(HbKBL#0-oA-DoQES&q7*u4RcC5rP9n`W#H|hH0M6(?B=lPh5KC+#m~CHIp`ixD%2^%;-%vbMFZnE3>h$84pY2DG{rze@i@9U^lwB-hL^u}d97s3)ozYo8}Am=9u53@}; zGwf~x_Ft=o5`4r<4w($vDN0p|;@(EGCIyAQ(0D2(x)%pvJ7Ts23kP!gj&V6GD5=lq zc?HF}2<~#JyKnN$#C?jkN$mRvpuwR(p7{5a7*r(XC)V}!4Qv-J^#5%0W#Hr5)ccj( zo2sVyVWUh#fD4zyjpHoPoj>e1;A|R@;mtlLgp0xlWQ3ODUMgiw3vn|n=WANqKbGQ@ zk^d0NBTv`LLw8qqC{V;8&3D~2L{LylGxC{G5xPIkinS1A|CI-xF-T+cXXjFM&6i~S z+3z#5K}8LmD)NwD6fHP9x+wDvXVq$79QRC``mYu{eZdAw(4E1&K(A<^6TYW<`BCp# z=>#Dr=PEGngb>x=c+58>7YIH#C2qcL$$JP2e0R)^!Br7WG#_>t7c5_y^a^cIc>i!r zYGxRe0sXqyi8>aaZrlcE0m+m(M1LVG{sC0L#Vzmqi)3&Sc2k{dr_!@q`2e5Y>ly{K1C<%|qp#>M`XOO86jffV@aN3eAO`T70pOtLuh^Ji?ko*I* zcAuQ6v3s7~2H`~BxCEsp>qhA2R47y4*PHeb{>`6V#|n;{-{gHKin*i-^TeiCA`t~& zqc%loOwmHUiUO#TW*)ys(4^wk{Y?980{hRV=f@-m;GNu!Ba41u-Sv?|1z1@EN8$eh zQ9_l|c1(?yT&>v>lp{(0QifdLsp9Ouoo>4HIJNz5%tXJ-DkTQg(bn;6;1gx;r<(h5 zZVpY8E+D?5$UaUM*xt0|c0Yy^undtR+Zhc2Gg!HK z%1i&kwb8RQTVYlp6p(4***E8)Gx5DaL=TW0){O+#@YXz2i-SIdSfA!=_ej>ZE#6BW z8RMABCuqJT_?6@5e*pS=EM=A4zAVu;{LQ5#O6G*pRv~^TA*o=!;agmS+7$AabGX8C zQjh`jH#?SV#FvYtMcb>FD9NFi-hY5PzTPoSx`djLN?Ve}9T}2^_QIE_x!(3bMi^DV zNssJu7z?F)mC_%KcoxPDK|NP=V~(NT{|KVd|DM*Kn0qlhWBZvk)Js5tx}UV7X|9X!f{OlbYr4pOV{7B{?p034guTorf)C+*-zUtB=@HA< z@&+g5pIW*TCecCr8x{GZS^r$Vqw6zHdj%M}sZJHT08><(!WFH{WrAz|LexGnJ2QC1 zX@f`aB|BhEqyAE(fny?H`c5W9&ZhCK2}HTlU1drM-CKx{LKPJfU}n5OVA5v?c4n^@ zNEP<=x@b(h02c@!H2a+p#uHoQ>sf?(bgGE>0lbMFRjU6vec#A%M9mlSxDT4WBj`SC->OzQasdwG9{J*CTeo>xf@t>3zKtB{m* z(cTXI4FH!0KWF!XnZc`)kMMYbBq&|Af7^(3+eF$HZph0_F7e)eoWOm8r9d#XDR!vM zR;K%Z)s8t_oT%G9u?p2cC$#422^-F`%$*_%uq6s04t+E)z1se>jp5|Y zIp7Dth&$h$c;l_hN3KBW18wFmE(_0lK|qR84Ee+7qPw1VbrBw-TL}l#lW|U_*T^sS z$u;K@T}65?N`CX>oy?E{JjN#pe!R{`6bpDQUTcwB6;QWpoSl)fQgh~;OYOcFrjgkS znk2dP#4lyFULslLtLN3*dTRd#I~io;9pW75@v-t#^(B{=prE-e2Z*~*wW zsXh!~+Sy4H+K<^D_BK`PGiTIsubWzg1&)cL(|Y%xU*9?>eARJzTaj`lnXyCir4R{~ zo#}vtdDy^%H=0UO$msOsh5oWzBY)IMG?Os4_9MM-!M-W)E&D_cLDEaA0QqV8rSDV$ ziqUODI7f=4%5I;Zbwpx5)>#Dw>W;I-Np)U3`oY&=w`H=5|J`wvRyRif;U(SO#ywa5 zqQpS8`+g503}k8J{1K0>inP6}qlT~0EX3RydA8<%j<-xIH(5--1pLq#@&_$*7n{HS zuu$rqWT3{dc@1R6ursQ+df!h1gPQknj293|kLTA3kdL)n;eM{xtZrs6BZjpZHJX0E$lQ5cQ3N?9Q6Hxi*0p~TT|7%ut9h4T zn`{eK+3z=W`6+5YRK=9xj;Se)6GQ8Z;UQl2@!j08 z%V3uITT~%8)|NfIMS1jun@R!L5nT*q$2cwp ze)pQ<-nJhkehCL#>#xJJkrv932TdIlK0kJ^5Ha$|g^nvj(8dkgy zaE{-9SS`F@zh&Eh-O7J>CFA%j#>>>s$YkbXW-yR;u}K7+;{`E5NAQWiL+!T{8KrIT z#XAt{Rtzd1Mx+>(dYgJ^tFIAXPm+s~(8c6m0oS-ilfe@Va!(XRl`{<6T*}+|E*0xjqkH?VWp3y7 zZ1cwFA=#tzhh9b&jz3Tv)O1ve%Vjt}OjVt-z>MLXfzTFGmKdEqtgBP6@{Ic@%}waeN0rd9h@MY~*YmSt#E z-`vta0PSBPtjn!jfIme$t{7PoPNK4)}i&dBpId(wkPCT|)sius>* zR(Mgu*RjVuGj{%tHCi;)$ocjtFVZblcO@sc2Lr5#*{TV87r`H4OL?s!A%A^C?n-*c zx^S4xDCownuOC$3rZE?o4)f#t)Nx_DDcOyV?~%gOsaUVQlB*p`DsgE!H!{l{zLUPZ zsQ5g^Xj2P8UAdc|6*sZzMq*4Ms?j6*`lZeqXU|g-icJ1fBYX89?I-*Dr*rwZ?|JoY zwr=N+VF@PJbkDtKZpDfMVtD*I+rWG#FpBjWtzut zL+3WDHh6{_zAkwjt)7GV$+!)R%OQS}5c_zOWcU7&8}U4D+x_{j`$Zr5>$@`Uc~qsN&RZvyrR^ zUdnuEH_yBrj*QbK+X(Dx<6#i9jFauP(@fpBceb=;y|kG94R~K6DG%~^-q1wkRAHQ8*VEz;f(3Ip1C4TPOgxq?3DIgh?-YjZ%@x5OHQeOr$KY^K2cjz zjCtbAOS&@(zXHO66)`w23rOCedWbi*d0^VsOhv%pTlyu*H$=?6$o;VSvzFVA&eOd^ zd9f;WDakna;`pE4&g1im#uAx{rTFV83nS8Iqg{5Apz~Tqw%!jC@1DNAI5|_WOo~G_ zD?XOap=h?hsT#%5qC_GfZ`R3Yry<(K+NIjKZ0+Ta!!BQ;qv`XikPf>=UKTZH>=-(` zB!Kv?$GrZ!&(Vh!Om5yYZ3TADJ6p2Vy|QpPwL7o)I?G6G&8Ke zGdAmYV~o6v!|sI0Dg?!R395wFL1?h~7w!=)K2rW~)i!`EvJt}P6vvy`*X{mb@($Jj zhxHP87D?2`uMaK|@};ULw{s=iY=z&~m51+4{$kkI6XgHPDmMnT2RF0=Csz2;-CrCe z?<=FGB7^wa@BZpe$QYEO)rz^;#qty{QfTtUj^;?2cVRc)Vnf=^|?L@ge2h@Aune@y$o21DtvtLhRz%jw2W`1NT>BY z-qeHpQB+=hAd@@{(bR}287#h=5b3^MZ6F@;yPl*t?9AN|U$Kh`J$0lIXu2?aZ5qImvTy)K+$n;?w4zP4;ip zcvse>{3a+|_Ei9mZrqBRYWUGf3gEd*1T(twKcW6om#a^ttzY|0TGbBTk?55EOo)HZ z$4uS?R9=W^SbMc*>&Y3nj^V0=xi}UL_br?Kj60uWuYNa5sQN)|;IuUzR*QQ~K%;>F z5dVQFR4>@z1W9a0V)GBMT;YZXXyUwJR?s%F=S*hzPprO@z+-yy=BbllA_LY5U*yYB zDvRol&X|fSqf*VlewTxD9$qQeM^!0q%0DnYe*B`o<29v->8ZBe{-S)k002a+b7m7eD&|Nz*w+vXbLNHB|laC1q0hA8s zx45cmi{A<0ZannRNzk8_$LQRg&Zwj0RAr|X9O-s|E8I%Xbd^I4 zJgqt^3Xfd!QyTahj*yP^(3SM{_wS4c5l#qK0+b4)zziqV^V`D-YTQ& z0g3^8t^C8n`Nij!=p=dZ`K5&?mzBe!c5m1V@JZKBy|XZKNoN@`6-R}&ik;8$TR%8~ zRwNc)%VmK5PF1}RPSpEsS^A-FUyl-x=^3BOa9;Ft&EpdfBXheDwwk87>tL?8$*?$h zC^Ni>SN=%B+Z6Er=i6;Mx>nC)e%s#M@85|vfc;7=WMWMcA-c|bihJ`kgqXj0#LK6c z2~N%&+hR@%eE_RzC+Drfu{4iH-7X7KQ(ML?h%Yv!`UBLKLcXGk!SP1=&vi zX`4`homQd(i@NHwxpK8UFRWkv@o#9*85KR~buL6q$f=h9&v(xjq#bkIcw9ZN<8bsKBZxeQ7jW<5n2Fvj)0YHmJDCQ_m1WR zjmD%V(i2qxffpikAr!A^7f&UKCe~Tiv}8+4c4!`xxTFK+fYAa> z7}|;}v*~-5`^nXMU1jzqd3PC5?sXCq=r5xT;skira=M%!53*EGQsw>EvHsL^V|`)c%V@e zls!%mV?B!#tfKi#4-Y&8W!U-I@`*rE{gIPhTwn_^251Z#LXgVjaFU|3&= ze9i9y)f+Mv>1e?gteD?T0Ie;EJKRws7*_YY_Y3Z_QvJGNP+s=fmiF3-IV?E?wkRzP zzT3__DMyAIv@8z#+o=V9`7hm5w&4zXgt*EO9vR>$XAS|KPJD{}E3ryz#)cJD#vE*( z;QrPv3|jkU&NX9va%F<9_|CcSx(M5zki1WUYyvWVxcU~kSM&R^T_RZ7H;5b;Gc3Fd zDRO*{VVUmmPTP}(%=I!qROaCgs-pKwMKtH{^)bnYG=ex4hwik@Ka!SL{?Ez+cmvVp zbH`qYga2-$#C2QiP_zHd-nRV2wTcBPRz|S36Do8VPkf&u<0M4A`V?nP(y>Tg{fhWf zzR~t9BS;YJe*{%&d+dwWLc8K(B2R-B^dU^u}gh+qwwX|@49)gg>#stb=t)ZNIbi7S*%vmMHcqi`f#AYcha_i2UoZSoQ&l!lWT3v_rww`=irNL0I zQ9pQ54Eyeq)sX++_wQTVN#KG5%Z!0+R|ik;ngy`{%l<|;54X`_7-pGW)c?*9Y!{nA&I$vMSrlz)D)|d)zrp zcn$RDWW6yQN*_S36C%_biVvfgR%{O!1VL68&p&+0&at#03u+WK6)&rRuTzdN>d9T5|G8t50qNnL(=#Bd&t zR59d^7K9xZlOU6##x~li1~f1ZC5ts`ve<3?>Bbo-ey9EEYJvk^kGm2a9IU)b=+gB`Fs0cWl6D%%%>rCQ%|hmWmUy{ zao|P2jSem&O7!a`jY(M^oPtwX;|gF)h>EL79Dl2Lv+FUsv)n zfob(K)z<0~M@VlBn$T9JXn^H;6XAz1>g236q&$hibIOy_!1QODNnmp-S!^#(2lx>0 zpc9*~X%!>=JQxQ(d@x{)~kA zri}w{p$&_EW9!Y5=j0=(`ckjU^9E+W$Eiw2Z4G^zR9pC=0xwjafuBGP@JgzV%I^xA zr3tf4R_Fp>B?+I49>iInUDG59t!+QJETBGNX*1a*rbS?QGCgiKJ+Hna`&UG7<^xjq z-*xhDR=%~HKmE+BU8Xd+XV~_mxFz8iWUH|qmbQD#KE%=AyOG4u%yZz4E0#4fMY7j% zY?QY%+puK@R`UUJQE&JZy%F<@i|d0rP2hq_+wsiya%=u_(rM|l;^1WBa?u;qHHl_I zI>8VSntgU#<*z^9nsLcpgFib?;J_UGjB6mZa>9;3vFS)^UP#|LWjYx1m4G6(0szp<|mj%3qXUEqx#J@P*Z|uRQ8g{7(|`m@mF- ze_-Z3v$bKBQE;&qqFEcPQn8Jz;esA9{_fSVhnGKWPt|HqyJq{DD#KcKna?9sF7J>&3W*2o-=@Z7CN z%&AD$cB^=;5K$(K(0%4eecJn*QnwKbL>8>0e$q!SW7H#6RE$%Gdn#=>GVP~5^~$wm0P^95 zrN*jax@*J_h#JOd+{Y{(Iw+no#GaaYcw8ikbN36bf1#pDx&Kq-WM|1ZWO;Upl$`nc zt6{C6q#u^SdQoi5=hbX|a4oiyRVo)5qYMYhq}xV3Y4AyZ%QLC@PJ0bja!cgYczy4yMgU z3V5v6Br|rFr$G_mYBWRFh~fsBsULPec;e09`o>WVVjxk#Oqc3+d9bF{KGf^r3?%Ja zX?AqzTj^quk{4|3@WD3q4+-eACzy6+c`Vq|zuZ#HsR~TtJ+AyeOkHJATW#A68j4nM z3oW!*@!}GsXemL8OQ1k;cMVpcxH|-jyA&zK-HN+A6n6*^@_c#!eg86(nPet8=RUi8 z?X^4j#Qv{3a;Y=8r!m8pQ|zeIcg169s5&D(Nv;R@br%CEGXMC@g7Ol+8+FL+;am!2 ze&_5HzZL*6w}r${FJ-i{jHvh>IOFo#<9ONMi8244Q(dz(`Awf*T(!AV1^}EW45Xpq z&s>1ZUVH*jDU*l#w6oK0mood^fc$FtC7Q5{{>fHua0}A` z$(@u#OOea`+iTb}_F{BZYo4as&hOva>ZOPSP2tm*)iyj~e%Yq6acx5nGg58oc{=aA zr0dC%ob;|*U6eM&!u~obUubMKzk%JB#uQfpn-?(oxew6g2usv)sxi-ruo=f4CR~m zpV*cF<2oNqGt{W_3rkjO%+78klF{HT?;_@?SMT#ccgL$yX5>3Pb+TXaV|te}J~wY+ zsZ;F((VgKRzr^L=g-x&XBmU-Fn9hHUejPozjHwclouv_Rh7pq6=)w$gS;{vUEIa+O z5l`by{l)5q(Asz)`J|+9{46!$*F;B9!}qI= zy!VgR%5%Q3?#fGg<3FXcj96+EZEX91c%u5-?JX+DP0__{XWR1Kupa^)R48gBWcHfm z2an&A_quA|qaOr`w$U%&z%1bBpVkrYxq`vAM2s>Bsf)40o^DwEj6h4i8`!MoqM7kb zhxWo52(n<#V{n4@(869*zNKgvs{BMSGAgP)RegQ1+t6CyqCesj;{0852eT(Dcp~ER z*BW)P5l0t|d2^B}yQ1C`eh)=C;;6qPAGW!Slt@NSqW^^M)X=+I;iroB z`9Jq25Nubp^V9*Uf;OP;WZc$4wtl{98{fp8`94BsIN1m|%IIK5*2{So7@RSXw0wEL zC@S(MFe_)Ts!`>bQZ0N0qy{Y>Fzrd%4H;tnE;qQEVEH5P(!K7rMgKOE|7Cm^K>`Jy zyf>AhY5yyLS?P(g!n9T6ue={`qb07JkFG21zAnwH*EI(r-WFwZNqc7$!z!)*a1^%Z zRkY|W#3{r+?l*YGRBlK6^rfmV>m8h?Y&I^l-O(2{Mg9?d7_!*ZD&lba@!^`)hG>(p z^@g#*kIM11iGom5Yz3QnMmx(>zMCj_d0}nDlxQt?n+3d|?d_39O$PpRrGvVN{lZ^w zKA9$x%33^(c9>8N_)g!Nf2m`XnO#Qou^QN8)JY9@SVwLABKt8XxBnOQLJM0~N?GnS z0z&g=E7wglyAfxwU*5a*Z(mf*h=9MQ$%KZoj8(sL{@w?`vaE)UNF2edwboDs$9NQ} zF^I*pYK#k=_Zf3c?*!PP)L3|LeU-Snv(s+MGz8PZe zwNTXSoMMJYRYT{2T1t@KD1DI9z#&CfEIBx$6>IZJi(v4EPSK29FurzUJw`h5pliSR zUB|C81mpaGB8tm@&>wV8U+$^j+d;yK8|=*_`h71$Qh;)t=_&l4@?;0DgdzZ&)A?N= z{Rg1%l)F@?H@PjB@IQq(_>+)5y+B_mZ%|;8p#K03d(j)CpLF#hc%ED9s27pT?zXQg z65I%0#02cR5fHiy=Fhb|L|?i=fuk+|0T??-bc1LQKqnbileMHl zVAO}Oa&P=S7Lho>l};6jF^k%;i7u5;ml!qi6n-rS$z5ud6(079U1#9sLk8fPT^&Yk z%<=Y8*1|Vf=GU4*Rdn5|Ls~$v161$JdwNc_G}iH{0BY_&UghrtN<48i!^?^FRo+uv z?D(fxd(3a*zKaIG53%2v0B8ctC0v=EC@z80K7O7XJX`MG;hQ2w5*WuOq%u_dhsldNI7 z&ayQ;jpxwnyY|@96MwcM$#*R7q40NN9fCv(4kN@y;H9-U9MTgEj;$BSAz9WSQ#hQY8y@bH3!W@&`q_FHds!U z4C*oB#^OPvd*mtX845H>A9mgf>oYIh`n=B=e9ix0VP-}i56kZ#84$j${yQFu=1CzV zpa1FrqPCm#p1A5{1!_&cjRS*Ep!o`%j|zqVk3c09%xOc5#eYHOUp0N}d(M55a0=xu5R8pQt(fDVFQq%cg~q&T@d z&+(HxsVJE6XVza7n{+fCMbr*mgSeTO`B7036vnFg_ILy6H6!Fbc%u|f#7`0gK35xG zB0rLq*<5hoX9qn$;90IB=W2x4;{x-9SNvkcZLU$zD^Iwuif5|_FPum#&d~GCkBsp8 z4Ij-?5q{sZM`on{FT~`dAo>BEZNW10ZO&KJ!OuRnw~tT58!iTGh3`f}gb(K0ZFpnv zG)cA%jfr#YT@DQXv{csHD{|^!8OrxMe!EEd1AJRNSoL-1!eA-qRzyUU5qZ$6Rt(iaMD}^xJw(zuIjlN8t+zoN!ROLX?}r{`eLv4?zLyN{ zrh#nx8819Ns~+xH3howJN7t(Q>Q9_q{|Bgn%5G7GiUYHHE~^)~5DYWIi0DV@RhUI6 z!RDhY1xUAR044mOeM3T}_36!RydPK;G%7}sRG8D!*4jFL;G`4P2pQ?qP(z9<>{XiX zIH6qtWvv_6EAIPK9f`>q%};h=5o)xQJm1FLt1!JY{?67P`DqRNNu2VhENwB;#^*To zL4h`b6TmKSAHpBpe9bkW3C+!;v1mV+(EdIJe1MP;I^BK|iP1+u7ZPG#k)R0gli){q*R2d3xsoT_ zJ^5zByyAa))*Vjj(W&Sftu#>{<}b{bF03Cc1=Y_{d=_Hkr3vcz?pe5&>SG}y?>c0! z!1Pkc+AgJ1BI`ntu5-O5yH$IAriZxI{IGB-TIVSs`VS$-k zCvKN;;eEKdHq~m>*P#9wcZ}rDLs&#Ql4%=XMPO#(y%dNWq7>;tG*kP;f;mi*J+SuL z8Ca;Jy!ECv!Ky>ipn4^iUbQ?K$(y6S8X60%{cMZbnaY{88D;bVsKE9h3>$dCc|>%K0@+dmfNHe#B?d}Tx0@xXMMS!Ho^O_jhmLhi3g~q z3qLT3@|QS|gl9q<-03t`MXFNi#In*Kz@`ytekQ!E*=#q@wQ8U`^O}?^Rkp= zoBmpwZn&0&k5jSV#x{e%e{6m|$&CqqfpA<% z=)<-c|KJ^U#ZZAO1@SS^MpTfRkrP)x1hcDqEpNanVz?P`voRQK*KX{z5NPP?3m)J7 z*`u>x+D~O5Smhm3o(kne)A2Q-1MQ!R5xY9=o@$M)^spshw^Y96&3nv(x`#O?P(3V+ z%w*|U?y7zxE8;peH2pt-9yl--`H{991p_JjZBxGG#U&Y;Di@;(a&Dz>W8e4s4`8)U zT%8_iDMb`@a-{nUHT}TAYZtQu;EMtGm!n=6p+^D|Ff0;8xGoflei>yM!=&My&zvh< zTyGYNd&EdfNPTbbu#~E>3Q8^RRivx2!Q8(sZCVIr#}SL~{10%1CJfITEe_J%0W#Y=r+;l(cI(e=y zkyE+QT^vDW0NdTRSoumUO!!$&Gmt6j)c{)0hTo=Nh^2EM5P)XG5dVu&u8)moVzz62 z9$V=?(%HJHcPTH{3LTzzxdsk3k10tqqG(lL|1qKi!ECknou2Yr{hzJ#|5jNzQ3lt; zW1k0e44i>Ou=J|2ei`kUgQ%pDVkIC!B>qDpIUQd1g<eJ}H`%8By-%$9tt|e)D^*|q zt;zxrp>7Or0pI4V|qz?eN1FxLN8eSizAKS^RNLk+u*1AHWdC1tov$ zC%6TUsy|}*S|73hZC#lM?euSj1ia8{XFf;MN^f1z6sOMIOsW3EJ@uQzSv`Pzc0QRE zQ&XmO$^9=Qfj`OJK^S5J>}?aL7U^jL&j2sZKKc?Db?ok=r}Nl1=G*4_XqNx*7?T$a z=jnboE9yP1tVA2kutFh}`yw{o5o6?PEvH|d2~+6qRh-M%(uvWFDLv@9aPhXG!!D|Q zGmkR-ifTz-&sY|pdu%kvvy?FY^cx8SWp|WQhQ{j+3NexlI8s{g6Lew+9<8~Sf@$pZ~mEKQ#XV~r&F5m;OLp;KbuGU(v$Zp`4~LakT}Ru>e5ON}QSR-zf&H(+B{#g=TRi zHpyGFrmUh}KR*6yM?FM{ZXU!QXmBgH%P+08A#DEGIRU`YZOUanjk&S0-eQ;*;Je}` z&GXKxVL*n&)azn!D}R*^A9?DTE4a@pbu8k#-_Mbi128+u^WMFQA`E&FQk=&eVeB=J zrZS2!W4C2Y#^$=$aULdy@Q{X*h9?rG=J4dUX!n)9CbQaDRoVLAGA#JI;Ri7{TPV7W z{q7u|nfmfltOJiI-(;-QsoIHHXWRP(g|bm{VTt<5T_zhwWu2VJn4}WZ$dMJpFSN$= zL~=(?y9WJQgyh5VGx#q;QVO}L6)Drq@Bg@y8EKlEMI#4SK%09-$y>SwOY?~=k`!10 zR>8X_p$WJHe@Dky!=of*cGB_eT5n4OzF5d{9s&vFmAnVOJ3DHe@u2Re63F@W%XNxMWC;U$^~57( zU}^iY=dc(F!@n&gzcbcXq}K11B9t6-Fg3t!IM3{9+JRVDKkzTw-p^&zqA6d*0k4Q1 zm(e8u9BVO@V?}XLT=8~4W7?A>JzaX~)tw~MUc2XPJIFIrdbMo%{!ay=zg*3j#!(F0 zXV4Z!xT|>0dOBw|guqwASe!+`Nq*9jw?a?7O9eltftj-~$~@rYkS#g;SR^^Ss@CQ? z&Wyd<@{HzFK|JrU+LO2?4}(dJH|vgei9b3Y_qi!T{!z-808ufux(p{m6w6&OeS163 zZO|pOA{xcAz0|s39{3*EriE=0JlOdFL#tg;d4DTh)v{x+6A;TqP_*@{XQMijo>=JI z?lgC)usCs@O|~!DKNG>&_eU@m`TD2le9v^{Ko~!s&PSj&bCCYZbNNkZPDc$Syp{ja z6xPK9`$nh4AuMfE`UQIr z6km)3whbj+doLhh>KFi8GX$OH-hk$6+S!m==ki_S1Z#+2eI9cHT88g)hY41-?%>x9 zU^e8`c}(Uud>OVSJ|2P8bY5Z(JpQ3CDhqCzZEn4;rv)q18Y1 zHYobAw}(b~_~X{Zs-0JN!|<(_f@FTOCoi*|^W)OdV3l0+-}~LVH-^YDU&%=w%yr~~ z5L{fxCMM@H+hJi~OE8Y*gG%E0`oQn0;!u|V0NW$IbN>O5+2{OOE$6K5-|??dQ-KPiRS$a?k0u_|YM&!lli03tKYP z(9VAV=d4fka-U2w!467z!i?CUvuS6ZoW+6kGc{IG1GNY+1iX<7#`A@4RZ}3<5%5h1 zqN7(<{gj=UVUXf2!WmO@R~AVzk-`e0U|T89&PkBgqJNrXqA`oYMB$ER8i=Zcjh zEtx>)oaQq$^cdK0LO%a=YZuuGuc>O=f|DQ2-Bn+(f9d$s)|B${+0@C^*BYL2+M>Ku zG34z3Qg$}Rqrv7}k=_)&kT9*gk4z`HWYZ0#T;400ZqP@}_99{jZrka@2QXs4%%p*mT-6LE ziVGHvmT0UD(*3qcs8j~?q)Qgz zg+63E2Nn+Ru3h4u`Ce~mC;AF~w}AJ}4-uri2c{z?Jft{?cgh3!dR!kg)$wcIhO2tr zR!UJ_b}?M<^XpDv^77@#646n}t8JcG`(fV6%)I9+h_JNp?F;Ne9^EANv~$cMnYT!Y zJde61Ui*CZP)QhoPI68s7Fz@FCe}%8ODK;<{Y7mxB{iKfwvV9Rz62MZv%btW#m}nU zDovFeKB?`ai;<%uQs}0vw>4@}ac~R?u7B`)=Fas{Fj*_u$wVS^i-WC4lg3eE6c&FQ zu5j`rm{7YG(B-(Wx<1u`)3Ff@qXYFp@g$i2$EX`tvofkf_~XkC4o8P&y#z}HNE18!+=Db< zG+Zq^Kfqg^C^z4c%(*a6#ai_jJrB!89rM zv94)SK=&83)?s&KS*}O1Nm77xnD|`cK0&u+UZ$u|gf!q~$!lJzpenk)wllnSH1`= zaP%8K93zSmpu~;dN#>)dst^VbV!9ga^guKHDINL;Io<<_#ewv$+9jo{{N+3quBN(# z-(ln>OV}o~?zQ=B|NY+n?kFU--W7}XYikwHOSb5F$GQ&T9qs$oUf5aM_yu?rbWluC zc=MhD0sH6yf0nM_H)rzg+e+v2Rht_E$Ur;|Zw-!g^)56Oj!zFkDAylXs9<58%KGQ( z)cIw+eq5m?8?a};h7o~R=WiyE`hAeQTg!J7Wt5HbGD?y=SuNC>@8twb)J9pDHj`rH z-=K9rW}nEFAi=y7$w8dP(rc=svf%HMUWZm+*ttb@xP?YB>1K>?#7lLaw#RAhigr$1 z{>c#uZMzUJ97*B}xl-+LI(;4zrD+y=69`X?fwf73!hxZ=H1D-9Ptd6Tx&PnLThMoC z{dm~1gc>uF(THj0g%@CFkh7qo?gE8Fal}lq zH4vso(;dHd;-WIC6vl_0;v|=xg}eIv9EkRmqRn#F_q;UQwl6wRL>o`V@GZ18lnON} z@p`TYG2SJ(tvbzNX8X(X&TJ#%6W$@kpm z3OSBHWs#pe#L9S;k9NZTxT*63+r{})R@q+F(@XC7H%uXNUu_vWK0v{jRW`!lup9n+ zdy_x+sIXiA&!{80)$ku|i$+8QjF{-wp;5-C?axTcC*02;4YS9+%O>IdAS9V!&!4+6 zusz8SR#4LId}vek@rzBa zWrFU@HF+b6;=% z<<|D`Hu<~PsG<(zQK6qP>~C&g_@m~o!L%cuTJ0eIl($GOhfJ_k=aAfrQ%q1A1%^P7 zoHuo&Y7p-i36Y4XTp@J8_&797Zwb^a^)I5Ly5X|+WL$X~Ep5I({QZw@DBNs|u|s(1 zgK@dvd8}-8?#^m#2wK#Ley!c7$JA@5zxvxLY#X{<_ez4GzY6rQCPiytRBLl(1y9q~A{QC0rD4i( znawQIPB?tvvwCHstlkH2TSliw+sq}aAo z^oKGERGBQT*XS9O=zcq|$U-Ce*q(gq{fI16XILIQD&|9OL$xy5x(ivp|>O{Zi;O$8O0Aj2n@}qP1WB zK87oA?YMdV*D-%rqCTARp`$mukH>w}(M(n4%fnO) zi!MEw`<BY zIhULRg=3E?FMSf3pdE?dnG$1&R8lFVg~s6|XOzKNn%K~EZQEw29Eeg~85LQOd_67U z!>n9Jd)L@w#GYZFa%O2oiPRu)_vo|m&={ZMZ-C-Kly)Uqu1ou#LsCG(7uypRJeMn? zDR(jpd_|({?B9h1gYWTt&;8h9Y<_VsmFn_Q52frX(5h!D+$sKH*`e`ba;=p8k#2y^ zuwUgpy~LP~^;#;*Zd^}G%H8F}Ix@OTBR0{FZy4Lr<7Pc$p649DBr3M0B_mWJhIbeW z_94}!Nyg`9!dY7O*SgJf7Q#MRyzFSxHDh$zf9+U$@@e-XjyqFA^RD9Sjle{(Pf8SD zg8S8HBj47nOUPURjW@b<#wuh}BL;osELBWcTG|G%{B?pOh-7bZn$2Hp3!`@u3bjWb zULdq(Hd|cWDlHpjWAyGIAgG@6g62y#4{%fLqJs)*^eLyEQs-pJbb8X;M|)ySIU*3< zgkm#-!d^g za}z~Je_=}XS1i^j8CihztQUY%OEBoWgf?5y{|DgN>nPVqjoA~xNTuvLgN_WGeEPZs zI{|J3zWglVc~V)KkB*M{`>66Pl|%d0-hmo+$j;L++Gm9kK6dKcs+}=J7&u?OO19={ zERyM)Q0zo`TS1x~JFjv#*lE7_U99Ot5dVtG5O$`cL{jB@Q`qp66J$+pi;3CtK*M5X zKQq>ZjFM8y^@Z`1i&~j)O+qIR3@(w(rOcHafO|YGc5}uA6SUQc(sys})9hnkK!9&g zE*yh<+DXpc8gsQ(+dBm3ti=MfAQ6xU4~xd00 zp-76+0^nX0ijjYhd+u*~ph6||d3boVhxlgzS=w=OS`u3)tp^zcSS-+m0Uv+AL5|WS zTojYm1t}NCp@U|y=HnpD`<*3H^ z8wa0Ks~5VLB>!p=_TQ?f(#(IuxXajd#)o{Db8-68J|4gSx8dqRI#prt*?SMg32%SW zF2~U~+>U?cR)25!S?T&thi$M7E-y?c<9{$&<9BTNF|dC7fetG!fN@8GFZf^m90}i! zV!Nb!6fw^~tB5ab<^kc2TLG8iht5+knhAZL4WbFSSU7GUsnbe$Q8y;Hd|r8O+Qj!% z>%1L{2DOfsV3mM%>wHTvx5VsL` znJOH0=M6}EBisB&>Lu2lytQNm<@4MO!$Jv-9C6D*%25DQp49yhU?Yxdx{4r~CVhT_ zjS8gsvaaM>{7ATlW*3KM=DMP+JeeHk0Y10=56~A0dWGtRzeLgS4>rTQ=*8f!y8i(* zagITj{otdU29gQ)>iO8Eo(&7+`&B%|uO7#Hf3c~J;XGCURSI<=!spQi*?`7zRq&Vn zsTWtb

$EbiQs^T*?R<@%Lt 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

;hz?3J`2B=?@X1QN{={`^4yQ7V_f18 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%0AqYK@fVFQbno>2QuHWx9PAxO(!VGU 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 HS