diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore deleted file mode 100644 index f886745..0000000 --- a/apps/docs/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# env files (can opt-in for commiting if needed) -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/apps/docs/README.md b/apps/docs/README.md deleted file mode 100644 index a98bfa8..0000000 --- a/apps/docs/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/apps/docs/app/favicon.ico b/apps/docs/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/apps/docs/app/favicon.ico and /dev/null differ diff --git a/apps/docs/app/fonts/GeistMonoVF.woff b/apps/docs/app/fonts/GeistMonoVF.woff deleted file mode 100644 index f2ae185..0000000 Binary files a/apps/docs/app/fonts/GeistMonoVF.woff and /dev/null differ diff --git a/apps/docs/app/fonts/GeistVF.woff b/apps/docs/app/fonts/GeistVF.woff deleted file mode 100644 index 1b62daa..0000000 Binary files a/apps/docs/app/fonts/GeistVF.woff and /dev/null differ diff --git a/apps/docs/app/globals.css b/apps/docs/app/globals.css deleted file mode 100644 index 6af7ecb..0000000 --- a/apps/docs/app/globals.css +++ /dev/null @@ -1,50 +0,0 @@ -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: var(--foreground); - background: var(--background); -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -a { - color: inherit; - text-decoration: none; -} - -.imgDark { - display: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - - .imgLight { - display: none; - } - .imgDark { - display: unset; - } -} diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx deleted file mode 100644 index 8469537..0000000 --- a/apps/docs/app/layout.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import type { Metadata } from "next"; -import localFont from "next/font/local"; -import "./globals.css"; - -const geistSans = localFont({ - src: "./fonts/GeistVF.woff", - variable: "--font-geist-sans", -}); -const geistMono = localFont({ - src: "./fonts/GeistMonoVF.woff", - variable: "--font-geist-mono", -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/apps/docs/app/page.module.css b/apps/docs/app/page.module.css deleted file mode 100644 index 3630662..0000000 --- a/apps/docs/app/page.module.css +++ /dev/null @@ -1,188 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-synthesis: none; -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -button.secondary { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; - background: transparent; - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -.footer { - font-family: var(--font-geist-sans); - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} diff --git a/apps/docs/app/page.tsx b/apps/docs/app/page.tsx deleted file mode 100644 index 828709a..0000000 --- a/apps/docs/app/page.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import Image, { type ImageProps } from "next/image"; -import { Button } from "@repo/ui/button"; -import styles from "./page.module.css"; - -type Props = Omit & { - srcLight: string; - srcDark: string; -}; - -const ThemeImage = (props: Props) => { - const { srcLight, srcDark, ...rest } = props; - - return ( - <> - - - - ); -}; - -export default function Home() { - return ( -
-
- -
    -
  1. - Get started by editing apps/docs/app/page.tsx -
  2. -
  3. Save and see your changes instantly.
  4. -
- -
- - Vercel logomark - Deploy now - - - Read our docs - -
- -
- -
- ); -} diff --git a/apps/docs/eslint.config.js b/apps/docs/eslint.config.js deleted file mode 100644 index e8759ff..0000000 --- a/apps/docs/eslint.config.js +++ /dev/null @@ -1,4 +0,0 @@ -import { nextJsConfig } from "@repo/eslint-config/next-js"; - -/** @type {import("eslint").Linter.Config} */ -export default nextJsConfig; diff --git a/apps/docs/next.config.js b/apps/docs/next.config.js deleted file mode 100644 index 4678774..0000000 --- a/apps/docs/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {}; - -export default nextConfig; diff --git a/apps/docs/package.json b/apps/docs/package.json deleted file mode 100644 index c5b4e71..0000000 --- a/apps/docs/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "docs", - "version": "0.1.0", - "type": "module", - "private": true, - "scripts": { - "dev": "next dev --turbopack --port 3001", - "build": "next build", - "start": "next start", - "lint": "next lint --max-warnings 0", - "check-types": "tsc --noEmit" - }, - "dependencies": { - "@repo/ui": "workspace:*", - "next": "^15.2.1", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^22.13.10", - "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "eslint": "^9.22.0", - "typescript": "5.8.2" - } -} diff --git a/apps/docs/public/file-text.svg b/apps/docs/public/file-text.svg deleted file mode 100644 index 9cfb3c9..0000000 --- a/apps/docs/public/file-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/public/globe.svg b/apps/docs/public/globe.svg deleted file mode 100644 index 4230a3d..0000000 --- a/apps/docs/public/globe.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/docs/public/next.svg b/apps/docs/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/apps/docs/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/docs/public/turborepo-dark.svg b/apps/docs/public/turborepo-dark.svg deleted file mode 100644 index dae38fe..0000000 --- a/apps/docs/public/turborepo-dark.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/turborepo-light.svg b/apps/docs/public/turborepo-light.svg deleted file mode 100644 index ddea915..0000000 --- a/apps/docs/public/turborepo-light.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/docs/public/vercel.svg b/apps/docs/public/vercel.svg deleted file mode 100644 index 0164ddc..0000000 --- a/apps/docs/public/vercel.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/docs/public/window.svg b/apps/docs/public/window.svg deleted file mode 100644 index bbc7800..0000000 --- a/apps/docs/public/window.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json deleted file mode 100644 index 7aef056..0000000 --- a/apps/docs/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "@repo/typescript-config/nextjs.json", - "compilerOptions": { - "plugins": [ - { - "name": "next" - } - ] - }, - "include": [ - "**/*.ts", - "**/*.tsx", - "next-env.d.ts", - "next.config.js", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/apps/ebitemp-api/.prettierrc b/apps/ebitemp-api/.prettierrc new file mode 100644 index 0000000..4b9a2d9 --- /dev/null +++ b/apps/ebitemp-api/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "singleQuote": true, + "trailingComma": "all" +} diff --git a/apps/ebitemp-api/README.md b/apps/ebitemp-api/README.md new file mode 100644 index 0000000..3ae04fd --- /dev/null +++ b/apps/ebitemp-api/README.md @@ -0,0 +1,98 @@ +

+ Nest Logo +

+ +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + +

A progressive Node.js framework for building efficient and scalable server-side applications.

+

+NPM Version +Package License +NPM Downloads +CircleCI +Discord +Backers on Open Collective +Sponsors on Open Collective + Donate us + Support us + Follow us on Twitter +

+ + +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Project setup + +```bash +$ pnpm install +``` + +## Compile and run the project + +```bash +# development +$ pnpm run start + +# watch mode +$ pnpm run start:dev + +# production mode +$ pnpm run start:prod +``` + +## Run tests + +```bash +# unit tests +$ pnpm run test + +# e2e tests +$ pnpm run test:e2e + +# test coverage +$ pnpm run test:cov +``` + +## Deployment + +When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information. + +If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps: + +```bash +$ pnpm install -g mau +$ mau deploy +``` + +With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure. + +## Resources + +Check out a few resources that may come in handy when working with NestJS: + +- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework. +- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy). +- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/). +- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks. +- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com). +- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com). +- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs). +- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com). + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE). diff --git a/apps/ebitemp-api/eslint.config.mjs b/apps/ebitemp-api/eslint.config.mjs new file mode 100644 index 0000000..32465cc --- /dev/null +++ b/apps/ebitemp-api/eslint.config.mjs @@ -0,0 +1,35 @@ +// @ts-check +import eslint from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + ignores: ['eslint.config.mjs'], + }, + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + eslintPluginPrettierRecommended, + { + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + }, + ecmaVersion: 5, + sourceType: 'module', + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn' + }, + }, +); \ No newline at end of file diff --git a/apps/ebitemp-api/nest-cli.json b/apps/ebitemp-api/nest-cli.json new file mode 100644 index 0000000..e8ab0e7 --- /dev/null +++ b/apps/ebitemp-api/nest-cli.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true, + "plugins": [{ "name": "@nestjs/swagger/plugin", "options": { "introspectComments": true } }] + } +} diff --git a/apps/ebitemp-api/package.json b/apps/ebitemp-api/package.json new file mode 100644 index 0000000..12de96f --- /dev/null +++ b/apps/ebitemp-api/package.json @@ -0,0 +1,107 @@ +{ + "name": "ebitemp-api", + "private": true, + "scripts": { + "build": "nest build", + "format": "prettier --list-different --write \"src/**/*.ts\" \"test/**/*.ts\"", + "dev": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@anatine/zod-nestjs": "^2.0.10", + "@anatine/zod-openapi": "^2.2.7", + "@autotelic/pino-seq-transport": "^0.1.0", + "@fastify/send": "^4.0.0", + "@fastify/static": "^8.1.0", + "@keyv/redis": "^4.2.0", + "@nestjs/common": "^11.0.8", + "@nestjs/config": "^4.0.0", + "@nestjs/core": "^11.0.8", + "@nestjs/jwt": "^11.0.0", + "@nestjs/passport": "^11.0.5", + "@nestjs/platform-express": "^11.0.8", + "@nestjs/platform-fastify": "^11.0.8", + "@nestjs/schedule": "^5.0.1", + "@nestjs/swagger": "^11.0.3", + "@nestjs/terminus": "^11.0.0", + "@nestjs/typeorm": "^11.0.0", + "@stdlib/assert": "^0.3.3", + "argon2": "^0.41.1", + "async-lock": "^1.4.1", + "axios": "^1.7.9", + "bcrypt": "^5.1.1", + "cacheable": "^1.8.8", + "connection-string": "^4.4.0", + "cron": "^3.5.0", + "dayjs": "^1.11.13", + "fastify": "^5.2.1", + "flatted": "^3.3.2", + "lodash": "^4.17.21", + "nestjs-cls": "^5.4.1", + "nestjs-paginate": "^11.1.1", + "nestjs-pino": "^4.3.0", + "openapi3-ts": "^4.4.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", + "pino-http": "^10.4.0", + "pino-pretty": "^13.0.0", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.1", + "tozod": "^3.0.0", + "typeorm": "^0.3.20", + "typeorm-naming-strategies": "^4.1.0", + "typeorm-scoped": "^1.2.0", + "typeorm-transactional": "^0.5.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@nestjs/schematics": "^11.0.0", + "@nestjs/testing": "^11.0.1", + "@swc/cli": "^0.6.0", + "@swc/core": "^1.10.7", + "@types/async-lock": "^1.4.2", + "@types/bcrypt": "^5.0.2", + "@types/express": "^5.0.0", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.15", + "@types/node": "^22.10.7", + "@types/passport-jwt": "^4.0.1", + "@types/supertest": "^6.0.2", + "globals": "^16.0.0", + "jest": "^29.7.0", + "mssql": "^11.0.1", + "prettier": "^3.4.2", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.2.5", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.7.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/apps/ebitemp-api/src/app.controller.spec.ts b/apps/ebitemp-api/src/app.controller.spec.ts new file mode 100644 index 0000000..d22f389 --- /dev/null +++ b/apps/ebitemp-api/src/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/apps/ebitemp-api/src/app.controller.ts b/apps/ebitemp-api/src/app.controller.ts new file mode 100644 index 0000000..cce879e --- /dev/null +++ b/apps/ebitemp-api/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/apps/ebitemp-api/src/app.module.ts b/apps/ebitemp-api/src/app.module.ts new file mode 100644 index 0000000..f162ee9 --- /dev/null +++ b/apps/ebitemp-api/src/app.module.ts @@ -0,0 +1,37 @@ +import { Module } from '@nestjs/common'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +import { AppAuthModule } from './modules/auth/auth.module'; +import { AppClsModule } from './modules/cls/cls.module'; +import { AppConfigModule } from './modules/config/config.module'; +import { AppDatabaseModule } from './modules/database/database.module'; +import { EnumifyModule } from './modules/enumify/enumify.module'; +import { AppFileTransactionsModule } from './modules/file-transactions/file-transactions.module'; +import { AppHealthModule } from './modules/health/health.module'; +import { AppLoggerModule } from './modules/logger/logger.module'; +import { AppRequestLoggingModule } from './modules/request-logging/request-logging.module'; +import { AppScheduleModule } from './modules/schedule/schedule.module'; +import { AppValidationModule } from './modules/validation/validation.module'; + +import { AnagraficaModule } from './features/anagrafica/anagrafica.module'; + +@Module({ + imports: [ + AppConfigModule, + AppLoggerModule, + AppDatabaseModule, + AppClsModule, + AppHealthModule, + AppFileTransactionsModule, + AppScheduleModule, + AppValidationModule, + AppAuthModule, + AppRequestLoggingModule, + EnumifyModule, + AnagraficaModule, + ], + controllers: [AppController], + providers: [AppService], +}) +export class AppModule {} diff --git a/apps/ebitemp-api/src/app.service.ts b/apps/ebitemp-api/src/app.service.ts new file mode 100644 index 0000000..927d7cc --- /dev/null +++ b/apps/ebitemp-api/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/apps/ebitemp-api/src/assets/.git-keep b/apps/ebitemp-api/src/assets/.git-keep new file mode 100644 index 0000000..e69de29 diff --git a/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.spec.ts b/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.spec.ts new file mode 100644 index 0000000..c97cbd1 --- /dev/null +++ b/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test } from '@nestjs/testing'; +import { AnagraficaController } from './anagrafica.controller'; +import { AnagraficaService } from './anagrafica.service'; + +describe('AnagraficaController', () => { + let controller: AnagraficaController; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + providers: [AnagraficaService], + controllers: [AnagraficaController], + }).compile(); + + controller = module.get(AnagraficaController); + }); + + it('should be defined', () => { + expect(controller).toBeTruthy(); + }); +}); diff --git a/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.ts b/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.ts new file mode 100644 index 0000000..9d08c6e --- /dev/null +++ b/apps/ebitemp-api/src/features/anagrafica/anagrafica.controller.ts @@ -0,0 +1,28 @@ +import { Controller, Get, Param, UseInterceptors } from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { ApiOkPaginatedResponse, ApiPaginationQuery, Paginate, type PaginateQuery } from 'nestjs-paginate'; +import { SocioEntity } from '../../modules/database/connections/oceano'; +import { AnagraficaService } from './anagrafica.service'; +import { RequestLoggerInterceptor } from '../../modules/request-logging/request-logger.interceptor'; + +@UseInterceptors(RequestLoggerInterceptor) +@ApiBearerAuth() +@ApiTags('anagrafica') +@Controller('anagrafiche') +export class AnagraficaController { + constructor(private anagraficaService: AnagraficaService) {} + + @Get() + @ApiOperation({ summary: 'Find all Anagrafiche' }) + @ApiPaginationQuery(AnagraficaService.findPaginateConfig()) + @ApiOkPaginatedResponse(SocioEntity, AnagraficaService.findPaginateConfig()) + async getAnagrafiche(@Paginate() query: PaginateQuery) { + return this.anagraficaService.getAnagrafiche(query); + } + + @Get('id/:id') + @ApiOperation({ summary: 'Get one Anagrafica by id' }) + async getOneAnagraficaById(@Param('id') id: string) { + return this.anagraficaService.getOneAnagraficaById(id); + } +} diff --git a/apps/ebitemp-api/src/features/anagrafica/anagrafica.module.ts b/apps/ebitemp-api/src/features/anagrafica/anagrafica.module.ts new file mode 100644 index 0000000..58bd7bc --- /dev/null +++ b/apps/ebitemp-api/src/features/anagrafica/anagrafica.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { SocioEntity } from '../../modules/database/connections/oceano'; +import { OCEANO_DATASOURCE } from '../../modules/database/connections/oceano/database.constants'; +import { AnagraficaController } from './anagrafica.controller'; +import { AnagraficaService } from './anagrafica.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([SocioEntity], OCEANO_DATASOURCE)], + controllers: [AnagraficaController], + providers: [AnagraficaService], + exports: [AnagraficaService], +}) +export class AnagraficaModule {} diff --git a/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.spec.ts b/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.spec.ts new file mode 100644 index 0000000..bc42cd0 --- /dev/null +++ b/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.spec.ts @@ -0,0 +1,18 @@ +import { Test } from '@nestjs/testing'; +import { AnagraficaService } from './anagrafica.service'; + +describe('AnagraficaService', () => { + let service: AnagraficaService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + providers: [AnagraficaService], + }).compile(); + + service = module.get(AnagraficaService); + }); + + it('should be defined', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.ts b/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.ts new file mode 100644 index 0000000..f28a964 --- /dev/null +++ b/apps/ebitemp-api/src/features/anagrafica/anagrafica.service.ts @@ -0,0 +1,46 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { paginate, PaginateConfig, PaginateQuery } from 'nestjs-paginate'; +import { Repository } from 'typeorm'; +import { SocioEntity } from '../../modules/database/connections/oceano'; +import { OCEANO_DATASOURCE } from '../../modules/database/connections/oceano/database.constants'; + +@Injectable() +export class AnagraficaService { + private readonly logger = new Logger(AnagraficaService.name); + + static readonly findPaginateConfig = (): PaginateConfig => ({ + relations: {}, + sortableColumns: ['codiceSocio', 'idNucleo', 'idPersona'], + searchableColumns: [], + defaultSortBy: [['codiceSocio', 'ASC']], + defaultLimit: 50, + maxLimit: -1, + filterableColumns: {}, + relativePath: true, + where: { + codiceGruppo: '6', + }, + }); + + constructor( + @InjectRepository(SocioEntity, OCEANO_DATASOURCE) + private readonly sociRepository: Repository, + ) {} + + async getAnagrafiche(query: PaginateQuery) { + const config = AnagraficaService.findPaginateConfig(); + query.limit ??= -1; + + return await paginate(query, this.sociRepository, config); + } + + async getOneAnagraficaById(idAnagrafica: string) { + return await this.sociRepository.findOne({ + where: { + ...AnagraficaService.findPaginateConfig().where, + codiceSocio: idAnagrafica, + }, + }); + } +} diff --git a/apps/ebitemp-api/src/main.ts b/apps/ebitemp-api/src/main.ts new file mode 100644 index 0000000..a7285cd --- /dev/null +++ b/apps/ebitemp-api/src/main.ts @@ -0,0 +1,61 @@ +import { Logger, VersioningType } from '@nestjs/common'; +import { NestFactory } from '@nestjs/core'; +import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; +import { Logger as PinoLogger } from 'nestjs-pino'; + +import { DocumentBuilder, SwaggerDocumentOptions, SwaggerModule } from '@nestjs/swagger'; +import { flow } from 'lodash'; +import { AppModule } from './app.module'; +import { patchPublicDecoratorSupport } from './modules/auth/strategies/jwt/jwt-auth.guard'; +import { LocalConfig, localConfig } from './modules/config/local.config'; +import { patchTypeOrm } from './modules/database/utils/typeorm-patch'; +import { patchNestjsSwagger } from './modules/validation/utils/nestjs-swagger-patches'; + +async function bootstrap() { + await patchTypeOrm(); + await patchNestjsSwagger(); + + const appOpts = (() => { + const loggerOpts = { bufferLogs: true }; + return { + forceCloseConnections: true, + ...loggerOpts, + }; + })(); + const app = await NestFactory.create(AppModule, new FastifyAdapter(appOpts)); + app.enableVersioning({ + type: VersioningType.URI, + defaultVersion: '1', + }); + app.enableShutdownHooks(); + + const config = app.get(localConfig.KEY); + const port = config.port || 3000; + + app.useLogger(app.get(PinoLogger)); + + const swaggerConfig = new DocumentBuilder().addBearerAuth().build(); + const swaggerOptions = { + operationIdFactory: (controllerKey: string, methodKey: string) => { + return `${controllerKey}_${methodKey}`; + }, + } satisfies SwaggerDocumentOptions; + const document = flow( + () => SwaggerModule.createDocument(app, swaggerConfig, swaggerOptions), + patchPublicDecoratorSupport, + )(); + + SwaggerModule.setup(`docs`, app, document, { + swaggerOptions: { + operationsSorter: 'alpha', + displayOperationId: true, + filter: true, + persistAuthorization: true, + }, + }); + + await app.listen(port); + Logger.log(`🚀 Application is running on: http://localhost:${port}`); +} + +void bootstrap(); diff --git a/apps/ebitemp-api/src/modules/auth/auth.config.ts b/apps/ebitemp-api/src/modules/auth/auth.config.ts new file mode 100644 index 0000000..c335a88 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/auth.config.ts @@ -0,0 +1,31 @@ +import { registerAs } from '@nestjs/config'; +import { z } from 'zod'; +import coerceRecordTypes from '../config/utils/coerce-record-types'; + +export const authSchema = z.object({ + accessToken: z.object({ + secret: z.string(), + expTimeInSecs: z.number().finite().nonnegative(), + }), + refreshToken: z.object({ + secret: z.string(), + expTimeInSecs: z.number().finite().nonnegative(), + }), +}); +export type AuthConfig = z.infer; + +export const authConfig = registerAs('auth', () => { + const env = coerceRecordTypes(process.env); + + const config: AuthConfig = authSchema.strict().parse({ + accessToken: { + secret: env['JWT_ACCESS_TOKEN_SECRET'], + expTimeInSecs: env['JWT_ACCESS_TOKEN_EXPIRATION_TIME_IN_SECONDS'], + }, + refreshToken: { + secret: env['JWT_REFRESH_TOKEN_SECRET'], + expTimeInSecs: env['JWT_REFRESH_TOKEN_EXPIRATION_TIME_IN_SECONDS'], + }, + }); + return config; +}); diff --git a/apps/ebitemp-api/src/modules/auth/auth.controller.ts b/apps/ebitemp-api/src/modules/auth/auth.controller.ts new file mode 100644 index 0000000..17d2956 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/auth.controller.ts @@ -0,0 +1,31 @@ +import { Body, Controller, HttpCode, HttpStatus, Post, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth } from '@nestjs/swagger'; +import { AccountsEntity } from '../database/connections/ebitemp-api/entities'; +import { LoginDto, LoginResDto } from './auth.dto'; +import { AuthService } from './auth.service'; +import { AuthenticatedUser } from './authenticated-user.decorator'; +import { Public } from './strategies/jwt/jwt-auth.guard'; +import { JwtRefreshGuard } from './strategies/jwt/jwt-refresh.guard'; + +@ApiBearerAuth() +@Controller('auth') +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @HttpCode(HttpStatus.OK) + @Public() + @Post('login') + async logIn(@Body() body: LoginDto): Promise { + const { username, password } = body; + const user = await this.authService.getAuthenticatedUser(username, password); + return await this.authService.signJwts(user); + } + + @HttpCode(HttpStatus.OK) + @UseGuards(JwtRefreshGuard) + @Public(true) + @Post('refresh') + async refresh(@AuthenticatedUser() user: AccountsEntity): Promise { + return await this.authService.signJwts(user); + } +} diff --git a/apps/ebitemp-api/src/modules/auth/auth.dto.ts b/apps/ebitemp-api/src/modules/auth/auth.dto.ts new file mode 100644 index 0000000..6447506 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/auth.dto.ts @@ -0,0 +1,19 @@ +import { createZodDto } from '@anatine/zod-nestjs'; +import { z } from 'zod'; +import { AccountsEntitySchema } from '../database/connections/ebitemp-api/entities'; + +export const loginSchema = z.object({ + username: AccountsEntitySchema.shape.username, + password: z.string().nonempty(), +}); +export type Login = z.infer; +export class LoginDto extends createZodDto(loginSchema) {} + +export const loginResSchema = z.object({ + accessToken: z.string().jwt(), + accessTokenExp: z.string().datetime(), + refreshToken: z.string().jwt(), + refreshTokenExp: z.string().datetime(), +}); +export type LoginRes = z.infer; +export class LoginResDto extends createZodDto(loginResSchema) {} diff --git a/apps/ebitemp-api/src/modules/auth/auth.module.ts b/apps/ebitemp-api/src/modules/auth/auth.module.ts new file mode 100644 index 0000000..9781318 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/auth.module.ts @@ -0,0 +1,36 @@ +import { Module } from '@nestjs/common'; +import { APP_GUARD, Reflector } from '@nestjs/core'; +import { PassportModule } from '@nestjs/passport'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { AccountsEntity } from '../database/connections/ebitemp-api/entities'; +import { AuthController } from './auth.controller'; +import { AuthService } from './auth.service'; +import { JwtAccessTokenAuthStrategy } from './strategies/jwt/jwt-access-token-auth.strategy'; +import { JwtAccessTokenModule } from './strategies/jwt/jwt-access-token.module'; +import { JwtAuthGuard } from './strategies/jwt/jwt-auth.guard'; +import { JwtRefreshTokenAuthStrategy } from './strategies/jwt/jwt-refresh-token-auth.strategy'; +import { JwtRefreshTokenModule } from './strategies/jwt/jwt-refresh-token.module'; +import { UsersAuthModule } from './users/users.module'; +import { EBITEMP_API_DATASOURCE } from '../database/connections/ebitemp-api/database.constants'; + +@Module({ + imports: [ + TypeOrmModule.forFeature([AccountsEntity], EBITEMP_API_DATASOURCE), + JwtAccessTokenModule, + JwtRefreshTokenModule, + PassportModule, + UsersAuthModule, + ], + controllers: [AuthController], + providers: [ + { + provide: APP_GUARD, + useFactory: (reflector) => new JwtAuthGuard(reflector), + inject: [Reflector], + }, + AuthService, + JwtAccessTokenAuthStrategy, + JwtRefreshTokenAuthStrategy, + ], +}) +export class AppAuthModule {} diff --git a/apps/ebitemp-api/src/modules/auth/auth.service.ts b/apps/ebitemp-api/src/modules/auth/auth.service.ts new file mode 100644 index 0000000..d4740a3 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/auth.service.ts @@ -0,0 +1,75 @@ +import { Inject, Injectable, Logger, UnauthorizedException } from '@nestjs/common'; +import { JwtService, JwtSignOptions } from '@nestjs/jwt'; +import * as bcrypt from 'bcrypt'; +import dayjs from 'dayjs'; +import { isEmpty } from 'lodash'; +import { AccountsEntity } from '../database/connections/ebitemp-api/entities'; +import { TokenPayload } from './constants/token-payload.interface'; +import { ACCESS_TOKEN_JWT_SERVICE } from './strategies/jwt/jwt-access-token.module'; +import { REFRESH_TOKEN_JWT_SERVICE } from './strategies/jwt/jwt-refresh-token.module'; +import { UsersAuthService } from './users/users-auth.service'; + +@Injectable() +export class AuthService { + private readonly logger = new Logger(AuthService.name); + + constructor( + private readonly usersAuthService: UsersAuthService, + @Inject(ACCESS_TOKEN_JWT_SERVICE) + private readonly accessTokenJwtService: JwtService, + @Inject(REFRESH_TOKEN_JWT_SERVICE) + private readonly refreshTokenJwtService: JwtService, + ) {} + + public async signJwts(account: AccountsEntity) { + const { token: accessToken, exp: accessTokenExp } = await this.getAccessToken(account); + const { token: refreshToken, exp: refreshTokenExp } = await this.getRefreshToken(account); + + return { + accessToken: accessToken, + accessTokenExp: dayjs.unix(accessTokenExp).toJSON(), + refreshToken: refreshToken, + refreshTokenExp: dayjs.unix(refreshTokenExp).toJSON(), + }; + } + + public async getAccessToken(account: AccountsEntity, options?: JwtSignOptions) { + const payload: TokenPayload = { + username: account.username, + sub: account.id, + }; + const token = await this.accessTokenJwtService.signAsync(payload, options); + const exp = this.accessTokenJwtService.decode<{ exp: number }>(token).exp; + return { token, exp }; + } + + public async getRefreshToken(account: AccountsEntity, options?: JwtSignOptions) { + const payload: TokenPayload = { + username: account.username, + sub: account.id, + }; + const token = await this.refreshTokenJwtService.signAsync(payload, options); + await this.usersAuthService.setCurrentRefreshTokenHash(account.id, token); + const exp = this.refreshTokenJwtService.decode<{ exp: number }>(token).exp; + return { token, exp }; + } + + public async getAuthenticatedUser(username: string, password: string): Promise { + try { + const account = await this.usersAuthService.getUserByUsername(username); + if (!account) throw new UnauthorizedException(`Username not found`); + await this.verifyPassword(password, account.password); + return account; + } catch (error) { + throw new UnauthorizedException(`Wrong credentials`); + } + } + + private async verifyPassword(plainTextPassword: string, hashedPassword: string | null) { + const isPasswordMatching = + hashedPassword && !isEmpty(hashedPassword) ? await bcrypt.compare(plainTextPassword, hashedPassword) : null; + if (!isPasswordMatching) { + throw new UnauthorizedException(`Wrong password`); + } + } +} diff --git a/apps/ebitemp-api/src/modules/auth/authenticated-user.decorator.ts b/apps/ebitemp-api/src/modules/auth/authenticated-user.decorator.ts new file mode 100644 index 0000000..89a950d --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/authenticated-user.decorator.ts @@ -0,0 +1,8 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; +import { RequestWithUser } from './constants/request-with-user'; + +export const AuthenticatedUser = createParamDecorator((data: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + + return request.user; +}); diff --git a/apps/ebitemp-api/src/modules/auth/constants/request-with-user.ts b/apps/ebitemp-api/src/modules/auth/constants/request-with-user.ts new file mode 100644 index 0000000..f5e0ffc --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/constants/request-with-user.ts @@ -0,0 +1,6 @@ +import { FastifyRequest } from 'fastify'; +import { AccountsEntity } from '../../database/connections/ebitemp-api/entities'; + +export interface RequestWithUser extends FastifyRequest { + user: AccountsEntity; +} diff --git a/apps/ebitemp-api/src/modules/auth/constants/token-payload.interface.ts b/apps/ebitemp-api/src/modules/auth/constants/token-payload.interface.ts new file mode 100644 index 0000000..1e0843c --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/constants/token-payload.interface.ts @@ -0,0 +1,6 @@ +export interface TokenPayload { + username: string; + sub: number; + iat?: number; + exp?: number; +} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token-auth.strategy.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token-auth.strategy.ts new file mode 100644 index 0000000..0991c44 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token-auth.strategy.ts @@ -0,0 +1,31 @@ +import { Inject, Injectable, UnauthorizedException } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { FastifyRequest } from 'fastify'; +import { ClsService } from 'nestjs-cls'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { AppClsStore } from '../../../cls/cls.interface'; +import { type AuthConfig, authConfig } from '../../auth.config'; +import { TokenPayload } from '../../constants/token-payload.interface'; +import { UsersAuthService } from '../../users/users-auth.service'; + +@Injectable() +export class JwtAccessTokenAuthStrategy extends PassportStrategy(Strategy, 'jwt-access-token') { + constructor( + @Inject(authConfig.KEY) authConfig: AuthConfig, + private readonly cls: ClsService, + private readonly userAuthService: UsersAuthService, + ) { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + secretOrKey: authConfig.accessToken.secret, + passReqToCallback: true, + }); + } + + async validate(request: FastifyRequest, payload: TokenPayload) { + const account = await this.userAuthService.getUserById(payload.sub); + if (!account) throw new UnauthorizedException('Access Token Guard'); + this.cls.set('account', account); + return account; + } +} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token.module.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token.module.ts new file mode 100644 index 0000000..a96f1f4 --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-access-token.module.ts @@ -0,0 +1,30 @@ +import { Module } from '@nestjs/common'; +import { JwtService, JwtModule as NestJwtModule } from '@nestjs/jwt'; +import { authConfig, AuthConfig } from '../../auth.config'; +import { ConfigModule } from '@nestjs/config'; + +export const ACCESS_TOKEN_JWT_SERVICE = Symbol('ACCESS_TOKEN_JWT_SERVICE'); +const accessTokenJwtProvider = { + provide: ACCESS_TOKEN_JWT_SERVICE, + useFactory: (jwtService: JwtService) => jwtService, + inject: [JwtService], +}; + +@Module({ + imports: [ + ConfigModule.forFeature(authConfig), + NestJwtModule.registerAsync({ + imports: [...authConfig.asProvider().imports], + useFactory: async (authConfig: AuthConfig) => ({ + secret: authConfig.accessToken.secret, + signOptions: { + expiresIn: `${authConfig.accessToken.expTimeInSecs}s`, + }, + }), + inject: [authConfig.KEY], + }), + ], + providers: [accessTokenJwtProvider], + exports: [ConfigModule, accessTokenJwtProvider], +}) +export class JwtAccessTokenModule {} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-auth.guard.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-auth.guard.ts new file mode 100644 index 0000000..c4b064d --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-auth.guard.ts @@ -0,0 +1,39 @@ +import { applyDecorators, ExecutionContext, SetMetadata } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { AuthGuard } from '@nestjs/passport'; +import { OpenAPIObject } from '@nestjs/swagger'; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const Public = (keepSecurity: boolean = false) => { + const decorators = [SetMetadata(IS_PUBLIC_KEY, true)]; + if (!keepSecurity) decorators.push(SetMetadata('swagger/apiSecurity', ['public'])); + return applyDecorators(...decorators); +}; + +export const patchPublicDecoratorSupport = (document: OpenAPIObject) => { + Object.values(document.paths).forEach((path: any) => { + Object.values(path).forEach((method: any) => { + if (Array.isArray(method.security) && method.security.includes('public')) { + method.security = []; + } + }); + }); + return document; +}; + +export class JwtAuthGuard extends AuthGuard('jwt-access-token') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext) { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + if (isPublic) { + return true; + } + return super.canActivate(context); + } +} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts new file mode 100644 index 0000000..e5659be --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts @@ -0,0 +1,32 @@ +import { Inject, Injectable, UnauthorizedException } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { FastifyRequest } from 'fastify'; +import { ClsService } from 'nestjs-cls'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { AppClsStore } from '../../../cls/cls.interface'; +import { authConfig, type AuthConfig } from '../../auth.config'; +import { TokenPayload } from '../../constants/token-payload.interface'; +import { UsersAuthService } from '../../users/users-auth.service'; + +@Injectable() +export class JwtRefreshTokenAuthStrategy extends PassportStrategy(Strategy, 'jwt-refresh-token') { + constructor( + @Inject(authConfig.KEY) authConfig: AuthConfig, + private readonly cls: ClsService, + private readonly usersAuthService: UsersAuthService, + ) { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + secretOrKey: authConfig.refreshToken.secret, + passReqToCallback: true, + }); + } + + async validate(request: FastifyRequest, payload: TokenPayload) { + const refreshToken = request.headers?.authorization?.replace('Bearer', '')?.trim() ?? ''; + const account = await this.usersAuthService.getUserByIdAndRefreshTokenPair(payload.sub, refreshToken); + if (!account) throw new UnauthorizedException('Refresh Token Guard'); + this.cls.set('account', account); + return account; + } +} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token.module.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token.module.ts new file mode 100644 index 0000000..6424afe --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh-token.module.ts @@ -0,0 +1,30 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { JwtService, JwtModule as NestJwtModule } from '@nestjs/jwt'; +import { authConfig, AuthConfig } from '../../auth.config'; + +export const REFRESH_TOKEN_JWT_SERVICE = Symbol('REFRESH_TOKEN_JWT_SERVICE'); +const refreshTokenJwtProvider = { + provide: REFRESH_TOKEN_JWT_SERVICE, + useFactory: (jwtService: JwtService) => jwtService, + inject: [JwtService], +}; + +@Module({ + imports: [ + ConfigModule.forFeature(authConfig), + NestJwtModule.registerAsync({ + imports: [...authConfig.asProvider().imports], + useFactory: async (authConfig: AuthConfig) => ({ + secret: authConfig.refreshToken.secret, + signOptions: { + expiresIn: `${authConfig.refreshToken.expTimeInSecs}s`, + }, + }), + inject: [authConfig.KEY], + }), + ], + providers: [refreshTokenJwtProvider], + exports: [ConfigModule, refreshTokenJwtProvider], +}) +export class JwtRefreshTokenModule {} diff --git a/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh.guard.ts b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh.guard.ts new file mode 100644 index 0000000..9ea7bce --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/strategies/jwt/jwt-refresh.guard.ts @@ -0,0 +1,3 @@ +import { AuthGuard } from '@nestjs/passport'; + +export class JwtRefreshGuard extends AuthGuard('jwt-refresh-token') {} diff --git a/apps/ebitemp-api/src/modules/auth/users/users-auth.service.ts b/apps/ebitemp-api/src/modules/auth/users/users-auth.service.ts new file mode 100644 index 0000000..25f668b --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/users/users-auth.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import * as argon2 from 'argon2'; +import { Repository } from 'typeorm'; +import { AccountsEntity } from '../../database/connections/ebitemp-api/entities'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; + +@Injectable() +export class UsersAuthService { + constructor( + @InjectRepository(AccountsEntity, EBITEMP_API_DATASOURCE) + private readonly accountsRepository: Repository, + ) {} + + async getUserById(accountId: number) { + return await this.accountsRepository.findOne({ + relations: { profili: { ruolo: true } }, + where: { id: accountId }, + }); + } + + async getUserByUsername(username: string) { + return await this.accountsRepository.findOne({ + relations: { profili: { ruolo: true } }, + where: { username: username }, + }); + } + + async getUserByIdAndRefreshTokenPair(accountId: number, refreshToken: string) { + const accountById = await this.getUserById(accountId); + if (!accountById?.ultimoHashRefreshToken) return null; + + const isRefreshTokenMatching = await argon2.verify(accountById.ultimoHashRefreshToken, refreshToken); + return isRefreshTokenMatching ? accountById : null; + } + + async setCurrentRefreshTokenHash(accountId: number, refreshToken: string | null) { + const hash = refreshToken ? await argon2.hash(refreshToken) : null; + await this.accountsRepository.update(accountId, { + ultimoHashRefreshToken: hash, + }); + } +} diff --git a/apps/ebitemp-api/src/modules/auth/users/users.module.ts b/apps/ebitemp-api/src/modules/auth/users/users.module.ts new file mode 100644 index 0000000..fa769cf --- /dev/null +++ b/apps/ebitemp-api/src/modules/auth/users/users.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { UsersAuthService } from './users-auth.service'; +import { AccountsEntity } from '../../database/connections/ebitemp-api/entities'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; + +@Module({ + imports: [TypeOrmModule.forFeature([AccountsEntity], EBITEMP_API_DATASOURCE)], + controllers: [], + providers: [UsersAuthService], + exports: [UsersAuthService], +}) +export class UsersAuthModule {} diff --git a/apps/ebitemp-api/src/modules/cls/cls.interface.ts b/apps/ebitemp-api/src/modules/cls/cls.interface.ts new file mode 100644 index 0000000..34cf783 --- /dev/null +++ b/apps/ebitemp-api/src/modules/cls/cls.interface.ts @@ -0,0 +1,6 @@ +import { ClsStore } from 'nestjs-cls'; +import { AccountsEntity } from '../database/connections/ebitemp-api'; + +export interface AppClsStore extends ClsStore { + account: AccountsEntity | null; +} diff --git a/apps/ebitemp-api/src/modules/cls/cls.module.ts b/apps/ebitemp-api/src/modules/cls/cls.module.ts new file mode 100644 index 0000000..d4139bc --- /dev/null +++ b/apps/ebitemp-api/src/modules/cls/cls.module.ts @@ -0,0 +1,16 @@ +import { Module } from '@nestjs/common'; +import { ClsModule } from 'nestjs-cls'; + +@Module({ + imports: [ + ClsModule.forRoot({ + global: true, + middleware: { + mount: true, + }, + }), + ], + providers: [], + exports: [ClsModule], +}) +export class AppClsModule {} diff --git a/apps/ebitemp-api/src/modules/config/config.module.ts b/apps/ebitemp-api/src/modules/config/config.module.ts new file mode 100644 index 0000000..e4325bd --- /dev/null +++ b/apps/ebitemp-api/src/modules/config/config.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { localConfig } from './local.config'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + envFilePath: ['.env', '../../.env'], + load: [localConfig], + }), + ], +}) +export class AppConfigModule {} diff --git a/apps/ebitemp-api/src/modules/config/local.config.ts b/apps/ebitemp-api/src/modules/config/local.config.ts new file mode 100644 index 0000000..9ab7cb9 --- /dev/null +++ b/apps/ebitemp-api/src/modules/config/local.config.ts @@ -0,0 +1,19 @@ +import coerceRecordTypes from './utils/coerce-record-types'; +import { registerAs } from '@nestjs/config'; +import { z } from 'zod'; + +export const localSchema = z.object({ + production: z.boolean(), + port: z.number().optional(), +}); +export type LocalConfig = z.infer; + +export const localConfig = registerAs('local', () => { + const env = coerceRecordTypes(process.env); + + const config: LocalConfig = localSchema.strict().parse({ + production: env['PRODUCTION'], + port: env['PORT'], + }); + return config; +}); diff --git a/apps/ebitemp-api/src/modules/config/utils/coerce-record-types.ts b/apps/ebitemp-api/src/modules/config/utils/coerce-record-types.ts new file mode 100644 index 0000000..7a63ba9 --- /dev/null +++ b/apps/ebitemp-api/src/modules/config/utils/coerce-record-types.ts @@ -0,0 +1,11 @@ +import { clone, each } from 'lodash'; + +export default (raw: Record): Record => { + raw = clone(raw); + return each(raw, (value, key) => { + if (value === 'true') raw[key] = true; + if (value === 'false') raw[key] = false; + if (value === 'null') raw[key] = null; + if (!isNaN(Number(value))) raw[key] = Number(value); + }); +}; diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.config.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.config.ts new file mode 100644 index 0000000..ad5dcc9 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.config.ts @@ -0,0 +1,10 @@ +import coerceRecordTypes from '../../../config/utils/coerce-record-types'; +import { databaseConfigFactory, rawDatabaseSchema } from '../../utils/database-config'; + +const env = coerceRecordTypes(process.env); +const envParsed = rawDatabaseSchema.strict().parse({ + connectionString: env['DATABASE_EBITEMPAPI_CONNECTION_STRING'], + secure: env['DATABASE_EBITEMPAPI_SECURE'], +}); + +export const databaseConfig = databaseConfigFactory(envParsed); diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.constants.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.constants.ts new file mode 100644 index 0000000..59d8cfe --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.constants.ts @@ -0,0 +1 @@ +export const EBITEMP_API_DATASOURCE = 'EbitempApi'; diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.module.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.module.ts new file mode 100644 index 0000000..029b7f7 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/database.module.ts @@ -0,0 +1,32 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { DatabaseConfig } from '../../utils/database-config'; +import { typeormTransactionalDataSourceFactory } from '../../utils/typeorm-data-source-factory'; +import { typeormEntitiesFromImport } from '../../utils/typeorm-import-entities'; +import { typeormModuleOptionsFactory } from '../../utils/typeorm-module-options-factory'; +import { databaseConfig } from './database.config'; +import { EBITEMP_API_DATASOURCE } from './database.constants'; + +@Module({ + imports: [ + ConfigModule.forFeature(databaseConfig), + TypeOrmModule.forRootAsync({ + imports: databaseConfig.asProvider().imports, + name: EBITEMP_API_DATASOURCE, + dataSourceFactory: typeormTransactionalDataSourceFactory(EBITEMP_API_DATASOURCE), + useFactory: async (dbConfig: DatabaseConfig) => { + const config = await typeormModuleOptionsFactory( + dbConfig, + await typeormEntitiesFromImport(await import('./index.js')), + EBITEMP_API_DATASOURCE, + ); + return config; + }, + inject: [databaseConfig.KEY], + }), + ], + providers: [], + exports: [TypeOrmModule], +}) +export class EbitempApiDatabaseModule {} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/accounts.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/accounts.entity.ts new file mode 100644 index 0000000..c4f07a6 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/accounts.entity.ts @@ -0,0 +1,51 @@ +import { toZod } from 'tozod'; +import { Column, Entity, Index, OneToMany } from 'typeorm'; +import { z } from 'zod'; +import { ProfiliEntity, ProfiliEntitySchema } from './profili.entity'; + +@Index('pk_accounts', ['id'], { unique: true }) +@Entity('accounts') +export class AccountsEntity { + @Column('int', { primary: true, name: 'id' }) + id!: number; + + @Column('varchar', { name: 'username', unique: true, length: 255 }) + username!: string; + + @Column('varchar', { name: 'password', nullable: true, length: 255 }) + password!: string | null; + + @Column('varchar', { name: 'nome', length: 255 }) + nome!: string; + + @Column('date', { name: 'data_creazione' }) + dataCreazione!: Date; + + @Column('date', { name: 'data_scadenza', nullable: true }) + dataScadenza!: Date | null; + + @Column('varchar', { + name: 'ultimo_hash_refresh_token', + nullable: true, + length: 1024, + }) + ultimoHashRefreshToken!: string | null; + + @OneToMany(() => ProfiliEntity, (profiliEntity) => profiliEntity.account) + profili!: ProfiliEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} + +export const AccountsEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + username: z.string().nonempty(), + password: z.string().nonempty().nullable(), + nome: z.string().nonempty(), + dataCreazione: z.date(), + dataScadenza: z.date().nullable(), + ultimoHashRefreshToken: z.string().nonempty().nullable(), + profili: z.array(ProfiliEntitySchema), +})); diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client.entity.ts new file mode 100644 index 0000000..cdf7f09 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client.entity.ts @@ -0,0 +1,25 @@ +import { Column, Entity, Index, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; +import { ApiClientInvocazioniEntity } from './api_client_invocazioni.entity'; + +@Index('pk_api_client', ['id'], { unique: true }) +@Entity('api_client') +export class ApiClientEntity { + @PrimaryGeneratedColumn({ type: 'int', name: 'id' }) + id!: number; + + @Column('varchar', { name: 'nome', nullable: true, length: 255 }) + nome!: string | null; + + @Column('varchar', { name: 'descrizione', nullable: true, length: 255 }) + descrizione!: string | null; + + @Column('varchar', { name: 'base_url', length: 2000 }) + baseUrl!: string; + + @OneToMany(() => ApiClientInvocazioniEntity, (apiClientInvocazioniEntity) => apiClientInvocazioniEntity.client) + invocazioni!: ApiClientInvocazioniEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client_invocazioni.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client_invocazioni.entity.ts new file mode 100644 index 0000000..90285c0 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_client_invocazioni.entity.ts @@ -0,0 +1,41 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; +import { ApiClientEntity } from './api_client.entity'; + +@Index('pk_api_client_invocazioni', ['id'], { unique: true }) +@Entity('api_client_invocazioni') +export class ApiClientInvocazioniEntity { + @PrimaryGeneratedColumn({ type: 'int', name: 'id' }) + id!: number; + + @Column('int', { name: 'id_client' }) + idClient!: number; + + @Column('varchar', { name: 'percorso', length: 2000 }) + percorso!: string; + + @Column('varchar', { name: 'metodo', length: 7 }) + metodo!: string; + + @Column('datetime', { name: 'timestamp' }) + timestamp!: Date; + + @Column('varchar', { name: 'richiesta', nullable: true }) + richiesta!: string | null; + + @Column('varchar', { name: 'risposta' }) + risposta!: string; + + @Column('varchar', { name: 'errori', nullable: true }) + errori!: string | null; + + @Column('bit', { name: 'flag_errore' }) + flagErrore!: boolean; + + @ManyToOne(() => ApiClientEntity, (apiClientEntity) => apiClientEntity.invocazioni) + @JoinColumn([{ name: 'id_client', referencedColumnName: 'id' }]) + client!: ApiClientEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint.entity.ts new file mode 100644 index 0000000..450b54f --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint.entity.ts @@ -0,0 +1,25 @@ +import { Column, Entity, Index, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; +import { ApiEndpointInvocazioniEntity } from './api_endpoint_invocazioni.entity'; + +@Index('pk_api_endpoint', ['id'], { unique: true }) +@Entity('api_endpoint') +export class ApiEndpointEntity { + @PrimaryGeneratedColumn({ type: 'int', name: 'id' }) + id!: number; + + @Column('varchar', { name: 'percorso', length: 2000 }) + percorso!: string; + + @Column('varchar', { name: 'metodo', length: 7 }) + metodo!: string; + + @OneToMany( + () => ApiEndpointInvocazioniEntity, + (apiEndpointInvocazioniEntity) => apiEndpointInvocazioniEntity.endpoint, + ) + invocazioni!: ApiEndpointInvocazioniEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint_invocazioni.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint_invocazioni.entity.ts new file mode 100644 index 0000000..11606a8 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/api_endpoint_invocazioni.entity.ts @@ -0,0 +1,40 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; +import { AccountsEntity } from './accounts.entity'; +import { ApiEndpointEntity } from './api_endpoint.entity'; + +@Index('pk_api_endpoint_invocazioni', ['id'], { unique: true }) +@Entity('api_endpoint_invocazioni') +export class ApiEndpointInvocazioniEntity { + @PrimaryGeneratedColumn({ type: 'int', name: 'id' }) + id!: number; + + @Column('int', { name: 'id_account' }) + idAccount!: number; + + @Column('int', { name: 'id_endpoint' }) + idEndpoint!: number; + + @Column('datetime', { name: 'timestamp' }) + timestamp!: Date; + + @Column('varchar', { name: 'richiesta' }) + richiesta!: string; + + @Column('varchar', { name: 'risposta' }) + risposta!: string; + + @Column('bit', { name: 'flag_errore' }) + flagErrore!: boolean; + + @ManyToOne(() => ApiEndpointEntity, (apiEndpointEntity) => apiEndpointEntity.invocazioni) + @JoinColumn([{ name: 'id_endpoint', referencedColumnName: 'id' }]) + endpoint!: ApiEndpointEntity; + + @ManyToOne(() => AccountsEntity) + @JoinColumn([{ name: 'id_account', referencedColumnName: 'id' }]) + account!: AccountsEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/index.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/index.ts new file mode 100644 index 0000000..95b7a6f --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/index.ts @@ -0,0 +1,8 @@ +export * from './accounts.entity'; +export * from './api_client.entity'; +export * from './api_client_invocazioni.entity'; +export * from './api_endpoint.entity'; +export * from './api_endpoint_invocazioni.entity'; +export * from './profili.entity'; +export * from './ruoli.entity'; +export * from './tipi_jobs.entity'; diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/profili.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/profili.entity.ts new file mode 100644 index 0000000..b731c21 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/profili.entity.ts @@ -0,0 +1,38 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; +import { AccountsEntity, AccountsEntitySchema } from './accounts.entity'; +import { RuoliEntity, RuoliEntitySchema } from './ruoli.entity'; +import { toZod } from 'tozod'; +import { z } from 'zod'; + +@Index('pk_profili', ['id'], { unique: true }) +@Entity('profili') +export class ProfiliEntity { + @Column('int', { primary: true, name: 'id' }) + id!: number; + + @Column('int', { name: 'id_account', unique: true }) + idAccount!: number; + + @Column('int', { name: 'id_ruolo', unique: true }) + idRuolo!: number; + + @ManyToOne(() => AccountsEntity, (accountsEntity) => accountsEntity.profili) + @JoinColumn([{ name: 'id_account', referencedColumnName: 'id' }]) + account!: AccountsEntity; + + @ManyToOne(() => RuoliEntity, (ruoliEntity) => ruoliEntity.profili) + @JoinColumn([{ name: 'id_ruolo', referencedColumnName: 'id' }]) + ruolo!: RuoliEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} + +export const ProfiliEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + idAccount: AccountsEntitySchema.shape.id, + idRuolo: RuoliEntitySchema.shape.id, + account: AccountsEntitySchema, + ruolo: RuoliEntitySchema, +})); diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/ruoli.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/ruoli.entity.ts new file mode 100644 index 0000000..41ee48b --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/ruoli.entity.ts @@ -0,0 +1,31 @@ +import { Column, Entity, Index, OneToMany } from 'typeorm'; +import { ProfiliEntity, ProfiliEntitySchema } from './profili.entity'; +import { toZod } from 'tozod'; +import { z } from 'zod'; + +@Index('pk_ruoli', ['id'], { unique: true }) +@Entity('ruoli') +export class RuoliEntity { + @Column('int', { primary: true, name: 'id' }) + id!: number; + + @Column('varchar', { name: 'nome', unique: true, length: 255 }) + nome!: string; + + @Column('varchar', { name: 'descrizione', length: 255 }) + descrizione!: string; + + @OneToMany(() => ProfiliEntity, (profiliEntity) => profiliEntity.ruolo) + profili!: ProfiliEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} + +export const RuoliEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + nome: z.string().nonempty(), + descrizione: z.string().nonempty(), + profili: z.array(ProfiliEntitySchema), +})); diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/tipi_jobs.entity.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/tipi_jobs.entity.ts new file mode 100644 index 0000000..0a1f013 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/entities/tipi_jobs.entity.ts @@ -0,0 +1,45 @@ +import { Column, Entity, Index } from 'typeorm'; +import { Enum, Enumify } from '../../../../enumify/enumify'; + +export class InviaMailSeErrori { + @Column('bit', { name: 'flag', default: () => '(0)' }) + flagAttivo!: boolean; + + @Column('varchar', { name: 'oggetto', nullable: true, length: 255 }) + oggetto!: string | null; + + @Column('varchar', { name: 'destinatari', nullable: true, length: 255 }) + destinatari!: string | null; + + @Column('varchar', { name: 'cc', nullable: true, length: 255 }) + cc!: string | null; +} + +@Index('pk_tipi_jobs', ['id'], { unique: true }) +@Entity('tipi_jobs') +export class TipiJobsEntity extends Enumify { + static _ = TipiJobsEntity.closeEnum(); + + @Column('int', { primary: true, name: 'id' }) + declare id: number; + + @Column('varchar', { name: 'nome', length: 50 }) + declare nome: string; + + @Column('varchar', { name: 'descrizione', nullable: true, length: 255 }) + descrizione!: string | null; + + @Column(() => InviaMailSeErrori, { prefix: 'invia_mail_se_errori' }) + inviaMailSeErrori!: InviaMailSeErrori; + + @Column('bit', { name: 'flag_attivo', default: () => '(0)' }) + flagAttivo!: boolean; + + @Column('varchar', { name: 'pattern_cron', length: 20 }) + patternCron!: string; + + public constructor(id: number, nome: string, patternCron: string) { + super(id, nome); + this.patternCron = patternCron; + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/index.ts b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/index.ts new file mode 100644 index 0000000..697510e --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/ebitemp-api/index.ts @@ -0,0 +1 @@ +export * from './entities'; diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/database.config.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/database.config.ts new file mode 100644 index 0000000..5679be5 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/database.config.ts @@ -0,0 +1,10 @@ +import coerceRecordTypes from '../../../config/utils/coerce-record-types'; +import { databaseConfigFactory, rawDatabaseSchema } from '../../utils/database-config'; + +const env = coerceRecordTypes(process.env); +const envParsed = rawDatabaseSchema.strict().parse({ + connectionString: env['DATABASE_OCEANO_CONNECTION_STRING'], + secure: env['DATABASE_OCEANO_SECURE'], +}); + +export const databaseConfig = databaseConfigFactory(envParsed); diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/database.constants.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/database.constants.ts new file mode 100644 index 0000000..e6c10c7 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/database.constants.ts @@ -0,0 +1 @@ +export const OCEANO_DATASOURCE = 'Oceano'; diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/database.module.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/database.module.ts new file mode 100644 index 0000000..567993a --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/database.module.ts @@ -0,0 +1,32 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { DatabaseConfig } from '../../utils/database-config'; +import { typeormTransactionalDataSourceFactory } from '../../utils/typeorm-data-source-factory'; +import { typeormEntitiesFromImport } from '../../utils/typeorm-import-entities'; +import { typeormModuleOptionsFactory } from '../../utils/typeorm-module-options-factory'; +import { databaseConfig } from './database.config'; +import { OCEANO_DATASOURCE } from './database.constants'; + +@Module({ + imports: [ + ConfigModule.forFeature(databaseConfig), + TypeOrmModule.forRootAsync({ + imports: databaseConfig.asProvider().imports, + name: OCEANO_DATASOURCE, + dataSourceFactory: typeormTransactionalDataSourceFactory(OCEANO_DATASOURCE), + useFactory: async (dbConfig: DatabaseConfig) => { + const config = await typeormModuleOptionsFactory( + dbConfig, + await typeormEntitiesFromImport(await import('./index.js')), + OCEANO_DATASOURCE, + ); + return config; + }, + inject: [databaseConfig.KEY], + }), + ], + providers: [], + exports: [TypeOrmModule], +}) +export class OceanoDatabaseModule {} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_CAP_Luoghi.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_CAP_Luoghi.entity.ts new file mode 100644 index 0000000..2b8ee4a --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_CAP_Luoghi.entity.ts @@ -0,0 +1,20 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; +import { ApiLuoghiEntity } from './API_Luoghi.entity'; + +@Index('nk_API_CAP_Luoghi', ['codice', 'cap'], { unique: true }) +@Entity('API_CAP_Luoghi') +export class ApiCapLuoghiEntity { + @Column('varchar', { primary: true, name: 'codice', length: 5 }) + codice!: string; + + @Column('varchar', { primary: true, name: 'cap', length: 5 }) + cap!: string; + + @ManyToOne(() => ApiLuoghiEntity) + @JoinColumn([{ name: 'codice', referencedColumnName: 'codice' }]) + luogo!: ApiLuoghiEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi.entity.ts new file mode 100644 index 0000000..d79e29e --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi.entity.ts @@ -0,0 +1,38 @@ +import { Column, Entity, Index, OneToMany } from 'typeorm'; +import { ApiCapLuoghiEntity } from './API_CAP_Luoghi.entity'; +import { SocioEntity } from './socio.entity'; + +@Index('PK_API_Luoghi', ['codice'], { unique: true }) +@Entity('API_Luoghi') +export class ApiLuoghiEntity { + @Column('varchar', { primary: true, name: 'codice', length: 5 }) + codice!: string; + + @Column('nvarchar', { name: 'comune', nullable: true, length: 255 }) + comune!: string | null; + + @Column('nvarchar', { name: 'sigla_provincia', nullable: true, length: 5 }) + siglaProvincia!: string | null; + + @Column('nvarchar', { name: 'provincia', nullable: true, length: 255 }) + provincia!: string | null; + + @Column('nvarchar', { name: 'codice_regione', nullable: true, length: 5 }) + codiceRegione!: string | null; + + @Column('nvarchar', { name: 'regione', nullable: true, length: 255 }) + regione!: string | null; + + @Column('nvarchar', { name: 'codice_stato', nullable: true, length: 5 }) + codiceStato!: string | null; + + @Column('nvarchar', { name: 'stato', nullable: true, length: 255 }) + stato!: string | null; + + @Column('int', { name: 'flag_attivo', nullable: true }) + flagAttivo!: number | null; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi_Estero.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi_Estero.entity.ts new file mode 100644 index 0000000..1afe9ae --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/API_Luoghi_Estero.entity.ts @@ -0,0 +1,14 @@ +import { Column, Entity, PrimaryColumn } from 'typeorm'; + +@Entity('API_Luoghi_Estero') +export class ApiLuoghiEsteroEntity { + @PrimaryColumn('varchar', { name: 'codice', length: 5 }) + codice!: string; + + @Column('nvarchar', { name: 'codice_stato', length: 5 }) + codiceStato!: string; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/allegati.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/allegati.entity.ts new file mode 100644 index 0000000..10d30b3 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/allegati.entity.ts @@ -0,0 +1,84 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; + +@Index('PK_allegati', ['codiceAllegato'], { unique: true }) +@Entity('allegati') +export class AllegatiEntity { + @Column('bigint', { primary: true, name: 'codiceAllegato' }) + codiceAllegato!: string; + + @Column('int', { name: 'tipoOrigine', nullable: true }) + tipoOrigine!: number | null; + + @Column('bigint', { name: 'codiceOrigine', nullable: true }) + codiceOrigine!: string | null; + + @Column('nvarchar', { + name: 'descrizioneAllegato', + nullable: true, + length: 255, + }) + descrizioneAllegato!: string | null; + + @Column('nvarchar', { name: 'dataAllegato', nullable: true, length: 10 }) + dataAllegato!: string | null; + + @Column('nvarchar', { + name: 'cartellaAllegato', + nullable: true, + length: 2048, + }) + cartellaAllegato!: string | null; + + @Column('nvarchar', { name: 'nomeFileAllegato', nullable: true, length: 255 }) + nomeFileAllegato!: string | null; + + @Column('ntext', { name: 'noteAllegato', nullable: true }) + noteAllegato!: string | null; + + @Column('bigint', { name: 'utenteCreazione', nullable: true }) + utenteCreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('int', { name: 'pubblicatoWEB', nullable: true }) + pubblicatoWeb!: number | null; + + @Column('int', { + name: 'trasferitoWEB', + nullable: true, + default: () => '(0)', + }) + trasferitoWeb!: number | null; + + @Column('nvarchar', { + name: 'dataPubblicazione', + nullable: true, + length: 10, + default: () => "''", + }) + dataPubblicazione!: string | null; + + @Column('bigint', { + name: 'codiceProtocolloGenerico', + nullable: true, + default: () => '(0)', + }) + codiceProtocolloGenerico!: string | null; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/contratto.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/contratto.entity.ts new file mode 100644 index 0000000..d813d76 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/contratto.entity.ts @@ -0,0 +1,492 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; +import { EnteEntity } from './ente.entity'; +import { SocioContrattoEntity } from './socioContratto.entity'; + +@Index('PK_contratto', ['codiceContratto'], { unique: true }) +@Entity('contratto') +export class ContrattoEntity { + @Column('bigint', { primary: true, name: 'codiceContratto' }) + codiceContratto!: string; + + @Column('bigint', { name: 'codiceEnte', nullable: true }) + codiceEnte!: string | null; + + @Column('nvarchar', { name: 'contratto', nullable: true, length: 255 }) + contratto!: string | null; + + @Column('nvarchar', { name: 'dataContratto', nullable: true, length: 10 }) + dataContratto!: string | null; + + @Column('int', { name: 'rinnovoAutomatico', nullable: true }) + rinnovoAutomatico!: number | null; + + @Column('nvarchar', { + name: 'dataDecorrenzaContratto', + nullable: true, + length: 10, + }) + dataDecorrenzaContratto!: string | null; + + @Column('nvarchar', { + name: 'codiceEconomicoEsolver', + nullable: true, + length: 30, + }) + codiceEconomicoEsolver!: string | null; + + @Column('nvarchar', { + name: 'codicePatrimonialeEsolver', + nullable: true, + length: 30, + }) + codicePatrimonialeEsolver!: string | null; + + @Column('int', { name: 'iscrizioneFamiliariObbligatoria', nullable: true }) + iscrizioneFamiliariObbligatoria!: number | null; + + @Column('int', { + name: 'inizioDecorrenzaNuoveAdesioniAderenti', + nullable: true, + }) + inizioDecorrenzaNuoveAdesioniAderenti!: number | null; + + @Column('int', { + name: 'inizioDecorrenzaNuoveAdesioniFamiliari', + nullable: true, + }) + inizioDecorrenzaNuoveAdesioniFamiliari!: number | null; + + @Column('int', { name: 'cessazioneInfraAnnuale', nullable: true }) + cessazioneInfraAnnuale!: number | null; + + @Column('int', { name: 'numeroGiorniRimborso', nullable: true }) + numeroGiorniRimborso!: number | null; + + @Column('int', { name: 'rimborsoPersona', nullable: true }) + rimborsoPersona!: number | null; + + @Column('int', { name: 'rimborsoFax', nullable: true }) + rimborsoFax!: number | null; + + @Column('int', { name: 'rimborsoEmail', nullable: true }) + rimborsoEmail!: number | null; + + @Column('int', { name: 'rimborsoPosta', nullable: true }) + rimborsoPosta!: number | null; + + @Column('int', { name: 'rimborsoWeb', nullable: true }) + rimborsoWeb!: number | null; + + @Column('bigint', { name: 'utentecreazione', nullable: true }) + utentecreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('ntext', { name: 'noteContratto', nullable: true }) + noteContratto!: string | null; + + @Column('int', { name: 'versamentiTerzi', nullable: true }) + versamentiTerzi!: number | null; + + @Column('int', { name: 'ignoraControlloPagamenti', nullable: true }) + ignoraControlloPagamenti!: number | null; + + @Column('int', { name: 'anniRinnovo', nullable: true }) + anniRinnovo!: number | null; + + @Column('bigint', { name: 'codiceRivenditore', nullable: true }) + codiceRivenditore!: string | null; + + @Column('int', { + name: 'inizioDecorrenzaNuoveAdesioniNascita', + nullable: true, + }) + inizioDecorrenzaNuoveAdesioniNascita!: number | null; + + @Column('int', { name: 'numeroGiorniNascita', nullable: true }) + numeroGiorniNascita!: number | null; + + @Column('int', { name: 'mesiEsclusionePatologieAderenti', nullable: true }) + mesiEsclusionePatologieAderenti!: number | null; + + @Column('int', { name: 'mesiEsclusionePatologieFamiliari', nullable: true }) + mesiEsclusionePatologieFamiliari!: number | null; + + @Column('int', { name: 'coperturaPreesistenzeAderenti', nullable: true }) + coperturaPreesistenzeAderenti!: number | null; + + @Column('int', { name: 'coperturaPreesistenzeFamiliari', nullable: true }) + coperturaPreesistenzeFamiliari!: number | null; + + @Column('int', { name: 'adesioniFdaIndividuali', nullable: true }) + adesioniFdaIndividuali!: number | null; + + @Column('nvarchar', { + name: 'dataAssunzioneAderenti', + nullable: true, + length: 10, + }) + dataAssunzioneAderenti!: string | null; + + @Column('int', { name: 'associazioniIndividuali', nullable: true }) + associazioniIndividuali!: number | null; + + @Column('bigint', { name: 'categoria', nullable: true }) + categoria!: string | null; + + @Column('nvarchar', { name: 'email', nullable: true, length: 80 }) + email!: string | null; + + @Column('nvarchar', { name: 'fax', nullable: true, length: 80 }) + fax!: string | null; + + @Column('nvarchar', { name: 'telefono', nullable: true, length: 80 }) + telefono!: string | null; + + @Column('nvarchar', { name: 'sitoWeb', nullable: true, length: 80 }) + sitoWeb!: string | null; + + @Column('nvarchar', { name: 'riferimento', nullable: true, length: 80 }) + riferimento!: string | null; + + @Column('int', { name: 'comunicazioniFax', nullable: true }) + comunicazioniFax!: number | null; + + @Column('int', { name: 'comunicazioniEmail', nullable: true }) + comunicazioniEmail!: number | null; + + @Column('int', { name: 'comunicazioniSito', nullable: true }) + comunicazioniSito!: number | null; + + @Column('int', { name: 'comunicazioniPosta', nullable: true }) + comunicazioniPosta!: number | null; + + @Column('int', { name: 'gestionePreventiviWEB', nullable: true }) + gestionePreventiviWeb!: number | null; + + @Column('nvarchar', { + name: 'codiceDocumentoWEB', + nullable: true, + length: 80, + }) + codiceDocumentoWeb!: string | null; + + @Column('int', { name: 'numeroGiorniEffettuareRimborsi', nullable: true }) + numeroGiorniEffettuareRimborsi!: number | null; + + @Column('int', { name: 'numeroGiorniIntegrazioneDocumenti', nullable: true }) + numeroGiorniIntegrazioneDocumenti!: number | null; + + @Column('int', { name: 'gestioneIndividuali', nullable: true }) + gestioneIndividuali!: number | null; + + @Column('int', { name: 'fondoPluriaziendale', nullable: true }) + fondoPluriaziendale!: number | null; + + @Column('nvarchar', { name: 'emailCertificata', nullable: true, length: 80 }) + emailCertificata!: string | null; + + @Column('int', { name: 'comunicazioniEmailCertificata', nullable: true }) + comunicazioniEmailCertificata!: number | null; + + @Column('nvarchar', { + name: 'dataAssunzioneFamiliari', + nullable: true, + length: 10, + }) + dataAssunzioneFamiliari!: string | null; + + @Column('int', { + name: 'coperturaPreesistenzeAderentiNuoveAssunzioni', + nullable: true, + }) + coperturaPreesistenzeAderentiNuoveAssunzioni!: number | null; + + @Column('int', { + name: 'coperturaPreesistenzeFamiliariNuoveAssunzioni', + nullable: true, + }) + coperturaPreesistenzeFamiliariNuoveAssunzioni!: number | null; + + @Column('int', { name: 'noCessazioneAutomaticaFineAnno', nullable: true }) + noCessazioneAutomaticaFineAnno!: number | null; + + @Column('int', { name: 'contrattoRateSemestrali', nullable: true }) + contrattoRateSemestrali!: number | null; + + @Column('decimal', { + name: 'moraRitardoPagamenti', + nullable: true, + precision: 18, + scale: 2, + }) + moraRitardoPagamenti!: number | null; + + @Column('decimal', { + name: 'quotaRichiestaFondo', + nullable: true, + precision: 18, + scale: 2, + }) + quotaRichiestaFondo!: number | null; + + @Column('int', { name: 'percQuotaRichiestaFondo', nullable: true }) + percQuotaRichiestaFondo!: number | null; + + @Column('int', { name: 'scontoIndividuali', nullable: true }) + scontoIndividuali!: number | null; + + @Column('int', { + name: 'modalitaCalcoloDatiContributiviIndividuali', + nullable: true, + }) + modalitaCalcoloDatiContributiviIndividuali!: number | null; + + @Column('bigint', { name: 'codiceFiguraContratto', nullable: true }) + codiceFiguraContratto!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloTesserini', + nullable: true, + length: 255, + }) + nomeModelloTesserini!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLettera', + nullable: true, + length: 255, + }) + nomeModelloLettera!: string | null; + + @Column('int', { name: 'ignoraControlloPagamentiTitolare', nullable: true }) + ignoraControlloPagamentiTitolare!: number | null; + + @Column('int', { name: 'ignoraControlloPagamentiAzienda', nullable: true }) + ignoraControlloPagamentiAzienda!: number | null; + + @Column('bigint', { name: 'codicePromoter', nullable: true }) + codicePromoter!: string | null; + + @Column('bigint', { name: 'codiceOriginePromoter', nullable: true }) + codiceOriginePromoter!: string | null; + + @Column('int', { name: 'fornituraTesserino', nullable: true }) + fornituraTesserino!: number | null; + + @Column('nvarchar', { + name: 'dataChiusuraContratto', + nullable: true, + length: 10, + }) + dataChiusuraContratto!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraRID', + nullable: true, + length: 255, + }) + nomeModelloLetteraRid!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraAdesione', + nullable: true, + length: 255, + }) + nomeModelloLetteraAdesione!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraAdeguamenti', + nullable: true, + length: 255, + }) + nomeModelloLetteraAdeguamenti!: string | null; + + @Column('int', { name: 'coopersalute', nullable: true }) + coopersalute!: number | null; + + @Column('int', { name: 'forzaEstensioneTolleranza', nullable: true }) + forzaEstensioneTolleranza!: number | null; + + @Column('int', { name: 'giorniEstensioneTolleranza', nullable: true }) + giorniEstensioneTolleranza!: number | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraSollecito', + nullable: true, + length: 255, + }) + nomeModelloLetteraSollecito!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraSollecito2', + nullable: true, + length: 255, + }) + nomeModelloLetteraSollecito2!: string | null; + + @Column('nvarchar', { + name: 'nomeModelloLetteraNeonato', + nullable: true, + length: 255, + }) + nomeModelloLetteraNeonato!: string | null; + + @Column('int', { name: 'comunicazioniViaEmail', nullable: true }) + comunicazioniViaEmail!: number | null; + + @Column('int', { + name: 'modalitaCalcoloQuotaAssociativaFondo', + default: () => '(0)', + }) + modalitaCalcoloQuotaAssociativaFondo!: number; + + @Column('int', { + name: 'modalitaCalcoloQuotaAssociativaNumeroFondo', + default: () => '(0)', + }) + modalitaCalcoloQuotaAssociativaNumeroFondo!: number; + + @Column('int', { name: 'quotaAssociativaFondo', default: () => '(0)' }) + quotaAssociativaFondo!: number; + + @Column('int', { name: 'tipoAnamnesi', default: () => '(1)' }) + tipoAnamnesi!: number; + + @Column('int', { name: 'primoCheck', default: () => '(1)' }) + primoCheck!: number; + + @Column('int', { name: 'secondoCheck', default: () => '(1)' }) + secondoCheck!: number; + + @Column('ntext', { name: 'testoPrimoCheck', default: () => "''" }) + testoPrimoCheck!: string; + + @Column('ntext', { name: 'testoSecondoCheck', default: () => "''" }) + testoSecondoCheck!: string; + + @Column('int', { name: 'calcolaQuotaWEB', default: () => '(1)' }) + calcolaQuotaWeb!: number; + + @Column('int', { name: 'verificaEsistenzaOnline', default: () => '(1)' }) + verificaEsistenzaOnline!: number; + + @Column('int', { name: 'titolareGiaAssociato', default: () => '(1)' }) + titolareGiaAssociato!: number; + + @Column('ntext', { + name: 'intestazionePrimaPaginaAdesione', + default: () => "''", + }) + intestazionePrimaPaginaAdesione!: string; + + @Column('ntext', { + name: 'intestazioneUltimaPaginaAdesione', + default: () => "''", + }) + intestazioneUltimaPaginaAdesione!: string; + + @Column('int', { name: 'importaComeAssociati', default: () => '(1)' }) + importaComeAssociati!: number; + + @Column('int', { name: 'importazioneAutomatica', default: () => '(1)' }) + importazioneAutomatica!: number; + + @Column('int', { name: 'stampaModuloAdesione', default: () => '(1)' }) + stampaModuloAdesione!: number; + + @Column('int', { name: 'terzoCheck', default: () => '(1)' }) + terzoCheck!: number; + + @Column('ntext', { name: 'testoTerzoCheck', default: () => "''" }) + testoTerzoCheck!: string; + + @Column('ntext', { name: 'testoEmailPreventivo', default: () => "''" }) + testoEmailPreventivo!: string; + + @Column('ntext', { name: 'testoEmailAdesione', default: () => "''" }) + testoEmailAdesione!: string; + + @Column('ntext', { name: 'oggettoEmailPreventivo', default: () => "''" }) + oggettoEmailPreventivo!: string; + + @Column('ntext', { name: 'oggettoEmailAdesione', default: () => "''" }) + oggettoEmailAdesione!: string; + + @Column('nvarchar', { + name: 'nomeModelloLetteraStampaAdesione', + length: 255, + default: () => "''", + }) + nomeModelloLetteraStampaAdesione!: string; + + @Column('ntext', { + name: 'oggettoSecondaNotificaScadenzaPreventivo', + default: () => "''", + }) + oggettoSecondaNotificaScadenzaPreventivo!: string; + + @Column('ntext', { + name: 'oggettoPrimaNotificaScadenzaPreventivo', + default: () => "''", + }) + oggettoPrimaNotificaScadenzaPreventivo!: string; + + @Column('ntext', { + name: 'testoSecondaNotificaScadenzaPreventivo', + default: () => "''", + }) + testoSecondaNotificaScadenzaPreventivo!: string; + + @Column('ntext', { + name: 'testoPrimaNotificaScadenzaPreventivo', + default: () => "''", + }) + testoPrimaNotificaScadenzaPreventivo!: string; + + @Column('bigint', { name: 'codiceBancaContributi', default: () => '(0)' }) + codiceBancaContributi!: string; + + @Column('bigint', { name: 'codiceBancaRimborsi', default: () => '(0)' }) + codiceBancaRimborsi!: string; + + @Column('ntext', { + name: 'testataCertificazione', + nullable: true, + default: () => "''", + }) + testataCertificazione!: string | null; + + @Column('ntext', { name: 'codaCertificazione', default: () => "''" }) + codaCertificazione!: string; + + @Column('ntext', { name: 'testataRiepilogoRimborsi', default: () => "''" }) + testataRiepilogoRimborsi!: string; + + @Column('int', { name: 'adesioneInfraAnnuale', default: () => '(0)' }) + adesioneInfraAnnuale!: number; + + @ManyToOne(() => EnteEntity, (enteEntity) => enteEntity.contratti) + @JoinColumn([{ name: 'codiceEnte', referencedColumnName: 'codiceEnte' }]) + ente!: EnteEntity; + + @OneToMany(() => SocioContrattoEntity, (socioContrattoEntity) => socioContrattoEntity.contratto) + socioContratto!: SocioContrattoEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/ente.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/ente.entity.ts new file mode 100644 index 0000000..611f8cf --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/ente.entity.ts @@ -0,0 +1,87 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; +import { ContrattoEntity } from './contratto.entity'; +import { GruppoEntity } from './gruppo.entity'; + +@Index('PK_ent', ['codiceEnte'], { unique: true }) +@Entity('ente') +export class EnteEntity { + @Column('bigint', { primary: true, name: 'codiceEnte' }) + codiceEnte!: string; + + @Column('nvarchar', { name: 'ragioneSociale', nullable: true, length: 255 }) + ragioneSociale!: string | null; + + @Column('nvarchar', { name: 'partitaIva', nullable: true, length: 25 }) + partitaIva!: string | null; + + @Column('nvarchar', { name: 'codiceFiscale', nullable: true, length: 25 }) + codiceFiscale!: string | null; + + @Column('ntext', { name: 'noteEnte', nullable: true }) + noteEnte!: string | null; + + @Column('nvarchar', { + name: 'codiceDivisioneEsolver', + nullable: true, + length: 25, + }) + codiceDivisioneEsolver!: string | null; + + @Column('int', { name: 'enteAttivo', nullable: true }) + enteAttivo!: number | null; + + @Column('nvarchar', { name: 'indirizzoEnte', nullable: true, length: 80 }) + indirizzoEnte!: string | null; + + @Column('nvarchar', { name: 'numeroCivicoEnte', nullable: true, length: 80 }) + numeroCivicoEnte!: string | null; + + @Column('nvarchar', { name: 'capEnte', nullable: true, length: 10 }) + capEnte!: string | null; + + @Column('nvarchar', { name: 'localitaEnte', nullable: true, length: 80 }) + localitaEnte!: string | null; + + @Column('bigint', { name: 'utenteCreazione', nullable: true }) + utenteCreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('bigint', { name: 'codiceGruppo', nullable: true }) + codiceGruppo!: string | null; + + @Column('bigint', { name: 'statoEnte', nullable: true }) + statoEnte!: string | null; + + @Column('bigint', { name: 'provinciaEnte', nullable: true }) + provinciaEnte!: string | null; + + @Column('int', { name: 'inOsservazione', nullable: true }) + inOsservazione!: number | null; + + @Column('nvarchar', { name: 'sitoInternet', nullable: true, length: 255 }) + sitoInternet!: string | null; + + @ManyToOne(() => GruppoEntity, (gruppoEntity) => gruppoEntity.enti) + gruppo!: ContrattoEntity; + + @OneToMany(() => ContrattoEntity, (contrattoEntity) => contrattoEntity.ente) + contratti!: ContrattoEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/formeAssistenza.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/formeAssistenza.entity.ts new file mode 100644 index 0000000..0901c97 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/formeAssistenza.entity.ts @@ -0,0 +1,158 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; +import { SocioFormeAssistenzaEntity } from './socioFormeAssistenza.entity'; + +@Index('PK_formeAssistenza', ['codiceFda'], { unique: true }) +@Entity('formeAssistenza') +export class FormeAssistenzaEntity { + @Column('bigint', { name: 'codiceGruppo' }) + codiceGruppo!: string; + + @Column('bigint', { primary: true, name: 'codiceFda' }) + codiceFda!: string; + + @Column('nvarchar', { name: 'descrizioneFda', nullable: true, length: 80 }) + descrizioneFda!: string | null; + + @Column('int', { name: 'attivaFda', nullable: true }) + attivaFda!: number | null; + + @Column('int', { name: 'fornituraTesserino', nullable: true }) + fornituraTesserino!: number | null; + + @Column('ntext', { name: 'noteFda', nullable: true }) + noteFda!: string | null; + + @Column('bigint', { name: 'utenteCreazione', nullable: true }) + utenteCreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('int', { name: 'attivaDiretta', nullable: true }) + attivaDiretta!: number | null; + + @Column('int', { name: 'attivaIndiretta', nullable: true }) + attivaIndiretta!: number | null; + + @Column('int', { name: 'anniAdesione', nullable: true }) + anniAdesione!: number | null; + + @Column('int', { name: 'gestionePreventivo', nullable: true }) + gestionePreventivo!: number | null; + + @Column('int', { name: 'interoNucleoFamiliare', nullable: true }) + interoNucleoFamiliare!: number | null; + + @Column('int', { name: 'escludeDocRimborsi', nullable: true }) + escludeDocRimborsi!: number | null; + + @Column('int', { name: 'struttureDirettaIncluse', nullable: true }) + struttureDirettaIncluse!: number | null; + + @Column('int', { name: 'struttureIndirettaIncluse', nullable: true }) + struttureIndirettaIncluse!: number | null; + + @Column('int', { name: 'categorieDirettaIncluse', nullable: true }) + categorieDirettaIncluse!: number | null; + + @Column('int', { name: 'categorieIndirettaIncluse', nullable: true }) + categorieIndirettaIncluse!: number | null; + + @Column('nvarchar', { + name: 'descrizioneTesserino', + nullable: true, + length: 80, + }) + descrizioneTesserino!: string | null; + + @Column('bigint', { name: 'codiceFdaOrigine', nullable: true }) + codiceFdaOrigine!: string | null; + + @Column('nvarchar', { + name: 'dataInizioValidita', + nullable: true, + length: 10, + }) + dataInizioValidita!: string | null; + + @Column('nvarchar', { name: 'dataFineValidita', nullable: true, length: 10 }) + dataFineValidita!: string | null; + + @Column('int', { name: 'limiteMassimoAssistenza', nullable: true }) + limiteMassimoAssistenza!: number | null; + + @Column('int', { name: 'limiteMinimoAssistenza', nullable: true }) + limiteMinimoAssistenza!: number | null; + + @Column('int', { name: 'limiteEtaAderentiDa', nullable: true }) + limiteEtaAderentiDa!: number | null; + + @Column('int', { name: 'limiteEtaFamiliariDa', nullable: true }) + limiteEtaFamiliariDa!: number | null; + + @Column('int', { name: 'limiteEtaAderentiA', nullable: true }) + limiteEtaAderentiA!: number | null; + + @Column('int', { name: 'limiteEtaFamiliariA', nullable: true }) + limiteEtaFamiliariA!: number | null; + + @Column('nvarchar', { + name: 'descrizioneLettera', + nullable: true, + length: 80, + }) + descrizioneLettera!: string | null; + + @Column('int', { name: 'fdaOpzionale', nullable: true }) + fdaOpzionale!: number | null; + + @Column('int', { name: 'giorniCarenzaTesserino', nullable: true }) + giorniCarenzaTesserino!: number | null; + + @Column('ntext', { name: 'informazioni', nullable: true }) + informazioni!: string | null; + + @Column('nvarchar', { + name: 'denominazioneRegolamento', + nullable: true, + length: 1024, + default: () => "''", + }) + denominazioneRegolamento!: string | null; + + @Column('nvarchar', { + name: 'dataMassimaAdesione', + nullable: true, + length: 10, + default: () => "'9998-12-31'", + }) + dataMassimaAdesione!: string | null; + + @Column('int', { name: 'prioritaWeb', default: () => '(0)' }) + prioritaWeb!: number; + + @Column('int', { name: 'attivaDirettaAreaRiservata', default: () => '(0)' }) + attivaDirettaAreaRiservata!: number; + + @OneToMany( + () => SocioFormeAssistenzaEntity, + (socioFormeAssistenzaEntity) => socioFormeAssistenzaEntity.formaAssistenza, + ) + socioFormeAssistenza!: SocioFormeAssistenzaEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/gruppo.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/gruppo.entity.ts new file mode 100644 index 0000000..5e7f098 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/gruppo.entity.ts @@ -0,0 +1,658 @@ +import { Column, Entity, Index, OneToMany } from 'typeorm'; +import { EnteEntity } from './ente.entity'; + +@Index('PK_gruppo', ['codiceGruppo'], { unique: true }) +@Entity('gruppo') +export class GruppoEntity { + @Column('bigint', { primary: true, name: 'codiceGruppo' }) + codiceGruppo!: string; + + @Column('nvarchar', { name: 'gruppo', nullable: true, length: 80 }) + gruppo!: string | null; + + @Column('nvarchar', { + name: 'descrizioneGruppo', + nullable: true, + length: 255, + }) + descrizioneGruppo!: string | null; + + @Column('ntext', { name: 'noteGruppo', nullable: true }) + noteGruppo!: string | null; + + @Column('nvarchar', { name: 'referenteGruppo', nullable: true, length: 80 }) + referenteGruppo!: string | null; + + @Column('nvarchar', { name: 'telefonoReferente', nullable: true, length: 80 }) + telefonoReferente!: string | null; + + @Column('nvarchar', { + name: 'cellulareReferente', + nullable: true, + length: 80, + }) + cellulareReferente!: string | null; + + @Column('nvarchar', { name: 'emailReferente', nullable: true, length: 80 }) + emailReferente!: string | null; + + @Column('nvarchar', { name: 'indirizzoGruppo', nullable: true, length: 80 }) + indirizzoGruppo!: string | null; + + @Column('nvarchar', { + name: 'numeroCivicoGruppo', + nullable: true, + length: 80, + }) + numeroCivicoGruppo!: string | null; + + @Column('nvarchar', { name: 'capGruppo', nullable: true, length: 10 }) + capGruppo!: string | null; + + @Column('nvarchar', { name: 'localitaGruppo', nullable: true, length: 80 }) + localitaGruppo!: string | null; + + @Column('nvarchar', { name: 'telefono1Gruppo', nullable: true, length: 80 }) + telefono1Gruppo!: string | null; + + @Column('nvarchar', { name: 'telefono2Gruppo', nullable: true, length: 80 }) + telefono2Gruppo!: string | null; + + @Column('nvarchar', { name: 'faxGruppo', nullable: true, length: 80 }) + faxGruppo!: string | null; + + @Column('nvarchar', { name: 'emailGruppo', nullable: true, length: 80 }) + emailGruppo!: string | null; + + @Column('nvarchar', { name: 'sitoWebGruppo', nullable: true, length: 80 }) + sitoWebGruppo!: string | null; + + @Column('int', { name: 'gruppoAttivo', nullable: true }) + gruppoAttivo!: number | null; + + @Column('int', { name: 'esolverAttivo', nullable: true }) + esolverAttivo!: number | null; + + @Column('nvarchar', { name: 'serverEsolver', nullable: true, length: 80 }) + serverEsolver!: string | null; + + @Column('nvarchar', { name: 'databaseEsolver', nullable: true, length: 80 }) + databaseEsolver!: string | null; + + @Column('nvarchar', { name: 'usernameEsolver', nullable: true, length: 80 }) + usernameEsolver!: string | null; + + @Column('nvarchar', { name: 'passwordEsolver', nullable: true, length: 80 }) + passwordEsolver!: string | null; + + @Column('nvarchar', { name: 'gruppoEsolver', nullable: true, length: 80 }) + gruppoEsolver!: string | null; + + @Column('image', { name: 'logoGruppo', nullable: true }) + logoGruppo!: Buffer | null; + + @Column('bigint', { name: 'utenteCreazione', nullable: true }) + utenteCreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('nvarchar', { name: 'direttivaReport', nullable: true, length: 512 }) + direttivaReport!: string | null; + + @Column('nvarchar', { + name: 'direttivaReportPers', + nullable: true, + length: 512, + }) + direttivaReportPers!: string | null; + + @Column('bigint', { name: 'statoGruppo', nullable: true }) + statoGruppo!: string | null; + + @Column('bigint', { name: 'provinciaGruppo', nullable: true }) + provinciaGruppo!: string | null; + + @Column('int', { name: 'fondo', nullable: true }) + fondo!: number | null; + + @Column('decimal', { + name: 'tassaIscrizione', + nullable: true, + precision: 18, + scale: 2, + }) + tassaIscrizione!: number | null; + + @Column('nvarchar', { name: 'codiceFiscale', nullable: true, length: 80 }) + codiceFiscale!: string | null; + + @Column('nvarchar', { name: 'serverFTP', nullable: true, length: 200 }) + serverFtp!: string | null; + + @Column('nvarchar', { name: 'usernameFTP', nullable: true, length: 200 }) + usernameFtp!: string | null; + + @Column('nvarchar', { name: 'passwordFTP', nullable: true, length: 200 }) + passwordFtp!: string | null; + + @Column('decimal', { + name: 'massimalePresaCarico', + nullable: true, + precision: 18, + scale: 2, + }) + massimalePresaCarico!: number | null; + + @Column('nvarchar', { name: 'elencoLivello1', nullable: true, length: 80 }) + elencoLivello1!: string | null; + + @Column('ntext', { name: 'testoEmailPreventivo', nullable: true }) + testoEmailPreventivo!: string | null; + + @Column('nvarchar', { + name: 'emailPreventivoMittente', + nullable: true, + length: 80, + }) + emailPreventivoMittente!: string | null; + + @Column('nvarchar', { + name: 'emailPreventivoNotifica', + nullable: true, + length: 80, + }) + emailPreventivoNotifica!: string | null; + + @Column('nvarchar', { + name: 'desPreventivoMittente', + nullable: true, + length: 80, + }) + desPreventivoMittente!: string | null; + + @Column('nvarchar', { + name: 'desPreventivoNotifica', + nullable: true, + length: 80, + }) + desPreventivoNotifica!: string | null; + + @Column('bigint', { name: 'codiceContrattoIndividuali', nullable: true }) + codiceContrattoIndividuali!: string | null; + + @Column('nvarchar', { + name: 'codiceAziendaBollettini', + nullable: true, + length: 80, + }) + codiceAziendaBollettini!: string | null; + + @Column('nvarchar', { name: 'rigaTesserino1', nullable: true, length: 80 }) + rigaTesserino1!: string | null; + + @Column('nvarchar', { name: 'rigaTesserino2', nullable: true, length: 80 }) + rigaTesserino2!: string | null; + + @Column('nvarchar', { name: 'rigaTesserino3', nullable: true, length: 80 }) + rigaTesserino3!: string | null; + + @Column('nvarchar', { + name: 'cartellaCondivisa', + nullable: true, + length: 512, + }) + cartellaCondivisa!: string | null; + + @Column('nvarchar', { name: 'serverSMTP', nullable: true, length: 80 }) + serverSmtp!: string | null; + + @Column('nvarchar', { name: 'usernameSMTP', nullable: true, length: 80 }) + usernameSmtp!: string | null; + + @Column('nvarchar', { name: 'passwordSMTP', nullable: true, length: 80 }) + passwordSmtp!: string | null; + + @Column('nvarchar', { name: 'emailIBAN', nullable: true, length: 255 }) + emailIban!: string | null; + + @Column('nvarchar', { name: 'emailFatture', nullable: true, length: 255 }) + emailFatture!: string | null; + + @Column('nvarchar', { name: 'emailRA', nullable: true, length: 255 }) + emailRa!: string | null; + + @Column('nvarchar', { + name: 'emailAreaRiservataSoci', + nullable: true, + length: 80, + default: () => "''", + }) + emailAreaRiservataSoci!: string | null; + + @Column('nvarchar', { + name: 'desAreaRiservataSoci', + nullable: true, + length: 80, + default: () => "''", + }) + desAreaRiservataSoci!: string | null; + + @Column('nvarchar', { + name: 'usernameSMS', + nullable: true, + length: 255, + default: () => "''", + }) + usernameSms!: string | null; + + @Column('nvarchar', { + name: 'passwordSMS', + nullable: true, + length: 255, + default: () => "''", + }) + passwordSms!: string | null; + + @Column('nvarchar', { + name: 'mittenteSMS', + nullable: true, + length: 255, + default: () => "''", + }) + mittenteSms!: string | null; + + @Column('nvarchar', { name: 'sitoWebDati', length: 255, default: () => "''" }) + sitoWebDati!: string; + + @Column('nvarchar', { + name: 'identificativoCreditore', + length: 35, + default: () => "''", + }) + identificativoCreditore!: string; + + @Column('nvarchar', { + name: 'SMSProtocollo', + nullable: true, + length: 200, + default: () => "''", + }) + smsProtocollo!: string | null; + + @Column('nvarchar', { + name: 'oggettoEmailBonifico', + nullable: true, + length: 200, + default: () => "''", + }) + oggettoEmailBonifico!: string | null; + + @Column('ntext', { + name: 'emailBonifico', + nullable: true, + default: () => "''", + }) + emailBonifico!: string | null; + + @Column('ntext', { + name: 'emailAssegno', + nullable: true, + default: () => "''", + }) + emailAssegno!: string | null; + + @Column('nvarchar', { + name: 'oggettoEmailAssegno', + nullable: true, + length: 200, + default: () => "''", + }) + oggettoEmailAssegno!: string | null; + + @Column('nvarchar', { + name: 'SMSRimborsoBonifico', + nullable: true, + length: 200, + default: () => "''", + }) + smsRimborsoBonifico!: string | null; + + @Column('nvarchar', { + name: 'SMSRimborsoAssegno', + nullable: true, + length: 200, + default: () => "''", + }) + smsRimborsoAssegno!: string | null; + + @Column('nvarchar', { name: 'emailPIC', nullable: true, length: 255 }) + emailPic!: string | null; + + @Column('nvarchar', { name: 'stelline', length: 10, default: () => "''" }) + stelline!: string; + + @Column('nvarchar', { name: 'mittentePIC', length: 400, default: () => "''" }) + mittentePic!: string; + + @Column('ntext', { name: 'oggettoPIC', default: () => "''" }) + oggettoPic!: string; + + @Column('ntext', { name: 'messaggioPIC', default: () => "''" }) + messaggioPic!: string; + + @Column('nvarchar', { + name: 'nomeSupportoContrattoPosta', + nullable: true, + length: 80, + default: () => "''", + }) + nomeSupportoContrattoPosta!: string | null; + + @Column('nvarchar', { + name: 'codiceContrattoPosta', + nullable: true, + length: 80, + default: () => "''", + }) + codiceContrattoPosta!: string | null; + + @Column('nvarchar', { + name: 'passwordContrattoPosta', + nullable: true, + length: 80, + default: () => "''", + }) + passwordContrattoPosta!: string | null; + + @Column('bigint', { + name: 'codiceSpedizione', + nullable: true, + default: () => '(0)', + }) + codiceSpedizione!: string | null; + + @Column('nvarchar', { + name: 'oggettoEmailBonificoDomiciliato', + nullable: true, + length: 200, + default: () => "''", + }) + oggettoEmailBonificoDomiciliato!: string | null; + + @Column('ntext', { + name: 'emailBonificoDomiciliato', + nullable: true, + default: () => "''", + }) + emailBonificoDomiciliato!: string | null; + + @Column('nvarchar', { + name: 'SMSRimborsoBonificoDomiciliato', + nullable: true, + length: 200, + default: () => "''", + }) + smsRimborsoBonificoDomiciliato!: string | null; + + @Column('int', { name: 'notifichePush', default: () => '(0)' }) + notifichePush!: number; + + @Column('int', { name: 'controlloCodiceFiscale', default: () => '(-1)' }) + controlloCodiceFiscale!: number; + + @Column('ntext', { name: 'emailSuperamentoPIC', default: () => "''" }) + emailSuperamentoPic!: string; + + @Column('nvarchar', { + name: 'SMSProtocolloNotificaEsplicita', + length: 200, + default: () => "''", + }) + smsProtocolloNotificaEsplicita!: string; + + @Column('nvarchar', { + name: 'mittenteSportello', + length: 200, + default: () => "''", + }) + mittenteSportello!: string; + + @Column('nvarchar', { + name: 'oggettoEmailBonificoDomiciliatoSportello', + length: 200, + default: () => "''", + }) + oggettoEmailBonificoDomiciliatoSportello!: string; + + @Column('ntext', { + name: 'emailBonificoDomiciliatoSportello', + default: () => "''", + }) + emailBonificoDomiciliatoSportello!: string; + + @Column('nvarchar', { + name: 'oggettoEmailBonificoSportello', + length: 200, + default: () => "''", + }) + oggettoEmailBonificoSportello!: string; + + @Column('ntext', { name: 'emailBonificoSportello', default: () => "''" }) + emailBonificoSportello!: string; + + @Column('nvarchar', { + name: 'oggettoEmailSospensioneSportello', + length: 200, + default: () => "''", + }) + oggettoEmailSospensioneSportello!: string; + + @Column('ntext', { name: 'emailSospensioneSportello', default: () => "''" }) + emailSospensioneSportello!: string; + + @Column('nvarchar', { + name: 'oggettoEmailRespingimentoSportello', + length: 200, + default: () => "''", + }) + oggettoEmailRespingimentoSportello!: string; + + @Column('ntext', { name: 'emailRespingimentoSportello', default: () => "''" }) + emailRespingimentoSportello!: string; + + @Column('nvarchar', { + name: 'oggettoEmailSospensione', + length: 200, + default: () => "''", + }) + oggettoEmailSospensione!: string; + + @Column('ntext', { name: 'emailSospensione', default: () => "''" }) + emailSospensione!: string; + + @Column('nvarchar', { + name: 'oggettoEmailRespingimento', + length: 200, + default: () => "''", + }) + oggettoEmailRespingimento!: string; + + @Column('ntext', { name: 'emailRespingimento', default: () => "''" }) + emailRespingimento!: string; + + @Column('nvarchar', { + name: 'mittentePICdisdetta', + nullable: true, + length: 400, + }) + mittentePiCdisdetta!: string | null; + + @Column('ntext', { name: 'oggettoPICdisdetta', nullable: true }) + oggettoPiCdisdetta!: string | null; + + @Column('ntext', { name: 'messaggioPICdisdetta', nullable: true }) + messaggioPiCdisdetta!: string | null; + + @Column('int', { name: 'modalitaMassimaleBonifico', default: () => '(0)' }) + modalitaMassimaleBonifico!: number; + + @Column('nvarchar', { name: 'portaSMTP', length: 10, default: () => "''" }) + portaSmtp!: string; + + @Column('int', { name: 'useSSL', default: () => '(0)' }) + useSsl!: number; + + @Column('nvarchar', { + name: 'serverSMTPSpot', + length: 200, + default: () => "''", + }) + serverSmtpSpot!: string; + + @Column('nvarchar', { + name: 'usernameSMTPSpot', + length: 200, + default: () => "''", + }) + usernameSmtpSpot!: string; + + @Column('nvarchar', { + name: 'passwordSMTPSpot', + length: 200, + default: () => "''", + }) + passwordSmtpSpot!: string; + + @Column('nvarchar', { + name: 'portaSMTPSpot', + length: 10, + default: () => "''", + }) + portaSmtpSpot!: string; + + @Column('int', { name: 'useSSLSpot', default: () => '(0)' }) + useSslSpot!: number; + + @Column('nvarchar', { + name: 'cartellaPubblicazioneLocale', + length: 512, + default: () => "''", + }) + cartellaPubblicazioneLocale!: string; + + @Column('int', { name: 'portaFTP', default: () => '(0)' }) + portaFtp!: number; + + @Column('nvarchar', { + name: 'cartellaAllegatiFTP', + length: 200, + default: () => "''", + }) + cartellaAllegatiFtp!: string; + + @Column('nvarchar', { + name: 'mittentiEmailNotificaEmissioneRimborsoSocio', + nullable: true, + length: 80, + }) + mittentiEmailNotificaEmissioneRimborsoSocio!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailInvioAllegatiPraticaSocio', + nullable: true, + length: 80, + }) + mittentiEmailInvioAllegatiPraticaSocio!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailRichiestaDatiBancariSocio', + nullable: true, + length: 80, + }) + mittentiEmailRichiestaDatiBancariSocio!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailLettereRichiestaContributiRinnoviIndividuali', + nullable: true, + length: 80, + }) + mittentiEmailLettereRichiestaContributiRinnoviIndividuali!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailLettereSoci', + nullable: true, + length: 80, + }) + mittentiEmailLettereSoci!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailLettereStrutture', + nullable: true, + length: 80, + }) + mittentiEmailLettereStrutture!: string | null; + + @Column('nvarchar', { + name: 'mittentiEmailLettereContratti', + nullable: true, + length: 80, + }) + mittentiEmailLettereContratti!: string | null; + + @Column('nvarchar', { + name: 'emailNotificaCodiciFiscaliDoppiMittente', + nullable: true, + length: 80, + }) + emailNotificaCodiciFiscaliDoppiMittente!: string | null; + + @Column('nvarchar', { + name: 'emailNotificaCodiciFiscaliDoppiDestinatari', + nullable: true, + length: 80, + }) + emailNotificaCodiciFiscaliDoppiDestinatari!: string | null; + + @Column('nvarchar', { + name: 'emailNotificaCodiciFiscaliDoppiCc', + nullable: true, + length: 200, + }) + emailNotificaCodiciFiscaliDoppiCc!: string | null; + + @Column('nvarchar', { + name: 'oggettoEmailRichiestaDatiBancari', + length: 200, + default: () => "''", + }) + oggettoEmailRichiestaDatiBancari!: string; + + @Column('ntext', { name: 'emailRichiestaDatiBancari', default: () => "''" }) + emailRichiestaDatiBancari!: string; + + @Column('int', { + name: 'flagAllegaModuloIbanEmailRichiestaDatiBancari', + nullable: true, + }) + flagAllegaModuloIbanEmailRichiestaDatiBancari!: number | null; + + @OneToMany(() => EnteEntity, (enteEntity) => enteEntity.gruppo) + enti!: EnteEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/index.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/index.ts new file mode 100644 index 0000000..9cc8781 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/index.ts @@ -0,0 +1,13 @@ +export * from './API_CAP_Luoghi.entity'; +export * from './API_Luoghi.entity'; +export * from './API_Luoghi_Estero.entity'; +export * from './allegati.entity'; +export * from './contratto.entity'; +export * from './ente.entity'; +export * from './formeAssistenza.entity'; +export * from './gruppo.entity'; +export * from './missioni.entity'; +export * from './socio.entity'; +export * from './socioContratto.entity'; +export * from './socioFormeAssistenza.entity'; +export * from './sportelli.entity'; diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/missioni.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/missioni.entity.ts new file mode 100644 index 0000000..65f0a31 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/missioni.entity.ts @@ -0,0 +1,53 @@ +import { Column, Entity, Index } from 'typeorm'; + +@Index( + 'PK_Missioni_Data', + [ + 'codiceFiscale', + 'tipoDocumento', + 'idMissione', + 'idLettera', + 'idPratica', + 'idAgenzia', + 'dataInizio', + 'dataFine', + 'tipoContratto', + ], + { unique: true }, +) +@Entity('missioni') +export class MissioniEntity { + @Column('nvarchar', { primary: true, name: 'codiceFiscale', length: 20 }) + codiceFiscale!: string; + + @Column('bigint', { primary: true, name: 'tipoDocumento' }) + tipoDocumento!: string; + + @Column('bigint', { primary: true, name: 'idMissione' }) + idMissione!: string; + + @Column('bigint', { primary: true, name: 'idLettera' }) + idLettera!: string; + + @Column('bigint', { primary: true, name: 'idPratica' }) + idPratica!: string; + + @Column('bigint', { primary: true, name: 'idAgenzia' }) + idAgenzia!: string; + + @Column('nvarchar', { primary: true, name: 'dataInizio', length: 10 }) + dataInizio!: string; + + @Column('nvarchar', { primary: true, name: 'dataFine', length: 10 }) + dataFine!: string; + + @Column('nvarchar', { primary: true, name: 'tipoContratto', length: 20 }) + tipoContratto!: string; + + @Column('bigint', { name: 'progressivoRecord', default: () => '(0)' }) + progressivoRecord!: string; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socio.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socio.entity.ts new file mode 100644 index 0000000..aed0c29 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socio.entity.ts @@ -0,0 +1,651 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; +import { ApiLuoghiEntity } from './API_Luoghi.entity'; +import { GruppoEntity } from './gruppo.entity'; +import { SocioContrattoEntity } from './socioContratto.entity'; +import { SocioFormeAssistenzaEntity } from './socioFormeAssistenza.entity'; + +@Index('PK_socio', ['codiceSocio'], { unique: true }) +@Entity('socio') +export class SocioEntity { + @Column('bigint', { name: 'codiceGruppo', nullable: true }) + codiceGruppo!: string | null; + + @Column('bigint', { primary: true, name: 'codiceSocio' }) + codiceSocio!: string; + + @Column('bigint', { name: 'matricolaSocio', nullable: true }) + matricolaSocio!: string | null; + + @Column('nvarchar', { name: 'cognome', nullable: true, length: 80 }) + cognome!: string | null; + + @Column('nvarchar', { name: 'nome', nullable: true, length: 80 }) + nome!: string | null; + + @Column('nvarchar', { name: 'dataNascita', nullable: true, length: 10 }) + dataNascita!: string | null; + + @Column('nvarchar', { name: 'codiceFiscale', nullable: true, length: 20 }) + codiceFiscale!: string | null; + + @Column('bigint', { name: 'codiceContrattoOld', nullable: true }) + codiceContrattoOld!: string | null; + + @Column('bigint', { name: 'socio.codiceFiguraContrattoOld', nullable: true }) + socioCodiceFiguraContrattoOld!: string | null; + + @Column('bigint', { name: 'codiceRivenditore', nullable: true }) + codiceRivenditore!: string | null; + + @Column('bigint', { name: 'utenteCreazione', nullable: true }) + utenteCreazione!: string | null; + + @Column('nvarchar', { name: 'dataCreazione', nullable: true, length: 10 }) + dataCreazione!: string | null; + + @Column('nvarchar', { name: 'oraCreazione', nullable: true, length: 8 }) + oraCreazione!: string | null; + + @Column('bigint', { name: 'utenteModifica', nullable: true }) + utenteModifica!: string | null; + + @Column('nvarchar', { name: 'dataModifica', nullable: true, length: 10 }) + dataModifica!: string | null; + + @Column('nvarchar', { name: 'oraModifica', nullable: true, length: 8 }) + oraModifica!: string | null; + + @Column('nvarchar', { + name: 'residenzaIndirizzo', + nullable: true, + length: 80, + }) + residenzaIndirizzo!: string | null; + + @Column('nvarchar', { + name: 'residenzaNumeroCivico', + nullable: true, + length: 80, + }) + residenzaNumeroCivico!: string | null; + + @Column('nvarchar', { name: 'residenzaLocalita', nullable: true, length: 80 }) + residenzaLocalita!: string | null; + + @Column('nvarchar', { name: 'residenzaCAP', nullable: true, length: 10 }) + residenzaCap!: string | null; + + @Column('bigint', { name: 'residenzaProvincia', nullable: true }) + residenzaProvincia!: string | null; + + @Column('bigint', { name: 'residenzaStato', nullable: true }) + residenzaStato!: string | null; + + @Column('nvarchar', { + name: 'domicilioIndirizzo', + nullable: true, + length: 80, + }) + domicilioIndirizzo!: string | null; + + @Column('nvarchar', { + name: 'domicilioNumeroCivico', + nullable: true, + length: 80, + }) + domicilioNumeroCivico!: string | null; + + @Column('nvarchar', { name: 'domicilioLocalita', nullable: true, length: 80 }) + domicilioLocalita!: string | null; + + @Column('nvarchar', { name: 'domicilioCAP', nullable: true, length: 10 }) + domicilioCap!: string | null; + + @Column('bigint', { name: 'domicilioProvincia', nullable: true }) + domicilioProvincia!: string | null; + + @Column('bigint', { name: 'domicilioStato', nullable: true }) + domicilioStato!: string | null; + + @Column('nvarchar', { name: 'nascitaLocalita', nullable: true, length: 80 }) + nascitaLocalita!: string | null; + + @Column('nvarchar', { name: 'nascitaCAP', nullable: true, length: 10 }) + nascitaCap!: string | null; + + @Column('bigint', { name: 'nascitaProvincia', nullable: true }) + nascitaProvincia!: string | null; + + @Column('bigint', { name: 'nascitaStato', nullable: true }) + nascitaStato!: string | null; + + @Column('nvarchar', { name: 'telefono', nullable: true, length: 80 }) + telefono!: string | null; + + @Column('nvarchar', { name: 'cellulare', nullable: true, length: 80 }) + cellulare!: string | null; + + @Column('nvarchar', { name: 'email', nullable: true, length: 80 }) + email!: string | null; + + @Column('bigint', { name: 'codiceSesso', nullable: true }) + codiceSesso!: string | null; + + @Column('bigint', { name: 'codiceStatoCivile', nullable: true }) + codiceStatoCivile!: string | null; + + @Column('bigint', { name: 'codiceProfessione', nullable: true }) + codiceProfessione!: string | null; + + @Column('int', { name: 'consensoComunicazioneDati', nullable: true }) + consensoComunicazioneDati!: number | null; + + @Column('int', { name: 'consensoDiffusioneDati', nullable: true }) + consensoDiffusioneDati!: number | null; + + @Column('int', { name: 'riassicurato', nullable: true }) + riassicurato!: number | null; + + @Column('nvarchar', { name: 'fax', nullable: true, length: 80 }) + fax!: string | null; + + @Column('nvarchar', { name: 'dataIscrizione', nullable: true, length: 10 }) + dataIscrizione!: string | null; + + @Column('nvarchar', { + name: 'dataRichiestaRecesso', + nullable: true, + length: 10, + }) + dataRichiestaRecesso!: string | null; + + @Column('nvarchar', { name: 'dataRecesso', nullable: true, length: 10 }) + dataRecesso!: string | null; + + @Column('int', { name: 'recessoAnnoSolareSuccessivo', nullable: true }) + recessoAnnoSolareSuccessivo!: number | null; + + @Column('int', { name: 'capofamiglia', nullable: true }) + flagCapofamiglia!: number | null; + + @Column('bigint', { name: 'livelloFamiliare', nullable: true }) + livelloFamiliare!: string | null; + + @Column('bigint', { name: 'codiceCapofamiglia', nullable: true }) + codiceCapofamiglia!: string | null; + + @Column('nvarchar', { name: 'codicePaese', nullable: true, length: 50 }) + codicePaese!: string | null; + + @Column('nvarchar', { name: 'codiceCIN', nullable: true, length: 50 }) + codiceCin!: string | null; + + @Column('nvarchar', { name: 'checkDigitCIN', nullable: true, length: 50 }) + checkDigitCin!: string | null; + + @Column('nvarchar', { name: 'rifBancaEstero', nullable: true, length: 50 }) + rifBancaEstero!: string | null; + + @Column('nvarchar', { name: 'contoCorrente', nullable: true, length: 50 }) + contoCorrente!: string | null; + + @Column('nvarchar', { name: 'codiceBIC', nullable: true, length: 50 }) + codiceBic!: string | null; + + @Column('nvarchar', { name: 'codiceIBAN', nullable: true, length: 50 }) + codiceIban!: string | null; + + @Column('nvarchar', { name: 'codiceABI', nullable: true, length: 50 }) + codiceAbi!: string | null; + + @Column('nvarchar', { name: 'codiceCAB', nullable: true, length: 10 }) + codiceCab!: string | null; + + @Column('nvarchar', { name: 'dataDecesso', nullable: true, length: 10 }) + dataDecesso!: string | null; + + @Column('int', { name: 'modalitaSuddivisioneContributi', nullable: true }) + modalitaSuddivisioneContributi!: number | null; + + @Column('nvarchar', { name: 'dataEsclusione', nullable: true, length: 10 }) + dataEsclusione!: string | null; + + @Column('bigint', { name: 'codiceMotivoEsclusione', nullable: true }) + codiceMotivoEsclusione!: string | null; + + @Column('ntext', { name: 'noteEsclusione', nullable: true }) + noteEsclusione!: string | null; + + @Column('nvarchar', { name: 'usernameWEB', nullable: true, length: 80 }) + usernameWeb!: string | null; + + @Column('nvarchar', { name: 'passwordWEB', nullable: true, length: 80 }) + passwordWeb!: string | null; + + @Column('int', { name: 'consensoNucleoFamiliare', nullable: true }) + consensoNucleoFamiliare!: number | null; + + @Column('int', { name: 'webAccessoDisabilitato', nullable: true }) + webAccessoDisabilitato!: number | null; + + @Column('int', { name: 'webModificaDati', nullable: true }) + webModificaDati!: number | null; + + @Column('int', { name: 'webInfo', nullable: true }) + webInfo!: number | null; + + @Column('int', { name: 'webStrutture', nullable: true }) + webStrutture!: number | null; + + @Column('int', { name: 'webPratiche', nullable: true }) + webPratiche!: number | null; + + @Column('int', { name: 'webCertificazione', nullable: true }) + webCertificazione!: number | null; + + @Column('int', { name: 'webRimborsiBase', nullable: true }) + webRimborsiBase!: number | null; + + @Column('int', { name: 'webRimborsiAvanzato', nullable: true }) + webRimborsiAvanzato!: number | null; + + @Column('int', { name: 'webRichiestaPresaCarico', nullable: true }) + webRichiestaPresaCarico!: number | null; + + @Column('int', { name: 'webServizioCup', nullable: true }) + webServizioCup!: number | null; + + @Column('int', { name: 'webEmailUsername', nullable: true }) + webEmailUsername!: number | null; + + @Column('bigint', { name: 'categoria1', nullable: true }) + categoria1!: string | null; + + @Column('bigint', { name: 'categoria2', nullable: true }) + categoria2!: string | null; + + @Column('bigint', { name: 'categoria3', nullable: true }) + categoria3!: string | null; + + @Column('bigint', { name: 'categoria4', nullable: true }) + categoria4!: string | null; + + @Column('bigint', { name: 'categoria5', nullable: true }) + categoria5!: string | null; + + @Column('int', { name: 'socioEsterno', nullable: true }) + socioEsterno!: number | null; + + @Column('bigint', { name: 'codiceMutua', nullable: true }) + codiceMutua!: string | null; + + @Column('nvarchar', { + name: 'dataInizioValidita', + nullable: true, + length: 10, + }) + dataInizioValidita!: string | null; + + @Column('nvarchar', { name: 'dataFineValidita', nullable: true, length: 10 }) + dataFineValidita!: string | null; + + @Column('bigint', { name: 'idAssiBase', nullable: true }) + idAssiBase!: string | null; + + @Column('nvarchar', { + name: 'protezioniAssiBase', + nullable: true, + length: 80, + }) + protezioniAssiBase!: string | null; + + @Column('nvarchar', { name: 'gruppoAssiBase', nullable: true, length: 80 }) + gruppoAssiBase!: string | null; + + @Column('ntext', { name: 'noteAnagrafica', nullable: true }) + noteAnagrafica!: string | null; + + @Column('bigint', { name: 'tipoSocio', nullable: true }) + tipoSocio!: string | null; + + @Column('int', { name: 'stampatoLibroSoci', default: () => '(0)' }) + stampatoLibroSoci!: number; + + @Column('nvarchar', { + name: 'dataStampaLibroSoci', + nullable: true, + length: 10, + }) + dataStampaLibroSoci!: string | null; + + @Column('int', { name: 'codiceModalitaPagamentoRimborsi', nullable: true }) + codiceModalitaPagamentoRimborsi!: number | null; + + @Column('int', { name: 'codiceModalitaVersamentoContributi', nullable: true }) + codiceModalitaVersamentoContributi!: number | null; + + @Column('nvarchar', { name: 'dataAssunzione', nullable: true, length: 10 }) + dataAssunzione!: string | null; + + @Column('bigint', { name: 'codiceMotivoRecesso', nullable: true }) + codiceMotivoRecesso!: string | null; + + @Column('int', { name: 'codiceCanaleComunicazione', nullable: true }) + codiceCanaleComunicazione!: number | null; + + @Column('nvarchar', { name: 'dataRegistrazione', nullable: true, length: 10 }) + dataRegistrazione!: string | null; + + @Column('ntext', { name: 'noteAnamnesi', nullable: true }) + noteAnamnesi!: string | null; + + @Column('bigint', { + name: 'codiceModalitacessazioneContributiInfrannuale', + nullable: true, + }) + codiceModalitacessazioneContributiInfrannuale!: string | null; + + @Column('int', { + name: 'forzaCodiceModalitacessazioneContributiInfrannuale', + nullable: true, + }) + forzaCodiceModalitacessazioneContributiInfrannuale!: number | null; + + @Column('nvarchar', { + name: 'matricolaAziendale', + nullable: true, + length: 80, + }) + matricolaAziendale!: string | null; + + @Column('int', { name: 'coniugeCarico', nullable: true }) + coniugeCarico!: number | null; + + @Column('ntext', { name: 'noteProtezioni', nullable: true }) + noteProtezioni!: string | null; + + @Column('bigint', { name: 'idNucleo', nullable: true }) + idNucleo!: string | null; + + @Column('bigint', { name: 'idSocio', nullable: true }) + idSocio!: string | null; + + @Column('bigint', { name: 'idLibroSoci', nullable: true }) + idLibroSoci!: string | null; + + @Column('bigint', { name: 'idPersona', nullable: true }) + idPersona!: string | null; + + @Column('bigint', { name: 'codicePromoter', nullable: true }) + codicePromoter!: string | null; + + @Column('bigint', { name: 'originePromoter', nullable: true }) + originePromoter!: string | null; + + @Column('bigint', { name: 'livelloFamiliareAnagrafica', nullable: true }) + livelloFamiliareAnagrafica!: string | null; + + @Column('bigint', { name: 'codiceCapoFamigliaAnagrafica', nullable: true }) + codiceCapoFamigliaAnagrafica!: string | null; + + @Column('int', { name: 'codiceModalitaVersamentoRID', nullable: true }) + codiceModalitaVersamentoRid!: number | null; + + @Column('nvarchar', { + name: 'dataPossibileAmmissione', + nullable: true, + length: 10, + }) + dataPossibileAmmissione!: string | null; + + @Column('nvarchar', { name: 'banca', nullable: true, length: 255 }) + banca!: string | null; + + @Column('nvarchar', { name: 'agenziaBanca', nullable: true, length: 255 }) + agenziaBanca!: string | null; + + @Column('nvarchar', { name: 'intestazioneCC', nullable: true, length: 255 }) + intestazioneCc!: string | null; + + @Column('nvarchar', { + name: 'dataRicezioneRichiestaRecesso', + nullable: true, + length: 10, + }) + dataRicezioneRichiestaRecesso!: string | null; + + @Column('nvarchar', { name: 'dataUscitaNucleo', nullable: true, length: 10 }) + dataUscitaNucleo!: string | null; + + @Column('int', { name: 'datiBancariDaAggiornare', nullable: true }) + datiBancariDaAggiornare!: number | null; + + @Column('nvarchar', { name: 'telefono2', nullable: true, length: 80 }) + telefono2!: string | null; + + @Column('nvarchar', { + name: 'dataModificaIban', + nullable: true, + length: 10, + default: () => "''", + }) + dataModificaIban!: string | null; + + @Column('int', { + name: 'richiestoIBAN', + nullable: true, + default: () => '(0)', + }) + richiestoIban!: number | null; + + @Column('nvarchar', { + name: 'dataRichiestaIBAN', + nullable: true, + length: 10, + default: () => "''", + }) + dataRichiestaIban!: string | null; + + @Column('int', { name: 'comunicazioniViaEmail', nullable: true }) + comunicazioniViaEmail!: number | null; + + @Column('int', { name: 'esitoUltimaValidazione', nullable: true }) + esitoUltimaValidazione!: number | null; + + @Column('nvarchar', { + name: 'dataOraUltimaValidazione', + nullable: true, + length: 50, + }) + dataOraUltimaValidazione!: string | null; + + @Column('ntext', { name: 'noteUltimaValidazione', nullable: true }) + noteUltimaValidazione!: string | null; + + @Column('int', { name: 'stampareLibroSoci', default: () => '(0)' }) + stampareLibroSoci!: number; + + @Column('nvarchar', { + name: 'dataStampaCessazioneLibroSoci', + nullable: true, + length: 10, + default: () => "'9998-12-31'", + }) + dataStampaCessazioneLibroSoci!: string | null; + + @Column('int', { + name: 'stampataCessazioneLibroSoci', + nullable: true, + default: () => '(0)', + }) + stampataCessazioneLibroSoci!: number | null; + + @Column('int', { name: 'adesioneWeb', default: () => '(0)' }) + adesioneWeb!: number; + + @Column('int', { name: 'preeesistenzaContratto', default: () => '(0)' }) + preeesistenzaContratto!: number; + + @Column('int', { name: 'preeesistenzaInclusa', default: () => '(0)' }) + preeesistenzaInclusa!: number; + + @Column('nvarchar', { name: 'IBANRid', length: 50, default: () => "''" }) + ibanRid!: string; + + @Column('nvarchar', { + name: 'intestatarioContoRid', + length: 255, + default: () => "''", + }) + intestatarioContoRid!: string; + + @Column('nvarchar', { + name: 'dataMandato', + length: 10, + default: () => "'9998-12-31'", + }) + dataMandato!: string; + + @Column('nvarchar', { name: 'idMandato', length: 10, default: () => "''" }) + idMandato!: string; + + @Column('nvarchar', { name: 'codiceSWIFT', length: 80, default: () => "''" }) + codiceSwift!: string; + + @Column('decimal', { + name: 'percentualeFamiliareACarico', + precision: 18, + scale: 2, + default: () => '(0)', + }) + percentualeFamiliareACarico!: number; + + @Column('int', { name: 'familiareMultiplo', default: () => '(0)' }) + familiareMultiplo!: number; + + @Column('nvarchar', { + name: 'origineAggiornamento', + length: 20, + default: () => "''", + }) + origineAggiornamento!: string; + + @Column('int', { name: 'consensoNewsletter', default: () => '(0)' }) + consensoNewsletter!: number; + + @Column('int', { + name: 'flagRichiestaVariazioneAnagrafica', + default: () => '(0)', + }) + flagRichiestaVariazioneAnagrafica!: number; + + @Column('int', { name: 'flagPresenzaMorositaPrestiti', default: () => '(0)' }) + flagPresenzaMorositaPrestiti!: number; + + @Column('int', { name: 'flagBloccoAmministrativo', default: () => '(0)' }) + flagBloccoAmministrativo!: number; + + @Column('int', { name: 'codiceTitoloStudio', default: () => '(0)' }) + codiceTitoloStudio!: number; + + @Column('varchar', { + name: 'codiceLuogoDomicilio', + nullable: true, + length: 5, + }) + codiceLuogoDomicilio!: string | null; + + @Column('varchar', { name: 'codiceLuogoNascita', nullable: true, length: 5 }) + codiceLuogoNascita!: string | null; + + @Column('varchar', { + name: 'codiceLuogoResidenza', + nullable: true, + length: 5, + }) + codiceLuogoResidenza!: string | null; + + @Column('nvarchar', { name: 'domicilioFrazione', nullable: true, length: 80 }) + domicilioFrazione!: string | null; + + @Column('nvarchar', { name: 'nascitaFrazione', nullable: true, length: 80 }) + nascitaFrazione!: string | null; + + @Column('nvarchar', { name: 'residenzaFrazione', nullable: true, length: 80 }) + residenzaFrazione!: string | null; + + @Column('varchar', { name: 'codicePartner', nullable: true, length: 255 }) + codicePartner!: string | null; + + @Column('varchar', { + name: 'documentoIdentitaCodice', + nullable: true, + length: 100, + }) + documentoIdentitaCodice!: string | null; + + @Column('varchar', { + name: 'documentoIdentitaDataEmissione', + nullable: true, + length: 10, + }) + documentoIdentitaDataEmissione!: string | null; + + @Column('varchar', { + name: 'documentoIdentitaDataScadenza', + nullable: true, + length: 10, + }) + documentoIdentitaDataScadenza!: string | null; + + @Column('varchar', { + name: 'documentoIdentitaEnteRilascio', + nullable: true, + length: 100, + }) + documentoIdentitaEnteRilascio!: string | null; + + @Column('varchar', { + name: 'documentoIdentitaComuneRilascio', + nullable: true, + length: 5, + }) + documentoIdentitaCodiceLuogoComuneRilascio!: string | null; + + @ManyToOne(() => SocioEntity, (socioEntity) => socioEntity.familiari) + @JoinColumn([{ name: 'codiceCapofamiglia', referencedColumnName: 'codiceSocio' }]) + capofamiglia!: SocioEntity; + + @OneToMany(() => SocioEntity, (socioEntity) => socioEntity.capofamiglia) + familiari!: SocioEntity[]; + + @ManyToOne(() => GruppoEntity) + @JoinColumn([{ name: 'codiceGruppo', referencedColumnName: 'codiceGruppo' }]) + gruppo!: GruppoEntity; + + @ManyToOne(() => ApiLuoghiEntity) + @JoinColumn([{ name: 'codiceLuogoNascita', referencedColumnName: 'codice' }]) + luogoNascita!: ApiLuoghiEntity; + + @ManyToOne(() => ApiLuoghiEntity) + @JoinColumn([{ name: 'codiceLuogoResidenza', referencedColumnName: 'codice' }]) + luogoResidenza!: ApiLuoghiEntity; + + @ManyToOne(() => ApiLuoghiEntity) + @JoinColumn([{ name: 'codiceLuogoDomicilio', referencedColumnName: 'codice' }]) + luogoDomicilio!: ApiLuoghiEntity; + + @ManyToOne(() => ApiLuoghiEntity) + @JoinColumn([{ name: 'documentoIdentitaComuneRilascio', referencedColumnName: 'codice' }]) + documentoIdentitaComuneRilascio!: ApiLuoghiEntity; + + @OneToMany(() => SocioContrattoEntity, (socioContrattoEntity) => socioContrattoEntity.socio) + socioContratto!: SocioContrattoEntity[]; + + @OneToMany(() => SocioFormeAssistenzaEntity, (socioFormeAssistenzaEntity) => socioFormeAssistenzaEntity.socio) + socioFormeAssistenzas!: SocioFormeAssistenzaEntity[]; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioContratto.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioContratto.entity.ts new file mode 100644 index 0000000..f31bafc --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioContratto.entity.ts @@ -0,0 +1,50 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; +import { ContrattoEntity } from './contratto.entity'; +import { SocioEntity } from './socio.entity'; + +@Index( + 'PK_socioContratto', + ['codiceSocio', 'codiceCapofamiglia', 'codiceContratto', 'dataInizio', 'dataFine', 'codiceFiguraContratto'], + { unique: true }, +) +@Entity('socioContratto') +export class SocioContrattoEntity { + @Column('bigint', { primary: true, name: 'codiceSocio' }) + codiceSocio!: string; + + @Column('bigint', { primary: true, name: 'codiceCapofamiglia' }) + codiceCapofamiglia!: string; + + @Column('nvarchar', { primary: true, name: 'dataInizio', length: 10 }) + dataInizio!: string; + + @Column('nvarchar', { primary: true, name: 'dataFine', length: 10 }) + dataFine!: string; + + @Column('bigint', { primary: true, name: 'codiceContratto' }) + codiceContratto!: string; + + @Column('nvarchar', { name: 'contratto', length: 400 }) + nomeContratto!: string; + + @Column('bigint', { primary: true, name: 'codiceFiguraContratto' }) + codiceFiguraContratto!: string; + + @Column('nvarchar', { name: 'figuraContratto', length: 400 }) + figuraContratto!: string; + + @Column('nvarchar', { name: 'note', length: 400 }) + note!: string; + + @ManyToOne(() => SocioEntity, (socioEntity) => socioEntity.socioContratto) + @JoinColumn([{ name: 'codiceSocio', referencedColumnName: 'codiceSocio' }]) + socio!: SocioEntity; + + @ManyToOne(() => ContrattoEntity, (contrattoEntity) => contrattoEntity.socioContratto) + @JoinColumn([{ name: 'codiceContratto', referencedColumnName: 'codiceContratto' }]) + contratto!: ContrattoEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioFormeAssistenza.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioFormeAssistenza.entity.ts new file mode 100644 index 0000000..77337ef --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/socioFormeAssistenza.entity.ts @@ -0,0 +1,46 @@ +import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; +import { FormeAssistenzaEntity } from './formeAssistenza.entity'; +import { SocioEntity } from './socio.entity'; + +@Index('PK_socioFormeAssistenza', ['codiceSocio', 'codiceFdA', 'dataInizio', 'dataFine', 'titolare'], { unique: true }) +@Entity('socioFormeAssistenza') +export class SocioFormeAssistenzaEntity { + @Column('bigint', { primary: true, name: 'codiceSocio' }) + codiceSocio!: string; + + @Column('bigint', { primary: true, name: 'codiceFdA' }) + codiceFdA!: string; + + @Column('nvarchar', { primary: true, name: 'dataInizio', length: 10 }) + dataInizio!: string; + + @Column('nvarchar', { primary: true, name: 'dataFine', length: 10 }) + dataFine!: string; + + @Column('int', { primary: true, name: 'titolare' }) + titolare!: number; + + @Column('bigint', { name: 'codiceContratto', nullable: true }) + codiceContratto!: string | null; + + @Column('bigint', { name: 'codiceFiguraContratto', nullable: true }) + codiceFiguraContratto!: string | null; + + @Column('int', { name: 'forzaEtaContributi', nullable: true }) + forzaEtaContributi!: number | null; + + @Column('nvarchar', { name: 'dataRicezione', nullable: true, length: 10 }) + dataRicezione!: string | null; + + @ManyToOne(() => FormeAssistenzaEntity, (formeAssistenzaEntity) => formeAssistenzaEntity.socioFormeAssistenza) + @JoinColumn([{ name: 'codiceFdA', referencedColumnName: 'codiceFda' }]) + formaAssistenza!: FormeAssistenzaEntity; + + @ManyToOne(() => SocioEntity, (socioEntity) => socioEntity.socioFormeAssistenzas) + @JoinColumn([{ name: 'codiceSocio', referencedColumnName: 'codiceSocio' }]) + socio!: SocioEntity; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/entities/sportelli.entity.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/sportelli.entity.ts new file mode 100644 index 0000000..5798b76 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/entities/sportelli.entity.ts @@ -0,0 +1,30 @@ +import { Column, Entity, Index } from 'typeorm'; + +@Index('PK_sportelli', ['codiceSportello'], { unique: true }) +@Entity('sportelli') +export class SportelliEntity { + @Column('nvarchar', { primary: true, name: 'codiceSportello', length: 255 }) + codiceSportello!: string; + + @Column('nvarchar', { name: 'denominazione', length: 255 }) + denominazione!: string; + + @Column('nvarchar', { name: 'email', length: 255 }) + email!: string; + + @Column('nvarchar', { name: 'password', length: 255 }) + password!: string; + + @Column('nvarchar', { name: 'indirizzo', length: 200, default: () => "''" }) + indirizzo!: string; + + @Column('nvarchar', { name: 'citta', length: 200, default: () => "''" }) + citta!: string; + + @Column('nvarchar', { name: 'provincia', length: 2, default: () => "''" }) + provincia!: string; + + constructor(init?: Partial) { + Object.assign(this, init); + } +} diff --git a/apps/ebitemp-api/src/modules/database/connections/oceano/index.ts b/apps/ebitemp-api/src/modules/database/connections/oceano/index.ts new file mode 100644 index 0000000..697510e --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/connections/oceano/index.ts @@ -0,0 +1 @@ +export * from './entities'; diff --git a/apps/ebitemp-api/src/modules/database/database.constants.ts b/apps/ebitemp-api/src/modules/database/database.constants.ts new file mode 100644 index 0000000..b7ab588 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/database.constants.ts @@ -0,0 +1 @@ +export const APP_DATASOURCES = Symbol('APP_DATASOURCES'); diff --git a/apps/ebitemp-api/src/modules/database/database.module.ts b/apps/ebitemp-api/src/modules/database/database.module.ts new file mode 100644 index 0000000..54dc272 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/database.module.ts @@ -0,0 +1,20 @@ +import { Global, Module } from '@nestjs/common'; +import { EbitempApiDatabaseModule } from './connections/ebitemp-api/database.module'; +import { OceanoDatabaseModule } from './connections/oceano/database.module'; +import { APP_DATASOURCES } from './database.constants'; +import { dataSources } from './utils/typeorm-data-source-factory'; + +const dataSourcesProvider = { + provide: APP_DATASOURCES, + useValue: dataSources, +}; + +const databaseModules = [EbitempApiDatabaseModule, OceanoDatabaseModule]; + +@Global() +@Module({ + imports: [...databaseModules], + providers: [dataSourcesProvider], + exports: [dataSourcesProvider, ...databaseModules], +}) +export class AppDatabaseModule {} diff --git a/apps/ebitemp-api/src/modules/database/utils/database-config.ts b/apps/ebitemp-api/src/modules/database/utils/database-config.ts new file mode 100644 index 0000000..ad935e7 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/utils/database-config.ts @@ -0,0 +1,58 @@ +import { registerAs } from '@nestjs/config'; +import { ConnectionString } from 'connection-string'; +import { first } from 'lodash'; +import { z } from 'zod'; + +export const databaseSchema = z.object({ + connectionString: z.string(), + type: z.enum([ + 'mysql', + 'postgres', + 'cockroachdb', + 'sap', + 'mariadb', + 'sqlite', + 'cordova', + 'react-native', + 'nativescript', + 'sqljs', + 'oracle', + 'mssql', + 'mongodb', + 'aurora-mysql', + 'aurora-postgres', + 'expo', + 'better-sqlite3', + 'capacitor', + 'spanner', + ]), + host: z.string(), + port: z.number().optional(), + username: z.string(), + password: z.string(), + database: z.string(), + secure: z.boolean(), +}); +export type DatabaseConfig = z.TypeOf; + +export const rawDatabaseSchema = z.object({ + connectionString: z.string(), + secure: z.boolean().default(true), +}); +export type RawDatabaseConfigSchema = z.TypeOf; + +export const databaseConfigFactory = (opts: RawDatabaseConfigSchema) => + registerAs('database', () => { + const connectionString = new ConnectionString(opts.connectionString); + const config: DatabaseConfig = databaseSchema.strict().parse({ + connectionString: connectionString.toString(), + type: connectionString.protocol, + host: first(connectionString.hosts)?.name, + port: first(connectionString.hosts)?.port, + username: connectionString.user, + password: connectionString.password, + database: first(connectionString.path), + secure: opts.secure, + }); + return config; + }); diff --git a/apps/ebitemp-api/src/modules/database/utils/typeorm-data-source-factory.ts b/apps/ebitemp-api/src/modules/database/utils/typeorm-data-source-factory.ts new file mode 100644 index 0000000..83261b1 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/utils/typeorm-data-source-factory.ts @@ -0,0 +1,19 @@ +import { DataSource, DataSourceOptions } from 'typeorm'; + +export const dataSources: DataSource[] = []; + +export const typeormDataSourceFactory = (dataSources: DataSource[]) => async (options?: DataSourceOptions) => { + const dataSource = await new DataSource(options!).initialize(); + dataSources.push(dataSource); + return dataSource; +}; + +export const typeormTransactionalDataSourceFactory = (name?: string) => async (options?: DataSourceOptions) => { + const tt = await import('typeorm-transactional'); + const dataSource = tt.addTransactionalDataSource({ + name: name, + dataSource: new DataSource(options!), + }); + dataSources.push(dataSource); + return dataSource; +}; diff --git a/apps/ebitemp-api/src/modules/database/utils/typeorm-import-entities.ts b/apps/ebitemp-api/src/modules/database/utils/typeorm-import-entities.ts new file mode 100644 index 0000000..9417926 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/utils/typeorm-import-entities.ts @@ -0,0 +1,5 @@ +export const typeormEntitiesFromImport = async (entities: T) => { + return (Object.keys(entities) as Array).map( + (entity: keyof typeof entities) => entities[entity], + ); +}; diff --git a/apps/ebitemp-api/src/modules/database/utils/typeorm-module-options-factory.ts b/apps/ebitemp-api/src/modules/database/utils/typeorm-module-options-factory.ts new file mode 100644 index 0000000..421935b --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/utils/typeorm-module-options-factory.ts @@ -0,0 +1,26 @@ +import { TypeOrmModuleOptions } from '@nestjs/typeorm'; +import { SnakeNamingStrategy } from 'typeorm-naming-strategies'; +import { DatabaseConfig } from './database-config'; + +export const typeormModuleOptionsFactory = async ( + databaseConfig: DatabaseConfig, + entities: any[], + name?: string, +): Promise => { + return { + name: name, + type: databaseConfig.type as any, + host: databaseConfig.host, + port: databaseConfig.port, + username: databaseConfig.username, + password: databaseConfig.password, + database: databaseConfig.database, + entities: entities, + synchronize: false, + logging: process.env['NODE_ENV'] !== 'production', + namingStrategy: new SnakeNamingStrategy(), + options: { + ...(!databaseConfig.secure ? { trustServerCertificate: true } : {}), + }, + }; +}; diff --git a/apps/ebitemp-api/src/modules/database/utils/typeorm-patch.ts b/apps/ebitemp-api/src/modules/database/utils/typeorm-patch.ts new file mode 100644 index 0000000..e7ca493 --- /dev/null +++ b/apps/ebitemp-api/src/modules/database/utils/typeorm-patch.ts @@ -0,0 +1,4 @@ +export async function patchTypeOrm() { + (await import('typeorm-transactional')).initializeTransactionalContext(); + (await import('typeorm-scoped')).patchSelectQueryBuilder(); +} diff --git a/apps/ebitemp-api/src/modules/enumify/enumify-update-from-database.service.ts b/apps/ebitemp-api/src/modules/enumify/enumify-update-from-database.service.ts new file mode 100644 index 0000000..8c9809f --- /dev/null +++ b/apps/ebitemp-api/src/modules/enumify/enumify-update-from-database.service.ts @@ -0,0 +1,105 @@ +import { Inject, Injectable, OnApplicationBootstrap } from '@nestjs/common'; +import { differenceBy, get } from 'lodash'; +import { DataSource, QueryFailedError } from 'typeorm'; +import { APP_DATASOURCES } from '../database/database.constants'; +import { Enumify, registeredEnums } from './enumify'; +import { type EnumifyConfig, enumifyConfig } from './enumify.config'; + +@Injectable() +export class EnumifyUpdateFromDatabaseService implements OnApplicationBootstrap { + constructor( + @Inject(APP_DATASOURCES) private readonly datasources: DataSource[], + @Inject(enumifyConfig.KEY) private readonly config: EnumifyConfig, + ) {} + + async onApplicationBootstrap() { + try { + const enumUpdateFromDbOnStart = this.config.shouldUpdateEnumFromDbOnStartup; + if (!enumUpdateFromDbOnStart) return; + + const errors: string[] = []; + + for (const dataSource of this.datasources) { + const logging = dataSource.options.logging; + dataSource.setOptions({ logging: false }); + for (const _registeredEnum of get(registeredEnums, dataSource.name, [])) { + const registeredEnum = _registeredEnum; + + const repo = dataSource.getRepository(registeredEnum); + + const enumValues = registeredEnum.enumValues; + let dbValues: Enumify[]; + try { + dbValues = await repo.find(); + } catch (err) { + if ( + err instanceof QueryFailedError && + err.message === `Error: Invalid object name '${repo.metadata.tableName}'.` + ) { + errors.push( + `[${dataSource.name}] ${registeredEnum.name}: Table present in code but missing on database: ${enumValues}`, + ); + } + if (err instanceof QueryFailedError && err.message.startsWith('Error: Invalid column name')) { + errors.push(`[${dataSource.name}] ${registeredEnum.name}: [${repo.metadata.tableName}] ${err.message}`); + } + continue; + } + + const differenceByDbValues = differenceBy(dbValues, enumValues, (x) => (x.id, x.nome)); + const differenceByEnumValues = differenceBy(enumValues, dbValues, (x) => (x.id, x.nome)); + if (differenceByDbValues.length > 0) { + errors.push( + `[${dataSource.name}] ${ + registeredEnum.name + }: Values present on database but missing in code: ${differenceBy( + dbValues, + enumValues, + (x) => (x.id, x.nome), + )}`, + ); + } + if (differenceByEnumValues.length > 0) { + errors.push( + `[${dataSource.name}] ${ + registeredEnum.name + }: Values present in code but missing in database: ${differenceBy( + enumValues, + dbValues, + (x) => (x.id, x.nome), + )}`, + ); + } + + for (const dbValue of dbValues) { + const valueOfByName = registeredEnum.fromKey(dbValue.nome!); + const keyOfByCode = registeredEnum.fromValue(dbValue.id!); + if (valueOfByName != null && dbValue.id != valueOfByName?.id) { + errors.push( + `[${dataSource.name}] ${registeredEnum.name}: Different values between database (${dbValue.id}, ${dbValue.nome}) and code (${valueOfByName.id}, ${valueOfByName.nome})`, + ); + } else if (keyOfByCode != null && dbValue.nome != keyOfByCode?.nome) { + errors.push( + `[${dataSource.name}] ${registeredEnum.name}: Different values between database (${dbValue.id}, ${dbValue.nome}) and code (${keyOfByCode.id}, ${keyOfByCode.nome})`, + ); + } else if (valueOfByName != null || keyOfByCode != null) { + const enumValue = (valueOfByName ?? keyOfByCode)!; + Object.assign(enumValue, dbValue); + } + } + } + dataSource.setOptions({ logging: logging }); + } + + if (errors.length > 0) { + throw new Error(errors.join('\n\t* ')); + } + } catch (err) { + if (err instanceof Error) { + console.warn(err.message, EnumifyUpdateFromDatabaseService.name); + } else { + throw err; + } + } + } +} diff --git a/apps/ebitemp-api/src/modules/enumify/enumify.config.ts b/apps/ebitemp-api/src/modules/enumify/enumify.config.ts new file mode 100644 index 0000000..a0b6407 --- /dev/null +++ b/apps/ebitemp-api/src/modules/enumify/enumify.config.ts @@ -0,0 +1,17 @@ +import coerceRecordTypes from '../config/utils/coerce-record-types'; +import { registerAs } from '@nestjs/config'; +import { z } from 'zod'; + +export const enumifySchema = z.object({ + shouldUpdateEnumFromDbOnStartup: z.boolean().default(true), +}); +export type EnumifyConfig = z.infer; + +export const enumifyConfig = registerAs('enumify', () => { + const env = coerceRecordTypes(process.env); + + const config: EnumifyConfig = enumifySchema.strict().parse({ + shouldUpdateEnumFromDbOnStartup: env['ENUM_UPDATE_FROM_DB_ON_START'], + }); + return config; +}); diff --git a/apps/ebitemp-api/src/modules/enumify/enumify.module.ts b/apps/ebitemp-api/src/modules/enumify/enumify.module.ts new file mode 100644 index 0000000..d9b0927 --- /dev/null +++ b/apps/ebitemp-api/src/modules/enumify/enumify.module.ts @@ -0,0 +1,12 @@ +import { Module, Global } from '@nestjs/common'; +import { EnumifyUpdateFromDatabaseService } from './enumify-update-from-database.service'; +import { ConfigModule } from '@nestjs/config'; +import { enumifyConfig } from './enumify.config'; + +@Global() +@Module({ + imports: [ConfigModule.forFeature(enumifyConfig)], + providers: [EnumifyUpdateFromDatabaseService], + exports: [EnumifyUpdateFromDatabaseService], +}) +export class EnumifyModule {} diff --git a/apps/ebitemp-api/src/modules/enumify/enumify.ts b/apps/ebitemp-api/src/modules/enumify/enumify.ts new file mode 100644 index 0000000..2bb8007 --- /dev/null +++ b/apps/ebitemp-api/src/modules/enumify/enumify.ts @@ -0,0 +1,74 @@ +// Based on https://github.com/rauschma/enumify +// Original license: MIT License - Copyright (c) 2020 Axel Rauschmayer + +export const registeredEnums: Record = {}; +export function Enum(schema: string) { + return function (target: typeof Enumify) { + registeredEnums[schema] ??= []; + registeredEnums[schema].push(target); + }; +} + +export class Enumify { + static enumKeys: Array; + static enumValues: Array; + + public readonly id?: number; + public readonly nome?: string; + + static closeEnum() { + const enumKeys: Array = []; + const enumValues: Array = []; + + for (const [key, value] of Object.entries(this)) { + value.nome ??= key; + value.id ??= enumValues.length; + + if (value.id == null || value.id === '') { + throw new Error(`${this.name}.id`); + } + if (value.nome == null || value.nome === '') { + throw new Error(`${this.name}.nome`); + } + + enumKeys.push(value.nome); + enumValues.push(value); + } + this.enumKeys = enumKeys; + this.enumValues = enumValues; + } + + static fromKey(key: string): undefined | Enumify { + if (this.enumKeys == undefined) { + throw new Error(`Did you forget to call static _ = ${this.name}.closeEnum() after setup?`); + } + + const index = this.enumKeys.findIndex((enumKey) => enumKey.toUpperCase() === key.toString().toUpperCase()); + if (index >= 0) { + return this.enumValues[index]; + } + return undefined; + } + + static fromValue(value: number): undefined | Enumify { + if (this.enumValues == undefined) { + throw new Error(`Did you forget to call static _ = ${this.name}.closeEnum() after setup?`); + } + + const index = this.enumValues.map((x) => x.id).indexOf(value); + if (index >= 0) { + const key = this.enumKeys[index]; + return this.fromKey(key!); + } + return undefined; + } + + protected constructor(id?: number, nome?: string) { + this.id = id; + this.nome = nome; + } + + toString() { + return `(${this.id}, ${this.nome})`; + } +} diff --git a/apps/ebitemp-api/src/modules/file-transactions/file-transaction.ts b/apps/ebitemp-api/src/modules/file-transactions/file-transaction.ts new file mode 100644 index 0000000..fdbccf1 --- /dev/null +++ b/apps/ebitemp-api/src/modules/file-transactions/file-transaction.ts @@ -0,0 +1,118 @@ +import { Logger } from '@nestjs/common'; +import fs from 'node:fs'; +import { randomUUID } from 'node:crypto'; +import path from 'node:path'; +import { FileTransactionsService } from './file-transactions.service'; +import { copyFilesToFolderOrFail, deleteFiles, renameFiles, renameFilesOrFail } from './file-utils'; +import dayjs from 'dayjs'; + +export class FileTransaction { + public static readonly TO_ADD_SUFFIX = 'toAdd'; + public static readonly TO_DELETE_SUFFIX = 'toDelete'; + + private readonly manager: FileTransactionsService; + private readonly logger: Logger; + + public readonly transactionId: string; + private readonly ts: Date; + public readonly filesToAdd: { src: string; dest: string }[]; + public readonly filesToDelete: string[]; + + constructor( + manager: FileTransactionsService, + opts: Partial<{ + transactionId: string; + filesToAdd: { src: string; dest: string }[]; + filesToDelete: string[]; + logger: Logger; + }>, + ) { + this.manager = manager; + this.logger = opts.logger ?? new Logger(FileTransaction.name); + this.filesToAdd = opts.filesToAdd ?? []; + this.filesToDelete = opts.filesToDelete ?? []; + this.transactionId = opts.transactionId ?? (randomUUID().split('-').pop() as string); + this.ts = new Date(); + } + + async addFile(src: string, dest: string) { + const destFolderName = path.dirname(dest); + const destFileName = path.basename(dest); + const destFileNameWithSuffix = `${destFileName}.${this.transactionId}.${FileTransaction.TO_ADD_SUFFIX}`; + const destFilePathWithSuffix = path.join(destFolderName, destFileNameWithSuffix); + + this.logger.log( + `Adding file '${destFilePathWithSuffix}' in fileTransaction '${ + this.transactionId + }' (started at ${dayjs(this.ts).format('YYYY-MM-DD HH:mm:ss')})`, + ); + this.filesToAdd.push({ src: src, dest: destFilePathWithSuffix }); + + if (fs.existsSync(dest)) { + await this.deleteFile(dest); + } + + await copyFilesToFolderOrFail(this.logger, destFolderName, { + srcpath: src, + name: destFileNameWithSuffix, + }); + await deleteFiles(this.logger, src); + this.manager.persist(this); + } + + async deleteFile(src: string) { + const destFolderName = path.dirname(src); + const destFileName = path.basename(src); + const destFileNameWithSuffix = `${destFileName}.${this.transactionId}.${FileTransaction.TO_DELETE_SUFFIX}`; + const destFilePathWithSuffix = path.join(destFolderName, destFileNameWithSuffix); + + this.logger.log( + `Deleting file '${destFilePathWithSuffix}' in fileTransaction '${ + this.transactionId + }' (started at ${dayjs(this.ts).format('YYYY-MM-DD HH:mm:ss')})`, + ); + this.filesToDelete.push(destFilePathWithSuffix); + await renameFilesOrFail(this.logger, { src, dest: destFilePathWithSuffix }); + this.manager.persist(this); + } + + async commitTransaction() { + this.logger.log( + `Committing fileTransaction '${this.transactionId}' (started at ${dayjs(this.ts).format('YYYY-MM-DD HH:mm:ss')})`, + ); + await renameFiles( + this.logger, + ...this.filesToAdd.map((fileToAdd) => ({ + src: fileToAdd.dest, + dest: fileToAdd.dest.replace(`.${this.transactionId}.${FileTransaction.TO_ADD_SUFFIX}`, ''), + })), + ); + await deleteFiles(this.logger, ...this.filesToDelete); + this.manager.unregister(this); + } + + async rollbackTransaction() { + this.logger.log( + `Rollbacking fileTransaction '${this.transactionId}' (started at ${dayjs(this.ts).format( + 'YYYY-MM-DD HH:mm:ss', + )})`, + ); + + await renameFiles( + this.logger, + ...this.filesToAdd.map((fileToMove) => ({ + src: fileToMove.dest, + dest: fileToMove.src, + })), + ); + + await renameFiles( + this.logger, + ...this.filesToDelete.map((fileToRestore) => ({ + src: fileToRestore, + dest: fileToRestore.replace(`.${this.transactionId}.${FileTransaction.TO_DELETE_SUFFIX}`, ''), + })), + ); + this.manager.unregister(this); + } +} diff --git a/apps/ebitemp-api/src/modules/file-transactions/file-transactions.module.ts b/apps/ebitemp-api/src/modules/file-transactions/file-transactions.module.ts new file mode 100644 index 0000000..87caeac --- /dev/null +++ b/apps/ebitemp-api/src/modules/file-transactions/file-transactions.module.ts @@ -0,0 +1,11 @@ +import { Global, Module } from '@nestjs/common'; +import { KeyvModule } from '../keyv/keyv.module'; +import { FileTransactionsService } from './file-transactions.service'; + +@Global() +@Module({ + imports: [KeyvModule], + providers: [FileTransactionsService], + exports: [FileTransactionsService], +}) +export class AppFileTransactionsModule {} diff --git a/apps/ebitemp-api/src/modules/file-transactions/file-transactions.service.ts b/apps/ebitemp-api/src/modules/file-transactions/file-transactions.service.ts new file mode 100644 index 0000000..88c3251 --- /dev/null +++ b/apps/ebitemp-api/src/modules/file-transactions/file-transactions.service.ts @@ -0,0 +1,52 @@ +import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; +import { FileTransaction } from './file-transaction'; +import { createKeyv, Keyv } from '@keyv/redis'; +import { parse, stringify } from 'flatted'; +import { KeyvService } from '../keyv/keyv.service'; + +const FILE_TRANSACTIONS_KEY = `FILE_TRANSACTIONS_KEY`; + +@Injectable() +export class FileTransactionsService implements OnModuleInit { + private readonly logger = new Logger(FileTransactionsService.name); + private readonly map: Record = {}; + + private readonly keyv: Keyv; + + constructor(readonly keyvService: KeyvService) { + this.keyv = this.keyvService.create({ + namespace: FileTransactionsService.name, + }); + } + + register(logger?: Logger) { + const tx = new FileTransaction(this, { logger }); + this.persist(tx); + return tx; + } + + persist(tx: FileTransaction) { + this.map[tx.transactionId] = tx; + this.keyv.set(FILE_TRANSACTIONS_KEY, this.map); + } + + unregister(tx: FileTransaction) { + delete this.map[tx.transactionId]; + this.keyv.set(FILE_TRANSACTIONS_KEY, this.map); + } + + async onModuleInit() { + this.logger.log('Checking for dangling file transactions...'); + const dangling = await this.keyv.get>(FILE_TRANSACTIONS_KEY); + + if (dangling) { + for (const danglingTx of Object.values(dangling)) { + const tx = new FileTransaction(this, { + ...danglingTx, + logger: this.logger, + }); + await tx.rollbackTransaction(); + } + } + } +} diff --git a/apps/ebitemp-api/src/modules/file-transactions/file-utils.ts b/apps/ebitemp-api/src/modules/file-transactions/file-utils.ts new file mode 100644 index 0000000..1b15eb4 --- /dev/null +++ b/apps/ebitemp-api/src/modules/file-transactions/file-utils.ts @@ -0,0 +1,106 @@ +import { Logger } from '@nestjs/common'; +import { promises as fs } from 'node:fs'; +import path from 'path'; + +interface File { + srcpath: string; + name: string; +} + +export const copyFilesToFolder = (logger: Logger, destFolder: string, ...files: File[]) => + _copyFilesToFolder(logger, destFolder, false, ...files); +export const copyFilesToFolderOrFail = (logger: Logger, destFolder: string, ...files: File[]) => + _copyFilesToFolder(logger, destFolder, true, ...files); +export const deleteFolder = (logger: Logger, folder: string) => _deleteFolder(logger, false, folder); +export const deleteFolderOrFail = (logger: Logger, folder: string) => _deleteFolder(logger, true, folder); +export const deleteFiles = (logger: Logger, ...files: string[]) => _deleteFiles(logger, false, ...files); +export const deleteFilesOrFail = (logger: Logger, ...files: string[]) => _deleteFiles(logger, true, ...files); +export const renameFiles = (logger: Logger, ...files: Array<{ src: string; dest: string }>) => + _renameFiles(logger, false, ...files); +export const renameFilesOrFail = (logger: Logger, ...files: Array<{ src: string; dest: string }>) => + _renameFiles(logger, true, ...files); + +export const normalizeWin32PathToPosix = (filepath: string): string => + path.win32.normalize(filepath).split(path.win32.sep).join(path.posix.sep); + +const _copyFilesToFolder = async ( + logger: Logger, + destFolder: string, + throwsOnError = false, + ...files: File[] +): Promise => { + await fs.mkdir(destFolder, { recursive: true }); + + for (const file of files) { + try { + const destpath = path.join(destFolder, file.name); + await fs.copyFile(file.srcpath, destpath); + logger.debug(`Copying file '${file.srcpath}' to '${destpath}'`); + } catch (err: any) { + const msg = `Could not copy '${file.srcpath}' to '${destFolder}'. Inner exception: ${err.message}`; + if (throwsOnError) { + logger.error(msg); + err.message = msg; + throw err; + } + logger.warn(msg); + } + } +}; + +const _deleteFolder = async (logger: Logger, throwsOnError = false, folder: string): Promise => { + try { + await fs.rmdir(folder, { recursive: true }); + logger.debug(`Deleting folder '${folder}'`); + } catch (err: any) { + if (err.code === 'ENOENT') { + return; + } + const msg = `Could not delete '${folder}'. Inner exception: ${err.message}`; + if (throwsOnError) { + logger.error(msg); + throw err; + } + logger.warn(msg); + } +}; + +const _deleteFiles = async (logger: Logger, throwsOnError = false, ...files: string[]): Promise => { + for (const file of files) { + try { + await fs.unlink(file); + logger.debug(`Deleting file '${file}'`); + } catch (err: any) { + if (err.code === 'ENOENT') { + return; + } + const msg = `Could not delete '${file}'. Inner exception: ${err.message}`; + if (throwsOnError) { + logger.error(msg); + throw err; + } + logger.warn(msg); + } + } +}; + +const _renameFiles = async ( + logger: Logger, + throwsOnError = false, + ...files: Array<{ src: string; dest: string }> +): Promise => { + for (const file of files) { + try { + await fs.rename(file.src, file.dest); + logger.debug(`Renaming file '${file.src}' to '${file.dest}'`); + } catch (err: any) { + const msg = `Could not rename '${file.src}' to '${file.dest}'. Inner exception: ${err.message}`; + if (throwsOnError) { + logger.error(msg); + err.message = msg; + throw err; + } + logger.warn(msg); + } + } +}; diff --git a/apps/ebitemp-api/src/modules/health/health.controller.ts b/apps/ebitemp-api/src/modules/health/health.controller.ts new file mode 100644 index 0000000..e55717a --- /dev/null +++ b/apps/ebitemp-api/src/modules/health/health.controller.ts @@ -0,0 +1,35 @@ +import { Controller, Get, Inject, VERSION_NEUTRAL } from '@nestjs/common'; +import { + DiskHealthIndicator, + HealthCheck, + HealthCheckService, + MemoryHealthIndicator, + TypeOrmHealthIndicator, +} from '@nestjs/terminus'; +import { DataSource } from 'typeorm'; +import { Public } from '../auth/strategies/jwt/jwt-auth.guard'; +import { APP_DATASOURCES } from '../database/database.constants'; + +@Public() +@Controller({ path: 'health', version: VERSION_NEUTRAL }) +export class HealthController { + constructor( + @Inject(APP_DATASOURCES) private dataSources: DataSource[], + private readonly health: HealthCheckService, + private readonly db: TypeOrmHealthIndicator, + private readonly disk: DiskHealthIndicator, + private readonly memory: MemoryHealthIndicator, + ) {} + + @Get() + @HealthCheck() + check() { + return this.health.check([ + ...this.dataSources.map( + (dataSource) => () => this.db.pingCheck(`database ${dataSource.options.database}`, { connection: dataSource }), + ), + () => this.disk.checkStorage('storage', { path: '/', thresholdPercent: 0.5 }), // Threshold at 50% space occupied in path, + () => this.memory.checkHeap('memory', 150 * 1024 * 1024), // Threshold at 150MB memory occupied by process + ]); + } +} diff --git a/apps/ebitemp-api/src/modules/health/health.module.ts b/apps/ebitemp-api/src/modules/health/health.module.ts new file mode 100644 index 0000000..9048b0c --- /dev/null +++ b/apps/ebitemp-api/src/modules/health/health.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TerminusModule } from '@nestjs/terminus'; +import { HealthController } from './health.controller'; + +@Module({ + imports: [ + TerminusModule.forRoot({ + errorLogStyle: 'pretty', + }), + ], + controllers: [HealthController], +}) +export class AppHealthModule {} diff --git a/apps/ebitemp-api/src/modules/keyv/keyv.config.ts b/apps/ebitemp-api/src/modules/keyv/keyv.config.ts new file mode 100644 index 0000000..3b58958 --- /dev/null +++ b/apps/ebitemp-api/src/modules/keyv/keyv.config.ts @@ -0,0 +1,17 @@ +import coerceRecordTypes from '../config/utils/coerce-record-types'; +import { registerAs } from '@nestjs/config'; +import { z } from 'zod'; + +export const keyvSchema = z.object({ + redis: z.string(), +}); +export type KeyvConfig = z.infer; + +export const keyvConfig = registerAs('keyv', () => { + const env = coerceRecordTypes(process.env); + + const config: KeyvConfig = keyvSchema.strict().parse({ + redis: env['REDIS_CONNECTION_STRING'], + }); + return config; +}); diff --git a/apps/ebitemp-api/src/modules/keyv/keyv.module.ts b/apps/ebitemp-api/src/modules/keyv/keyv.module.ts new file mode 100644 index 0000000..5e639ed --- /dev/null +++ b/apps/ebitemp-api/src/modules/keyv/keyv.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { keyvConfig } from './keyv.config'; +import { KeyvService } from './keyv.service'; + +@Module({ + imports: [ConfigModule.forFeature(keyvConfig)], + providers: [KeyvService], + exports: [KeyvService], +}) +export class KeyvModule {} diff --git a/apps/ebitemp-api/src/modules/keyv/keyv.service.ts b/apps/ebitemp-api/src/modules/keyv/keyv.service.ts new file mode 100644 index 0000000..dd02102 --- /dev/null +++ b/apps/ebitemp-api/src/modules/keyv/keyv.service.ts @@ -0,0 +1,16 @@ +import { createKeyv, KeyvRedisOptions } from '@keyv/redis'; +import { Inject, Injectable } from '@nestjs/common'; +import { parse, stringify } from 'flatted'; +import { keyvConfig, type KeyvConfig } from './keyv.config'; + +@Injectable() +export class KeyvService { + constructor(@Inject(keyvConfig.KEY) private readonly config: KeyvConfig) {} + + create(options?: KeyvRedisOptions) { + const keyv = createKeyv(this.config.redis, options); + keyv.serialize = stringify; + keyv.deserialize = parse; + return keyv; + } +} diff --git a/apps/ebitemp-api/src/modules/logger/logger.config.ts b/apps/ebitemp-api/src/modules/logger/logger.config.ts new file mode 100644 index 0000000..c4bd44a --- /dev/null +++ b/apps/ebitemp-api/src/modules/logger/logger.config.ts @@ -0,0 +1,21 @@ +import coerceRecordTypes from '../config/utils/coerce-record-types'; +import { registerAs } from '@nestjs/config'; +import { z } from 'zod'; + +export const loggerSchema = z.object({ + seqServerHost: z.string(), + seqServerPort: z.number().finite().positive(), + seqApiKey: z.string(), +}); +export type LoggerConfig = z.infer; + +export const loggerConfig = registerAs('logger', () => { + const env = coerceRecordTypes(process.env); + + const config: LoggerConfig = loggerSchema.strict().parse({ + seqServerHost: env['SEQ_SERVER_HOST'], + seqServerPort: env['SEQ_SERVER_PORT'], + seqApiKey: env['SEQ_API_KEY'], + }); + return config; +}); diff --git a/apps/ebitemp-api/src/modules/logger/logger.module.ts b/apps/ebitemp-api/src/modules/logger/logger.module.ts new file mode 100644 index 0000000..34d84a1 --- /dev/null +++ b/apps/ebitemp-api/src/modules/logger/logger.module.ts @@ -0,0 +1,63 @@ +import { Module } from '@nestjs/common'; +import { NestApplication } from '@nestjs/core'; +import { LoggerModule } from 'nestjs-pino'; +import { LoggerConfig, loggerConfig } from './logger.config'; +import { ConfigModule } from '@nestjs/config'; + +@Module({ + imports: [ + ConfigModule.forFeature(loggerConfig), + LoggerModule.forRootAsync({ + imports: loggerConfig.asProvider().imports, + useFactory: (loggerConfig: LoggerConfig) => ({ + pinoHttp: { + autoLogging: true, + quietReqLogger: true, + quietResLogger: true, + level: 'trace', + useLevel: 'trace', + mixin() { + return { context: NestApplication.name }; + }, + customSuccessMessage: (req, res) => { + return `${req.method} ${req.url}: ${res.statusCode} request succedeed`; + }, + customErrorMessage: (req, res) => { + return `${req.method} ${req.url}: ${res.statusCode} request errored`; + }, + name: 'ebitemp-api', + transport: { + targets: [ + ...(process.env['NODE_ENV'] !== 'production' + ? [ + { + target: 'pino-pretty', + level: 'debug', + options: { + colorize: true, + messageFormat: '[{context}] {msg}', + ignore: 'pid,hostname,context', + translateTime: 'SYS:yyyy-mm-dd HH:MM:ss o', + }, + }, + ] + : []), + { + target: '@autotelic/pino-seq-transport', + level: 'trace', + options: { + loggerOpts: { + serverUrl: `${loggerConfig.seqServerHost}:${loggerConfig.seqServerPort}`, + apiKey: loggerConfig.seqApiKey, + }, + }, + }, + ], + }, + }, + }), + inject: [loggerConfig.KEY], + }), + ], +}) +export class AppLoggerModule {} diff --git a/apps/ebitemp-api/src/modules/request-logging/clients/clients.module.ts b/apps/ebitemp-api/src/modules/request-logging/clients/clients.module.ts new file mode 100644 index 0000000..1a6e715 --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/clients/clients.module.ts @@ -0,0 +1,17 @@ +import { Global, Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ApiClientEntity, ApiClientInvocazioniEntity } from '../../database/connections/ebitemp-api'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; +import { KeyvModule } from '../../keyv/keyv.module'; +import { ClientsService } from './clients.service'; + +@Global() +@Module({ + imports: [ + KeyvModule, + TypeOrmModule.forFeature([ApiClientEntity, ApiClientInvocazioniEntity], EBITEMP_API_DATASOURCE), + ], + providers: [ClientsService], + exports: [ClientsService], +}) +export class ClientsModule {} diff --git a/apps/ebitemp-api/src/modules/request-logging/clients/clients.service.ts b/apps/ebitemp-api/src/modules/request-logging/clients/clients.service.ts new file mode 100644 index 0000000..9281c87 --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/clients/clients.service.ts @@ -0,0 +1,89 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { isError } from '@stdlib/assert'; +import AsyncLock from 'async-lock'; +import { Keyv } from 'cacheable'; +import { isObject } from 'lodash'; +import { Repository } from 'typeorm'; +import { runInTransaction } from 'typeorm-transactional'; +import { ApiClientEntity, ApiClientInvocazioniEntity } from '../../database/connections/ebitemp-api'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; +import { KeyvService } from '../../keyv/keyv.service'; + +@Injectable() +export class ClientsService { + private readonly logger = new Logger(ClientsService.name); + private readonly lock = new AsyncLock(); + + private readonly keyv: Keyv; + + constructor( + keyvService: KeyvService, + @InjectRepository(ApiClientEntity, EBITEMP_API_DATASOURCE) + private readonly clientRepository: Repository, + @InjectRepository(ApiClientInvocazioniEntity, EBITEMP_API_DATASOURCE) + private readonly clientInvocazioniRepository: Repository, + ) { + this.keyv = keyvService.create({ + namespace: ClientsService.name, + }); + } + + async insertOne( + baseUrl: string, + path: string, + method: string, + requestBody: any, + responseBody: any, + hasFailed: boolean, + errors: string | null, + ) { + try { + return await runInTransaction( + async () => { + const client = await this.getClient(baseUrl); + if (!client) return; + + const payload = JSON.stringify(requestBody); + const response = isObject(responseBody) ? JSON.stringify(responseBody) : responseBody; + + const invocazione = this.clientInvocazioniRepository.create({ + idClient: client.id, + percorso: path, + metodo: method, + timestamp: new Date(), + richiesta: payload, + risposta: response, + errori: errors, + flagErrore: hasFailed, + }); + + await this.clientInvocazioniRepository.insert(invocazione); + return invocazione; + }, + { connectionName: EBITEMP_API_DATASOURCE }, + ); + } catch (err) { + if (!isError(err)) throw err; + this.logger.error(`Unexpected error: ${err.message}`); + throw err; + } + } + + private async getClient(baseUrl: string) { + const key = `client:baseUrl#${baseUrl}`; + + return await this.lock.acquire(key, async () => { + let client = await this.keyv.get(key); + const isInCache = client != null; + if (!isInCache) { + client ??= + (await this.clientRepository.findOne({ + where: { baseUrl: baseUrl }, + })) ?? undefined; + if (client) this.keyv.set(key, client); + } + return client; + }); + } +} diff --git a/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.module.ts b/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.module.ts new file mode 100644 index 0000000..be04e62 --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.module.ts @@ -0,0 +1,17 @@ +import { Global, Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ApiEndpointEntity, ApiEndpointInvocazioniEntity } from '../../database/connections/ebitemp-api'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; +import { KeyvModule } from '../../keyv/keyv.module'; +import { EndpointsService } from './endpoints.service'; + +@Global() +@Module({ + imports: [ + KeyvModule, + TypeOrmModule.forFeature([ApiEndpointEntity, ApiEndpointInvocazioniEntity], EBITEMP_API_DATASOURCE), + ], + providers: [EndpointsService], + exports: [EndpointsService], +}) +export class EndpointsModule {} diff --git a/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.service.ts b/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.service.ts new file mode 100644 index 0000000..10232e0 --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/endpoints/endpoints.service.ts @@ -0,0 +1,90 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import AsyncLock from 'async-lock'; +import { Keyv } from 'cacheable'; +import { Repository } from 'typeorm'; +import { runInTransaction } from 'typeorm-transactional'; +import { + AccountsEntity, + ApiEndpointEntity, + ApiEndpointInvocazioniEntity, +} from '../../database/connections/ebitemp-api'; +import { EBITEMP_API_DATASOURCE } from '../../database/connections/ebitemp-api/database.constants'; +import { KeyvService } from '../../keyv/keyv.service'; +import { RequestLog } from '../request-logger.interceptor'; +import { isError } from '@stdlib/assert'; + +@Injectable() +export class EndpointsService { + private readonly logger = new Logger(EndpointsService.name); + private readonly lock = new AsyncLock(); + + private readonly keyv: Keyv; + + constructor( + keyvService: KeyvService, + @InjectRepository(ApiEndpointEntity, EBITEMP_API_DATASOURCE) + private readonly endpointRepository: Repository, + @InjectRepository(ApiEndpointInvocazioniEntity, EBITEMP_API_DATASOURCE) + private readonly endpointInvocazioniRepository: Repository, + ) { + this.keyv = keyvService.create({ + namespace: EndpointsService.name, + }); + } + + async insertOne( + user: AccountsEntity, + route: string, + method: string, + requestLog: RequestLog, + responseLog: any, + hasFailed: boolean, + ) { + try { + return await runInTransaction( + async () => { + const endpoint = await this.getEndpoint(route, method); + if (!endpoint) return; + + const payload = JSON.stringify(requestLog); + const response = JSON.stringify(responseLog); + + const invocazione = this.endpointInvocazioniRepository.create({ + idAccount: user.id, + idEndpoint: endpoint.id, + timestamp: new Date(), + richiesta: payload, + risposta: response, + flagErrore: hasFailed, + }); + + await this.endpointInvocazioniRepository.insert(invocazione); + return invocazione; + }, + { connectionName: EBITEMP_API_DATASOURCE }, + ); + } catch (err) { + if (!isError(err)) throw err; + this.logger.error(`Unexpected error: ${err.message}`); + throw err; + } + } + + private async getEndpoint(route: string, method: string) { + const key = `endpoint:route,method#${route},${method}`; + + return await this.lock.acquire(key, async () => { + let endpoint = await this.keyv.get(key); + const isInCache = endpoint != null; + if (!isInCache) { + endpoint ??= + (await this.endpointRepository.findOne({ + where: { percorso: route, metodo: method }, + })) ?? undefined; + if (endpoint) this.keyv.set(key, endpoint); + } + return endpoint; + }); + } +} diff --git a/apps/ebitemp-api/src/modules/request-logging/request-logger.interceptor.ts b/apps/ebitemp-api/src/modules/request-logging/request-logger.interceptor.ts new file mode 100644 index 0000000..63add5a --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/request-logger.interceptor.ts @@ -0,0 +1,67 @@ +import { CallHandler, ExecutionContext, Injectable, Logger, NestInterceptor } from '@nestjs/common'; +import { omit } from 'lodash'; +import { Observable } from 'rxjs'; +import { catchError, concatMap } from 'rxjs/operators'; +import { EndpointsService } from './endpoints/endpoints.service'; +import { RequestWithUser } from '../auth/constants/request-with-user'; + +export type RequestLog = { + url: string; + idAccount: string; + params: object; + query: object; + body: object; +}; + +@Injectable() +export class RequestLoggerInterceptor implements NestInterceptor { + private readonly logger = new Logger(RequestLoggerInterceptor.name); + + constructor(private readonly endpointsService: EndpointsService) {} + + async intercept(context: ExecutionContext, next: CallHandler): Promise> { + const request: RequestWithUser = context.switchToHttp().getRequest(); + + const user = request.user; + const route = request.routeOptions.url ?? '/'; + const method = request.method; + + request.params = { ...((request.params as object) ?? {}), route, method }; + + const requestLog = { + url: request.url, + idAccount: `${user.id}`, + params: omit(request.params as object, ['user', 'route', 'method']), + query: omit(request.query as object, ['__context']), + body: request.body as object, + }; + + return next.handle().pipe( + concatMap(async (res: any) => { + await this.endpointsService.insertOne(user, route, method, requestLog, res, false); + return res; + }), + catchError(async (err: any) => { + const getExceptionResponse = (exception: any): any => { + if (typeof exception.response === 'object') { + const { error, message, ...rest } = exception.response; + return { + error, + message, + ...rest, + }; + } + return { + error: exception.name, + message: exception.message, + }; + }; + + const res = getExceptionResponse(err); + + await this.endpointsService.insertOne(user, route, method, requestLog, res, true); + throw err; + }), + ); + } +} diff --git a/apps/ebitemp-api/src/modules/request-logging/request-logging.module.ts b/apps/ebitemp-api/src/modules/request-logging/request-logging.module.ts new file mode 100644 index 0000000..f3fa1ec --- /dev/null +++ b/apps/ebitemp-api/src/modules/request-logging/request-logging.module.ts @@ -0,0 +1,13 @@ +import { Global, Module } from '@nestjs/common'; +import { APP_INTERCEPTOR } from '@nestjs/core'; +import { ClientsModule } from './clients/clients.module'; +import { EndpointsModule } from './endpoints/endpoints.module'; +import { RequestLoggerInterceptor } from './request-logger.interceptor'; + +@Global() +@Module({ + imports: [EndpointsModule, ClientsModule], + providers: [], + exports: [EndpointsModule, ClientsModule], +}) +export class AppRequestLoggingModule {} diff --git a/apps/ebitemp-api/src/modules/schedule/schedule.module.ts b/apps/ebitemp-api/src/modules/schedule/schedule.module.ts new file mode 100644 index 0000000..6cd0bd2 --- /dev/null +++ b/apps/ebitemp-api/src/modules/schedule/schedule.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { ScheduleModule } from '@nestjs/schedule'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { TipiJobsEntity } from '../database/connections/ebitemp-api/entities'; +import { SchedulerService } from './schedule.service'; +import { EBITEMP_API_DATASOURCE } from '../database/connections/ebitemp-api/database.constants'; + +@Module({ + imports: [TypeOrmModule.forFeature([TipiJobsEntity], EBITEMP_API_DATASOURCE), ScheduleModule.forRoot()], + providers: [SchedulerService], + exports: [], +}) +export class AppScheduleModule {} diff --git a/apps/ebitemp-api/src/modules/schedule/schedule.service.ts b/apps/ebitemp-api/src/modules/schedule/schedule.service.ts new file mode 100644 index 0000000..81c76a0 --- /dev/null +++ b/apps/ebitemp-api/src/modules/schedule/schedule.service.ts @@ -0,0 +1,56 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { SchedulerRegistry } from '@nestjs/schedule'; +import { InjectRepository } from '@nestjs/typeorm'; +import { isError } from '@stdlib/assert'; +import { CronJob, CronTime } from 'cron'; +import { Repository } from 'typeorm'; +import { EBITEMP_API_DATASOURCE } from '../database/connections/ebitemp-api/database.constants'; +import { TipiJobsEntity } from '../database/connections/ebitemp-api/entities/tipi_jobs.entity'; + +@Injectable() +export class SchedulerService { + private readonly logger = new Logger(SchedulerService.name); + + private static readonly TIME_ZONE = 'Europe/Rome'; + + constructor( + private readonly schedulerRegistry: SchedulerRegistry, + @InjectRepository(TipiJobsEntity, EBITEMP_API_DATASOURCE) + private readonly tipiJobsRepository: Repository, + ) {} + + async onApplicationBootstrap() { + try { + const jobs = this.schedulerRegistry.getCronJobs(); + const jobTypes = await this.tipiJobsRepository.find(); + + for (const [jobName, job] of jobs) { + this.rescheduleJobAccordingToJobType(jobTypes, jobName, job); + } + } catch (err) { + if (!isError(err)) throw err; + this.logger.error(err.message); + this.logger.warn(`Error while retrieving scheduled jobs on database. Skipping jobs.`); + } + } + + private rescheduleJobAccordingToJobType(jobTypes: TipiJobsEntity[], jobName: string, job: CronJob) { + const jobType = jobTypes.find((jobType) => jobType.nome == jobName); + + if (!jobType) { + this.logger.warn(`Job type for job '${jobName}' not found on database. Skipping job.`); + this.schedulerRegistry.deleteCronJob(jobName); + return; + } + + const jobTime = new CronTime(jobType.patternCron, SchedulerService.TIME_ZONE); + job.setTime(jobTime); + job.start(); + + this.logger.log( + `Job type id '${jobType.id}' found for job '${jobName}' [isActive: ${jobType.flagAttivo}, cronPattern: ${ + jobType.patternCron + }]. Upcoming date => ${job.nextDate()}`, + ); + } +} diff --git a/apps/ebitemp-api/src/modules/validation/utils/nestjs-swagger-patches.ts b/apps/ebitemp-api/src/modules/validation/utils/nestjs-swagger-patches.ts new file mode 100644 index 0000000..40cad94 --- /dev/null +++ b/apps/ebitemp-api/src/modules/validation/utils/nestjs-swagger-patches.ts @@ -0,0 +1,3 @@ +export async function patchNestjsSwagger() { + (await import('@anatine/zod-nestjs')).patchNestjsSwagger(); +} diff --git a/apps/ebitemp-api/src/modules/validation/validation.module.ts b/apps/ebitemp-api/src/modules/validation/validation.module.ts new file mode 100644 index 0000000..3133968 --- /dev/null +++ b/apps/ebitemp-api/src/modules/validation/validation.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core'; +import { ZodValidationPipe } from './zod.pipe'; +import { ZodSerializerInterceptor } from './zod.serializer'; + +@Module({ + providers: [ + { provide: APP_PIPE, useClass: ZodValidationPipe }, + { provide: APP_INTERCEPTOR, useClass: ZodSerializerInterceptor }, + ], +}) +export class AppValidationModule {} diff --git a/apps/ebitemp-api/src/modules/validation/zod.pipe.ts b/apps/ebitemp-api/src/modules/validation/zod.pipe.ts new file mode 100644 index 0000000..c118c73 --- /dev/null +++ b/apps/ebitemp-api/src/modules/validation/zod.pipe.ts @@ -0,0 +1,36 @@ +import { ZodDtoStatic } from '@anatine/zod-nestjs'; +import { HTTP_ERRORS_BY_CODE } from '@anatine/zod-nestjs/src/lib/http-errors'; + +import { ArgumentMetadata, HttpStatus, Injectable, Optional, PipeTransform } from '@nestjs/common'; + +export interface ZodValidationPipeOptions { + errorHttpStatusCode?: keyof typeof HTTP_ERRORS_BY_CODE; +} + +@Injectable() +export class ZodValidationPipe implements PipeTransform { + private readonly errorHttpStatusCode: keyof typeof HTTP_ERRORS_BY_CODE; + + constructor(@Optional() options?: ZodValidationPipeOptions) { + this.errorHttpStatusCode = options?.errorHttpStatusCode || HttpStatus.BAD_REQUEST; + } + + public transform(value: unknown, metadata: ArgumentMetadata): unknown { + const zodSchema = (metadata?.metatype as ZodDtoStatic)?.zodSchema; + + if (zodSchema) { + const parseResult = zodSchema.safeParse(value); + + if (!parseResult.success) { + const { error } = parseResult; + const message = error.errors.map((error) => `${error.path.join('.')}: ${error.message}`); + + throw new HTTP_ERRORS_BY_CODE[this.errorHttpStatusCode](message); + } + + return parseResult.data; + } + + return value; + } +} diff --git a/apps/ebitemp-api/src/modules/validation/zod.serializer.ts b/apps/ebitemp-api/src/modules/validation/zod.serializer.ts new file mode 100644 index 0000000..8a6e83e --- /dev/null +++ b/apps/ebitemp-api/src/modules/validation/zod.serializer.ts @@ -0,0 +1,110 @@ +import { ZodDtoStatic } from '@anatine/zod-nestjs'; +import { HTTP_ERRORS_BY_CODE } from '@anatine/zod-nestjs/src/lib/http-errors'; +import { + CallHandler, + ExecutionContext, + HttpStatus, + Inject, + Injectable, + NestInterceptor, + Optional, + SetMetadata, + StreamableFile, +} from '@nestjs/common'; +import { chain } from 'lodash'; +import { Observable, map } from 'rxjs'; +import { ZodSchema } from 'zod'; + +const REFLECTOR = 'Reflector'; + +export interface ZodSerializerInterceptorOptions { + errorHttpStatusCode?: keyof typeof HTTP_ERRORS_BY_CODE; +} + +export const ZodSerializerDto = (dto: ZodDtoStatic | ZodSchema) => SetMetadata('zodSerializedDtoOptions', { dto }); + +@Injectable() +export class ZodSerializerInterceptor implements NestInterceptor { + private readonly errorHttpStatusCode: keyof typeof HTTP_ERRORS_BY_CODE; + + constructor( + @Inject(REFLECTOR) protected readonly reflector: any, + @Optional() options?: ZodSerializerInterceptorOptions, + ) { + this.errorHttpStatusCode = options?.errorHttpStatusCode || HttpStatus.INTERNAL_SERVER_ERROR; + } + + intercept(context: ExecutionContext, next: CallHandler): Observable { + const responseSchema = this.getContextResponseSchema(context); + + return next.handle().pipe( + map((res: object | object[]) => { + if (!responseSchema) return res; + if (typeof res !== 'object' || res instanceof StreamableFile) return res; + if (!('safeParse' in responseSchema)) return res; + + return Array.isArray(res) + ? res.map( + (item) => + validateInterally(responseSchema, item, { + httpStatusCodeOnError: this.errorHttpStatusCode, + }).data, + ) + : validateInterally(responseSchema, res, { + httpStatusCodeOnError: this.errorHttpStatusCode, + }).data; + }), + ); + } + + protected getContextResponseSchema(context: ExecutionContext): ZodDtoStatic | ZodSchema | undefined { + const zodSerializedDto = (() => { + const metadata = this.reflector.getAllAndMerge('zodSerializedDtoOptions', [ + context.getHandler(), + context.getClass(), + ]); + return metadata.dto; + })(); + if (zodSerializedDto) return zodSerializedDto; + + const swaggerApiResponseType = (() => { + const metadata = this.reflector.getAllAndMerge('swagger/apiResponse', [context.getHandler(), context.getClass()]); + const metadataForStatusCode = chain([metadata[HttpStatus.OK], metadata[HttpStatus.CREATED]]) + .filter(Boolean) + .first() + .value(); + return metadataForStatusCode.type; + })(); + if (swaggerApiResponseType) return swaggerApiResponseType; + + return undefined; + } +} + +function isZodDto(metatype: unknown): metatype is ZodDtoStatic { + return !!(metatype as ZodDtoStatic)?.zodSchema; +} + +function validateInterally( + schemaOrDto: ZodDtoStatic | ZodSchema, + value: any, + options: Partial<{ + httpStatusCodeOnError: keyof typeof HTTP_ERRORS_BY_CODE; + }>, +) { + const { httpStatusCodeOnError = HttpStatus.INTERNAL_SERVER_ERROR } = options; + const schema = isZodDto(schemaOrDto) ? schemaOrDto.zodSchema : schemaOrDto; + + const parseResult = schema.safeParse(value); + if (!parseResult.success) { + const { error } = parseResult; + const message = error.errors.map((error) => `${error.path.join('.')}: ${error.message}`); + + console.error( + `Error while validating dto '${isZodDto(schemaOrDto) ? schemaOrDto.name : 'unknownSchema'}': ${message}`, + ); + console.error('value', value); + throw new HTTP_ERRORS_BY_CODE[httpStatusCodeOnError](); + } + return parseResult; +} diff --git a/apps/ebitemp-api/test/app.e2e-spec.ts b/apps/ebitemp-api/test/app.e2e-spec.ts new file mode 100644 index 0000000..5c64fac --- /dev/null +++ b/apps/ebitemp-api/test/app.e2e-spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import request from 'supertest'; +import { App } from 'supertest/types'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()).get('/').expect(200).expect('Hello World!'); + }); +}); diff --git a/apps/ebitemp-api/test/jest-e2e.json b/apps/ebitemp-api/test/jest-e2e.json new file mode 100644 index 0000000..e9d912f --- /dev/null +++ b/apps/ebitemp-api/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/apps/ebitemp-api/tsconfig.build.json b/apps/ebitemp-api/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/apps/ebitemp-api/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/apps/ebitemp-api/tsconfig.json b/apps/ebitemp-api/tsconfig.json new file mode 100644 index 0000000..a622e21 --- /dev/null +++ b/apps/ebitemp-api/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2023", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "noImplicitAny": false, + "strictBindCallApply": false, + "noFallthroughCasesInSwitch": false + } +} diff --git a/apps/web/.gitignore b/apps/web/.gitignore deleted file mode 100644 index f886745..0000000 --- a/apps/web/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# env files (can opt-in for commiting if needed) -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index a98bfa8..0000000 --- a/apps/web/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/apps/web/app/favicon.ico b/apps/web/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/apps/web/app/favicon.ico and /dev/null differ diff --git a/apps/web/app/fonts/GeistMonoVF.woff b/apps/web/app/fonts/GeistMonoVF.woff deleted file mode 100644 index f2ae185..0000000 Binary files a/apps/web/app/fonts/GeistMonoVF.woff and /dev/null differ diff --git a/apps/web/app/fonts/GeistVF.woff b/apps/web/app/fonts/GeistVF.woff deleted file mode 100644 index 1b62daa..0000000 Binary files a/apps/web/app/fonts/GeistVF.woff and /dev/null differ diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css deleted file mode 100644 index 6af7ecb..0000000 --- a/apps/web/app/globals.css +++ /dev/null @@ -1,50 +0,0 @@ -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: var(--foreground); - background: var(--background); -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -a { - color: inherit; - text-decoration: none; -} - -.imgDark { - display: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - - .imgLight { - display: none; - } - .imgDark { - display: unset; - } -} diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx deleted file mode 100644 index 8469537..0000000 --- a/apps/web/app/layout.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import type { Metadata } from "next"; -import localFont from "next/font/local"; -import "./globals.css"; - -const geistSans = localFont({ - src: "./fonts/GeistVF.woff", - variable: "--font-geist-sans", -}); -const geistMono = localFont({ - src: "./fonts/GeistMonoVF.woff", - variable: "--font-geist-mono", -}); - -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - {children} - - - ); -} diff --git a/apps/web/app/page.module.css b/apps/web/app/page.module.css deleted file mode 100644 index 3630662..0000000 --- a/apps/web/app/page.module.css +++ /dev/null @@ -1,188 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-synthesis: none; -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -button.secondary { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; - background: transparent; - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -.footer { - font-family: var(--font-geist-sans); - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx deleted file mode 100644 index b509205..0000000 --- a/apps/web/app/page.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import Image, { type ImageProps } from "next/image"; -import { Button } from "@repo/ui/button"; -import styles from "./page.module.css"; - -type Props = Omit & { - srcLight: string; - srcDark: string; -}; - -const ThemeImage = (props: Props) => { - const { srcLight, srcDark, ...rest } = props; - - return ( - <> - - - - ); -}; - -export default function Home() { - return ( -
-
- -
    -
  1. - Get started by editing apps/web/app/page.tsx -
  2. -
  3. Save and see your changes instantly.
  4. -
- - - -
- -
- ); -} diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.js deleted file mode 100644 index e8759ff..0000000 --- a/apps/web/eslint.config.js +++ /dev/null @@ -1,4 +0,0 @@ -import { nextJsConfig } from "@repo/eslint-config/next-js"; - -/** @type {import("eslint").Linter.Config} */ -export default nextJsConfig; diff --git a/apps/web/next.config.js b/apps/web/next.config.js deleted file mode 100644 index 4678774..0000000 --- a/apps/web/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {}; - -export default nextConfig; diff --git a/apps/web/package.json b/apps/web/package.json deleted file mode 100644 index 248bc40..0000000 --- a/apps/web/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "web", - "version": "0.1.0", - "type": "module", - "private": true, - "scripts": { - "dev": "next dev --turbopack --port 3000", - "build": "next build", - "start": "next start", - "lint": "next lint --max-warnings 0", - "check-types": "tsc --noEmit" - }, - "dependencies": { - "@repo/ui": "workspace:*", - "next": "^15.2.1", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "^22.13.10", - "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "eslint": "^9.22.0", - "typescript": "5.8.2" - } -} diff --git a/apps/web/public/file-text.svg b/apps/web/public/file-text.svg deleted file mode 100644 index 9cfb3c9..0000000 --- a/apps/web/public/file-text.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/public/globe.svg b/apps/web/public/globe.svg deleted file mode 100644 index 4230a3d..0000000 --- a/apps/web/public/globe.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/web/public/next.svg b/apps/web/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/apps/web/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/web/public/turborepo-dark.svg b/apps/web/public/turborepo-dark.svg deleted file mode 100644 index dae38fe..0000000 --- a/apps/web/public/turborepo-dark.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/web/public/turborepo-light.svg b/apps/web/public/turborepo-light.svg deleted file mode 100644 index ddea915..0000000 --- a/apps/web/public/turborepo-light.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/web/public/vercel.svg b/apps/web/public/vercel.svg deleted file mode 100644 index 0164ddc..0000000 --- a/apps/web/public/vercel.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/web/public/window.svg b/apps/web/public/window.svg deleted file mode 100644 index bbc7800..0000000 --- a/apps/web/public/window.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json deleted file mode 100644 index 7aef056..0000000 --- a/apps/web/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "@repo/typescript-config/nextjs.json", - "compilerOptions": { - "plugins": [ - { - "name": "next" - } - ] - }, - "include": [ - "**/*.ts", - "**/*.tsx", - "next-env.d.ts", - "next.config.js", - ".next/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..105abe4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +services: + seq: + image: datalust/seq:latest + ports: + - ${SEQ_UI_PORT}:80 + - ${SEQ_SERVER_PORT}:5341 + environment: + - ACCEPT_EULA=Y + - SEQ_FIRSTRUN_ADMINPASSWORDHASH=QCxh/LN52rQ/pGlajPfJpqdopsx7IX9KAi+5rcU2hETBxfjjHQXydaN9kO9h2n/yKB1DbxnmGULOSlfgsTZRbjUF/wQBrBpbELhUTybNwhAw + - BASE_URI=${SEQ_UI_HOST}:${SEQ_UI_PORT} + restart: unless-stopped + deploy: + resources: + limits: + memory: 4096M + reservations: + memory: 2048M + redis: + image: redis:alpine + ports: + - '${REDIS_PORT}:6379' + restart: unless-stopped + deploy: + resources: + limits: + memory: 4096M + reservations: + memory: 2048M diff --git a/package.json b/package.json index 5ba47a5..dca319b 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "check-types": "turbo run check-types" }, "devDependencies": { + "@nestjs/cli": "^11.0.0", "prettier": "^3.5.3", "turbo": "^2.4.4", "typescript": "5.8.2" diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js deleted file mode 100644 index 6bf01a7..0000000 --- a/packages/eslint-config/next.js +++ /dev/null @@ -1,49 +0,0 @@ -import js from "@eslint/js"; -import eslintConfigPrettier from "eslint-config-prettier"; -import tseslint from "typescript-eslint"; -import pluginReactHooks from "eslint-plugin-react-hooks"; -import pluginReact from "eslint-plugin-react"; -import globals from "globals"; -import pluginNext from "@next/eslint-plugin-next"; -import { config as baseConfig } from "./base.js"; - -/** - * A custom ESLint configuration for libraries that use Next.js. - * - * @type {import("eslint").Linter.Config[]} - * */ -export const nextJsConfig = [ - ...baseConfig, - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - { - ...pluginReact.configs.flat.recommended, - languageOptions: { - ...pluginReact.configs.flat.recommended.languageOptions, - globals: { - ...globals.serviceworker, - }, - }, - }, - { - plugins: { - "@next/next": pluginNext, - }, - rules: { - ...pluginNext.configs.recommended.rules, - ...pluginNext.configs["core-web-vitals"].rules, - }, - }, - { - plugins: { - "react-hooks": pluginReactHooks, - }, - settings: { react: { version: "detect" } }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", - }, - }, -]; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 7192018..e726192 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -4,18 +4,14 @@ "type": "module", "private": true, "exports": { - "./base": "./base.js", - "./next-js": "./next.js", - "./react-internal": "./react-internal.js" + "./base": "./base.js" }, "devDependencies": { "@eslint/js": "^9.22.0", - "@next/eslint-plugin-next": "^15.2.1", "eslint": "^9.22.0", "eslint-config-prettier": "^10.1.1", "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-prettier": "^5.2.2", "eslint-plugin-turbo": "^2.4.4", "globals": "^16.0.0", "typescript": "^5.8.2", diff --git a/packages/eslint-config/react-internal.js b/packages/eslint-config/react-internal.js deleted file mode 100644 index daeccba..0000000 --- a/packages/eslint-config/react-internal.js +++ /dev/null @@ -1,39 +0,0 @@ -import js from "@eslint/js"; -import eslintConfigPrettier from "eslint-config-prettier"; -import tseslint from "typescript-eslint"; -import pluginReactHooks from "eslint-plugin-react-hooks"; -import pluginReact from "eslint-plugin-react"; -import globals from "globals"; -import { config as baseConfig } from "./base.js"; - -/** - * A custom ESLint configuration for libraries that use React. - * - * @type {import("eslint").Linter.Config[]} */ -export const config = [ - ...baseConfig, - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, - { - languageOptions: { - ...pluginReact.configs.flat.recommended.languageOptions, - globals: { - ...globals.serviceworker, - ...globals.browser, - }, - }, - }, - { - plugins: { - "react-hooks": pluginReactHooks, - }, - settings: { react: { version: "detect" } }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", - }, - }, -]; diff --git a/packages/typescript-config/nextjs.json b/packages/typescript-config/nextjs.json deleted file mode 100644 index e6defa4..0000000 --- a/packages/typescript-config/nextjs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./base.json", - "compilerOptions": { - "plugins": [{ "name": "next" }], - "module": "ESNext", - "moduleResolution": "Bundler", - "allowJs": true, - "jsx": "preserve", - "noEmit": true - } -} diff --git a/packages/typescript-config/react-library.json b/packages/typescript-config/react-library.json deleted file mode 100644 index c3a1b26..0000000 --- a/packages/typescript-config/react-library.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./base.json", - "compilerOptions": { - "jsx": "react-jsx" - } -} diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs deleted file mode 100644 index 19170f8..0000000 --- a/packages/ui/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@repo/eslint-config/react-internal"; - -/** @type {import("eslint").Linter.Config} */ -export default config; diff --git a/packages/ui/package.json b/packages/ui/package.json deleted file mode 100644 index 06bf549..0000000 --- a/packages/ui/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@repo/ui", - "version": "0.0.0", - "private": true, - "exports": { - "./*": "./src/*.tsx" - }, - "scripts": { - "lint": "eslint . --max-warnings 0", - "generate:component": "turbo gen react-component", - "check-types": "tsc --noEmit" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@turbo/gen": "^2.4.4", - "@types/node": "^22.13.10", - "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "eslint": "^9.22.0", - "typescript": "5.8.2" - }, - "dependencies": { - "react": "^19.0.0", - "react-dom": "^19.0.0" - } -} diff --git a/packages/ui/src/button.tsx b/packages/ui/src/button.tsx deleted file mode 100644 index 78e5420..0000000 --- a/packages/ui/src/button.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; - -import { ReactNode } from "react"; - -interface ButtonProps { - children: ReactNode; - className?: string; - appName: string; -} - -export const Button = ({ children, className, appName }: ButtonProps) => { - return ( - - ); -}; diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx deleted file mode 100644 index 7b98893..0000000 --- a/packages/ui/src/card.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { type JSX } from "react"; - -export function Card({ - className, - title, - children, - href, -}: { - className?: string; - title: string; - children: React.ReactNode; - href: string; -}): JSX.Element { - return ( - -

- {title} -> -

-

{children}

-
- ); -} diff --git a/packages/ui/src/code.tsx b/packages/ui/src/code.tsx deleted file mode 100644 index f7cbd22..0000000 --- a/packages/ui/src/code.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { type JSX } from "react"; - -export function Code({ - children, - className, -}: { - children: React.ReactNode; - className?: string; -}): JSX.Element { - return {children}; -} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json deleted file mode 100644 index ca86687..0000000 --- a/packages/ui/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@repo/typescript-config/react-library.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/ui/turbo/generators/config.ts b/packages/ui/turbo/generators/config.ts deleted file mode 100644 index 40100ba..0000000 --- a/packages/ui/turbo/generators/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { PlopTypes } from "@turbo/gen"; - -// Learn more about Turborepo Generators at https://turbo.build/repo/docs/core-concepts/monorepos/code-generation - -export default function generator(plop: PlopTypes.NodePlopAPI): void { - // A simple generator to add a new React component to the internal UI library - plop.setGenerator("react-component", { - description: "Adds a new react component", - prompts: [ - { - type: "input", - name: "name", - message: "What is the name of the component?", - }, - ], - actions: [ - { - type: "add", - path: "src/{{kebabCase name}}.tsx", - templateFile: "templates/component.hbs", - }, - { - type: "append", - path: "package.json", - pattern: /"exports": {(?)/g, - template: ' "./{{kebabCase name}}": "./src/{{kebabCase name}}.tsx",', - }, - ], - }); -} diff --git a/packages/ui/turbo/generators/templates/component.hbs b/packages/ui/turbo/generators/templates/component.hbs deleted file mode 100644 index d968b9e..0000000 --- a/packages/ui/turbo/generators/templates/component.hbs +++ /dev/null @@ -1,8 +0,0 @@ -export const {{ pascalCase name }} = ({ children }: { children: React.ReactNode }) => { - return ( -
-

{{ pascalCase name }} Component

- {children} -
- ); -}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebbcca0..f39d39f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: devDependencies: + '@nestjs/cli': + specifier: ^11.0.0 + version: 11.0.5(@swc/cli@0.6.0(@swc/core@1.11.11)(chokidar@4.0.3))(@swc/core@1.11.11)(@types/node@22.13.10) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -18,78 +21,218 @@ importers: specifier: 5.8.2 version: 5.8.2 - apps/docs: + apps/ebitemp-api: dependencies: - '@repo/ui': - specifier: workspace:* - version: link:../../packages/ui - next: - specifier: ^15.2.1 - version: 15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) + '@anatine/zod-nestjs': + specifier: ^2.0.10 + version: 2.0.10(@anatine/zod-openapi@2.2.7(openapi3-ts@4.4.0)(zod@3.24.2))(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2))(openapi3-ts@4.4.0)(zod@3.24.2) + '@anatine/zod-openapi': + specifier: ^2.2.7 + version: 2.2.7(openapi3-ts@4.4.0)(zod@3.24.2) + '@autotelic/pino-seq-transport': + specifier: ^0.1.0 + version: 0.1.0 + '@fastify/send': + specifier: ^4.0.0 + version: 4.0.0 + '@fastify/static': + specifier: ^8.1.0 + version: 8.1.1 + '@keyv/redis': + specifier: ^4.2.0 + version: 4.3.2 + '@nestjs/common': + specifier: ^11.0.8 + version: 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/config': + specifier: ^4.0.0 + version: 4.0.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2) + '@nestjs/core': + specifier: ^11.0.8 + version: 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/jwt': + specifier: ^11.0.0 + version: 11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2)) + '@nestjs/passport': + specifier: ^11.0.5 + version: 11.0.5(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0) + '@nestjs/platform-express': + specifier: ^11.0.8 + version: 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12) + '@nestjs/platform-fastify': + specifier: ^11.0.8 + version: 11.0.12(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2)) + '@nestjs/schedule': + specifier: ^5.0.1 + version: 5.0.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2)) + '@nestjs/swagger': + specifier: ^11.0.3 + version: 11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2) + '@nestjs/terminus': + specifier: ^11.0.0 + version: 11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/typeorm@11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + '@nestjs/typeorm': + specifier: ^11.0.0 + version: 11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + '@stdlib/assert': + specifier: ^0.3.3 + version: 0.3.3 + argon2: + specifier: ^0.41.1 + version: 0.41.1 + async-lock: + specifier: ^1.4.1 + version: 1.4.1 + axios: + specifier: ^1.7.9 + version: 1.8.4 + bcrypt: + specifier: ^5.1.1 + version: 5.1.1 + cacheable: + specifier: ^1.8.8 + version: 1.8.9 + connection-string: + specifier: ^4.4.0 + version: 4.4.0 + cron: + specifier: ^3.5.0 + version: 3.5.0 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + fastify: + specifier: ^5.2.1 + version: 5.2.1 + flatted: + specifier: ^3.3.2 + version: 3.3.3 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + nestjs-cls: + specifier: ^5.4.1 + version: 5.4.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) + nestjs-paginate: + specifier: ^11.1.1 + version: 11.1.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2))(express@5.0.1)(fastify@5.2.1)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + nestjs-pino: + specifier: ^4.3.0 + version: 4.4.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(pino-http@10.4.0)(pino@9.6.0)(rxjs@7.8.2) + openapi3-ts: + specifier: ^4.4.0 + version: 4.4.0 + passport-jwt: + specifier: ^4.0.1 + version: 4.0.1 + passport-local: + specifier: ^1.0.0 + version: 1.0.0 + pino-http: + specifier: ^10.4.0 + version: 10.4.0 + pino-pretty: + specifier: ^13.0.0 + version: 13.0.0 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + rxjs: + specifier: ^7.8.1 + version: 7.8.2 + tozod: + specifier: ^3.0.0 + version: 3.0.0(zod@3.24.2) + typeorm: + specifier: ^0.3.20 + version: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + typeorm-naming-strategies: + specifier: ^4.1.0 + version: 4.1.0(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + typeorm-scoped: + specifier: ^1.2.0 + version: 1.2.0(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + typeorm-transactional: + specifier: ^0.5.0 + version: 0.5.0(reflect-metadata@0.2.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + zod: + specifier: ^3.24.1 + version: 3.24.2 devDependencies: + '@nestjs/schematics': + specifier: ^11.0.0 + version: 11.0.2(chokidar@4.0.3)(typescript@5.8.2) + '@nestjs/testing': + specifier: ^11.0.1 + version: 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12)) '@repo/eslint-config': specifier: workspace:* version: link:../../packages/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config + '@swc/cli': + specifier: ^0.6.0 + version: 0.6.0(@swc/core@1.11.11)(chokidar@4.0.3) + '@swc/core': + specifier: ^1.10.7 + version: 1.11.11 + '@types/async-lock': + specifier: ^1.4.2 + version: 1.4.2 + '@types/bcrypt': + specifier: ^5.0.2 + version: 5.0.2 + '@types/express': + specifier: ^5.0.0 + version: 5.0.1 + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 + '@types/lodash': + specifier: ^4.17.15 + version: 4.17.16 '@types/node': - specifier: ^22.13.10 + specifier: ^22.10.7 version: 22.13.10 - '@types/react': - specifier: 19.0.10 - version: 19.0.10 - '@types/react-dom': - specifier: 19.0.4 - version: 19.0.4(@types/react@19.0.10) - eslint: - specifier: ^9.22.0 - version: 9.22.0 + '@types/passport-jwt': + specifier: ^4.0.1 + version: 4.0.1 + '@types/supertest': + specifier: ^6.0.2 + version: 6.0.2 + globals: + specifier: ^16.0.0 + version: 16.0.0 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + mssql: + specifier: ^11.0.1 + version: 11.0.1 + prettier: + specifier: ^3.4.2 + version: 3.5.3 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + supertest: + specifier: ^7.0.0 + version: 7.0.0 + ts-jest: + specifier: ^29.2.5 + version: 29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)))(typescript@5.8.2) + ts-loader: + specifier: ^9.5.2 + version: 9.5.2(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.11.11)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 typescript: - specifier: 5.8.2 - version: 5.8.2 - - apps/web: - dependencies: - '@repo/ui': - specifier: workspace:* - version: link:../../packages/ui - next: - specifier: ^15.2.1 - version: 15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../../packages/eslint-config - '@repo/typescript-config': - specifier: workspace:* - version: link:../../packages/typescript-config - '@types/node': - specifier: ^22.13.10 - version: 22.13.10 - '@types/react': - specifier: 19.0.10 - version: 19.0.10 - '@types/react-dom': - specifier: 19.0.4 - version: 19.0.4(@types/react@19.0.10) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - typescript: - specifier: 5.8.2 + specifier: ^5.7.3 version: 5.8.2 packages/eslint-config: @@ -97,9 +240,6 @@ importers: '@eslint/js': specifier: ^9.22.0 version: 9.22.0 - '@next/eslint-plugin-next': - specifier: ^15.2.1 - version: 15.2.1 eslint: specifier: ^9.22.0 version: 9.22.0 @@ -109,12 +249,9 @@ importers: eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 - eslint-plugin-react: - specifier: ^7.37.4 - version: 7.37.4(eslint@9.22.0) - eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.22.0) + eslint-plugin-prettier: + specifier: ^5.2.2 + version: 5.2.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.1(eslint@9.22.0))(eslint@9.22.0)(prettier@3.5.3) eslint-plugin-turbo: specifier: ^2.4.4 version: 2.4.4(eslint@9.22.0)(turbo@2.4.4) @@ -130,53 +267,294 @@ importers: packages/typescript-config: {} - packages/ui: - dependencies: - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../eslint-config - '@repo/typescript-config': - specifier: workspace:* - version: link:../typescript-config - '@turbo/gen': - specifier: ^2.4.4 - version: 2.4.4(@types/node@22.13.10)(typescript@5.8.2) - '@types/node': - specifier: ^22.13.10 - version: 22.13.10 - '@types/react': - specifier: 19.0.10 - version: 19.0.10 - '@types/react-dom': - specifier: 19.0.4 - version: 19.0.4(@types/react@19.0.10) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - typescript: - specifier: 5.8.2 - version: 5.8.2 - packages: - '@babel/runtime-corejs3@7.26.9': - resolution: {integrity: sha512-5EVjbTegqN7RSJle6hMWYxO4voo4rI+9krITk+DWR+diJgGrjZjrIBnJhjrHYYQsFgI7j1w1QnrvV7YSKBfYGg==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@anatine/zod-nestjs@2.0.10': + resolution: {integrity: sha512-90TVowUCqlz7IwNf6EkrtHSTILeSwFnwWIhVDIEYPCdgfO+vVkASiT8RO+Q/olwuo3OxNef9fBDimIDxZMWzcg==} + peerDependencies: + '@anatine/zod-openapi': ^2.0.1 + '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/swagger': ^6.0.0 || ^7.0.0 + openapi3-ts: ^4.1.2 + zod: ^3.20.0 + + '@anatine/zod-openapi@2.2.7': + resolution: {integrity: sha512-kv/bGowgSGHNY2d/KIzx941ym0/elc7xoBiPri31qEUqbDPOSIppiMOZ88AedaTtLk5J1K96++h0CEsHkgFFyQ==} + peerDependencies: + openapi3-ts: ^4.1.2 + zod: ^3.20.0 + + '@angular-devkit/core@19.1.8': + resolution: {integrity: sha512-j1zHKvOsGwu5YwAZGuzi835R9vcW7PkfxmSRIJeVl+vawgk31K3zFb4UPH8AY/NPWYqXIAnwpka3HC1+JrWLWA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/core@19.2.0': + resolution: {integrity: sha512-qd2nYoHZOYWRsu4MjXG8KiDtfM9ZDRR2rDGa+rDZ3CYAsngCrPmqOebun10dncUjwAidX49P4S2U2elOmX3VYQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@19.1.8': + resolution: {integrity: sha512-sHblN9EuiJgKwJVYc+nhpU+GlVkAJHJc7lBR8YSoaugNGcCMkWn4f7rJnJDywL/CEOHBICnyWZKfTCMsMyg1Cw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular-devkit/schematics@19.1.8': + resolution: {integrity: sha512-2JGUMD3zjfY8G4RYpypm2/1YEO+O4DtFycUvptIpsBYyULgnEbJ3tlp2oRiXI2vp9tC8IyWqa/swlA8DTI6ZYQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@angular-devkit/schematics@19.2.0': + resolution: {integrity: sha512-cGGqUGqBXIGJkeL65l70y0BflDAu/0Zi/ohbYat3hvadFfumRJnVElVfJ59JtWO7FfKQjxcwCVTyuQ/tevX/9A==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@autotelic/pino-seq-transport@0.1.0': + resolution: {integrity: sha512-ECgQEKsuFmi9irUK3dMhsZl18oOpEb/XVJcGVcQcgtftf30EbvXq8MUVWobD6RPede9Oa2AINX4R2Viq/qnfLg==} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.9.0': + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} + engines: {node: '>=18.0.0'} + + '@azure/core-client@1.9.3': + resolution: {integrity: sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA==} + engines: {node: '>=18.0.0'} + + '@azure/core-http-compat@2.2.0': + resolution: {integrity: sha512-1kW8ZhN0CfbNOG6C688z5uh2yrzALE7dDXHiR9dY4vt+EbhGZQSbjDa5bQd2rf3X2pdWMsXbqbArxUyeNdvtmg==} + engines: {node: '>=18.0.0'} + + '@azure/core-lro@2.7.2': + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} + + '@azure/core-paging@1.6.2': + resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} + engines: {node: '>=18.0.0'} + + '@azure/core-rest-pipeline@1.19.1': + resolution: {integrity: sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w==} + engines: {node: '>=18.0.0'} + + '@azure/core-tracing@1.2.0': + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.11.0': + resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} + engines: {node: '>=18.0.0'} + + '@azure/identity@4.8.0': + resolution: {integrity: sha512-l9ALUGHtFB/JfsqmA+9iYAp2a+cCwdNO/cyIr2y7nJLJsz1aae6qVP8XxT7Kbudg0IQRSIMXj0+iivFdbD1xPA==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-common@2.0.0': + resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-keys@4.9.0': + resolution: {integrity: sha512-ZBP07+K4Pj3kS4TF4XdkqFcspWwBHry3vJSOFM5k5ZABvf7JfiMonvaFk2nBF6xjlEbMpz5PE1g45iTMme0raQ==} + engines: {node: '>=18.0.0'} + + '@azure/logger@1.1.4': + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} + + '@azure/msal-browser@4.7.0': + resolution: {integrity: sha512-H4AIPhIQVe1qW4+BJaitqod6UGQiXE3juj7q2ZBsOPjuZicQaqcbnBp2gCroF/icS0+TJ9rGuyCBJbjlAqVOGA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@15.2.1': + resolution: {integrity: sha512-eZHtYE5OHDN0o2NahCENkczQ6ffGc0MoUSAI3hpwGpZBHJXaEQMMZPWtIx86da2L9w7uT+Tr/xgJbGwIkvTZTQ==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@3.3.0': + resolution: {integrity: sha512-ulsT3EHF1RQ29X55cxBLgKsIKWni9JdbUqG7sipGVP4uhWcBpmm/vhKOMH340+27Acm9+kHGnN/5XmQ5LrIDgA==} + engines: {node: '>=16'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.10': + resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -215,6 +593,45 @@ packages: resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/accept-negotiator@2.0.1': + resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} + + '@fastify/ajv-compiler@4.0.2': + resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==} + + '@fastify/cors@11.0.0': + resolution: {integrity: sha512-41Bx0LVGr2a6DnnhDN/SgfDlTRNZtEs8niPxyoymV6Hw09AIdz/9Rn/0Fpu+pBOs6kviwS44JY2mB8NcU2qSAA==} + + '@fastify/error@4.1.0': + resolution: {integrity: sha512-KeFcciOr1eo/YvIXHP65S94jfEEqn1RxTRBT1aJaHxY5FK0/GDXYozsQMMWlZoHgi8i0s+YtrLsgj/JkUUjSkQ==} + + '@fastify/fast-json-stringify-compiler@5.0.2': + resolution: {integrity: sha512-YdR7gqlLg1xZAQa+SX4sMNzQHY5pC54fu9oC5aYSUqBhyn6fkLkrdtKlpVdCNPlwuUuXA1PjFTEmvMF6ZVXVGw==} + + '@fastify/formbody@8.0.2': + resolution: {integrity: sha512-84v5J2KrkXzjgBpYnaNRPqwgMsmY7ZDjuj0YVuMR3NXCJRCgKEZy/taSP1wUYGn0onfxJpLyRGDLa+NMaDJtnA==} + + '@fastify/forwarded@3.0.0': + resolution: {integrity: sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==} + + '@fastify/merge-json-schemas@0.2.1': + resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} + + '@fastify/middie@9.0.3': + resolution: {integrity: sha512-7OYovKXp9UKYeVMcjcFLMcSpoMkmcZmfnG+eAvtdiatN35W7c+r9y1dRfpA+pfFVNuHGGqI3W+vDTmjvcfLcMA==} + + '@fastify/proxy-addr@5.0.0': + resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==} + + '@fastify/send@3.3.1': + resolution: {integrity: sha512-6pofeVwaHN+E/MAofCwDqkWUliE3i++jlD0VH/LOfU8TJlCkMUSgKvA9bawDdVXxjve7XrdYMyDmkiYaoGWEtA==} + + '@fastify/send@4.0.0': + resolution: {integrity: sha512-eJjKDxyBnZ1iMHcmwYWG5wSA/yzVY/yrBy3Upd2+hc0omcK13tWeXRcbF28zEcbl+Z2kXEgMzJ5Rb/gXGWx9Rg==} + + '@fastify/static@8.1.1': + resolution: {integrity: sha512-TW9eyVHJLytZNpBlSIqd0bl1giJkEaRaPZG+5AT3L/OBKq9U8D7g/OYmc2NPQZnzPURGhMt3IAWuyVkvd2nOkQ==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -235,175 +652,551 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] + '@inquirer/checkbox@4.1.4': + resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] + '@inquirer/confirm@5.1.8': + resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] + '@inquirer/core@10.1.9': + resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] + '@inquirer/editor@4.2.9': + resolution: {integrity: sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] + '@inquirer/expand@4.0.11': + resolution: {integrity: sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] + '@inquirer/figures@1.0.11': + resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} + engines: {node: '>=18'} - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] + '@inquirer/input@4.1.8': + resolution: {integrity: sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] + '@inquirer/number@3.0.11': + resolution: {integrity: sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] + '@inquirer/password@4.0.11': + resolution: {integrity: sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] + '@inquirer/prompts@7.2.1': + resolution: {integrity: sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] + '@inquirer/prompts@7.3.2': + resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] + '@inquirer/rawlist@4.0.11': + resolution: {integrity: sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] + '@inquirer/search@3.0.11': + resolution: {integrity: sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] + '@inquirer/select@4.1.0': + resolution: {integrity: sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] + '@inquirer/type@3.0.5': + resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@next/env@15.2.1': - resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} + '@js-joda/core@5.6.4': + resolution: {integrity: sha512-ChdLDTYMEoYoiKZMT90wZMEdGvZ2/QZMnhvjvEqeO5oLoxUfSiLzfe6Lhf3g88+MhZ+utbAu7PAxX1sZkLo5pA==} - '@next/eslint-plugin-next@15.2.1': - resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==} + '@keyv/redis@4.3.2': + resolution: {integrity: sha512-9LtpIiRArUIg+hj1hV87d0G+1/229S0Ybi2bupc497oRzHOhYojUkApfubHjMDnYcNuEY7JQTdHlYYCPxhaZfg==} + engines: {node: '>= 18'} - '@next/swc-darwin-arm64@15.2.1': - resolution: {integrity: sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ==} + '@keyv/serialize@1.0.3': + resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + 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==} + + '@napi-rs/nice-android-arm-eabi@1.0.1': + resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/nice-android-arm64@1.0.1': + resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/nice-darwin-arm64@1.0.1': + resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.1': - resolution: {integrity: sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ==} + '@napi-rs/nice-darwin-x64@1.0.1': + resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.1': - resolution: {integrity: sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ==} + '@napi-rs/nice-freebsd-x64@1.0.1': + resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.1': - resolution: {integrity: sha512-3v0pF/adKZkBWfUffmB/ROa+QcNTrnmYG4/SS+r52HPwAK479XcWoES2I+7F7lcbqc7mTeVXrIvb4h6rR/iDKg==} + '@napi-rs/nice-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.1': - resolution: {integrity: sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww==} + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/nice-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/nice-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.1': - resolution: {integrity: sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg==} + '@napi-rs/nice-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.1': - resolution: {integrity: sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw==} + '@napi-rs/nice-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.1': - resolution: {integrity: sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g==} + '@napi-rs/nice-win32-ia32-msvc@1.0.1': + resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@napi-rs/nice@1.0.1': + resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} + engines: {node: '>= 10'} + + '@nestjs/cli@11.0.5': + resolution: {integrity: sha512-ab/d8Ple+dMSQ4pC7RSNjhntpT8gFQQE8y/F/ilaplp7zPGpuxbayRtYbsA/wc1UkJHORDckrqFc8Jh8mrTq2A==} + engines: {node: '>= 20.11'} + hasBin: true + peerDependencies: + '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 + '@swc/core': ^1.3.62 + peerDependenciesMeta: + '@swc/cli': + optional: true + '@swc/core': + optional: true + + '@nestjs/common@11.0.12': + resolution: {integrity: sha512-6PXxmDe2iYmb57xacnxzpW1NAxRZ7Gf+acMT7/hmRB/4KpZiFU/cNvLWwgbM2BL5QSzQulOwY6ny5bbKnPpB+A==} + 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@4.0.1': + resolution: {integrity: sha512-0hr6lKS//Wf8A6VcV69ts8uD0fke6jtmmmXSxzvwAzOM/HEXEKYEp21nRU+cpYxlYqm7Khb0oTOoVuDGk+AWUw==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + rxjs: ^7.1.0 + + '@nestjs/core@11.0.12': + resolution: {integrity: sha512-micQrbh9iL0PuYVx2vsUojuNmMUyqoMCuj7eGAUhvjiZUh4DBLPdxYmJEayCT/equHSiw9vNC95Vm0JigVZ44g==} + engines: {node: '>= 20'} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + '@nestjs/websockets': ^11.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@11.0.0': + resolution: {integrity: sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + + '@nestjs/mapped-types@2.1.0': + resolution: {integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.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@11.0.5': + resolution: {integrity: sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + passport: ^0.5.0 || ^0.6.0 || ^0.7.0 + + '@nestjs/platform-express@11.0.12': + resolution: {integrity: sha512-Jze6dY1q1BBAjFuPQT9CLjYFl5IxMSQQxD+xs6cV+4EIysHxgSFZMJqiTpknZTFgPneyp0zF1TtQAjxBshnwlg==} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + + '@nestjs/platform-fastify@11.0.12': + resolution: {integrity: sha512-wpUI+A5jlSTEUyc212kMG2pGVCS29A3xzn8Y73tgu+szX+womi6zXud//+GArrlUcOIaA8Z2sCJLiROkiH2D2A==} + peerDependencies: + '@fastify/static': ^8.0.0 + '@fastify/view': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + '@fastify/view': + optional: true + + '@nestjs/schedule@5.0.1': + resolution: {integrity: sha512-kFoel84I4RyS2LNPH6yHYTKxB16tb3auAEciFuc788C3ph6nABkUfzX5IE+unjVaRX+3GuruJwurNepMlHXpQg==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 + + '@nestjs/schematics@11.0.2': + resolution: {integrity: sha512-C4KM3BHBG6tRX8t5UrHdUq8Y49asEfJUora/fBXge3UTAnxKGlXc20p5s2Q0Q1+l+1YaXqTrKGSIbYXdPX8r9g==} + peerDependencies: + typescript: '>=4.8.2' + + '@nestjs/swagger@11.0.7': + resolution: {integrity: sha512-WQBDs7yM8KhEKK/ukJOqse6/qLrDKbIIYJjpYvUH79Y9Fm/+9l6lQ3buqBf6jzwmzTaVCw9GVu3vhIuKlYVYRA==} + peerDependencies: + '@fastify/static': ^8.0.0 + '@nestjs/common': ^11.0.1 + '@nestjs/core': ^11.0.1 + 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/terminus@11.0.0': + resolution: {integrity: sha512-c55LOo9YGovmQHtFUMa/vDaxGZ2cglMTZejqgHREaApt/GArTfgYYGwhRXPLq8ZwiQQlLuYB+79e9iA8mlDSLA==} + peerDependencies: + '@grpc/grpc-js': '*' + '@grpc/proto-loader': '*' + '@mikro-orm/core': '*' + '@mikro-orm/nestjs': '*' + '@nestjs/axios': ^2.0.0 || ^3.0.0 || ^4.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 + '@nestjs/microservices': ^10.0.0 || ^11.0.0 + '@nestjs/mongoose': ^11.0.0 + '@nestjs/sequelize': ^10.0.0 || ^11.0.0 + '@nestjs/typeorm': ^10.0.0 || ^11.0.0 + '@prisma/client': '*' + mongoose: '*' + reflect-metadata: 0.1.x || 0.2.x + rxjs: 7.x + sequelize: '*' + typeorm: '*' + peerDependenciesMeta: + '@grpc/grpc-js': + optional: true + '@grpc/proto-loader': + optional: true + '@mikro-orm/core': + optional: true + '@mikro-orm/nestjs': + optional: true + '@nestjs/axios': + optional: true + '@nestjs/microservices': + optional: true + '@nestjs/mongoose': + optional: true + '@nestjs/sequelize': + optional: true + '@nestjs/typeorm': + optional: true + '@prisma/client': + optional: true + mongoose: + optional: true + sequelize: + optional: true + typeorm: + optional: true + + '@nestjs/testing@11.0.12': + resolution: {integrity: sha512-jl1McTqrY+zRBFIWcFMVwesY2v++mAdHrrzXsLxatgkf6wRVh6te1MQ6LikgQ6qz4P5qzVV6EiXQVLGvARe5Xw==} + peerDependencies: + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + + '@nestjs/typeorm@11.0.0': + resolution: {integrity: sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.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'} @@ -416,14 +1209,334 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nuxt/opencollective@0.4.1': + resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} + engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} + hasBin: true + + '@phc/format@1.0.0': + resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} + engines: {node: '>=10'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.6.0': + resolution: {integrity: sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@sqltools/formatter@1.2.5': + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + + '@stdlib/array@0.3.3': + resolution: {integrity: sha512-DaXQwdLRLmxqtu6g5jWvA+6kSHfB0HbnWe3aPGTk+5AaEUFaF9Xz7rbIdx93IAwfvOQH/aE0pCWetW5fMXbjGA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/assert@0.3.3': + resolution: {integrity: sha512-A1N2YwQfpGx8+1ZJr/g9C02KanoyRy9D5LFWeHu7TJq6Mj/g/nhK6U9AFbNtndJ2yvLOUw/FKjrqaP87xswCrw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/bigint@0.3.3': + resolution: {integrity: sha512-F2WgGnjz/8JEmv71onXb111gXTEcRiw3NNdgjlNT8AJN2VlBb3TiD7Do5rI2ipo+QMN0S0o/6fMKZ5xVdzjsBg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/blas@0.3.3': + resolution: {integrity: sha512-Kmx/3AnNVsfH8yXdHz/Dg/n58fxdv3yrcNOggBzsoR4Kj0DvROE57SnEy+JB3ZrWaAoNVx1Qoq2aokTStFvThg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/boolean@0.3.3': + resolution: {integrity: sha512-rYfgUSb5QKpDDFk5UW5iLDtRxPL2xy0WJxRvl/Gjkh2SBocShOMHk1vgHWZM3qHJoxcKtACz7Q3k+LOrNjXvNg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/buffer@0.3.3': + resolution: {integrity: sha512-6DY/MIr+8ICGM49pbq6SLQ/kuO6JzGyc6Xfe2EBKHe4akurUYsxzAQn8NHgxNy+GG+ov86iXB+iYLhIOPYt21Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/cli@0.3.3': + resolution: {integrity: sha512-Ax4ql11q4zZ8z49FwekuPb26iQ6oi/sOl17nQOr6lHs+9SOG0QDoTir0fZ8oCswCVoRnRlNNCaqHIavvLvCOxQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/complex@0.3.3': + resolution: {integrity: sha512-WmzBICm3WluhQrGQDaw1iAc7JvHfGNnN0ZBM6c0z7Is93f5YTemb/ZxWwPuueuZLUZF38i8nS6SKU/IlYujf7A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/constants@0.3.3': + resolution: {integrity: sha512-LZp2lkdgaKB16HfhljiyWQDW9gsrRvkXkFH31q8s/tDlrurOhn6RDb/kHyHsvIzEcT2FNvlntBUuqdkSnEgSsw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/fs@0.3.3': + resolution: {integrity: sha512-tsePrjDxwhPVwJZsRt938Phd8EbrOZbiYwdzghdaGGkh1SipZI5Nn32I1il71aDLwBEiXqfs7LOikc9oJZXbPw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/function@0.3.3': + resolution: {integrity: sha512-Wv4g2I8YFf1m0e6bP+sLeM55Xtg/kVd39ckh/N1NoYR8LfwPBqU/BTKdP2HiYEDU8pzK1ZG5f9kMytHJjvV7qw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/iter@0.3.3': + resolution: {integrity: sha512-fjC4IbzJI9c+gRnnPalS7CHD0vEoKByN5lQe/SE8EBCeUwkxdjYFBwzVqK0fDIW9SjpzZup0b82fiwcPZiyCaA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/math@0.3.3': + resolution: {integrity: sha512-X64M4ovkMOOVdEi5uMVtemGNxa6iQRgC7yaej/BiUC4mP+sfBaw5dTD7hsVPHtcLm8jUtGHALSykSJ2glwUcVg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/napi@0.3.3': + resolution: {integrity: sha512-VeQ2u7bi0K3SFVJAfQHSmsK4IFBfFT9uB8U5fIZLcdxNKwD+M84hhul/0w7JVB+4eQJkll0G3pQdq3hkXSgsXg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/ndarray@0.3.3': + resolution: {integrity: sha512-qvqgTxwLtz+0PvG9C6RAUkdkd+24eB3PccZNvsd7ILwPPLhcA7qNNhe6MNPLnuHnjO6Uz+yyniKOYnsdJcPN9w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/nlp@0.3.3': + resolution: {integrity: sha512-tZ5zPgfpWE+JGQ+6ZXMy0STrkjK7Cbux2oI1WjAFOIPAOYmBvsN6q6oqu+Jsy+3bqvbfl+mcYJw6KHpXqGauFQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/number@0.3.3': + resolution: {integrity: sha512-BltISq+j1q0GLaNZ8rPKGYyDSVlkXsFfn+0t9CXb7w+Vq07Vb3q6siwavVJNb+GAUL+NfYchGbRwi23BIZGsHw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/object@0.3.3': + resolution: {integrity: sha512-DtazD7RpA7NrkwsonTpbe5eNDAJ6m609CB+b6BgiXxF+utfHfUzo5Zc1/MqsHPajWxZMf+b7t7CTc1Le8U3jrA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/os@0.3.3': + resolution: {integrity: sha512-klCH/XYeximeg+PH4zJ8wrVi+yMY+ZBbLqrXMhV1ZvzfdXCw2elnEtSWzK6kMfbzadqq2RofZanJl5FzNfcBBA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/process@0.3.3': + resolution: {integrity: sha512-PxvkWRA+PPxer9I+V8aks/RTKCtMgEyvg8O8jUNzZtFiFTrJ582cWsAn1J1SfRc8kcC9/iFIjBJKKRHO0aN7YQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/proxy@0.3.3': + resolution: {integrity: sha512-FfoCUpuwOd9n9a4tBS0jP0gSqzZTtoz0lb4WN5rHioDwBgV+453A+D6ZI7VytT35kZSQQoiHRzmYer7u5pUURA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/random@0.3.3': + resolution: {integrity: sha512-3dvcMUPlZnNhhfZeWd5RQnFHnusd4RiX/yn0zrxNOtxK9WVsVvI8OKIsHbRXITFVJxeBCXd3plI/NQW1f+cJsg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/regexp@0.3.3': + resolution: {integrity: sha512-H7dhYidU+ztyj6qKZWq0aExcBDi0f9QzN3HlGqo5AzTuNWB3ScvCeACb3g7h/G/ga9+Js9DlyaiBqrmyHoK+og==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/slice@0.3.3': + resolution: {integrity: sha512-Ztb3tEeYQZDu1YT+60FdXhFrFzxcQqAfBjJEHWkbkXYO2uvBNMYY+g5tdMw4pMMFE2BSUBcBQXZ/R8ioIDqYCg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/stats@0.3.3': + resolution: {integrity: sha512-prq0KD/Nc+VRsuuD82L8HSmmJNhroNLVc9DPHZ21e8spQurSx0SUoiScyTbZ6muMITUl0ont4AE1Ql2VoB84eQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/streams@0.3.3': + resolution: {integrity: sha512-spk7rqsj7xlDI3R/RIZ9BXxh+qTn7wK5+7J13F1BW0QiHIJx1M7qpH8YRx738Y2poPvhEDWQsQ76S1/4FjBVIQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/strided@0.3.3': + resolution: {integrity: sha512-kKT8n/o+muU3JnvUhlSzlYi6Tvk0wJTbFBtQkLDkYMg/+MmH0iluxqQTOEqqIeBUtQ0ymfH88dsz+dKsKsRrbw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/string@0.3.3': + resolution: {integrity: sha512-CqBfLTQph06AqOMzgQY6woydF1HHdUaeNaKLYKMYVJrqi3WhSqDfIhcQYk8KlouzXmLrzi6y8HcpwrsEQfqAqA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/symbol@0.3.3': + resolution: {integrity: sha512-rOFvxSUdbUulpyy4YIFfW1NLiHu/V06PyGGMu92DFJBjRwwCAfXFatJKQ9XjVlelraJgHtuHeXB/8vgOIC09IQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/time@0.3.3': + resolution: {integrity: sha512-/FwSa/nn9W2QXGRT7eQMR+gf5cXgHHFE6e1oC7kq9CGYHuGRV3BfsoYXdxZVyumj0Y04fr7obEm2TkHcmkM7wQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/types@0.4.3': + resolution: {integrity: sha512-9GCqS2eni2VSwa5/CCniAJ4I1eWLtvior1z6hoPJp6VTNMgW9Lh4BiI84IO0xun/0qAclJ+mTGTiCTZxZLK13A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/utils@0.3.3': + resolution: {integrity: sha512-glF2J7pLpMie2UwjGrfcNYVOCtZZ7XN+MVgv5B1/7MeA4FaiJA7bzqKYfOU/U8eCZvdz3rzZSO4HWxQw6TC2wQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@stdlib/wasm@0.1.1': + resolution: {integrity: sha512-iGuGzsoYLF7hi1TcMRrAhmUKG8sVhbDk+T79XntL5h2kQ14/d5p3X0ptCl3ZFciIGd1matQ/TrDVhr4vMvVmbg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + + '@swc/cli@0.6.0': + resolution: {integrity: sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw==} + engines: {node: '>= 16.14.0'} + hasBin: true + peerDependencies: + '@swc/core': ^1.2.66 + chokidar: ^4.0.1 + peerDependenciesMeta: + chokidar: + optional: true + + '@swc/core-darwin-arm64@1.11.11': + resolution: {integrity: sha512-vJcjGVDB8cZH7zyOkC0AfpFYI/7GHKG0NSsH3tpuKrmoAXJyCYspKPGid7FT53EAlWreN7+Pew+bukYf5j+Fmg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.11.11': + resolution: {integrity: sha512-/N4dGdqEYvD48mCF3QBSycAbbQd3yoZ2YHSzYesQf8usNc2YpIhYqEH3sql02UsxTjEFOJSf1bxZABDdhbSl6A==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.11.11': + resolution: {integrity: sha512-hsBhKK+wVXdN3x9MrL5GW0yT8o9GxteE5zHAI2HJjRQel3HtW7m5Nvwaq+q8rwMf4YQRd8ydbvwl4iUOZx7i2Q==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.11.11': + resolution: {integrity: sha512-YOCdxsqbnn/HMPCNM6nrXUpSndLXMUssGTtzT7ffXqr7WuzRg2e170FVDVQFIkb08E7Ku5uOnnUVAChAJQbMOQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.11.11': + resolution: {integrity: sha512-nR2tfdQRRzwqR2XYw9NnBk9Fdvff/b8IiJzDL28gRR2QiJWLaE8LsRovtWrzCOYq6o5Uu9cJ3WbabWthLo4jLw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.11.11': + resolution: {integrity: sha512-b4gBp5HA9xNWNC5gsYbdzGBJWx4vKSGybGMGOVWWuF+ynx10+0sA/o4XJGuNHm8TEDuNh9YLKf6QkIO8+GPJ1g==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.11.11': + resolution: {integrity: sha512-dEvqmQVswjNvMBwXNb8q5uSvhWrJLdttBSef3s6UC5oDSwOr00t3RQPzyS3n5qmGJ8UMTdPRmsopxmqaODISdg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.11.11': + resolution: {integrity: sha512-aZNZznem9WRnw2FbTqVpnclvl8Q2apOBW2B316gZK+qxbe+ktjOUnYaMhdCG3+BYggyIBDOnaJeQrXbKIMmNdw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.11.11': + resolution: {integrity: sha512-DjeJn/IfjgOddmJ8IBbWuDK53Fqw7UvOz7kyI/728CSdDYC3LXigzj3ZYs4VvyeOt+ZcQZUB2HA27edOifomGw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.11.11': + resolution: {integrity: sha512-Gp/SLoeMtsU4n0uRoKDOlGrRC6wCfifq7bqLwSlAG8u8MyJYJCcwjg7ggm0rhLdC2vbiZ+lLVl3kkETp+JUvKg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.11.11': + resolution: {integrity: sha512-pCVY2Wn6dV/labNvssk9b3Owi4WOYsapcbWm90XkIj4xH/56Z6gzja9fsU+4MdPuEfC2Smw835nZHcdCFGyX6A==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/types@0.1.19': + resolution: {integrity: sha512-WkAZaAfj44kh/UFdAQcrMP1I0nwRqpt27u+08LMBYMqmQfwwMofYoMh/48NGkMMRfC4ynpfwRbJuu8ErfNloeA==} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tediousjs/connection-string@0.5.0': + resolution: {integrity: sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -437,43 +1550,137 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@turbo/gen@2.4.4': - resolution: {integrity: sha512-02DR0UFngfVROq/L7j4VdkpT46Rnk5mm8i5AE985jV114SjuN57Y2oBjSK9Lzm6hlun/H0MQtdJBRybk4nRIAQ==} + '@types/async-lock@1.4.2': + resolution: {integrity: sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==} - '@turbo/workspaces@2.4.4': - resolution: {integrity: sha512-5CK3ZkVskSExf9YaXVMJ04F6Fb18HXKVZw8TMKVP7qOIvHGiBmT6YzWHqsQ3/PMNov2TzJ41ofRKX3zjR3G6Yg==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/bcrypt@5.0.2': + resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/cls-hooked@4.3.9': + resolution: {integrity: sha512-CMtHMz6Q/dkfcHarq9nioXH8BDPP+v5xvd+N90lBQ2bdmu06UvnLDqxTKoOJzz4SzIwb/x9i4UXGAAcnUDuIvg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + + '@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.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} - '@types/inquirer@6.5.0': - resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + '@types/express@5.0.1': + resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/minimatch@5.1.2': - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} + + '@types/jsonwebtoken@9.0.9': + resolution: {integrity: sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==} + + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + + '@types/luxon@3.4.2': + resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} + + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + + '@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/node@22.13.10': resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} - '@types/react-dom@19.0.4': - resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} - peerDependencies: - '@types/react': ^19.0.0 + '@types/passport-jwt@4.0.1': + resolution: {integrity: sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==} - '@types/react@19.0.10': - resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} + '@types/passport-strategy@0.2.38': + resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==} - '@types/through@0.0.33': - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + '@types/passport@1.0.17': + resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==} - '@types/tinycolor2@1.4.6': - resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/readable-stream@4.0.18': + resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/superagent@8.1.9': + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + + '@types/supertest@6.0.2': + resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} '@typescript-eslint/eslint-plugin@8.26.0': resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} @@ -522,6 +1729,111 @@ packages: resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@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==} + + '@xhmikosr/archive-type@7.0.0': + resolution: {integrity: sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@xhmikosr/bin-check@7.0.3': + resolution: {integrity: sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==} + engines: {node: '>=18'} + + '@xhmikosr/bin-wrapper@13.0.5': + resolution: {integrity: sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-tar@8.0.1': + resolution: {integrity: sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-tarbz2@8.0.2': + resolution: {integrity: sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-targz@8.0.1': + resolution: {integrity: sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-unzip@7.0.0': + resolution: {integrity: sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==} + engines: {node: '>=18'} + + '@xhmikosr/decompress@10.0.1': + resolution: {integrity: sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==} + engines: {node: '>=18'} + + '@xhmikosr/downloader@15.0.1': + resolution: {integrity: sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==} + engines: {node: '>=18'} + + '@xhmikosr/os-filter-obj@3.0.0': + resolution: {integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==} + engines: {node: ^14.14.0 || >=16.0.0} + + '@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==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -531,25 +1843,57 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + 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.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + 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'} @@ -558,77 +1902,157 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + ansis@3.16.0: + resolution: {integrity: sha512-sU7d/tfZiYrsIAXbdL/CNZld5bCkruzwT5KmqmadCJYxuLxHAOBjidxD5+iLmN/6xEfjcQq1l7OpsiCBlc4LzA==} + 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.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + arch@3.0.0: + resolution: {integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==} + + 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==} + argon2@0.41.1: + resolution: {integrity: sha512-dqCW8kJXke8Ik+McUcMDltrbuAWETPyU6iq+4AhxqKphWi7pChB/Zgd/Tp/o8xRLbg8ksMj46F/vph9wnxpTzQ==} + engines: {node: '>=16.17.0'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + async-hook-jl@1.7.6: + resolution: {integrity: sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==} + engines: {node: ^4.7 || >=6.9 || >=7.3} + + async-lock@1.4.1: + resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + avvio@9.1.0: + resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} + + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} + bcrypt@5.1.1: + resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} + engines: {node: '>= 10.0.0'} + + bin-version-check@5.1.0: + resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} + engines: {node: '>=12'} + + bin-version@6.0.0: + resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} + engines: {node: '>=12'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@6.1.0: + resolution: {integrity: sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==} + + body-parser@2.1.0: + resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==} + engines: {node: '>=18'} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -639,21 +2063,60 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + 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==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + 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'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + cacheable@1.8.9: + resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -662,32 +2125,57 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} - caniuse-lite@1.0.30001701: - resolution: {integrity: sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} + caniuse-lite@1.0.30001706: + resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - change-case@3.1.0: - resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + check-disk-space@3.4.0: + resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==} + engines: {node: '>=16'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.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'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} cli-cursor@3.1.0: @@ -698,75 +2186,182 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + 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@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + cls-hooked@4.2.2: + resolution: {integrity: sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==} + engines: {node: ^4.7 || >=6.9 || >=7.3 || >=8.2.1} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + 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'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - constant-case@2.0.0: - resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} - core-js-pure@3.41.0: - resolution: {integrity: sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==} + connection-string@4.4.0: + resolution: {integrity: sha512-D4xsUjSoE8m/B5yMOvCIHY+2ME6FIZhCq0NzBBT57Q8BuL7ArFhBK04osOfReoW4KFr5ztzFwWRdmnv9rCvu2w==} + engines: {node: '>=14'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + 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-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + 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-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cron@3.5.0: + resolution: {integrity: sha512-0eYZqCnapmxYcV06uktql93wNWdlTmmBFP2iYz+JPVcQqlyFYcn1lFuIk4R54pkOmE7mcldTAPZv6X5XA4Q46A==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} @@ -777,65 +2372,148 @@ packages: supports-color: optional: true - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + 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'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + 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'} + defaults@3.0.0: + resolution: {integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==} + engines: {node: '>=18'} - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} - del@5.1.0: - resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} - engines: {node: '>=8'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dot-case@2.1.1: - resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dotenv-expand@12.0.1: + resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} + engines: {node: '>=12'} dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + 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==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.122: + resolution: {integrity: sha512-EML1wnwkY5MFh/xUnCvY8FrhUuKzdYhowuZExZOfwJo+Zu9OsNCI23Cgl5y7awy7HrUHSwB1Z8pZX5TI34lsUg==} + + emitter-listener@1.1.2: + resolution: {integrity: sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -845,9 +2523,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -857,28 +2534,24 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + 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@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - eslint-config-prettier@10.1.1: resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -886,17 +2559,19 @@ packages: resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} engines: {node: '>=6'} - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-prettier@5.2.3: + resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true eslint-plugin-turbo@2.4.4: resolution: {integrity: sha512-myEnQTjr3FkI0j1Fu0Mqnv1z8n0JW5iFTOUNzHaEevjzl+1uzMSsFwks/x8i3rGmI3EYtC1BY8K2B2pS0Vfx6w==} @@ -904,6 +2579,10 @@ packages: eslint: '>6.6.0' turbo: '>2.0.0' + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@8.3.0: resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -919,6 +2598,7 @@ packages: eslint@9.22.0: resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true peerDependencies: jiti: '*' peerDependenciesMeta: @@ -932,6 +2612,7 @@ packages: esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} @@ -941,6 +2622,10 @@ packages: 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'} @@ -949,20 +2634,60 @@ packages: 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'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} + + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} @@ -971,28 +2696,80 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stringify@6.0.1: + resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==} + fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastify-plugin@5.0.1: + resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} + + fastify@5.2.1: + resolution: {integrity: sha512-rslrNBF67eg8/Gyn7P2URV8/6pz8kSAscFL4EThZJ8JBMaXacVdVE4hmUcnPNKERl5o/xTiBSLfdowBRhVF1WA==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-type@19.6.0: + resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} + engines: {node: '>=18'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filename-reserved-regex@3.0.0: + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + filenamify@6.0.0: + resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} + engines: {node: '>=16'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + find-my-way@9.2.0: + resolution: {integrity: sha512-d3uCir8Hmg7W1Ywp8nKf2lJJYU9Nwinvo+1D39Dn09nz65UKXIxUh7j7K8zeWhxqe1WrkS7FJyON/Q/3lPoc6w==} + engines: {node: '>=14'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-versions@5.1.0: + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -1000,31 +2777,96 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + 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 + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formidable@3.5.2: + resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} + + 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'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} 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.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + 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==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + 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-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -1033,13 +2875,9 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1049,8 +2887,25 @@ packages: 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@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} @@ -1060,50 +2915,27 @@ packages: resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@10.0.2: - resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} - engines: {node: '>=8'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@13.0.0: + resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} + engines: {node: '>=16'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gradient-string@2.0.2: - resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} - engines: {node: '>=10'} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} @@ -1113,17 +2945,45 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - header-case@1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + + hexoid@2.0.0: + resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} + engines: {node: '>=8'} + + hookified@1.8.1: + resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -1136,6 +2996,14 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1147,255 +3015,477 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - 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==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inspect-with-kind@1.0.5: + resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} - inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} - inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - is-lower-case@1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} - is-upper-case@1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + 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==} + + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-md4@0.3.2: + resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + 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-ref-resolver@2.0.1: + resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==} + 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.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.3.2: + resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + light-my-request@6.6.0: + resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + 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.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 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==} - log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} - log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lower-case-first@1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} engines: {node: '>=12'} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + 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'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1403,17 +3493,63 @@ packages: 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-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -1421,60 +3557,149 @@ packages: 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.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + 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 + + mnemonist@0.40.0: + resolution: {integrity: sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mssql@11.0.1: + resolution: {integrity: sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==} + engines: {node: '>=18'} + hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + multer@1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + native-duplexpair@1.0.0: + resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - next@15.2.1: - resolution: {integrity: sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + nestjs-cls@5.4.1: + resolution: {integrity: sha512-hm0CQE6hRjr07yqSTcj50eQwNuZhlOHocX1W0CHpsYo9aDqsEysGkshegvAlC/4NVedTeAU6J0dVjAvNPTMrjQ==} + engines: {node: '>=18'} peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 + '@nestjs/common': '>= 10 < 12' + '@nestjs/core': '>= 10 < 12' + reflect-metadata: '*' + rxjs: '>= 7' + + nestjs-paginate@11.1.1: + resolution: {integrity: sha512-PYNTxnQ3ZHGjXfOgqMNtEmMlad1o9M6RoiXPSQtCl3n8MDH+t2igXn9Z9Id6B5SfBnsrvRD9YEi2Zb1EU5g6Fg==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/swagger': ^8.0.0 || ^11.0.0 + express: ^4.21.2 || ^5.0.0 + fastify: ^4.0.0 || ^5.0.0 + typeorm: ^0.3.17 + + nestjs-pino@4.4.0: + resolution: {integrity: sha512-+GMNlcNWDRrMtlQftfcxN+5pV2C25A4wsYIY7cfRJTMW4b8IFKYReDrG1lUp5LGql9fXemmnVJ2Ww10iIkCZPQ==} + engines: {node: '>= 14'} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + pino: ^7.5.0 || ^8.0.0 || ^9.0.0 + pino-http: ^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + rxjs: ^7.1.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-addon-api@8.3.1: + resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==} + engines: {node: ^18 || ^20 || >= 21} + + 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: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: + encoding: optional: true - no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true - node-plop@0.26.3: - resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} - engines: {node: '>=8.9.4'} + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + 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'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + 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'} @@ -1483,25 +3708,16 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + obliterator@2.0.5: + resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - 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==} @@ -1510,14 +3726,17 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + openapi3-ts@4.4.0: + resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@4.1.1: - resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} - engines: {node: '>=8'} - ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -1526,42 +3745,59 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + 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'} - pascal-case@2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} - path-case@2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + 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-local@1.0.0: + resolution: {integrity: sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==} + engines: {node: '>= 0.4.0'} + + passport-strategy@1.0.0: + resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} + engines: {node: '>= 0.4.0'} + + passport@0.7.0: + resolution: {integrity: sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==} + engines: {node: '>= 0.4.0'} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -1578,12 +3814,31 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + pause@0.0.1: + resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + + peek-readable@5.4.2: + resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} + engines: {node: '>=14.16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1592,162 +3847,310 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-http@10.4.0: + resolution: {integrity: sha512-vjQsKBE+VN1LVchjbfLE7B6nBeGASZNRNKsR68VS0DolTm5R3zo+47JX1wjm0O96dcbvA7vnqt8YqOWlG5nN0w==} + + pino-pretty@13.0.0: + resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==} + hasBin: true + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.6.0: + resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + piscina@4.9.2: + resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} - peerDependencies: - react: ^19.0.0 + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} - engines: {node: '>=0.10.0'} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + 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'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} - registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} - registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + redis@4.7.0: + resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} + + 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-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} + hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + 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'} + router@2.1.0: + resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} + engines: {node: '>= 18'} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + 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-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + safe-regex2@4.0.1: + resolution: {integrity: sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg==} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + secure-json-parse@3.0.2: + resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==} + + seek-bzip@2.0.0: + resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} + hasBin: true + + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + + semver-truncate@3.0.0: + resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} + engines: {node: '>=12'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} + hasBin: true - sentence-case@2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + seq-logging@1.1.2: + resolution: {integrity: sha512-9n7bCIHiMdBene104oSEa2917OcNBw+uee2v+we4AQxmjqt/aeQkWy1296IvGsogbj5fK6wuDNhVhm/DYmauVA==} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -1757,6 +4160,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -1776,65 +4182,95 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - snake-case@2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + 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'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + sql-highlight@6.0.0: + resolution: {integrity: sha512-+fLpbAbWkQ+d0JEchJT/NrRRXbYRNbG15gFpANx73EwxQB1PRjj+k/OI0GTU0J63g8ikGkJECQp9z8XEJZvPRw==} + engines: {node: '>=14'} + + stack-chain@1.3.7: + resolution: {integrity: sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + 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==} @@ -1843,74 +4279,196 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-dirs@3.0.0: + resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + strtok3@9.1.1: + resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} + engines: {node: '>=16'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + superagent@9.0.2: + resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==} + engines: {node: '>=14.18.0'} + + supertest@7.0.0: + resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==} + engines: {node: '>=14.18.0'} 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'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swap-case@1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + swagger-ui-dist@5.20.1: + resolution: {integrity: sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw==} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tarn@3.0.2: + resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} + engines: {node: '>=8.0.0'} + + tedious@18.6.1: + resolution: {integrity: sha512-9AvErXXQTd6l7TDd5EmM+nxbOGyhnmdbp/8c3pw+tjaiSXW9usME90ET/CRG1LN1Y9tPMtz/p83z4Q97B4DDpw==} + engines: {node: '>=18'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - - tinygradient@1.1.5: - resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} - - title-case@2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@6.0.0: + resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + engines: {node: '>=14.16'} + + tozod@3.0.0: + resolution: {integrity: sha512-R03/moNPEGgWKoTdCsEJuyEoP6NtXyhWg9L9lJhF2XyCR2Ce9XE+yXaswaVmqyBpHsRPC2Pk38mK8Ex7iHaXcg==} + peerDependencies: + zod: ^3.0.0-alpha.2 + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + ts-api-utils@2.0.1: resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + ts-deepmerge@6.2.1: + resolution: {integrity: sha512-8CYSLazCyj0DJDpPIxOFzJG46r93uh6EynYjuey+bxcLltBeqZL7DMfaE5ZPzZNFlav7wx+2TDa/mBl8gkTYzw==} + engines: {node: '>=14.13.1'} + + ts-jest@29.2.6: + resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.2: + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -1922,8 +4480,13 @@ packages: '@swc/wasm': optional: true - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + 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==} @@ -1965,25 +4528,104 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + 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'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + typeorm-naming-strategies@4.1.0: + resolution: {integrity: sha512-vPekJXzZOTZrdDvTl1YoM+w+sUIfQHG4kZTpbFYoTsufyv9NIBRe4Q+PdzhEAFA2std3D9LZHEb1EjE9zhRpiQ==} + peerDependencies: + typeorm: ^0.2.0 || ^0.3.0 + + typeorm-scoped@1.2.0: + resolution: {integrity: sha512-fVZUFIAHCib6Sq/k1wGzwtnFb9uP+g/hLDaoosczJpSNAG2YA2CyPR5J3+UuTz11kvdAfQO0Udk+6rL8xX2/Wg==} + peerDependencies: + typeorm: <=0.3.20 + + typeorm-transactional@0.5.0: + resolution: {integrity: sha512-53/CwnXpOIJnWU3oVCNbhHB95FwciKSGbY+m/Hw4e2dBM2c4toiOHwf4pmk83Ne7guznmDgVr/5IUfbp+JTPCg==} + engines: {node: '>=12.0.0'} + peerDependencies: + reflect-metadata: '>= 0.1.12' + typeorm: '>= 0.2.8' + + typeorm@0.3.21: + resolution: {integrity: sha512-lh4rUWl1liZGjyPTWpwcK8RNI5x4ekln+/JJOox1wCd7xbucYDOXWD+1cSzTN3L0wbTGxxOtloM5JlxbOxEufA==} + engines: {node: '>=16.13.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@sap/hana-client': ^2.12.25 + better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.8.0 + mssql: ^9.1.1 || ^10.0.1 || ^11.0.1 + 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 + reflect-metadata: ^0.1.14 || ^0.2.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + hdb-pool: + 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-eslint@8.26.0: resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} @@ -1992,17 +4634,25 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -2011,14 +4661,15 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} - upper-case-first@1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} - - upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2026,50 +4677,128 @@ packages: 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.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + webpack-node-externals@3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + 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@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - 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==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + 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@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + 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'} + + yauzl@3.2.0: + resolution: {integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==} + engines: {node: '>=12'} + yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -2078,22 +4807,416 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + snapshots: - '@babel/runtime-corejs3@7.26.9': + '@ampproject/remapping@2.3.0': dependencies: - core-js-pure: 3.41.0 - regenerator-runtime: 0.14.1 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@anatine/zod-nestjs@2.0.10(@anatine/zod-openapi@2.2.7(openapi3-ts@4.4.0)(zod@3.24.2))(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2))(openapi3-ts@4.4.0)(zod@3.24.2)': + dependencies: + '@anatine/zod-openapi': 2.2.7(openapi3-ts@4.4.0)(zod@3.24.2) + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/swagger': 11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2) + openapi3-ts: 4.4.0 + ts-deepmerge: 6.2.1 + zod: 3.24.2 + + '@anatine/zod-openapi@2.2.7(openapi3-ts@4.4.0)(zod@3.24.2)': + dependencies: + openapi3-ts: 4.4.0 + ts-deepmerge: 6.2.1 + zod: 3.24.2 + + '@angular-devkit/core@19.1.8(chokidar@4.0.3)': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/core@19.2.0(chokidar@4.0.3)': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular-devkit/schematics-cli@19.1.8(@types/node@22.13.10)(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.1.8(chokidar@4.0.3) + '@angular-devkit/schematics': 19.1.8(chokidar@4.0.3) + '@inquirer/prompts': 7.2.1(@types/node@22.13.10) + ansi-colors: 4.1.3 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@types/node' + - chokidar + + '@angular-devkit/schematics@19.1.8(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.1.8(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@19.2.0(chokidar@4.0.3)': + dependencies: + '@angular-devkit/core': 19.2.0(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@autotelic/pino-seq-transport@0.1.0': + dependencies: + pino-abstract-transport: 0.5.0 + seq-logging: 1.1.2 + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 + + '@azure/core-client@1.9.3': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.19.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.2.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.9.3 + '@azure/core-rest-pipeline': 1.19.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + + '@azure/core-paging@1.6.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.19.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.1 + + '@azure/identity@4.8.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.3 + '@azure/core-rest-pipeline': 1.19.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 4.7.0 + '@azure/msal-node': 3.3.0 + events: 3.3.0 + jws: 4.0.0 + open: 10.1.0 + stoppable: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-common@2.0.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.3 + '@azure/core-rest-pipeline': 1.19.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.3 + '@azure/core-http-compat': 2.2.0 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.19.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/keyvault-common': 2.0.0 + '@azure/logger': 1.1.4 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.8.1 + + '@azure/msal-browser@4.7.0': + dependencies: + '@azure/msal-common': 15.2.1 + + '@azure/msal-common@15.2.1': {} + + '@azure/msal-node@3.3.0': + dependencies: + '@azure/msal-common': 15.2.1 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.10': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.10': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + + '@babel/traverse@7.26.10': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.10': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@colors/colors@1.5.0': + optional: true '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/runtime@1.3.1': - dependencies: - tslib: 2.8.1 - optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0)': dependencies: eslint: 9.22.0 @@ -2138,6 +5261,73 @@ snapshots: '@eslint/core': 0.12.0 levn: 0.4.1 + '@fastify/accept-negotiator@2.0.1': {} + + '@fastify/ajv-compiler@4.0.2': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-uri: 3.0.6 + + '@fastify/cors@11.0.0': + dependencies: + fastify-plugin: 5.0.1 + mnemonist: 0.40.0 + + '@fastify/error@4.1.0': {} + + '@fastify/fast-json-stringify-compiler@5.0.2': + dependencies: + fast-json-stringify: 6.0.1 + + '@fastify/formbody@8.0.2': + dependencies: + fast-querystring: 1.1.2 + fastify-plugin: 5.0.1 + + '@fastify/forwarded@3.0.0': {} + + '@fastify/merge-json-schemas@0.2.1': + dependencies: + dequal: 2.0.3 + + '@fastify/middie@9.0.3': + dependencies: + '@fastify/error': 4.1.0 + fastify-plugin: 5.0.1 + path-to-regexp: 8.2.0 + reusify: 1.1.0 + + '@fastify/proxy-addr@5.0.0': + dependencies: + '@fastify/forwarded': 3.0.0 + ipaddr.js: 2.2.0 + + '@fastify/send@3.3.1': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/send@4.0.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/static@8.1.1': + dependencies: + '@fastify/accept-negotiator': 2.0.1 + '@fastify/send': 3.3.1 + content-disposition: 0.5.4 + fastify-plugin: 5.0.1 + fastq: 1.19.1 + glob: 11.0.1 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -2151,120 +5341,618 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': + '@inquirer/checkbox@4.1.4(@types/node@22.13.10)': dependencies: - '@emnapi/runtime': 1.3.1 - optional: true + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 - '@img/sharp-win32-ia32@0.33.5': - optional: true + '@inquirer/confirm@5.1.8(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 - '@img/sharp-win32-x64@0.33.5': - optional: true + '@inquirer/core@10.1.9(@types/node@22.13.10)': + dependencies: + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/editor@4.2.9(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/expand@4.0.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/figures@1.0.11': {} + + '@inquirer/input@4.1.8(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/number@3.0.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/password@4.0.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/prompts@7.2.1(@types/node@22.13.10)': + dependencies: + '@inquirer/checkbox': 4.1.4(@types/node@22.13.10) + '@inquirer/confirm': 5.1.8(@types/node@22.13.10) + '@inquirer/editor': 4.2.9(@types/node@22.13.10) + '@inquirer/expand': 4.0.11(@types/node@22.13.10) + '@inquirer/input': 4.1.8(@types/node@22.13.10) + '@inquirer/number': 3.0.11(@types/node@22.13.10) + '@inquirer/password': 4.0.11(@types/node@22.13.10) + '@inquirer/rawlist': 4.0.11(@types/node@22.13.10) + '@inquirer/search': 3.0.11(@types/node@22.13.10) + '@inquirer/select': 4.1.0(@types/node@22.13.10) + '@types/node': 22.13.10 + + '@inquirer/prompts@7.3.2(@types/node@22.13.10)': + dependencies: + '@inquirer/checkbox': 4.1.4(@types/node@22.13.10) + '@inquirer/confirm': 5.1.8(@types/node@22.13.10) + '@inquirer/editor': 4.2.9(@types/node@22.13.10) + '@inquirer/expand': 4.0.11(@types/node@22.13.10) + '@inquirer/input': 4.1.8(@types/node@22.13.10) + '@inquirer/number': 3.0.11(@types/node@22.13.10) + '@inquirer/password': 4.0.11(@types/node@22.13.10) + '@inquirer/rawlist': 4.0.11(@types/node@22.13.10) + '@inquirer/search': 3.0.11(@types/node@22.13.10) + '@inquirer/select': 4.1.0(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/rawlist@4.0.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/search@3.0.11(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/select@4.1.0(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/type@3.0.5(@types/node@22.13.10)': + optionalDependencies: + '@types/node': 22.13.10 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.13.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.13.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.10 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.13.10 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@next/env@15.2.1': {} + '@js-joda/core@5.6.4': {} - '@next/eslint-plugin-next@15.2.1': + '@keyv/redis@4.3.2': dependencies: - fast-glob: 3.3.1 + cluster-key-slot: 1.1.2 + keyv: 5.3.2 + redis: 4.7.0 - '@next/swc-darwin-arm64@15.2.1': + '@keyv/serialize@1.0.3': + dependencies: + buffer: 6.0.3 + + '@lukeed/csprng@1.1.0': {} + + '@lukeed/ms@2.0.2': {} + + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.3 + 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.7.1 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@microsoft/tsdoc@0.15.1': {} + + '@napi-rs/nice-android-arm-eabi@1.0.1': optional: true - '@next/swc-darwin-x64@15.2.1': + '@napi-rs/nice-android-arm64@1.0.1': optional: true - '@next/swc-linux-arm64-gnu@15.2.1': + '@napi-rs/nice-darwin-arm64@1.0.1': optional: true - '@next/swc-linux-arm64-musl@15.2.1': + '@napi-rs/nice-darwin-x64@1.0.1': optional: true - '@next/swc-linux-x64-gnu@15.2.1': + '@napi-rs/nice-freebsd-x64@1.0.1': optional: true - '@next/swc-linux-x64-musl@15.2.1': + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': optional: true - '@next/swc-win32-arm64-msvc@15.2.1': + '@napi-rs/nice-linux-arm64-gnu@1.0.1': optional: true - '@next/swc-win32-x64-msvc@15.2.1': + '@napi-rs/nice-linux-arm64-musl@1.0.1': optional: true + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-s390x-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-x64-gnu@1.0.1': + optional: true + + '@napi-rs/nice-linux-x64-musl@1.0.1': + optional: true + + '@napi-rs/nice-win32-arm64-msvc@1.0.1': + optional: true + + '@napi-rs/nice-win32-ia32-msvc@1.0.1': + optional: true + + '@napi-rs/nice-win32-x64-msvc@1.0.1': + optional: true + + '@napi-rs/nice@1.0.1': + optionalDependencies: + '@napi-rs/nice-android-arm-eabi': 1.0.1 + '@napi-rs/nice-android-arm64': 1.0.1 + '@napi-rs/nice-darwin-arm64': 1.0.1 + '@napi-rs/nice-darwin-x64': 1.0.1 + '@napi-rs/nice-freebsd-x64': 1.0.1 + '@napi-rs/nice-linux-arm-gnueabihf': 1.0.1 + '@napi-rs/nice-linux-arm64-gnu': 1.0.1 + '@napi-rs/nice-linux-arm64-musl': 1.0.1 + '@napi-rs/nice-linux-ppc64-gnu': 1.0.1 + '@napi-rs/nice-linux-riscv64-gnu': 1.0.1 + '@napi-rs/nice-linux-s390x-gnu': 1.0.1 + '@napi-rs/nice-linux-x64-gnu': 1.0.1 + '@napi-rs/nice-linux-x64-musl': 1.0.1 + '@napi-rs/nice-win32-arm64-msvc': 1.0.1 + '@napi-rs/nice-win32-ia32-msvc': 1.0.1 + '@napi-rs/nice-win32-x64-msvc': 1.0.1 + optional: true + + '@nestjs/cli@11.0.5(@swc/cli@0.6.0(@swc/core@1.11.11)(chokidar@4.0.3))(@swc/core@1.11.11)(@types/node@22.13.10)': + dependencies: + '@angular-devkit/core': 19.1.8(chokidar@4.0.3) + '@angular-devkit/schematics': 19.1.8(chokidar@4.0.3) + '@angular-devkit/schematics-cli': 19.1.8(@types/node@22.13.10)(chokidar@4.0.3) + '@inquirer/prompts': 7.3.2(@types/node@22.13.10) + '@nestjs/schematics': 11.0.2(chokidar@4.0.3)(typescript@5.7.3) + ansis: 3.16.0 + chokidar: 4.0.3 + cli-table3: 0.6.5 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.11.11)) + glob: 11.0.1 + 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.3 + webpack: 5.98.0(@swc/core@1.11.11) + webpack-node-externals: 3.0.0 + optionalDependencies: + '@swc/cli': 0.6.0(@swc/core@1.11.11)(chokidar@4.0.3) + '@swc/core': 1.11.11 + transitivePeerDependencies: + - '@types/node' + - esbuild + - uglify-js + - webpack-cli + + '@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + + '@nestjs/config@4.0.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + dotenv: 16.4.7 + dotenv-expand: 12.0.1 + lodash: 4.17.21 + rxjs: 7.8.2 + + '@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nuxt/opencollective': 0.4.1 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 8.2.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12) + + '@nestjs/jwt@11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@types/jsonwebtoken': 9.0.7 + jsonwebtoken: 9.0.2 + + '@nestjs/mapped-types@2.1.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + reflect-metadata: 0.2.2 + + '@nestjs/passport@11.0.5(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + passport: 0.7.0 + + '@nestjs/platform-express@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12)': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + cors: 2.8.5 + express: 5.0.1 + multer: 1.4.5-lts.1 + path-to-regexp: 8.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@nestjs/platform-fastify@11.0.12(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))': + dependencies: + '@fastify/cors': 11.0.0 + '@fastify/formbody': 8.0.2 + '@fastify/middie': 9.0.3 + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + fast-querystring: 1.1.2 + fastify: 5.2.1 + light-my-request: 6.6.0 + path-to-regexp: 8.2.0 + tslib: 2.8.1 + optionalDependencies: + '@fastify/static': 8.1.1 + + '@nestjs/schedule@5.0.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + cron: 3.5.0 + + '@nestjs/schematics@11.0.2(chokidar@4.0.3)(typescript@5.7.3)': + dependencies: + '@angular-devkit/core': 19.2.0(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.0(chokidar@4.0.3) + comment-json: 4.2.5 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 5.7.3 + transitivePeerDependencies: + - chokidar + + '@nestjs/schematics@11.0.2(chokidar@4.0.3)(typescript@5.8.2)': + dependencies: + '@angular-devkit/core': 19.2.0(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.0(chokidar@4.0.3) + comment-json: 4.2.5 + jsonc-parser: 3.3.1 + pluralize: 8.0.0 + typescript: 5.8.2 + transitivePeerDependencies: + - chokidar + + '@nestjs/swagger@11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/mapped-types': 2.1.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2) + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 8.2.0 + reflect-metadata: 0.2.2 + swagger-ui-dist: 5.20.1 + optionalDependencies: + '@fastify/static': 8.1.1 + + '@nestjs/terminus@11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/typeorm@11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)))': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + boxen: 5.1.2 + check-disk-space: 3.4.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + optionalDependencies: + '@nestjs/typeorm': 11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))) + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + + '@nestjs/testing@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12))': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + tslib: 2.8.1 + optionalDependencies: + '@nestjs/platform-express': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12) + + '@nestjs/typeorm@11.0.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)))': + dependencies: + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2277,13 +5965,572 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@nuxt/opencollective@0.4.1': + dependencies: + consola: 3.4.2 + + '@phc/format@1.0.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@redis/bloom@1.2.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/client@1.6.0': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/json@1.0.7(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/search@1.2.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@redis/time-series@1.1.0(@redis/client@1.6.0)': + dependencies: + '@redis/client': 1.6.0 + + '@scarf/scarf@1.4.0': {} + + '@sec-ant/readable-stream@0.4.1': {} + + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/is@5.6.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sqltools/formatter@1.2.5': {} + + '@stdlib/array@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/iter': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/proxy': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/assert@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/time': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + '@stdlib/wasm': 0.1.1 + transitivePeerDependencies: + - supports-color + + '@stdlib/bigint@0.3.3': + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/blas@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/boolean@0.3.3': + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/buffer@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/cli@0.3.3': + dependencies: + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + minimist: 1.2.8 + transitivePeerDependencies: + - supports-color + + '@stdlib/complex@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/constants@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/fs@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + + '@stdlib/function@0.3.3': + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/iter@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/math@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + + '@stdlib/napi@0.3.3': + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/ndarray@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/bigint': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/proxy': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/nlp@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/number@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/object@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/os@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/process@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/proxy@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/random@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/stats': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + readable-stream: 2.3.8 + transitivePeerDependencies: + - supports-color + + '@stdlib/regexp@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/slice@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/stats@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/streams@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + readable-stream: 2.3.8 + transitivePeerDependencies: + - supports-color + + '@stdlib/strided@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/string@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/nlp': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/symbol@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/time@0.3.3': + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@stdlib/types@0.4.3': {} + + '@stdlib/utils@0.3.3': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/time': 0.3.3 + '@stdlib/types': 0.4.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + + '@stdlib/wasm@0.1.1': + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + + '@swc/cli@0.6.0(@swc/core@1.11.11)(chokidar@4.0.3)': + dependencies: + '@swc/core': 1.11.11 + '@swc/counter': 0.1.3 + '@xhmikosr/bin-wrapper': 13.0.5 + commander: 8.3.0 + fast-glob: 3.3.3 + minimatch: 9.0.5 + piscina: 4.9.2 + semver: 7.7.1 + slash: 3.0.0 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@swc/core-darwin-arm64@1.11.11': + optional: true + + '@swc/core-darwin-x64@1.11.11': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.11.11': + optional: true + + '@swc/core-linux-arm64-gnu@1.11.11': + optional: true + + '@swc/core-linux-arm64-musl@1.11.11': + optional: true + + '@swc/core-linux-x64-gnu@1.11.11': + optional: true + + '@swc/core-linux-x64-musl@1.11.11': + optional: true + + '@swc/core-win32-arm64-msvc@1.11.11': + optional: true + + '@swc/core-win32-ia32-msvc@1.11.11': + optional: true + + '@swc/core-win32-x64-msvc@1.11.11': + optional: true + + '@swc/core@1.11.11': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.19 + optionalDependencies: + '@swc/core-darwin-arm64': 1.11.11 + '@swc/core-darwin-x64': 1.11.11 + '@swc/core-linux-arm-gnueabihf': 1.11.11 + '@swc/core-linux-arm64-gnu': 1.11.11 + '@swc/core-linux-arm64-musl': 1.11.11 + '@swc/core-linux-x64-gnu': 1.11.11 + '@swc/core-linux-x64-musl': 1.11.11 + '@swc/core-win32-arm64-msvc': 1.11.11 + '@swc/core-win32-ia32-msvc': 1.11.11 + '@swc/core-win32-x64-msvc': 1.11.11 + '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.15': + '@swc/types@0.1.19': dependencies: - tslib: 2.8.1 + '@swc/counter': 0.1.3 - '@tootallnate/quickjs-emscripten@0.23.0': {} + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@tediousjs/connection-string@0.5.0': {} + + '@tokenizer/token@0.3.0': {} '@tsconfig/node10@1.0.11': {} @@ -2293,73 +6540,174 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/gen@2.4.4(@types/node@22.13.10)(typescript@5.8.2)': - dependencies: - '@turbo/workspaces': 2.4.4 - commander: 10.0.1 - fs-extra: 10.1.0 - inquirer: 8.2.6 - minimatch: 9.0.5 - node-plop: 0.26.3 - picocolors: 1.0.1 - proxy-agent: 6.5.0 - ts-node: 10.9.2(@types/node@22.13.10)(typescript@5.8.2) - update-check: 1.5.4 - validate-npm-package-name: 5.0.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript + '@types/async-lock@1.4.2': {} - '@turbo/workspaces@2.4.4': + '@types/babel__core@7.20.5': dependencies: - commander: 10.0.1 - execa: 5.1.1 - fast-glob: 3.3.3 - fs-extra: 10.1.0 - gradient-string: 2.0.2 - inquirer: 8.2.6 - js-yaml: 4.1.0 - ora: 4.1.1 - picocolors: 1.0.1 - semver: 7.6.2 - update-check: 1.5.4 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.10 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.10 + + '@types/bcrypt@5.0.2': + dependencies: + '@types/node': 22.13.10 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.13.10 + + '@types/cls-hooked@4.3.9': + dependencies: + '@types/node': 22.13.10 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.13.10 + + '@types/cookiejar@2.1.5': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 '@types/estree@1.0.6': {} - '@types/glob@7.2.0': + '@types/express-serve-static-core@5.0.6': + dependencies: + '@types/node': 22.13.10 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@5.0.1': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 5.0.6 + '@types/serve-static': 1.15.7 + + '@types/graceful-fs@4.1.9': dependencies: - '@types/minimatch': 5.1.2 '@types/node': 22.13.10 - '@types/inquirer@6.5.0': + '@types/http-cache-semantics@4.0.4': {} + + '@types/http-errors@2.0.4': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': dependencies: - '@types/through': 0.0.33 - rxjs: 6.6.7 + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 '@types/json-schema@7.0.15': {} - '@types/minimatch@5.1.2': {} + '@types/jsonwebtoken@9.0.7': + dependencies: + '@types/node': 22.13.10 + + '@types/jsonwebtoken@9.0.9': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 22.13.10 + + '@types/lodash@4.17.16': {} + + '@types/luxon@3.4.2': {} + + '@types/methods@1.1.4': {} + + '@types/mime@1.3.5': {} + + '@types/ms@2.1.0': {} '@types/node@22.13.10': dependencies: undici-types: 6.20.0 - '@types/react-dom@19.0.4(@types/react@19.0.10)': + '@types/passport-jwt@4.0.1': dependencies: - '@types/react': 19.0.10 + '@types/jsonwebtoken': 9.0.9 + '@types/passport-strategy': 0.2.38 - '@types/react@19.0.10': + '@types/passport-strategy@0.2.38': dependencies: - csstype: 3.1.3 + '@types/express': 5.0.1 + '@types/passport': 1.0.17 - '@types/through@0.0.33': + '@types/passport@1.0.17': + dependencies: + '@types/express': 5.0.1 + + '@types/qs@6.9.18': {} + + '@types/range-parser@1.2.7': {} + + '@types/readable-stream@4.0.18': dependencies: '@types/node': 22.13.10 + safe-buffer: 5.1.2 - '@types/tinycolor2@1.4.6': {} + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.13.10 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.13.10 + '@types/send': 0.17.4 + + '@types/stack-utils@2.0.3': {} + + '@types/superagent@8.1.9': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 22.13.10 + form-data: 4.0.2 + + '@types/supertest@6.0.2': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.9 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0)(typescript@5.8.2))(eslint@9.22.0)(typescript@5.8.2)': dependencies: @@ -2438,6 +6786,167 @@ snapshots: '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 + '@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 + + '@xhmikosr/archive-type@7.0.0': + dependencies: + file-type: 19.6.0 + + '@xhmikosr/bin-check@7.0.3': + dependencies: + execa: 5.1.1 + isexe: 2.0.0 + + '@xhmikosr/bin-wrapper@13.0.5': + dependencies: + '@xhmikosr/bin-check': 7.0.3 + '@xhmikosr/downloader': 15.0.1 + '@xhmikosr/os-filter-obj': 3.0.0 + bin-version-check: 5.1.0 + + '@xhmikosr/decompress-tar@8.0.1': + dependencies: + file-type: 19.6.0 + is-stream: 2.0.1 + tar-stream: 3.1.7 + + '@xhmikosr/decompress-tarbz2@8.0.2': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + seek-bzip: 2.0.0 + unbzip2-stream: 1.4.3 + + '@xhmikosr/decompress-targz@8.0.1': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + + '@xhmikosr/decompress-unzip@7.0.0': + dependencies: + file-type: 19.6.0 + get-stream: 6.0.1 + yauzl: 3.2.0 + + '@xhmikosr/decompress@10.0.1': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + '@xhmikosr/decompress-tarbz2': 8.0.2 + '@xhmikosr/decompress-targz': 8.0.1 + '@xhmikosr/decompress-unzip': 7.0.0 + graceful-fs: 4.2.11 + make-dir: 4.0.0 + strip-dirs: 3.0.0 + + '@xhmikosr/downloader@15.0.1': + dependencies: + '@xhmikosr/archive-type': 7.0.0 + '@xhmikosr/decompress': 10.0.1 + content-disposition: 0.5.4 + defaults: 3.0.0 + ext-name: 5.0.0 + file-type: 19.6.0 + filenamify: 6.0.0 + get-stream: 6.0.1 + got: 13.0.0 + + '@xhmikosr/os-filter-obj@3.0.0': + dependencies: + arch: 3.0.0 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abbrev@1.1.1: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + accepts@2.0.0: + dependencies: + mime-types: 3.0.0 + negotiator: 1.0.0 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -2446,16 +6955,32 @@ snapshots: dependencies: acorn: 8.14.1 - acorn@8.14.0: {} - acorn@8.14.1: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + agent-base@7.1.3: {} - aggregate-error@3.1.0: + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 ajv@6.12.6: dependencies: @@ -2464,96 +6989,182 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 ansi-regex@5.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + ansis@3.16.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + app-root-path@3.1.0: {} + + append-field@1.0.0: {} + + aproba@2.0.0: {} + + arch@3.0.0: {} + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + arg@4.1.3: {} + argon2@0.41.1: + dependencies: + '@phc/format': 1.0.0 + node-addon-api: 8.3.1 + node-gyp-build: 4.8.4 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} - array-buffer-byte-length@1.0.2: + array-timsort@1.0.3: {} + + asap@2.0.6: {} + + async-hook-jl@1.7.6: dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 + stack-chain: 1.3.7 - array-includes@3.1.8: + async-lock@1.4.1: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@9.1.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 + '@fastify/error': 4.1.0 + fastq: 1.19.1 - array-union@2.1.0: {} - - array.prototype.findlast@1.2.5: + axios@1.8.4: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug - array.prototype.flat@1.3.3: + b4a@1.6.7: {} + + babel-jest@29.7.0(@babel/core@7.26.10): dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.10) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color - array.prototype.flatmap@1.3.3: + babel-plugin-istanbul@6.1.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color - array.prototype.tosorted@1.1.4: + babel-plugin-jest-hoist@29.6.3: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 - arraybuffer.prototype.slice@1.0.4: + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10): dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 + '@babel/core': 7.26.10 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) - ast-types@0.13.4: + babel-preset-jest@29.6.3(@babel/core@7.26.10): dependencies: - tslib: 2.8.1 - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 + '@babel/core': 7.26.10 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + base64-js@1.5.1: {} - basic-ftp@5.0.5: {} + bcrypt@5.1.1: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 5.1.0 + transitivePeerDependencies: + - encoding + - supports-color + + bin-version-check@5.1.0: + dependencies: + bin-version: 6.0.0 + semver: 7.7.1 + semver-truncate: 3.0.0 + + bin-version@6.0.0: + dependencies: + execa: 5.1.1 + find-versions: 5.1.0 + + binary-extensions@2.3.0: {} bl@4.1.0: dependencies: @@ -2561,6 +7172,38 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bl@6.1.0: + dependencies: + '@types/readable-stream': 4.0.18 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.7.0 + + body-parser@2.1.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.0 + http-errors: 2.0.0 + iconv-lite: 0.5.2 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.0 + transitivePeerDependencies: + - supports-color + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -2574,27 +7217,69 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001706 + electron-to-chromium: 1.5.122 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-crc32@0.2.13: {} + + 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 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 + bytes@3.1.2: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + cacheable@1.8.9: + dependencies: + hookified: 1.8.1 + keyv: 5.3.2 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: - 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 @@ -2602,53 +7287,48 @@ snapshots: callsites@3.1.0: {} - camel-case@3.0.0: - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 + camelcase@5.3.1: {} - caniuse-lite@1.0.30001701: {} + camelcase@6.3.0: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + caniuse-lite@1.0.30001706: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - change-case@3.1.0: - dependencies: - camel-case: 3.0.0 - constant-case: 2.0.0 - dot-case: 2.1.1 - header-case: 1.0.1 - is-lower-case: 1.1.3 - is-upper-case: 1.1.2 - lower-case: 1.1.4 - lower-case-first: 1.0.2 - no-case: 2.3.2 - param-case: 2.1.1 - pascal-case: 2.0.1 - path-case: 2.1.1 - sentence-case: 2.1.1 - snake-case: 2.1.0 - swap-case: 1.1.2 - title-case: 2.1.1 - upper-case: 1.1.3 - upper-case-first: 1.1.2 + char-regex@1.0.2: {} chardet@0.7.0: {} - clean-stack@2.2.0: {} + check-disk-space@3.4.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 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@2.0.0: {} + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.3: {} + + cli-boxes@2.2.1: {} cli-cursor@3.1.0: dependencies: @@ -2656,221 +7336,278 @@ snapshots: cli-spinners@2.9.2: {} - cli-width@3.0.0: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 - client-only@0.0.1: {} + 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@1.9.3: + cls-hooked@4.2.2: dependencies: - color-name: 1.1.3 + async-hook-jl: 1.7.6 + emitter-listener: 1.1.2 + semver: 5.7.2 + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - optional: true + color-support@1.1.3: {} - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true + colorette@2.0.20: {} - commander@10.0.1: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@6.2.1: {} + + commander@8.3.0: {} + + 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 + + component-emitter@1.3.1: {} concat-map@0.0.1: {} - constant-case@2.0.0: + concat-stream@1.6.2: dependencies: - snake-case: 2.1.0 - upper-case: 1.1.3 + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 - core-js-pure@3.41.0: {} + connection-string@4.4.0: {} + + consola@3.4.2: {} + + console-control-strings@1.1.0: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.1: {} + + cookie@1.0.2: {} + + cookiejar@2.1.4: {} + + 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.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.7.3 + + create-jest@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node create-require@1.1.1: {} + cron@3.5.0: + dependencies: + '@types/luxon': 3.4.2 + luxon: 3.5.0 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - csstype@3.1.3: {} + dateformat@4.6.3: {} - data-uri-to-buffer@6.0.2: {} + dayjs@1.11.13: {} - data-view-buffer@1.0.2: + debug@2.6.9: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + ms: 2.0.0 - data-view-byte-length@1.0.2: + debug@4.3.6: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + ms: 2.1.2 debug@4.4.0: dependencies: ms: 2.1.3 - deep-extend@0.6.0: {} + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + dedent@1.5.3: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + 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 + defaults@3.0.0: {} - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 + defer-to-connect@2.0.1: {} - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 + define-lazy-prop@3.0.0: {} - del@5.1.0: - dependencies: - globby: 10.0.2 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 3.0.0 - rimraf: 3.0.2 - slash: 3.0.0 + delayed-stream@1.0.0: {} - detect-libc@2.0.3: - optional: true + delegates@1.0.0: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + destroy@1.2.0: {} + + detect-libc@2.0.3: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diff-sequences@29.6.3: {} diff@4.0.2: {} - dir-glob@3.0.1: + dotenv-expand@12.0.1: dependencies: - path-type: 4.0.0 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dot-case@2.1.1: - dependencies: - no-case: 2.3.2 + dotenv: 16.4.7 dotenv@16.0.3: {} + dotenv@16.4.7: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + + eastasianwidth@0.2.0: {} + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.122: {} + + emitter-listener@1.1.2: + dependencies: + shimmer: 1.2.1 + + emittery@0.13.1: {} + emoji-regex@8.0.0: {} - es-abstract@1.23.9: + emoji-regex@9.2.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 + once: 1.4.0 + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 + es-module-lexer@1.6.0: {} es-object-atoms@1.1.1: dependencies: @@ -2883,59 +7620,29 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 + escalade@3.2.0: {} - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 + escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-config-prettier@10.1.1(eslint@9.22.0): dependencies: eslint: 9.22.0 eslint-plugin-only-warn@1.1.0: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.22.0): + eslint-plugin-prettier@5.2.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.1(eslint@9.22.0))(eslint@9.22.0)(prettier@3.5.3): dependencies: eslint: 9.22.0 - - eslint-plugin-react@7.37.4(eslint@9.22.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.22.0 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 + prettier: 3.5.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 10.1.1(eslint@9.22.0) eslint-plugin-turbo@2.4.4(eslint@9.22.0)(turbo@2.4.4): dependencies: @@ -2943,6 +7650,11 @@ snapshots: eslint: 9.22.0 turbo: 2.4.4 + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 @@ -3008,10 +7720,18 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} esutils@2.0.3: {} + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -3024,21 +7744,77 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@5.0.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.1.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.3.6 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + methods: 1.1.2 + mime-types: 3.0.0 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + router: 2.1.0 + safe-buffer: 5.2.1 + send: 1.1.0 + serve-static: 2.1.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 2.0.0 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + ext-list@2.2.2: + dependencies: + mime-db: 1.54.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + fast-copy@3.0.2: {} + + fast-decode-uri-component@1.0.1: {} + fast-deep-equal@3.1.3: {} - fast-glob@3.3.1: - 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-diff@1.3.0: {} + + fast-fifo@1.3.2: {} fast-glob@3.3.3: dependencies: @@ -3050,29 +7826,111 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-json-stringify@6.0.1: + dependencies: + '@fastify/merge-json-schemas': 0.2.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + fast-uri: 3.0.6 + json-schema-ref-resolver: 2.0.1 + rfdc: 1.4.1 + fast-levenshtein@2.0.6: {} + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.0.6: {} + + fastify-plugin@5.0.1: {} + + fastify@5.2.1: + dependencies: + '@fastify/ajv-compiler': 4.0.2 + '@fastify/error': 4.1.0 + '@fastify/fast-json-stringify-compiler': 5.0.2 + '@fastify/proxy-addr': 5.0.0 + abstract-logging: 2.0.1 + avvio: 9.1.0 + fast-json-stringify: 6.0.1 + find-my-way: 9.2.0 + light-my-request: 6.6.0 + pino: 9.6.0 + process-warning: 4.0.1 + rfdc: 1.4.1 + secure-json-parse: 3.0.2 + semver: 7.7.1 + toad-cache: 3.7.0 + fastq@1.19.1: dependencies: reusify: 1.1.0 - figures@3.2.0: + fb-watchman@2.0.2: dependencies: - escape-string-regexp: 1.0.5 + bser: 2.1.1 file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 + file-type@19.6.0: + dependencies: + get-stream: 9.0.1 + strtok3: 9.1.1 + token-types: 6.0.0 + uint8array-extras: 1.4.0 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + filename-reserved-regex@3.0.0: {} + + filenamify@6.0.0: + dependencies: + filename-reserved-regex: 3.0.0 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@2.1.0: + dependencies: + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + find-my-way@9.2.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 4.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + find-versions@5.1.0: + dependencies: + semver-regex: 4.0.5 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -3080,9 +7938,50 @@ snapshots: flatted@3.3.3: {} - for-each@0.3.5: + follow-redirects@1.15.9: {} + + foreground-child@3.3.1: dependencies: - is-callable: 1.2.7 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.11.11)): + dependencies: + '@babel/code-frame': 7.26.2 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.7.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.1 + tapable: 2.2.1 + typescript: 5.7.3 + webpack: 5.98.0(@swc/core@1.11.11) + + form-data-encoder@2.1.4: {} + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + formidable@3.5.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 2.0.0 + once: 1.4.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fresh@2.0.0: {} fs-extra@10.1.0: dependencies: @@ -3090,20 +7989,36 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-monkey@1.0.6: {} + fs.realpath@1.0.0: {} + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} - function.prototype.name@1.1.8: + gauge@3.0.2: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 + aproba: 2.0.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 - functions-have-names@1.2.3: {} + generic-pool@3.9.0: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -3118,6 +8033,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -3125,19 +8042,10 @@ snapshots: get-stream@6.0.1: {} - get-symbol-description@1.1.0: + get-stream@9.0.1: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-uri@6.0.4: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.0 - transitivePeerDependencies: - - supports-color + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 glob-parent@5.1.2: dependencies: @@ -3147,6 +8055,26 @@ snapshots: 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.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.1: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -3156,59 +8084,35 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + globals@11.12.0: {} + globals@14.0.0: {} globals@16.0.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - globby@10.0.2: - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - glob: 7.2.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - gopd@1.2.0: {} + got@13.0.0: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + graceful-fs@4.2.11: {} - gradient-string@2.0.2: - dependencies: - chalk: 4.1.2 - tinygradient: 1.1.5 - graphemer@1.4.0: {} - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 + has-own-prop@2.0.0: {} has-symbols@1.1.0: {} @@ -3216,14 +8120,29 @@ snapshots: dependencies: has-symbols: 1.1.0 + has-unicode@2.0.1: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - header-case@1.0.1: + help-me@5.0.0: {} + + hexoid@2.0.0: {} + + hookified@1.8.1: {} + + html-escaper@2.0.2: {} + + http-cache-semantics@4.1.1: {} + + http-errors@2.0.0: dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 http-proxy-agent@7.0.2: dependencies: @@ -3232,6 +8151,18 @@ snapshots: transitivePeerDependencies: - supports-color + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 @@ -3245,6 +8176,14 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.5.2: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -3254,9 +8193,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - imurmurhash@0.1.4: {} + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 - indent-string@4.0.0: {} + imurmurhash@0.1.4: {} inflight@1.0.6: dependencies: @@ -3265,385 +8207,801 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - - inquirer@7.3.3: + inspect-with-kind@1.0.5: 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.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 + kind-of: 6.0.3 - inquirer@8.2.6: + ipaddr.js@1.9.1: {} + + ipaddr.js@2.2.0: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: 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.17.21 - 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 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.3.2: - optional: true - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} + binary-extensions: 2.3.0 is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + is-docker@3.0.0: {} is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 + is-generator-fn@2.1.0: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} - is-lower-case@1.1.3: - dependencies: - lower-case: 1.1.4 - - is-map@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} - is-path-cwd@2.2.0: {} + is-plain-obj@1.1.0: {} - is-path-inside@3.0.3: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 + is-promise@4.0.0: {} is-stream@2.0.1: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.18 + is-stream@4.0.1: {} is-unicode-supported@0.1.0: {} - is-upper-case@1.1.2: + is-wsl@3.1.0: dependencies: - upper-case: 1.1.3 + is-inside-container: 1.0.0 - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - - isbinaryfile@4.0.10: {} + isarray@1.0.0: {} isexe@2.0.0: {} - iterator.prototype@1.1.5: + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 + '@babel/core': 7.26.10 + '@babel/parser': 7.26.10 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.26.10 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.10 + ts-node: 10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.13.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.26.10 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@babel/types': 7.26.10 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.13.10 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.13.10 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + joycon@3.1.1: {} + + js-md4@0.3.2: {} js-tokens@4.0.0: {} + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} + jsesc@3.1.0: {} json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + + json-schema-ref-resolver@2.0.1: + dependencies: + dequal: 2.0.3 + 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.3.1: {} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - jsx-ast-utils@3.3.5: + jsonwebtoken@9.0.2: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 + jws: 3.2.2 + 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.7.1 + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwa@2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 keyv@4.5.4: dependencies: json-buffer: 3.0.1 + keyv@5.3.2: + dependencies: + '@keyv/serialize': 1.0.3 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + light-my-request@6.6.0: + dependencies: + cookie: 1.0.2 + process-warning: 4.0.1 + set-cookie-parser: 2.7.1 + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - lodash.get@4.4.2: {} + 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.memoize@4.1.2: {} lodash.merge@4.6.2: {} - lodash@4.17.21: {} + lodash.once@4.1.1: {} - log-symbols@3.0.0: - dependencies: - chalk: 2.4.2 + lodash@4.17.21: {} log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - loose-envify@1.4.0: + lowercase-keys@3.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@11.0.2: {} + + lru-cache@5.1.1: dependencies: - js-tokens: 4.0.0 + yallist: 3.1.1 - lower-case-first@1.0.2: + luxon@3.5.0: {} + + magic-string@0.30.17: dependencies: - lower-case: 1.1.4 + '@jridgewell/sourcemap-codec': 1.5.0 - lower-case@1.1.4: {} + make-dir@3.1.0: + dependencies: + semver: 6.3.1 - lru-cache@7.18.3: {} + make-dir@4.0.0: + dependencies: + semver: 7.7.1 make-error@1.3.6: {} + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + math-intrinsics@1.1.0: {} + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + + merge-descriptors@2.0.0: {} + 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.1 + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.0: + dependencies: + mime-db: 1.54.0 + + mime@2.6.0: {} + + mime@3.0.0: {} + mimic-fn@2.1.0: {} + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 minimist@1.2.8: {} + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + 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: {} + + mnemonist@0.40.0: + dependencies: + obliterator: 2.0.5 + + ms@2.0.0: {} + + ms@2.1.2: {} + ms@2.1.3: {} - mute-stream@0.0.8: {} + mssql@11.0.1: + dependencies: + '@tediousjs/connection-string': 0.5.0 + commander: 11.1.0 + debug: 4.4.0 + rfdc: 1.4.1 + tarn: 3.0.2 + tedious: 18.6.1 + transitivePeerDependencies: + - supports-color - nanoid@3.3.8: {} + multer@1.4.5-lts.1: + 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 + + mute-stream@2.0.0: {} + + native-duplexpair@1.0.0: {} natural-compare@1.4.0: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} - netmask@2.0.2: {} - - next@15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + nestjs-cls@5.4.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2): dependencies: - '@next/env': 15.2.1 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001701 - postcss: 8.4.31 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(react@19.0.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.1 - '@next/swc-darwin-x64': 15.2.1 - '@next/swc-linux-arm64-gnu': 15.2.1 - '@next/swc-linux-arm64-musl': 15.2.1 - '@next/swc-linux-x64-gnu': 15.2.1 - '@next/swc-linux-x64-musl': 15.2.1 - '@next/swc-win32-arm64-msvc': 15.2.1 - '@next/swc-win32-x64-msvc': 15.2.1 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/core': 11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2) + reflect-metadata: 0.2.2 + rxjs: 7.8.2 - no-case@2.3.2: + nestjs-paginate@11.1.1(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/swagger@11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2))(express@5.0.1)(fastify@5.2.1)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))): dependencies: - lower-case: 1.1.4 + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/swagger': 11.0.7(@fastify/static@8.1.1)(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.0.12(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.0.12)(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2) + express: 5.0.1 + fastify: 5.2.1 + lodash: 4.17.21 + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) - node-plop@0.26.3: + nestjs-pino@4.4.0(@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2))(pino-http@10.4.0)(pino@9.6.0)(rxjs@7.8.2): dependencies: - '@babel/runtime-corejs3': 7.26.9 - '@types/inquirer': 6.5.0 - change-case: 3.1.0 - del: 5.1.0 - globby: 10.0.2 - handlebars: 4.7.8 - inquirer: 7.3.3 - isbinaryfile: 4.0.10 - lodash.get: 4.4.2 - mkdirp: 0.5.6 - resolve: 1.22.10 + '@nestjs/common': 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + pino: 9.6.0 + pino-http: 10.4.0 + rxjs: 7.8.2 + + node-abort-controller@3.1.1: {} + + node-addon-api@5.1.0: {} + + node-addon-api@8.3.1: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.17.21 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: {} + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + normalize-url@8.0.1: {} npm-run-path@4.0.1: dependencies: path-key: 3.1.1 + 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: {} - object-keys@1.1.1: {} + obliterator@2.0.5: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 + on-exit-leak-free@2.1.2: {} - object.entries@1.1.8: + on-finished@2.4.1: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + ee-first: 1.1.1 once@1.4.0: dependencies: @@ -3653,6 +9011,17 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + openapi3-ts@4.4.0: + dependencies: + yaml: 2.7.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -3662,17 +9031,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@4.1.1: - dependencies: - chalk: 3.0.0 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - log-symbols: 3.0.0 - mute-stream: 0.0.8 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - ora@5.4.1: dependencies: bl: 4.1.0 @@ -3687,58 +9045,57 @@ snapshots: os-tmpdir@1.0.2: {} - own-keys@1.0.1: + p-cancelable@3.0.0: {} + + p-limit@2.3.0: dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 + p-try: 2.2.0 p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-map@3.0.0: - dependencies: - aggregate-error: 3.1.0 + p-try@2.2.0: {} - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.0 - get-uri: 6.0.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - param-case@2.1.1: - dependencies: - no-case: 2.3.2 + package-json-from-dist@1.0.1: {} parent-module@1.0.1: dependencies: callsites: 3.1.0 - pascal-case@2.0.1: + parse-json@5.2.0: dependencies: - camel-case: 3.0.0 - upper-case-first: 1.1.2 + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - path-case@2.1.1: + parseurl@1.3.3: {} + + passport-jwt@4.0.1: dependencies: - no-case: 2.3.2 + jsonwebtoken: 9.0.2 + passport-strategy: 1.0.0 + + passport-local@1.0.0: + dependencies: + passport-strategy: 1.0.0 + + passport-strategy@1.0.0: {} + + passport@0.7.0: + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + utils-merge: 1.0.1 path-exists@4.0.0: {} @@ -3748,66 +9105,171 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} - picocolors@1.0.1: {} + pause@0.0.1: {} + + peek-readable@5.4.2: {} + + pend@1.2.0: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - possible-typed-array-names@1.1.0: {} + picomatch@4.0.2: {} - postcss@8.4.31: + pino-abstract-transport@0.5.0: dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.1 + duplexify: 4.1.3 + split2: 4.2.0 + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-http@10.4.0: + dependencies: + get-caller-file: 2.0.5 + pino: 9.6.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.1 + + pino-pretty@13.0.0: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pump: 3.0.2 + secure-json-parse: 2.7.0 + sonic-boom: 4.2.0 + strip-json-comments: 3.1.1 + + pino-std-serializers@7.0.0: {} + + pino@9.6.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.1 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.6: {} + + piscina@4.9.2: + optionalDependencies: + '@napi-rs/nice': 1.0.1 + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pluralize@8.0.0: {} prelude-ls@1.2.1: {} + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + prettier@3.5.3: {} - prop-types@15.8.1: + pretty-format@29.7.0: dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 - proxy-agent@6.5.0: + process-nextick-args@2.0.1: {} + + process-warning@4.0.1: {} + + process@0.11.10: {} + + prompts@2.4.2: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 proxy-from-env@1.1.0: {} + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} + pure-rand@6.1.0: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + queue-microtask@1.2.3: {} - rc@1.2.8: + quick-format-unescaped@4.0.4: {} + + quick-lru@5.1.1: {} + + randombytes@2.1.0: dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 + safe-buffer: 5.2.1 - react-dom@19.0.0(react@19.0.0): + range-parser@1.2.1: {} + + raw-body@3.0.0: dependencies: - react: 19.0.0 - scheduler: 0.25.0 + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 - react-is@16.13.1: {} + react-is@18.3.1: {} - react@19.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: @@ -3815,160 +9277,183 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - reflect.getprototypeof@1.0.10: + readable-stream@4.7.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 - regenerator-runtime@0.14.1: {} - - regexp.prototype.flags@1.5.4: + readdirp@3.6.0: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + picomatch: 2.3.1 - registry-auth-token@3.3.2: - dependencies: - rc: 1.2.8 - safe-buffer: 5.2.1 + readdirp@4.1.2: {} - registry-url@3.1.0: + real-require@0.2.0: {} + + redis@4.7.0: dependencies: - rc: 1.2.8 + '@redis/bloom': 1.2.0(@redis/client@1.6.0) + '@redis/client': 1.6.0 + '@redis/graph': 1.1.1(@redis/client@1.6.0) + '@redis/json': 1.0.7(@redis/client@1.6.0) + '@redis/search': 1.2.0(@redis/client@1.6.0) + '@redis/time-series': 1.1.0(@redis/client@1.6.0) + + reflect-metadata@0.2.2: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + + resolve.exports@2.0.3: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + responselike@3.0.0: dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + lowercase-keys: 3.0.0 restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + ret@0.5.0: {} + reusify@1.1.0: {} + rfdc@1.4.1: {} + rimraf@3.0.2: dependencies: glob: 7.2.3 - run-async@2.4.1: {} + router@2.1.0: + dependencies: + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + + run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@6.6.7: + rxjs@7.8.1: dependencies: - tslib: 1.14.1 + tslib: 2.8.1 rxjs@7.8.2: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: + safe-regex2@4.0.1: dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 + ret: 0.5.0 - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 + safe-stable-stringify@2.5.0: {} safer-buffer@2.1.2: {} - scheduler@0.25.0: {} + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + secure-json-parse@2.7.0: {} + + secure-json-parse@3.0.2: {} + + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + + semver-regex@4.0.5: {} + + semver-truncate@3.0.0: + dependencies: + semver: 7.7.1 + + semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.2: {} - semver@7.7.1: {} - sentence-case@2.1.1: + send@1.1.0: dependencies: - no-case: 2.3.2 - upper-case-first: 1.1.2 + debug: 4.4.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.0 + mime-types: 2.1.35 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color - 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 + seq-logging@1.1.2: {} - set-function-name@2.0.2: + serialize-javascript@6.0.2: dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + randombytes: 2.1.0 - set-proto@1.0.0: + serve-static@2.1.0: dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.1.0 + transitivePeerDependencies: + - supports-color - sharp@0.33.5: + set-blocking@2.0.0: {} + + set-cookie-parser@2.7.1: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true + inherits: 2.0.4 + safe-buffer: 5.2.1 shebang-command@2.0.0: dependencies: @@ -3976,6 +9461,8 @@ snapshots: shebang-regex@3.0.0: {} + shimmer@1.2.1: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -4006,89 +9493,87 @@ snapshots: signal-exit@3.0.7: {} - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - optional: true + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} slash@3.0.0: {} - smart-buffer@4.2.0: {} - - snake-case@2.1.0: + sonic-boom@4.2.0: dependencies: - no-case: 2.3.2 + atomic-sleep: 1.0.0 - socks-proxy-agent@8.0.5: + sort-keys-length@1.0.1: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 - socks: 2.8.4 - transitivePeerDependencies: - - supports-color + sort-keys: 1.1.2 - socks@2.8.4: + sort-keys@1.1.2: dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 + is-plain-obj: 1.1.0 - source-map-js@1.2.1: {} + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + 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: {} + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + sql-highlight@6.0.0: {} + + stack-chain@1.3.7: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + stoppable@1.1.0: {} + + stream-shift@1.0.3: {} + streamsearch@1.1.0: {} + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string.prototype.matchall@4.0.12: + string-width@5.1.2: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 - string.prototype.repeat@1.0.0: + string_decoder@1.1.1: dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + safe-buffer: 5.1.2 string_decoder@1.3.0: dependencies: @@ -4098,59 +9583,201 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-final-newline@2.0.0: {} + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 - strip-json-comments@2.0.1: {} + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 + + strip-final-newline@2.0.0: {} strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.0.0): + strtok3@9.1.1: dependencies: - client-only: 0.0.1 - react: 19.0.0 + '@tokenizer/token': 0.3.0 + peek-readable: 5.4.2 - supports-color@5.5.0: + superagent@9.0.2: dependencies: - has-flag: 3.0.0 + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.0 + fast-safe-stringify: 2.1.1 + form-data: 4.0.2 + formidable: 3.5.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.14.0 + transitivePeerDependencies: + - supports-color + + supertest@7.0.0: + dependencies: + methods: 1.1.2 + superagent: 9.0.2 + transitivePeerDependencies: + - supports-color supports-color@7.2.0: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} - swap-case@1.1.2: + swagger-ui-dist@5.20.1: dependencies: - lower-case: 1.1.4 - upper-case: 1.1.3 + '@scarf/scarf': 1.4.0 + + symbol-observable@4.0.0: {} + + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.8.1 + + tapable@2.2.1: {} + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + + 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 + + tarn@3.0.2: {} + + tedious@18.6.1: + dependencies: + '@azure/core-auth': 1.9.0 + '@azure/identity': 4.8.0 + '@azure/keyvault-keys': 4.9.0 + '@js-joda/core': 5.6.4 + '@types/node': 22.13.10 + bl: 6.1.0 + iconv-lite: 0.6.3 + js-md4: 0.3.2 + native-duplexpair: 1.0.0 + sprintf-js: 1.1.3 + transitivePeerDependencies: + - supports-color + + terser-webpack-plugin@5.3.14(@swc/core@1.11.11)(webpack@5.98.0(@swc/core@1.11.11)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.39.0 + webpack: 5.98.0(@swc/core@1.11.11) + optionalDependencies: + '@swc/core': 1.11.11 + + terser@5.39.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 through@2.3.8: {} - tinycolor2@1.6.0: {} - - tinygradient@1.1.5: - dependencies: - '@types/tinycolor2': 1.4.6 - tinycolor2: 1.6.0 - - title-case@2.1.1: - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + tmpl@1.0.5: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + token-types@6.0.0: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + tozod@3.0.0(zod@3.24.2): + dependencies: + zod: 3.24.2 + + tr46@0.0.3: {} + + tree-kill@1.2.2: {} + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: typescript: 5.8.2 - ts-node@10.9.2(@types/node@22.13.10)(typescript@5.8.2): + ts-deepmerge@6.2.1: {} + + ts-jest@29.2.6(@babel/core@7.26.10)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(jest@29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)))(typescript@5.8.2): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.13.10)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + typescript: 5.8.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.10 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10) + + ts-loader@9.5.2(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.11.11)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.18.1 + micromatch: 4.0.8 + semver: 7.7.1 + source-map: 0.7.4 + typescript: 5.8.2 + webpack: 5.98.0(@swc/core@1.11.11) + + ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -4158,7 +9785,7 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.13.10 - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 @@ -4167,8 +9794,21 @@ snapshots: typescript: 5.8.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.11.11 - tslib@1.14.1: {} + tsconfig-paths-webpack-plugin@4.2.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.18.1 + tapable: 2.2.1 + 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: {} @@ -4203,40 +9843,63 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + type-fest@0.21.3: {} - typed-array-buffer@1.0.3: + type-is@1.6.18: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 + media-typer: 0.3.0 + mime-types: 2.1.35 - typed-array-byte-length@1.0.3: + type-is@2.0.0: dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.0 - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 + typedarray@0.0.6: {} - typed-array-length@1.0.7: + typeorm-naming-strategies@4.1.0(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))): dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + + typeorm-scoped@1.2.0(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))): + dependencies: + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + + typeorm-transactional@0.5.0(reflect-metadata@0.2.2)(typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2))): + dependencies: + '@types/cls-hooked': 4.3.9 + cls-hooked: 4.2.2 + reflect-metadata: 0.2.2 + semver: 7.7.1 + typeorm: 0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)) + + typeorm@0.3.21(mssql@11.0.1)(redis@4.7.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2)): + dependencies: + '@sqltools/formatter': 1.2.5 + ansis: 3.16.0 + app-root-path: 3.1.0 + buffer: 6.0.3 + dayjs: 1.11.13 + debug: 4.4.0 + dotenv: 16.0.3 + glob: 10.4.5 + reflect-metadata: 0.2.2 + sha.js: 2.4.11 + sql-highlight: 6.0.0 + tslib: 2.8.1 + uuid: 11.1.0 + yargs: 17.7.2 + optionalDependencies: + mssql: 11.0.1 + redis: 4.7.0 + ts-node: 10.9.2(@swc/core@1.11.11)(@types/node@22.13.10)(typescript@5.8.2) + transitivePeerDependencies: + - supports-color typescript-eslint@8.26.0(eslint@9.22.0)(typescript@5.8.2): dependencies: @@ -4248,32 +9911,32 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.7.3: {} + typescript@5.8.2: {} - uglify-js@3.19.3: - optional: true - - unbox-primitive@1.1.0: + uid@2.0.2: dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.4.0: {} + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 undici-types@6.20.0: {} universalify@2.0.1: {} - update-check@1.5.4: - dependencies: - registry-auth-token: 3.3.2 - registry-url: 3.1.0 + unpipe@1.0.0: {} - upper-case-first@1.1.2: + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: - upper-case: 1.1.3 - - upper-case@1.1.3: {} + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: @@ -4281,61 +9944,89 @@ snapshots: util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} + + uuid@11.1.0: {} + + uuid@8.3.2: {} + v8-compile-cache-lib@3.0.1: {} - validate-npm-package-name@5.0.1: {} + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + vary@1.1.2: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 wcwidth@1.0.1: dependencies: defaults: 1.0.4 - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 + webidl-conversions@3.0.1: {} - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.18 + webpack-node-externals@3.0.0: {} - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 + webpack-sources@3.2.3: {} - which-typed-array@1.1.18: + webpack@5.98.0(@swc/core@1.11.11): dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - gopd: 1.2.0 - has-tostringtag: 1.0.2 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.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.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.11)(webpack@5.98.0(@swc/core@1.11.11)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 which@2.0.2: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 - wordwrap@1.0.0: {} + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + word-wrap@1.2.5: {} wrap-ansi@6.2.0: dependencies: @@ -4343,8 +10034,56 @@ snapshots: 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.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.7.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 + + yauzl@3.2.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + yn@3.1.1: {} yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.2: {} + + zod@3.24.2: {} diff --git a/turbo.json b/turbo.json index d6a7fe0..1a53797 100644 --- a/turbo.json +++ b/turbo.json @@ -5,7 +5,7 @@ "build": { "dependsOn": ["^build"], "inputs": ["$TURBO_DEFAULT$", ".env*"], - "outputs": [".next/**", "!.next/cache/**"] + "outputs": ["dist/**"] }, "lint": { "dependsOn": ["^lint"]