From 240144cd22cd53e588ff889bdd03535aad593607 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 15:15:23 +0700 Subject: [PATCH 01/44] feat: add @thaitype/ioctopus dependency and create project documentation --- README.backup.md | 117 +++++++++++++++++ README.md | 333 +++++++++++++++++++++++++++++++++++++---------- docs.md | 101 ++++++++++++++ package.json | 5 +- pnpm-lock.yaml | 10 ++ 5 files changed, 494 insertions(+), 72 deletions(-) create mode 100644 README.backup.md create mode 100644 docs.md diff --git a/README.backup.md b/README.backup.md new file mode 100644 index 0000000..582c80c --- /dev/null +++ b/README.backup.md @@ -0,0 +1,117 @@ +# TypeScript Clean Architecture + +[![Test and Build](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml/badge.svg)](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml) + +> In progess! + +This is turborepo starter with Drizzle ORM and PostgreSQL pre-configured. + +> [!NOTE] +> This example uses `pnpm` as package manager. + +## Using this example + +Clone the repository: + +```sh +git clone https://github.com/htsh-tsyk/turbo-drizzle.git +``` + +## What's inside? + +This Turborepo includes the following packages/apps: + +### Apps and Packages + +- `web`: another [Next.js](https://nextjs.org/) app +- `@repo/database`: Drizzle ORM wrapper to manage & access your database +- `@repo/ui`: a stub React component library shared by a `web` application +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting +- [Drizzle for database ORM](https://orm.drizzle.team/) for database ORM + +### Build + +To build all apps and packages, run the following command: + +``` +cd turbo-drizzle +cp apps/web/.env.default apps/web/.env +pnpm install +pnpm build +``` + +### Database + +We use [Drizzle ORM](https://orm.drizzle.team/) to manage & access our database. As such you will need a database for this project, either locally or hosted in the cloud. + +To make this process easier, we offer a [`docker-compose.yml`](https://docs.docker.com/compose/) file to deploy a PostgreSQL server locally with a new database named `repo_development` (To change this update the `POSTGRES_DB` environment variable in the `docker-compose.yml` file): + +```bash +cd turbo-drizzle +docker-compose up -d +``` + +Once deployed you will need to copy the `.env.default` file to `.env` in order for Drizzle to have a `DATABASE_URL` environment variable to access. + +```bash +cp apps/web/.env.default apps/web/.env +``` + +If you added a custom database name, or use a cloud based database, you will need to update the `DATABASE_URL` in your `.env` accordingly. + +Once deployed & up & running, you will need to create & deploy migrations to your database to add the necessary tables. This can be done using [Drizzle Migrate](https://orm.drizzle.team/docs/migrations): + +in `database` package: (command `drizzle-kit generate`) + +``` +pnpm generate +``` + +```bash +pnpm turbo db:migrate +``` + +An optional additional step is to seed some initial or fake data to your database. + +To do this update check the seed script located in `packages/database/scripts/seed.ts` & add or update any users you wish to seed to the database. + +Once edited run the following command to run tell Drizzle to run the seed script defined in the Drizzle configuration: + +```bash +pnpm turbo db:seed +``` + +### Develop + +To develop all apps and packages, run the following command: + +```shell +pnpm dev +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) +- [Caching](https://turbo.build/repo/docs/core-concepts/caching) +- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) +- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) +- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) +- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) + +## References +- Drizzle Turbo Repo Template: https://github.com/htsh-tsyk/turbo-drizzle/tree/main +- Next.js Clean Architecture: https://github.com/nikolovlazar/nextjs-clean-architecture/tree/main +- Next.js 15 on turborepo template: https://github.com/vercel/turborepo/tree/c59da312df134cc1aaf7c269bc3cd0b78c073b07/examples/basic \ No newline at end of file diff --git a/README.md b/README.md index 582c80c..6da3bf9 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,308 @@ -# TypeScript Clean Architecture +# ๐Ÿงฑ Clean Architecture Template for TypeScript Monorepos -[![Test and Build](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml/badge.svg)](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml) +This is a **Clean Architecture starter template** designed for monorepos using **Turborepo** + **pnpm** + **TypeScript**. It's simple enough to get started quickly and scalable enough to grow into a large production system. -> In progess! +--- -This is turborepo starter with Drizzle ORM and PostgreSQL pre-configured. +## โšก Quick Start -> [!NOTE] -> This example uses `pnpm` as package manager. +```bash +git clone https://github.com/your-org/your-repo.git +cd your-repo +pnpm install +pnpm dev +``` -## Using this example +--- -Clone the repository: +## ๐Ÿง  What is Clean Architecture? -```sh -git clone https://github.com/htsh-tsyk/turbo-drizzle.git -``` +**Clean Architecture** is a way to structure your application so that: -## What's inside? +- Business logic is **independent** from frameworks (e.g. Express, Next.js) +- Code is **testable**, **modular**, and easy to **extend** +- Dependencies always point **inward**, from outer layers toward the core -This Turborepo includes the following packages/apps: +## ๐Ÿค” Why Clean Architecture? -### Apps and Packages +Clean Architecture helps you: -- `web`: another [Next.js](https://nextjs.org/) app -- `@repo/database`: Drizzle ORM wrapper to manage & access your database -- `@repo/ui`: a stub React component library shared by a `web` application -- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) -- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo +- โœจ Write framework-agnostic business logic +- ๐Ÿงช Test use cases in isolation (no DB or HTTP server needed) +- ๐Ÿงฑ Structure your code for long-term maintainability +- ๐Ÿงฉ Easily swap implementations (e.g. Mongo โ†’ Postgres, REST โ†’ GraphQL) +- ๐Ÿ‘ฅ Onboard teammates faster with a predictable, layered system -Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). +--- -### Utilities +### Core Principles: -This Turborepo has some additional tools already setup for you: +| Layer | Responsibility | +|----------------------|----------------------------------------------------------------------------------| +| **Domain** | Business entities, rules, invariants (pure, stable) | +| **Application** | Use cases, business workflows, interfaces for repositories/services | +| **Interface Adapters** | Controllers, presenters, mappers, validators (connect input/output to use cases) | +| **Infrastructure** | Concrete implementations of services, repositories (DB, APIs, email, etc.) | +| **DI (Dependency Injection)** | Wiring dependencies to keep layers decoupled | -- [TypeScript](https://www.typescriptlang.org/) for static type checking -- [ESLint](https://eslint.org/) for code linting -- [Prettier](https://prettier.io) for code formatting -- [Drizzle for database ORM](https://orm.drizzle.team/) for database ORM +--- -### Build +## ๐Ÿš€ Starter Project Structure -To build all apps and packages, run the following command: +A minimal setup that helps you get started quickly: -``` -cd turbo-drizzle -cp apps/web/.env.default apps/web/.env -pnpm install -pnpm build +```bash +. +โ”œโ”€โ”€ apps/ +โ”‚ โ””โ”€โ”€ web/ # App entry point (e.g., Next.js, Express) +โ”œโ”€โ”€ core/ +โ”‚ โ”œโ”€โ”€ domain/ # Business entities +โ”‚ โ”œโ”€โ”€ application/ # Use cases and interfaces +โ”‚ โ”œโ”€โ”€ interface-adapters/ # Controllers, mappers, validators +โ”‚ โ”œโ”€โ”€ infrastructure/ # Contracts only (not implementations) +โ”‚ โ””โ”€โ”€ di/ # DI container & registry +โ”œโ”€โ”€ packages/ +โ”‚ โ””โ”€โ”€ db-postgres/ # Postgres implementation of repositories +โ””โ”€โ”€ shared/ # Common types, utils, constants ``` -### Database +## ๐Ÿ”— High-Level Dependency Diagram -We use [Drizzle ORM](https://orm.drizzle.team/) to manage & access our database. As such you will need a database for this project, either locally or hosted in the cloud. +**Arrow direction (โ†’)** means "depends on" or "uses" โ€” the arrow always points from the **dependent** to the **dependency**. -To make this process easier, we offer a [`docker-compose.yml`](https://docs.docker.com/compose/) file to deploy a PostgreSQL server locally with a new database named `repo_development` (To change this update the `POSTGRES_DB` environment variable in the `docker-compose.yml` file): +### ๐Ÿ” Example Interpretation: +- `application โ†’ domain` + โ†ณ e.g., `CreateUserUseCase` uses `User` entity โ†’ `import { User } from "@acme/domain"` -```bash -cd turbo-drizzle -docker-compose up -d -``` +- `interface-adapters โ†’ application` + โ†ณ e.g., `UserController` calls `CreateUserUseCase` โ†’ `import { CreateUserUseCase } from "@acme/application"` -Once deployed you will need to copy the `.env.default` file to `.env` in order for Drizzle to have a `DATABASE_URL` environment variable to access. +- `infrastructure โ†’ application` + โ†ณ e.g., `UserRepository` implements `IUserRepository` โ†’ `import { IUserRepository } from "@acme/application"` -```bash -cp apps/web/.env.default apps/web/.env -``` +- `apps/web โ†’ di` + โ†ณ e.g., web app resolves controller via DI โ†’ `const userController = resolve("UserController")` -If you added a custom database name, or use a cloud based database, you will need to update the `DATABASE_URL` in your `.env` accordingly. +- `shared โ†’ all` + โ†ณ e.g., shared `utils`, `types`, or `constants` are imported across layers -Once deployed & up & running, you will need to create & deploy migrations to your database to add the necessary tables. This can be done using [Drizzle Migrate](https://orm.drizzle.team/docs/migrations): +For example: +- `application โ†’ domain` = Application layer depends on domain models +- `interface-adapters โ†’ application` = Controllers use application use cases +- `infrastructure โ†’ application` = Implementations depend on interfaces defined in application +- `apps/web โ†’ di` = App depends on the DI wiring -in `database` package: (command `drizzle-kit generate`) +```mermaid +graph TD +%% Core layers +A[domain] --> B[application] +B --> C[interface-adapters] +B --> D[infrastructure] +C --> E[di] +D --> E + +%% App layer +E --> F[apps/web] + +%% External packages +H[packages/db-postgres] --> D + +%% Shared +J[shared] --> B +J --> C +J --> D +J --> E +J --> F + +style A fill:#f9f,stroke:#333,stroke-width:2 +style B fill:#bbf,stroke:#333,stroke-width:2 +style C fill:#cfc,stroke:#333,stroke-width:2 +style D fill:#fcc,stroke:#333,stroke-width:2 +style E fill:#ffc,stroke:#333,stroke-width:2 +style F fill:#eee,stroke:#333,stroke-width:2 +style H fill:#ddd,stroke:#999,stroke-dasharray: 5 +style J fill:#eee,stroke:#666,stroke-dasharray: 3 ``` -pnpm generate -``` + +--- + +## ๐ŸŒฑ Future Project Structure (Scalable & Modular) + +Once your project grows, the structure expands like this: ```bash -pnpm turbo db:migrate +. +โ”œโ”€โ”€ apps/ +โ”‚ โ”œโ”€โ”€ web/ # Web/API app +โ”‚ โ””โ”€โ”€ cli/ # CLI commands (optional) +โ”‚ +โ”œโ”€โ”€ core/ +โ”‚ โ”œโ”€โ”€ domain/ +โ”‚ โ”‚ โ”œโ”€โ”€ entities/ +โ”‚ โ”‚ โ”œโ”€โ”€ value-objects/ +โ”‚ โ”‚ โ””โ”€โ”€ errors/ +โ”‚ โ”œโ”€โ”€ application/ +โ”‚ โ”‚ โ”œโ”€โ”€ use-cases/ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ commands/ +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ queries/ +โ”‚ โ”‚ โ””โ”€โ”€ interfaces/ +โ”‚ โ”œโ”€โ”€ interface-adapters/ +โ”‚ โ”‚ โ”œโ”€โ”€ controllers/ +โ”‚ โ”‚ โ”œโ”€โ”€ graphql/ # GraphQL resolvers +โ”‚ โ”‚ โ”œโ”€โ”€ cli/ # CLI entry points +โ”‚ โ”‚ โ”œโ”€โ”€ webhooks/ # Webhook handlers (e.g., Stripe) +โ”‚ โ”‚ โ”œโ”€โ”€ events/ # Event-driven adapters (e.g., RabbitMQ) +โ”‚ โ”‚ โ”œโ”€โ”€ middlewares/ # HTTP middlewares +โ”‚ โ”‚ โ”œโ”€โ”€ presenters/ # View-friendly formatters (DTOs) +โ”‚ โ”‚ โ””โ”€โ”€ validators/ # Zod/Yup validators +โ”‚ โ”œโ”€โ”€ infrastructure/ +โ”‚ โ”‚ โ”œโ”€โ”€ gateways/ +โ”‚ โ”‚ โ””โ”€โ”€ persistence/ +โ”‚ โ””โ”€โ”€ di/ +โ”‚ โ”œโ”€โ”€ container.ts +โ”‚ โ”œโ”€โ”€ ServiceRegistry.ts +โ”‚ โ””โ”€โ”€ resolve.ts +โ”‚ +โ”œโ”€โ”€ packages/ +โ”‚ โ”œโ”€โ”€ db-mongodb/ # MongoDB implementation +โ”‚ โ”œโ”€โ”€ db-postgres/ # PostgreSQL implementation +โ”‚ โ”œโ”€โ”€ cache-redis/ # Redis cache adapter (for ICacheService) +โ”‚ โ”œโ”€โ”€ mq-rabbitmq/ # RabbitMQ adapter (for IMessageQueueService) +โ”‚ โ”œโ”€โ”€ email-sendgrid/ # SendGrid adapter +โ”‚ โ””โ”€โ”€ logger-pino/ # Pino logger service +โ”‚ +โ”œโ”€โ”€ shared/ +โ”‚ โ”œโ”€โ”€ types/ +โ”‚ โ”œโ”€โ”€ utils/ +โ”‚ โ”œโ”€โ”€ config/ +โ”‚ โ””โ”€โ”€ constants/ +โ”‚ +โ”œโ”€โ”€ tools/ # Scripts, CLI helpers +โ””โ”€โ”€ design-system/ # (Optional) UI components ``` -An optional additional step is to seed some initial or fake data to your database. +--- + +## ๐Ÿ”— High-Level Dependency Diagram + +```mermaid +graph TD + +%% Core layers +A[domain] --> B[application] +B --> C[interface-adapters] +B --> D[infrastructure] +C --> E[di] +D --> E + +%% App layer +E --> F[apps/web] + +%% External packages +G[packages/db-mongodb] --> D +H[packages/db-postgres] --> D +I[packages/email-sendgrid] --> D +X[packages/cache-redis] --> D +Y[packages/mq-rabbitmq] --> D + +%% Shared +J[shared] --> B +J --> C +J --> D +J --> E +J --> F + +style A fill:#f9f,stroke:#333,stroke-width:2 +style B fill:#bbf,stroke:#333,stroke-width:2 +style C fill:#cfc,stroke:#333,stroke-width:2 +style D fill:#fcc,stroke:#333,stroke-width:2 +style E fill:#ffc,stroke:#333,stroke-width:2 +style F fill:#eee,stroke:#333,stroke-width:2 +style G fill:#ddd,stroke:#999,stroke-dasharray: 5 +style H fill:#ddd,stroke:#999,stroke-dasharray: 5 +style I fill:#ddd,stroke:#999,stroke-dasharray: 5 +style X fill:#ddd,stroke:#999,stroke-dasharray: 5 +style Y fill:#ddd,stroke:#999,stroke-dasharray: 5 +style J fill:#eee,stroke:#666,stroke-dasharray: 3 +``` -To do this update check the seed script located in `packages/database/scripts/seed.ts` & add or update any users you wish to seed to the database. +--- -Once edited run the following command to run tell Drizzle to run the seed script defined in the Drizzle configuration: +## ๐Ÿง  Dependency Injection -```bash -pnpm turbo db:seed +This template uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus) โ€” a simple, metadata-free IoC container for TypeScript that works across runtimes (Node, Edge, etc). + +--- + +## ๐Ÿงช Example Usage + +```ts +// apps/web/index.ts +import { resolve } from "@acme/di"; + +const userController = resolve("UserController"); +await userController.create({ + body: { id: "u1", name: "Alice" }, +}); ``` -### Develop +--- -To develop all apps and packages, run the following command: +## ๐Ÿงช Testing -```shell -pnpm dev +Because each layer is isolated, you can easily test use cases like this: + +```ts +import { CreateUserUseCase } from "@acme/application"; + +const mockRepo = { + create: vi.fn(), +}; + +const useCase = new CreateUserUseCase(mockRepo); +await useCase.execute({ id: "u1", name: "Alice", email: "test@example.com" }); ``` -## Useful Links +--- + +## ๐Ÿ“š Glossary + +| Term | Meaning | +|-------------------|-------------------------------------------------------------------------| +| **Use Case** | One unit of business logic (e.g. CreateUser) | +| **Controller** | Handles incoming requests and calls use cases | +| **Presenter** | Formats output for UI or external clients | +| **Gateway** | Interface to external systems (e.g. DB, Email, Redis) | +| **Interface Adapter** | Layer that translates between external input/output and core logic | +| **Repository** | Contract for accessing data, implemented in infrastructure | + +--- + +## ๐Ÿ›  Getting Started + +1. Clone the repo +2. Run `pnpm install` +3. Start hacking in `/core/` + +--- + +Happy coding! โœจ Let your architecture evolve, not collapse. ๐Ÿ—๏ธ + +--- + +## Q&A -Learn more about the power of Turborepo: +### ๐Ÿ†š Shared vs Domain -- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) -- [Caching](https://turbo.build/repo/docs/core-concepts/caching) -- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) -- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) -- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) -- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) +### `shared/` +- Generic, reusable code: utilities, types, config loaders, constants +- Not tied to any business logic +- Can be used by any layer **except** `domain` +- Example: `formatDate()`, `PaginatedResult`, `Zod` validators -## References -- Drizzle Turbo Repo Template: https://github.com/htsh-tsyk/turbo-drizzle/tree/main -- Next.js Clean Architecture: https://github.com/nikolovlazar/nextjs-clean-architecture/tree/main -- Next.js 15 on turborepo template: https://github.com/vercel/turborepo/tree/c59da312df134cc1aaf7c269bc3cd0b78c073b07/examples/basic \ No newline at end of file +### `domain/` +- Contains business entities, rules, and core logic +- No external dependencies โ€” must be 100% pure and stable +- Should not import from `shared` (to preserve isolation) +- Example: `User`, `Order`, `EmailAddress`, domain-specific errors diff --git a/docs.md b/docs.md new file mode 100644 index 0000000..ea31ef8 --- /dev/null +++ b/docs.md @@ -0,0 +1,101 @@ +## ๐ŸŒฑ Future Project Structure (Scalable & Modular) + +Once your project grows, the structure expands like this: + +```bash +. +โ”œโ”€โ”€ apps/ +โ”‚ โ”œโ”€โ”€ web/ # Web/API app +โ”‚ โ””โ”€โ”€ cli/ # CLI commands (optional) +โ”‚ +โ”œโ”€โ”€ core/ +โ”‚ โ”œโ”€โ”€ domain/ +โ”‚ โ”‚ โ”œโ”€โ”€ entities/ +โ”‚ โ”‚ โ”œโ”€โ”€ value-objects/ +โ”‚ โ”‚ โ””โ”€โ”€ errors/ +โ”‚ โ”œโ”€โ”€ application/ +โ”‚ โ”‚ โ”œโ”€โ”€ use-cases/ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ commands/ +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ queries/ +โ”‚ โ”‚ โ””โ”€โ”€ interfaces/ +โ”‚ โ”œโ”€โ”€ interface-adapters/ +โ”‚ โ”‚ โ”œโ”€โ”€ controllers/ +โ”‚ โ”‚ โ”œโ”€โ”€ graphql/ +โ”‚ โ”‚ โ”œโ”€โ”€ cli/ +โ”‚ โ”‚ โ”œโ”€โ”€ webhooks/ +โ”‚ โ”‚ โ”œโ”€โ”€ events/ +โ”‚ โ”‚ โ”œโ”€โ”€ middlewares/ +โ”‚ โ”‚ โ”œโ”€โ”€ presenters/ +โ”‚ โ”‚ โ””โ”€โ”€ validators/ +โ”‚ โ”œโ”€โ”€ infrastructure/ +โ”‚ โ”‚ โ”œโ”€โ”€ gateways/ +โ”‚ โ”‚ โ””โ”€โ”€ persistence/ +โ”‚ โ””โ”€โ”€ di/ +โ”‚ โ”œโ”€โ”€ container.ts +โ”‚ โ”œโ”€โ”€ ServiceRegistry.ts +โ”‚ โ””โ”€โ”€ resolve.ts +โ”‚ +โ”œโ”€โ”€ packages/ +โ”‚ โ”œโ”€โ”€ db-mongodb/ # MongoDB implementation +โ”‚ โ”œโ”€โ”€ db-postgres/ # PostgreSQL implementation +โ”‚ โ”œโ”€โ”€ cache-redis/ # Redis cache adapter (for ICacheService) +โ”‚ โ”œโ”€โ”€ mq-rabbitmq/ # RabbitMQ adapter (for IMessageQueueService) +โ”‚ โ”œโ”€โ”€ email-sendgrid/ # SendGrid adapter +โ”‚ โ””โ”€โ”€ logger-pino/ # Pino logger service +โ”‚ +โ”œโ”€โ”€ shared/ +โ”‚ โ”œโ”€โ”€ types/ +โ”‚ โ”œโ”€โ”€ utils/ +โ”‚ โ”œโ”€โ”€ config/ +โ”‚ โ””โ”€โ”€ constants/ +โ”‚ +โ”œโ”€โ”€ tools/ # Scripts, CLI helpers +โ””โ”€โ”€ design-system/ # (Optional) UI components +``` + +--- + +## ๐Ÿ”— High-Level Dependency Diagram + +```mermaid +graph TD + +%% Core layers +A[domain] --> B[application] +B --> C[interface-adapters] +B --> D[infrastructure] +C --> E[di] +D --> E + +%% App layer +E --> F[apps/web] + +%% External packages +G[packages/db-mongodb] --> D +H[packages/db-postgres] --> D +I[packages/email-sendgrid] --> D +X[packages/cache-redis] --> D +Y[packages/mq-rabbitmq] --> D + +%% Shared +J[shared] --> B +J --> C +J --> D +J --> E +J --> F + +style A fill:#f9f,stroke:#333,stroke-width:2 +style B fill:#bbf,stroke:#333,stroke-width:2 +style C fill:#cfc,stroke:#333,stroke-width:2 +style D fill:#fcc,stroke:#333,stroke-width:2 +style E fill:#ffc,stroke:#333,stroke-width:2 +style F fill:#eee,stroke:#333,stroke-width:2 +style G fill:#ddd,stroke:#999,stroke-dasharray: 5 +style H fill:#ddd,stroke:#999,stroke-dasharray: 5 +style I fill:#ddd,stroke:#999,stroke-dasharray: 5 +style X fill:#ddd,stroke:#999,stroke-dasharray: 5 +style Y fill:#ddd,stroke:#999,stroke-dasharray: 5 +style J fill:#eee,stroke:#666,stroke-dasharray: 3 +``` + +--- \ No newline at end of file diff --git a/package.json b/package.json index 92fdc4e..becfa08 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,8 @@ "node": ">=18" }, "name": "typescript-clean-architecture", - "packageManager": "pnpm@10.5.2" + "packageManager": "pnpm@10.5.2", + "dependencies": { + "@thaitype/ioctopus": "^2.0.0" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd77f4b..8e775f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + '@thaitype/ioctopus': + specifier: ^2.0.0 + version: 2.0.0 devDependencies: prettier: specifier: ^3.2.5 @@ -1184,6 +1188,9 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@thaitype/ioctopus@2.0.0': + resolution: {integrity: sha512-/B/4DfIMXXF4FIh+od/f0SA1mUTtP/GmbBpAnvMSMo25LKjjexdIY3/wiAjanG5aVI3T+hqORgGtlzarOfDYuw==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -2048,6 +2055,7 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@3.1.3: @@ -3365,6 +3373,8 @@ snapshots: dependencies: tslib: 2.8.1 + '@thaitype/ioctopus@2.0.0': {} + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} From 530d4d6c1f6e45463caca64edea615754cdbdc71 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 15:20:36 +0700 Subject: [PATCH 02/44] docs: update README to clarify usage of forked version of @thaitype/ioctopus --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6da3bf9..382f5bf 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,9 @@ style J fill:#eee,stroke:#666,stroke-dasharray: 3 ## ๐Ÿง  Dependency Injection -This template uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus) โ€” a simple, metadata-free IoC container for TypeScript that works across runtimes (Node, Edge, etc). +This template uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus) โ€” a simple, metadata-free IoC container for TypeScript that works across runtimes (Node, Edge, etc). + +However, this project use a forked version of `ioctopus` when the original package is fully support type-safety, this project will switch back to the original package, see [issue#3](https://github.com/thaitype/ioctopus/issues/3) --- From 3520a6bcc0071cf7557402593ce26490d38e4181 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:01:54 +0700 Subject: [PATCH 03/44] feat: add initial directory structure for core modules and shared resources --- {packages => core}/application/.gitkeep | 0 {packages/domain => core/di}/.gitkeep | 0 {packages/infrastructure => core/domain}/.gitkeep | 0 {packages/shared => core/infrastructure}/.gitkeep | 0 core/interface-adapters/.gitkeep | 0 pnpm-workspace.yaml | 4 +++- shared/.gitkeep | 0 7 files changed, 3 insertions(+), 1 deletion(-) rename {packages => core}/application/.gitkeep (100%) rename {packages/domain => core/di}/.gitkeep (100%) rename {packages/infrastructure => core/domain}/.gitkeep (100%) rename {packages/shared => core/infrastructure}/.gitkeep (100%) create mode 100644 core/interface-adapters/.gitkeep create mode 100644 shared/.gitkeep diff --git a/packages/application/.gitkeep b/core/application/.gitkeep similarity index 100% rename from packages/application/.gitkeep rename to core/application/.gitkeep diff --git a/packages/domain/.gitkeep b/core/di/.gitkeep similarity index 100% rename from packages/domain/.gitkeep rename to core/di/.gitkeep diff --git a/packages/infrastructure/.gitkeep b/core/domain/.gitkeep similarity index 100% rename from packages/infrastructure/.gitkeep rename to core/domain/.gitkeep diff --git a/packages/shared/.gitkeep b/core/infrastructure/.gitkeep similarity index 100% rename from packages/shared/.gitkeep rename to core/infrastructure/.gitkeep diff --git a/core/interface-adapters/.gitkeep b/core/interface-adapters/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5e5a30d..613ec44 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,7 @@ packages: - "apps/*" + - "core/*" - "packages/*" - "configs/*" - - "tools/*" \ No newline at end of file + - "tools/*" + - "shared" \ No newline at end of file diff --git a/shared/.gitkeep b/shared/.gitkeep new file mode 100644 index 0000000..e69de29 From 0a1c4dd5694c946f436bd5782b4cf1e4578eff5f Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:18:44 +0700 Subject: [PATCH 04/44] feat: update documentation and configuration for shared resources and dependencies --- docs.md | 6 +++++- package.json | 12 ++++++------ packages/database-drizzle/package.json | 1 - pnpm-lock.yaml | 20 ++++++++++++++------ shared/eslint.config.js | 4 ++++ shared/package.json | 9 +++++++++ shared/src/index.ts | 1 + shared/tsconfig.json | 12 ++++++++++++ tools/db/tsconfig.json | 2 +- 9 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 shared/eslint.config.js create mode 100644 shared/package.json create mode 100644 shared/src/index.ts create mode 100644 shared/tsconfig.json diff --git a/docs.md b/docs.md index ea31ef8..8260aec 100644 --- a/docs.md +++ b/docs.md @@ -98,4 +98,8 @@ style Y fill:#ddd,stroke:#999,stroke-dasharray: 5 style J fill:#eee,stroke:#666,stroke-dasharray: 3 ``` ---- \ No newline at end of file +--- + +## Using Turborepo on VS Code + +This may type not update, use `CMD + Shift + P` and type "TypeScript: Restart TypeScrip Server" to update the type. diff --git a/package.json b/package.json index becfa08..9bb1299 100644 --- a/package.json +++ b/package.json @@ -11,17 +11,17 @@ "generate": "turbo run generate", "lint": "turbo run lint" }, - "devDependencies": { - "prettier": "^3.2.5", - "tsx": "4.19.1", - "turbo": "^2.4.4" - }, "engines": { "node": ">=18" }, "name": "typescript-clean-architecture", "packageManager": "pnpm@10.5.2", "dependencies": { - "@thaitype/ioctopus": "^2.0.0" + "@thaitype/ioctopus": "^2.1.1" + }, + "devDependencies": { + "prettier": "^3.2.5", + "tsx": "4.19.1", + "turbo": "^2.4.4" } } diff --git a/packages/database-drizzle/package.json b/packages/database-drizzle/package.json index 1beaee7..41aeb82 100644 --- a/packages/database-drizzle/package.json +++ b/packages/database-drizzle/package.json @@ -1,6 +1,5 @@ { "name": "@acme/database-drizzle", - "version": "1.0.0", "type": "module", "exports": { ".": "./src/index.ts" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e775f7..ee2fd0a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@thaitype/ioctopus': - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.1.1 + version: 2.1.1 devDependencies: prettier: specifier: ^3.2.5 @@ -149,6 +149,15 @@ importers: specifier: 5.8.2 version: 5.8.2 + shared: + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../configs/config-eslint + '@acme/typescript-config': + specifier: workspace:* + version: link:../configs/config-typescript + tools/db: dependencies: dotenv: @@ -1188,8 +1197,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@thaitype/ioctopus@2.0.0': - resolution: {integrity: sha512-/B/4DfIMXXF4FIh+od/f0SA1mUTtP/GmbBpAnvMSMo25LKjjexdIY3/wiAjanG5aVI3T+hqORgGtlzarOfDYuw==} + '@thaitype/ioctopus@2.1.1': + resolution: {integrity: sha512-Bpvl2sc9n50eKDxZ2Q2rJdRFYlQBhAkLX7igNBJjx9lPolM5nQVFcIQ2w+OAnuN1wD5GZaVeVt2Xumx42cvpDw==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -2055,7 +2064,6 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@3.1.3: @@ -3373,7 +3381,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@thaitype/ioctopus@2.0.0': {} + '@thaitype/ioctopus@2.1.1': {} '@types/estree@1.0.6': {} diff --git a/shared/eslint.config.js b/shared/eslint.config.js new file mode 100644 index 0000000..f6ede9c --- /dev/null +++ b/shared/eslint.config.js @@ -0,0 +1,4 @@ +import { nextJsConfig } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default nextJsConfig; diff --git a/shared/package.json b/shared/package.json new file mode 100644 index 0000000..35d2a23 --- /dev/null +++ b/shared/package.json @@ -0,0 +1,9 @@ +{ + "name": "@acme/shared", + "type": "module", + "private": true, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*" + } +} diff --git a/shared/src/index.ts b/shared/src/index.ts new file mode 100644 index 0000000..6c8c969 --- /dev/null +++ b/shared/src/index.ts @@ -0,0 +1 @@ +console.log('shared/src/index.ts'); \ No newline at end of file diff --git a/shared/tsconfig.json b/shared/tsconfig.json new file mode 100644 index 0000000..647fa06 --- /dev/null +++ b/shared/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@acme/typescript-config/base.json", + "compilerOptions": { "plugins": [{ "name": "next" }] }, + "include": [ + "next-env.d.ts", + "next.config.js", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": ["node_modules"] +} diff --git a/tools/db/tsconfig.json b/tools/db/tsconfig.json index dce75d8..647fa06 100644 --- a/tools/db/tsconfig.json +++ b/tools/db/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/nextjs.json", + "extends": "@acme/typescript-config/base.json", "compilerOptions": { "plugins": [{ "name": "next" }] }, "include": [ "next-env.d.ts", From 60c84d09331b98c7fee654490fb40e5606602a12 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:27:30 +0700 Subject: [PATCH 05/44] feat: create core domain module with initial TypeScript setup and ESLint configuration --- core/domain/.gitkeep | 0 core/domain/eslint.config.js | 4 ++++ core/domain/package.json | 9 +++++++++ core/domain/src/entities/User.ts | 7 +++++++ core/domain/src/index.ts | 1 + core/domain/tsconfig.json | 8 ++++++++ pnpm-lock.yaml | 9 +++++++++ shared/tsconfig.json | 4 ---- 8 files changed, 38 insertions(+), 4 deletions(-) delete mode 100644 core/domain/.gitkeep create mode 100644 core/domain/eslint.config.js create mode 100644 core/domain/package.json create mode 100644 core/domain/src/entities/User.ts create mode 100644 core/domain/src/index.ts create mode 100644 core/domain/tsconfig.json diff --git a/core/domain/.gitkeep b/core/domain/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/core/domain/eslint.config.js b/core/domain/eslint.config.js new file mode 100644 index 0000000..f6ede9c --- /dev/null +++ b/core/domain/eslint.config.js @@ -0,0 +1,4 @@ +import { nextJsConfig } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default nextJsConfig; diff --git a/core/domain/package.json b/core/domain/package.json new file mode 100644 index 0000000..710bea5 --- /dev/null +++ b/core/domain/package.json @@ -0,0 +1,9 @@ +{ + "name": "@acme/core-domain", + "type": "module", + "private": true, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*" + } +} diff --git a/core/domain/src/entities/User.ts b/core/domain/src/entities/User.ts new file mode 100644 index 0000000..6c36fc2 --- /dev/null +++ b/core/domain/src/entities/User.ts @@ -0,0 +1,7 @@ +export class User { + constructor( + public id: string, + public name: string, + public email: string + ) {} +} diff --git a/core/domain/src/index.ts b/core/domain/src/index.ts new file mode 100644 index 0000000..c6f32a7 --- /dev/null +++ b/core/domain/src/index.ts @@ -0,0 +1 @@ +export * from './entities/User'; \ No newline at end of file diff --git a/core/domain/tsconfig.json b/core/domain/tsconfig.json new file mode 100644 index 0000000..4d236f7 --- /dev/null +++ b/core/domain/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@acme/typescript-config/base.json", + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee2fd0a..13a1e93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,6 +106,15 @@ importers: configs/config-typescript: {} + core/domain: + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + packages/database-drizzle: dependencies: '@libsql/client': diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 647fa06..4d236f7 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,12 +1,8 @@ { "extends": "@acme/typescript-config/base.json", - "compilerOptions": { "plugins": [{ "name": "next" }] }, "include": [ - "next-env.d.ts", - "next.config.js", "**/*.ts", "**/*.tsx", - ".next/types/**/*.ts" ], "exclude": ["node_modules"] } From d4409cb824118b19ae95e49e2713221c78c2d30c Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:49:37 +0700 Subject: [PATCH 06/44] feat: restructure shared library with new configurations, add shared function and tests --- .gitignore | 4 +- apps/nextjs/app/page.tsx | 7 +- apps/nextjs/core/bootstrap.ts | 8 +- apps/nextjs/package.json | 31 +- apps/nextjs/prettier.config.mjs | 5 + apps/nextjs/vitest.config.ts | 3 + configs/config-typescript/bundler.json | 11 + configs/prettier-config/README.md | 3 + configs/prettier-config/base.js | 13 + configs/prettier-config/package.json | 12 + configs/vitest-config/configs/base-config.ts | 19 + configs/vitest-config/configs/ui-config.ts | 11 + configs/vitest-config/package.json | 24 + .../scripts/collect-json-outputs.ts | 73 + configs/vitest-config/tsconfig.json | 8 + configs/vitest-config/turbo.json | 22 + package.json | 12 +- pnpm-lock.yaml | 1865 ++++++++++++++++- shared/.gitkeep | 0 shared/README.md | 11 + shared/eslint.config.js | 4 - shared/eslint.config.mjs | 4 + shared/package.json | 22 +- shared/prettier.config.mjs | 5 + shared/src/index.ts | 2 +- shared/src/lib/shared.spec.ts | 8 + shared/src/lib/shared.ts | 3 + shared/tsconfig.json | 7 +- shared/vitest.config.ts | 3 + tools/db/package.json | 31 +- tools/db/prettier.config.mjs | 5 + turbo.json | 27 +- 32 files changed, 2151 insertions(+), 112 deletions(-) create mode 100644 apps/nextjs/prettier.config.mjs create mode 100644 apps/nextjs/vitest.config.ts create mode 100644 configs/config-typescript/bundler.json create mode 100644 configs/prettier-config/README.md create mode 100644 configs/prettier-config/base.js create mode 100644 configs/prettier-config/package.json create mode 100644 configs/vitest-config/configs/base-config.ts create mode 100644 configs/vitest-config/configs/ui-config.ts create mode 100644 configs/vitest-config/package.json create mode 100644 configs/vitest-config/scripts/collect-json-outputs.ts create mode 100644 configs/vitest-config/tsconfig.json create mode 100644 configs/vitest-config/turbo.json delete mode 100644 shared/.gitkeep create mode 100644 shared/README.md delete mode 100644 shared/eslint.config.js create mode 100644 shared/eslint.config.mjs create mode 100644 shared/prettier.config.mjs create mode 100644 shared/src/lib/shared.spec.ts create mode 100644 shared/src/lib/shared.ts create mode 100644 shared/vitest.config.ts create mode 100644 tools/db/prettier.config.mjs diff --git a/.gitignore b/.gitignore index e2906f8..d79527e 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,6 @@ yarn-error.log* dist generated -.env \ No newline at end of file +.env + +coverage.json \ No newline at end of file diff --git a/apps/nextjs/app/page.tsx b/apps/nextjs/app/page.tsx index e74d00f..d4a86bc 100644 --- a/apps/nextjs/app/page.tsx +++ b/apps/nextjs/app/page.tsx @@ -1,13 +1,12 @@ -import { fetchUsers } from "../data"; +// import { fetchUsers } from "../data"; export default async function IndexPage() { - const users = await fetchUsers(); + // const users = await fetchUsers(); return (
-

User List:

+

User List:

ร {/*
{JSON.stringify(users, null, 2)}
*/} -
{JSON.stringify(users, null, 2)}
); } diff --git a/apps/nextjs/core/bootstrap.ts b/apps/nextjs/core/bootstrap.ts index 237dacb..c55eb76 100644 --- a/apps/nextjs/core/bootstrap.ts +++ b/apps/nextjs/core/bootstrap.ts @@ -1,7 +1,13 @@ import 'dotenv/config'; import { getDbContext, DbContextWithSchema } from "@acme/database-drizzle"; -import { getEnvVariable } from '../scripts/utils'; + +export const getEnvVariable = (name: string) => { + const value = process.env[name]; + if (value == null) throw new Error(`environment variable ${name} not found`); + return value; +}; + export const dbContext: DbContextWithSchema = getDbContext(getEnvVariable("DATABASE_URL")); diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 0cfc877..bfeea8c 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -1,32 +1,35 @@ { - "private": true, - "name": "web", + "name": "nextjs", + "version": "0.1.0", "type": "module", - "version": "1.0.0", + "private": true, "scripts": { "dev": "next dev --turbopack --port 3000", "build": "next build", "start": "next start", - "lint": "next lint --max-warnings 0", - "db:seed": "tsx scripts/seed.ts", - "db:migrate": "tsx scripts/migrate.ts" + "lint:check": "next lint --max-warnings 0", + "lint:fix": "next lint --fix", + "format:check": "prettier -c ./**/*.{ts,tsx} && prettier -c ./*.ts", + "format:fix": "prettier --write ./**/*.{ts,tsx} && prettier --write ./*.ts", + "check-types": "tsc --noEmit" }, "dependencies": { - "dotenv": "^16.4.7", "next": "^15.2.1", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "@acme/database-drizzle": "workspace:*" }, "devDependencies": { - "@acme/database-drizzle": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@next/eslint-plugin-next": "^14.1.1", - "@types/node": "^20.11.24", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@types/node": "^22.13.9", "@types/react": "19.0.10", "@types/react-dom": "19.0.4", - "eslint": "^9.21.0", - "tsx": "4.19.1", - "typescript": "5.8.2" + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" } } diff --git a/apps/nextjs/prettier.config.mjs b/apps/nextjs/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/apps/nextjs/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/apps/nextjs/vitest.config.ts b/apps/nextjs/vitest.config.ts new file mode 100644 index 0000000..919ad98 --- /dev/null +++ b/apps/nextjs/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from '@acme/vitest-config/base'; + +export default baseConfig; diff --git a/configs/config-typescript/bundler.json b/configs/config-typescript/bundler.json new file mode 100644 index 0000000..ea8be27 --- /dev/null +++ b/configs/config-typescript/bundler.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + "allowJs": false, + "jsx": "preserve", + "noEmit": true + } +} diff --git a/configs/prettier-config/README.md b/configs/prettier-config/README.md new file mode 100644 index 0000000..8b42d90 --- /dev/null +++ b/configs/prettier-config/README.md @@ -0,0 +1,3 @@ +# `@turbo/eslint-config` + +Collection of internal eslint configurations. diff --git a/configs/prettier-config/base.js b/configs/prettier-config/base.js new file mode 100644 index 0000000..9ddbf32 --- /dev/null +++ b/configs/prettier-config/base.js @@ -0,0 +1,13 @@ +/** + * @see https://prettier.io/docs/configuration + * @type {import("prettier").Config} + */ +export const config = { + trailingComma: 'es5', + tabWidth: 2, + useTabs: false, + semi: true, + singleQuote: true, + printWidth: 120, + arrowParens: 'avoid', +}; \ No newline at end of file diff --git a/configs/prettier-config/package.json b/configs/prettier-config/package.json new file mode 100644 index 0000000..e91290b --- /dev/null +++ b/configs/prettier-config/package.json @@ -0,0 +1,12 @@ +{ + "name": "@acme/prettier-config", + "version": "0.0.0", + "type": "module", + "private": true, + "exports": { + "./base": "./base.js" + }, + "devDependencies": { + "prettier": "^3.5.3" + } +} diff --git a/configs/vitest-config/configs/base-config.ts b/configs/vitest-config/configs/base-config.ts new file mode 100644 index 0000000..af0de7a --- /dev/null +++ b/configs/vitest-config/configs/base-config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from "vitest/config"; +import path from "node:path"; + +export const baseConfig = defineConfig({ + test: { + coverage: { + provider: "istanbul", + reporter: [ + [ + "json", + { + file: `../coverage.json`, + }, + ], + ], + enabled: true, + }, + }, +}); diff --git a/configs/vitest-config/configs/ui-config.ts b/configs/vitest-config/configs/ui-config.ts new file mode 100644 index 0000000..b3afdf8 --- /dev/null +++ b/configs/vitest-config/configs/ui-config.ts @@ -0,0 +1,11 @@ +import { defineProject, mergeConfig } from "vitest/config"; +import { baseConfig } from "./base-config.js"; + +export const uiConfig = mergeConfig( + baseConfig, + defineProject({ + test: { + environment: "jsdom", + }, + }) +); diff --git a/configs/vitest-config/package.json b/configs/vitest-config/package.json new file mode 100644 index 0000000..6d4b327 --- /dev/null +++ b/configs/vitest-config/package.json @@ -0,0 +1,24 @@ +{ + "name": "@acme/vitest-config", + "type": "module", + "exports": { + "./base": "./dist/configs/base-config.js", + "./ui": "./dist/configs/ui-config.js" + }, + "scripts": { + "build": "tsc", + "collect-json-reports": "node dist/scripts/collect-json-outputs.js", + "merge-json-reports": "nyc merge coverage/raw coverage/merged/merged-coverage.json", + "report": "nyc report -t coverage/merged --report-dir coverage/report --reporter=html --exclude-after-remap false", + "view-report": "open coverage/report/index.html" + }, + "devDependencies": { + "@acme/typescript-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "@vitest/ui": "3.0.8", + "glob": "^11.0.1", + "jsdom": "^26.0.0", + "nyc": "^17.1.0", + "vitest": "^3.0.8" + } +} diff --git a/configs/vitest-config/scripts/collect-json-outputs.ts b/configs/vitest-config/scripts/collect-json-outputs.ts new file mode 100644 index 0000000..c77c4a8 --- /dev/null +++ b/configs/vitest-config/scripts/collect-json-outputs.ts @@ -0,0 +1,73 @@ +import fs from "fs/promises"; +import path from "path"; +import { glob } from "glob"; + +async function collectCoverageFiles() { + try { + // Define the patterns to search + const patterns = ["../../apps/*", "../../packages/*" , "../../core/*" , "../../shared"]; + + // Define the destination directory (you can change this as needed) + const destinationDir = path.join(process.cwd(), "coverage/raw"); + + // Create the destination directory if it doesn't exist + await fs.mkdir(destinationDir, { recursive: true }); + + // Arrays to collect all directories and directories with coverage.json + const allDirectories = []; + const directoriesWithCoverage = []; + + // Process each pattern + for (const pattern of patterns) { + // Find all paths matching the pattern + const matches = await glob(pattern); + + // Filter to only include directories + for (const match of matches) { + const stats = await fs.stat(match); + + if (stats.isDirectory()) { + allDirectories.push(match); + const coverageFilePath = path.join(match, "coverage.json"); + + // Check if coverage.json exists in this directory + try { + await fs.access(coverageFilePath); + + // File exists, add to list of directories with coverage + directoriesWithCoverage.push(match); + + // Copy it to the destination with a unique name + const directoryName = path.basename(match); + const destinationFile = path.join( + destinationDir, + `${directoryName}.json` + ); + + await fs.copyFile(coverageFilePath, destinationFile); + } catch (err) { + // File doesn't exist in this directory, skip + } + } + } + } + + // Create clean patterns for display (without any "../" prefixes) + const replaceDotPatterns = (str: string) => str.replace(/\.\.\//g, ""); + + if (directoriesWithCoverage.length > 0) { + console.log( + `Found coverage.json in: ${directoriesWithCoverage + .map(replaceDotPatterns) + .join(", ")}` + ); + } + + console.log(`Coverage collected into: ${path.join(process.cwd())}`); + } catch (error) { + console.error("Error collecting coverage files:", error); + } +} + +// Run the function +collectCoverageFiles(); diff --git a/configs/vitest-config/tsconfig.json b/configs/vitest-config/tsconfig.json new file mode 100644 index 0000000..d29c633 --- /dev/null +++ b/configs/vitest-config/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": ["@acme/typescript-config/base.json"], + "compilerOptions": { + "outDir": "dist" + }, + "include": ["configs", "scripts"], + "exclude": ["node_modules", "dist"] +} diff --git a/configs/vitest-config/turbo.json b/configs/vitest-config/turbo.json new file mode 100644 index 0000000..c328141 --- /dev/null +++ b/configs/vitest-config/turbo.json @@ -0,0 +1,22 @@ +{ + "extends": ["//"], + "tasks": { + "collect-json-reports": { + "cache": false + }, + "merge-json-reports": { + "dependsOn": ["collect-json-reports"], + "inputs": ["coverage/raw/**"], + "outputs": ["coverage/merged/**"] + }, + "report": { + "dependsOn": ["merge-json-reports"], + "inputs": ["coverage/merge"], + "outputs": ["coverage/report/**"] + }, + "view-report": { + "dependsOn": ["@acme/vitest-config#build", "report"], + "cache": false + } + } +} diff --git a/package.json b/package.json index 9bb1299..d6cceed 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,12 @@ "private": true, "scripts": { "build": "turbo run build", - "db:migrate:deploy": "turbo run db:migrate:deploy", - "db:migrate:dev": "turbo run db:migrate:dev", - "db:push": "turbo run db:push", - "db:seed": "turbo run db:seed", "dev": "turbo run dev", - "format": "prettier --write \"**/*.{ts,tsx,md}\"", - "generate": "turbo run generate", - "lint": "turbo run lint" + "lint": "turbo lint:check format:check check-types", + "lint:fix": "turbo lint:fix format:fix", + "test": "turbo run test", + "test:watch": "turbo run test:watch", + "test:coverage-report": "turbo run view-report" }, "engines": { "node": ">=18" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13a1e93..a553208 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,12 +24,12 @@ importers: apps/nextjs: dependencies: - dotenv: - specifier: ^16.4.7 - version: 16.4.7 + '@acme/database-drizzle': + specifier: workspace:* + version: link:../../packages/database-drizzle next: specifier: ^15.2.1 - version: 15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -37,36 +37,39 @@ importers: specifier: ^19.0.0 version: 19.0.0(react@19.0.0) devDependencies: - '@acme/database-drizzle': - specifier: workspace:* - version: link:../../packages/database-drizzle '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript - '@next/eslint-plugin-next': - specifier: ^14.1.1 - version: 14.2.24 + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config '@types/node': - specifier: ^20.11.24 - version: 20.17.24 + specifier: ^22.13.9 + version: 22.13.11 '@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) + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) eslint: - specifier: ^9.21.0 + specifier: ^9.22.0 version: 9.22.0 - tsx: - specifier: 4.19.1 - version: 4.19.1 - typescript: - specifier: 5.8.2 - version: 5.8.2 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) configs/config-eslint: devDependencies: @@ -106,6 +109,36 @@ importers: configs/config-typescript: {} + configs/prettier-config: + devDependencies: + prettier: + specifier: ^3.5.3 + version: 3.5.3 + + configs/vitest-config: + devDependencies: + '@acme/typescript-config': + specifier: workspace:* + version: link:../config-typescript + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + '@vitest/ui': + specifier: 3.0.8 + version: 3.0.8(vitest@3.0.9) + glob: + specifier: ^11.0.1 + version: 11.0.1 + jsdom: + specifier: ^26.0.0 + version: 26.0.0 + nyc: + specifier: ^17.1.0 + version: 17.1.0 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/domain: devDependencies: '@acme/eslint-config': @@ -150,7 +183,7 @@ importers: version: 5.0.10 tsup: specifier: ^8.0.2 - version: 8.4.0(postcss@8.4.31)(tsx@4.19.1)(typescript@5.8.2) + version: 8.4.0(postcss@8.5.3)(tsx@4.19.1)(typescript@5.8.2) tsx: specifier: 4.19.1 version: 4.19.1 @@ -163,28 +196,162 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) tools/db: dependencies: + '@acme/database-drizzle': + specifier: workspace:* + version: link:../../packages/database-drizzle dotenv: specifier: ^16.4.7 version: 16.4.7 devDependencies: - '@acme/database-drizzle': - specifier: workspace:* - version: link:../../packages/database-drizzle '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) packages: + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@asamuzakjp/css-color@3.1.1': + resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + + '@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-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/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'} + + '@csstools/color-helpers@5.0.2': + resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.2': + resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.8': + resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} @@ -930,6 +1097,14 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1005,9 +1180,6 @@ packages: '@next/env@15.2.1': resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} - '@next/eslint-plugin-next@14.2.24': - resolution: {integrity: sha512-FDL3qs+5DML0AJz56DCVr+KnFYivxeAX73En8QbPw9GjJZ6zbfvqDy+HrarHFzbsIASn7y8y5ySJ/lllSruNVQ==} - '@next/eslint-plugin-next@15.2.1': resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==} @@ -1078,6 +1250,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@prisma/client@6.4.1': resolution: {integrity: sha512-A7Mwx44+GVZVexT5e2GF/WcKkEkNNKbgr059xpr5mn+oUm2ZW1svhe+0TRNBwCdzhfIZ+q23jEgsNPvKD9u+6g==} engines: {node: '>=18.18'} @@ -1218,6 +1393,9 @@ packages: '@types/node@20.17.24': resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} + '@types/node@22.13.11': + resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} + '@types/react-dom@19.0.4': resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} peerDependencies: @@ -1276,6 +1454,51 @@ packages: resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitest/coverage-istanbul@3.0.9': + resolution: {integrity: sha512-/TXh2qmOhclmVPjOnPTpIO4Xr6l2P5EwyXQygenwq4/ZQ/vPsrz+GCRZF9kBeQi6xrGcHv368Si9PGImWQawVg==} + peerDependencies: + vitest: 3.0.9 + + '@vitest/expect@3.0.9': + resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} + + '@vitest/mocker@3.0.9': + resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} + + '@vitest/pretty-format@3.0.9': + resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} + + '@vitest/runner@3.0.9': + resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} + + '@vitest/snapshot@3.0.9': + resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} + + '@vitest/spy@3.0.9': + resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} + + '@vitest/ui@3.0.8': + resolution: {integrity: sha512-MfTjaLU+Gw/lYorgwFZ06Cym+Mj9hPfZh/Q91d4JxyAHiicAakPTvS7zYCSHF+5cErwu2PVBe1alSjuh6L/UiA==} + peerDependencies: + vitest: 3.0.8 + + '@vitest/utils@3.0.8': + resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} + + '@vitest/utils@3.0.9': + resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1286,6 +1509,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + 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@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1308,6 +1539,16 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + append-transform@2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + + archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1339,10 +1580,17 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1360,6 +1608,11 @@ 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 + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -1377,6 +1630,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + caching-transform@4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1393,20 +1650,39 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + caniuse-lite@1.0.30001702: resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1421,10 +1697,17 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1432,10 +1715,20 @@ packages: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + cssstyle@4.3.0: + resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1443,6 +1736,10 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -1464,9 +1761,24 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-require-extensions@3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -1475,6 +1787,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} @@ -1595,12 +1911,19 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.123: + resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1621,6 +1944,9 @@ packages: 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==} engines: {node: '>= 0.4'} @@ -1637,6 +1963,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -1662,6 +1991,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1720,6 +2053,11 @@ packages: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + 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==} engines: {node: '>=0.10'} @@ -1732,10 +2070,17 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + expect-type@1.2.0: + resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1768,6 +2113,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1776,6 +2124,14 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + 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'} @@ -1791,14 +2147,28 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + 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} @@ -1819,10 +2189,22 @@ packages: engines: {node: '>= 18.0.0'} hasBin: true + 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'} @@ -1842,15 +2224,23 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - 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==} engines: {node: '>=18'} @@ -1867,6 +2257,9 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1893,10 +2286,33 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1909,6 +2325,17 @@ packages: 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==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -1980,6 +2407,9 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -1992,6 +2422,10 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} + 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'} @@ -2004,6 +2438,9 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -2016,6 +2453,10 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -2026,17 +2467,49 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-hook@3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-processinfo@2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} + + 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-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - 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} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -2047,10 +2520,28 @@ packages: 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 + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + 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==} @@ -2060,6 +2551,11 @@ packages: 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 + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -2086,10 +2582,17 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + 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.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2100,9 +2603,33 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + 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'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2115,6 +2642,18 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + 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==} @@ -2126,6 +2665,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2169,6 +2712,21 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-preload@0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nwsapi@2.2.19: + resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} + + nyc@17.1.0: + resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} + engines: {node: '>=18'} + hasBin: true + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2197,6 +2755,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2205,14 +2766,34 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + 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'} + + package-hash@4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -2220,10 +2801,17 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2235,6 +2823,17 @@ packages: 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} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2250,6 +2849,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -2276,6 +2879,10 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + postgres@3.4.5: resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} engines: {node: '>=12'} @@ -2299,6 +2906,10 @@ packages: typescript: optional: true + process-on-spawn@1.1.0: + resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} + engines: {node: '>=8'} + promise-limit@2.7.0: resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} @@ -2336,6 +2947,17 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + release-zalgo@1.0.0: + resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} + engines: {node: '>=4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2355,6 +2977,11 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -2364,6 +2991,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2379,6 +3009,13 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -2391,6 +3028,9 @@ packages: engines: {node: '>=10'} hasBin: true + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2435,6 +3075,12 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -2442,6 +3088,10 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2457,6 +3107,19 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.8.1: + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -2496,6 +3159,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2526,6 +3193,17 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -2533,6 +3211,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -2540,13 +3221,44 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + + tldts@6.1.85: + resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@5.1.0: + resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + engines: {node: '>=18'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -2625,6 +3337,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -2641,6 +3357,9 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.26.0: resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2660,9 +3379,99 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + 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==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vite-node@3.0.9: + resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@6.2.2: + resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.0.9: + resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.9 + '@vitest/ui': 3.0.9 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -2670,6 +3479,22 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -2685,6 +3510,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.18: resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} @@ -2699,10 +3527,19 @@ packages: engines: {node: ^16.13.0 || >=18.0.0} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2711,6 +3548,12 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + ws@8.18.1: resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} engines: {node: '>=10.0.0'} @@ -2723,12 +3566,164 @@ packages: utf-8-validate: optional: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} snapshots: + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@asamuzakjp/css-color@3.1.1': + dependencies: + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + + '@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-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/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 + + '@csstools/color-helpers@5.0.2': {} + + '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.2 + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + '@drizzle-team/brocli@0.10.2': {} '@emnapi/runtime@1.3.1': @@ -3169,6 +4164,16 @@ snapshots: 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': {} + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3246,10 +4251,6 @@ snapshots: '@next/env@15.2.1': {} - '@next/eslint-plugin-next@14.2.24': - dependencies: - glob: 10.3.10 - '@next/eslint-plugin-next@15.2.1': dependencies: fast-glob: 3.3.1 @@ -3295,6 +4296,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@polka/url@1.0.0-next.28': {} + '@prisma/client@6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2)': optionalDependencies: prisma: 6.4.1(typescript@5.8.2) @@ -3400,6 +4403,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@22.13.11': + dependencies: + undici-types: 6.20.0 + '@types/react-dom@19.0.4(@types/react@19.0.10)': dependencies: '@types/react': 19.0.10 @@ -3489,12 +4496,96 @@ snapshots: '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 + '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9)': + dependencies: + '@istanbuljs/schema': 0.1.3 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magicast: 0.3.5 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@3.0.9': + dependencies: + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.9(vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1))': + dependencies: + '@vitest/spy': 3.0.9 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) + + '@vitest/pretty-format@3.0.8': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@3.0.9': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.0.9': + dependencies: + '@vitest/utils': 3.0.9 + pathe: 2.0.3 + + '@vitest/snapshot@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/spy@3.0.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/ui@3.0.8(vitest@3.0.9)': + dependencies: + '@vitest/utils': 3.0.8 + fflate: 0.8.2 + flatted: 3.3.3 + pathe: 2.0.3 + sirv: 3.0.1 + tinyglobby: 0.2.12 + tinyrainbow: 2.0.0 + vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + + '@vitest/utils@3.0.8': + dependencies: + '@vitest/pretty-format': 3.0.8 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + + '@vitest/utils@3.0.9': + dependencies: + '@vitest/pretty-format': 3.0.9 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 acorn@8.14.1: {} + agent-base@7.1.3: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -3514,6 +4605,16 @@ snapshots: any-promise@1.3.0: {} + append-transform@2.0.0: + dependencies: + default-require-extensions: 3.0.1 + + archy@1.0.0: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} array-buffer-byte-length@1.0.2: @@ -3571,8 +4672,12 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + assertion-error@2.0.1: {} + async-function@1.0.0: {} + asynckit@0.4.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -3592,6 +4697,13 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.123 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + buffer-from@1.1.2: {} bundle-require@5.1.0(esbuild@0.25.0): @@ -3605,6 +4717,13 @@ snapshots: cac@6.7.14: {} + caching-transform@4.0.0: + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -3624,19 +4743,39 @@ snapshots: callsites@3.1.0: {} + camelcase@5.3.1: {} + caniuse-lite@1.0.30001702: {} + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + check-error@2.1.1: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 + clean-stack@2.2.0: {} + client-only@0.0.1: {} + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -3655,22 +4794,42 @@ snapshots: color-string: 1.9.1 optional: true + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@4.1.1: {} + commondir@1.0.1: {} + concat-map@0.0.1: {} consola@3.4.0: {} + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + cssstyle@4.3.0: + dependencies: + '@asamuzakjp/css-color': 3.1.1 + rrweb-cssom: 0.8.0 + csstype@3.1.3: {} data-uri-to-buffer@4.0.1: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -3693,8 +4852,18 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + + decimal.js@10.5.0: {} + + deep-eql@5.0.2: {} + deep-is@0.1.4: {} + default-require-extensions@3.0.1: + dependencies: + strip-bom: 4.0.0 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -3707,6 +4876,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delayed-stream@1.0.0: {} + detect-libc@2.0.2: {} detect-libc@2.0.3: @@ -3746,10 +4917,14 @@ snapshots: eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.123: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + entities@4.5.0: {} + env-paths@3.0.0: {} es-abstract@1.23.9: @@ -3829,6 +5004,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@1.6.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -3850,6 +5027,8 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-error@4.1.1: {} + esbuild-register@3.6.0(esbuild@0.19.12): dependencies: debug: 4.4.0 @@ -3971,6 +5150,8 @@ snapshots: '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} eslint-config-prettier@10.1.1(eslint@9.22.0): @@ -4066,6 +5247,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4076,8 +5259,14 @@ snapshots: estraverse@5.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + esutils@2.0.3: {} + expect-type@1.2.0: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.1: @@ -4113,6 +5302,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -4121,6 +5312,17 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + 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 @@ -4137,15 +5339,31 @@ snapshots: dependencies: is-callable: 1.2.7 + foreground-child@2.0.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 3.0.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 + 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 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 + fromentries@1.3.2: {} + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -4173,6 +5391,10 @@ snapshots: transitivePeerDependencies: - supports-color + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4186,6 +5408,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 @@ -4209,22 +5433,34 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: + glob@10.4.5: dependencies: foreground-child: 3.3.1 - jackspeak: 2.3.6 + 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@10.4.5: + glob@11.0.1: dependencies: foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 + jackspeak: 4.1.0 + minimatch: 10.0.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} globals@14.0.0: {} @@ -4237,6 +5473,8 @@ snapshots: gopd@1.2.0: {} + graceful-fs@4.2.11: {} + graphemer@1.4.0: {} has-bigints@1.1.0: {} @@ -4257,10 +5495,39 @@ snapshots: dependencies: has-symbols: 1.1.0 + hasha@5.2.2: + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-escaper@2.0.2: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} import-fresh@3.3.1: @@ -4270,6 +5537,15 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -4347,6 +5623,8 @@ snapshots: is-number@7.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -4360,6 +5638,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-stream@2.0.1: {} + is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -4375,6 +5655,8 @@ snapshots: dependencies: which-typed-array: 1.1.18 + is-typedarray@1.0.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -4386,12 +5668,66 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + is-windows@1.0.2: {} + isarray@2.0.5: {} isexe@2.0.0: {} isexe@3.1.1: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-hook@3.0.0: + dependencies: + append-transform: 2.0.0 + + 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-processinfo@2.0.3: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.6 + istanbul-lib-coverage: 3.2.2 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + + 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-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 @@ -4401,17 +5737,15 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@2.3.6: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: + jackspeak@4.1.0: dependencies: '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 joycon@3.1.1: {} @@ -4419,16 +5753,53 @@ snapshots: 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 + jsdom@26.0.0: + dependencies: + cssstyle: 4.3.0 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.2 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.19 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -4464,10 +5835,16 @@ snapshots: load-tsconfig@0.2.5: {} + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.flattendeep@4.4.0: {} + lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} @@ -4476,8 +5853,34 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.3: {} + lru-cache@10.4.3: {} + lru-cache@11.0.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + source-map-js: 1.2.1 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + math-intrinsics@1.1.0: {} merge2@1.4.1: {} @@ -4487,6 +5890,16 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4497,6 +5910,8 @@ snapshots: minipass@7.1.2: {} + mrmime@2.0.1: {} + ms@2.1.3: {} mz@2.7.0: @@ -4509,7 +5924,7 @@ snapshots: natural-compare@1.4.0: {} - next@15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.2.1 '@swc/counter': 0.1.3 @@ -4519,7 +5934,7 @@ snapshots: 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) + styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0) optionalDependencies: '@next/swc-darwin-arm64': 15.2.1 '@next/swc-darwin-x64': 15.2.1 @@ -4542,6 +5957,46 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + node-preload@0.2.1: + dependencies: + process-on-spawn: 1.1.0 + + node-releases@2.0.19: {} + + nwsapi@2.2.19: {} + + nyc@17.1.0: + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.9.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 3.3.1 + get-package-type: 0.1.0 + glob: 7.2.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.1.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -4577,6 +6032,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + once@1.4.0: + dependencies: + wrappy: 1.0.2 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4592,22 +6051,49 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-limit@2.3.0: + dependencies: + 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: {} + + package-hash@4.0.0: + dependencies: + graceful-fs: 4.2.11 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + package-json-from-dist@1.0.1: {} parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse5@7.2.1: + dependencies: + entities: 4.5.0 + path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -4617,6 +6103,15 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + + pathe@2.0.3: {} + + pathval@2.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -4625,13 +6120,17 @@ snapshots: pirates@4.0.6: {} + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(postcss@8.4.31)(tsx@4.19.1): + postcss-load-config@6.0.1(postcss@8.5.3)(tsx@4.19.1): dependencies: lilconfig: 3.1.3 optionalDependencies: - postcss: 8.4.31 + postcss: 8.5.3 tsx: 4.19.1 postcss@8.4.31: @@ -4640,6 +6139,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.3: + dependencies: + nanoid: 3.3.9 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres@3.4.5: {} prelude-ls@1.2.1: {} @@ -4658,6 +6163,10 @@ snapshots: - supports-color optional: true + process-on-spawn@1.1.0: + dependencies: + fromentries: 1.3.2 + promise-limit@2.7.0: {} prop-types@15.8.1: @@ -4701,6 +6210,14 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + release-zalgo@1.0.0: + dependencies: + es6-error: 4.1.1 + + require-directory@2.1.1: {} + + require-main-filename@2.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -4715,6 +6232,10 @@ snapshots: reusify@1.1.0: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + rimraf@5.0.10: dependencies: glob: 10.4.5 @@ -4744,6 +6265,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.35.0 fsevents: 2.3.3 + rrweb-cssom@0.8.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4767,12 +6290,20 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.25.0: {} semver@6.3.1: {} semver@7.7.1: {} + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -4858,6 +6389,10 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} simple-swizzle@0.2.2: @@ -4865,6 +6400,12 @@ snapshots: is-arrayish: 0.3.2 optional: true + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.1 + totalist: 3.0.1 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -4878,6 +6419,21 @@ snapshots: dependencies: whatwg-url: 7.1.0 + spawn-wrap@2.0.0: + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + + sprintf-js@1.0.3: {} + + stackback@0.0.2: {} + + std-env@3.8.1: {} + streamsearch@1.1.0: {} string-width@4.2.3: @@ -4944,12 +6500,16 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@4.0.0: {} + strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.0.0): + styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0): dependencies: client-only: 0.0.1 react: 19.0.0 + optionalDependencies: + '@babel/core': 7.26.10 sucrase@3.35.0: dependencies: @@ -4967,6 +6527,20 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: {} + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -4975,6 +6549,8 @@ snapshots: dependencies: any-promise: 1.3.0 + tinybench@2.9.0: {} + tinyexec@0.3.2: {} tinyglobby@0.2.12: @@ -4982,14 +6558,36 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + tldts-core@6.1.85: {} + + tldts@6.1.85: + dependencies: + tldts-core: 6.1.85 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.85 + tr46@1.0.1: dependencies: punycode: 2.3.1 + tr46@5.1.0: + dependencies: + punycode: 2.3.1 + tree-kill@1.2.2: {} ts-api-utils@2.0.1(typescript@5.8.2): @@ -5000,7 +6598,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.4.0(postcss@8.4.31)(tsx@4.19.1)(typescript@5.8.2): + tsup@8.4.0(postcss@8.5.3)(tsx@4.19.1)(typescript@5.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.25.0) cac: 6.7.14 @@ -5010,7 +6608,7 @@ snapshots: esbuild: 0.25.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.4.31)(tsx@4.19.1) + postcss-load-config: 6.0.1(postcss@8.5.3)(tsx@4.19.1) resolve-from: 5.0.0 rollup: 4.35.0 source-map: 0.8.0-beta.0 @@ -5019,7 +6617,7 @@ snapshots: tinyglobby: 0.2.12 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.31 + postcss: 8.5.3 typescript: 5.8.2 transitivePeerDependencies: - jiti @@ -5065,6 +6663,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.8.1: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -5098,6 +6698,10 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + typescript-eslint@8.26.0(eslint@9.22.0)(typescript@5.8.2): dependencies: '@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) @@ -5119,14 +6723,112 @@ snapshots: undici-types@6.19.8: {} + undici-types@6.20.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 + uuid@8.3.2: {} + + vite-node@3.0.9(@types/node@22.13.11)(tsx@4.19.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.35.0 + optionalDependencies: + '@types/node': 22.13.11 + fsevents: 2.3.3 + tsx: 4.19.1 + + vitest@3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1): + dependencies: + '@vitest/expect': 3.0.9 + '@vitest/mocker': 3.0.9(vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1)) + '@vitest/pretty-format': 3.0.9 + '@vitest/runner': 3.0.9 + '@vitest/snapshot': 3.0.9 + '@vitest/spy': 3.0.9 + '@vitest/utils': 3.0.9 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.1 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) + vite-node: 3.0.9(@types/node@22.13.11)(tsx@4.19.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.13.11 + '@vitest/ui': 3.0.8(vitest@3.0.9) + jsdom: 26.0.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + web-streams-polyfill@3.3.3: {} webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.0 + webidl-conversions: 7.0.0 + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -5164,6 +6866,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 @@ -5181,8 +6885,19 @@ snapshots: dependencies: isexe: 3.1.1 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -5195,6 +6910,42 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrappy@1.0.2: {} + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + ws@8.18.1: {} + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + y18n@4.0.3: {} + + yallist@3.1.1: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + yocto-queue@0.1.0: {} diff --git a/shared/.gitkeep b/shared/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/shared/README.md b/shared/README.md new file mode 100644 index 0000000..1cf1174 --- /dev/null +++ b/shared/README.md @@ -0,0 +1,11 @@ +# shared + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build shared` to build the library. + +## Running unit tests + +Run `nx test shared` to execute the unit tests via [Vitest](https://vitest.dev/). diff --git a/shared/eslint.config.js b/shared/eslint.config.js deleted file mode 100644 index f6ede9c..0000000 --- a/shared/eslint.config.js +++ /dev/null @@ -1,4 +0,0 @@ -import { nextJsConfig } from "@acme/eslint-config/base"; - -/** @type {import("eslint").Linter.Config} */ -export default nextJsConfig; diff --git a/shared/eslint.config.mjs b/shared/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/shared/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/shared/package.json b/shared/package.json index 35d2a23..45faf2a 100644 --- a/shared/package.json +++ b/shared/package.json @@ -1,9 +1,27 @@ { "name": "@acme/shared", "type": "module", + "exports": { + ".": "./src/index.ts" + }, "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, "devDependencies": { "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*" + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" } -} +} \ No newline at end of file diff --git a/shared/prettier.config.mjs b/shared/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/shared/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/shared/src/index.ts b/shared/src/index.ts index 6c8c969..4dcc196 100644 --- a/shared/src/index.ts +++ b/shared/src/index.ts @@ -1 +1 @@ -console.log('shared/src/index.ts'); \ No newline at end of file +export * from './lib/shared'; diff --git a/shared/src/lib/shared.spec.ts b/shared/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/shared/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/shared/src/lib/shared.ts b/shared/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/shared/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 4d236f7..05900c0 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,8 +1,5 @@ { - "extends": "@acme/typescript-config/base.json", - "include": [ - "**/*.ts", - "**/*.tsx", - ], + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/shared/vitest.config.ts b/shared/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/shared/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/tools/db/package.json b/tools/db/package.json index 9bbe3d3..f1571d7 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -1,22 +1,31 @@ { - "private": true, "name": "@acme/tools-db", "type": "module", - "version": "1.0.0", + "exports": { + ".": "./src/index.ts" + }, + "private": true, "scripts": { - "dev": "next dev --turbopack --port 3000", - "build": "next build", - "start": "next start", - "lint": "next lint --max-warnings 0", "db:seed": "tsx scripts/seed.ts", - "db:migrate": "tsx scripts/migrate.ts" + "db:migrate": "tsx scripts/migrate.ts", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" }, "dependencies": { - "dotenv": "^16.4.7" + "dotenv": "^16.4.7", + "@acme/database-drizzle": "workspace:*" }, "devDependencies": { - "@acme/database-drizzle": "workspace:*", "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*" + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" } -} +} \ No newline at end of file diff --git a/tools/db/prettier.config.mjs b/tools/db/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/tools/db/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/turbo.json b/turbo.json index 246e67c..c5683a3 100644 --- a/turbo.json +++ b/turbo.json @@ -19,10 +19,6 @@ "db:seed": { "cache": false }, - "dev": { - "cache": false, - "persistent": true - }, "db:migrate": { "outputs": [] }, @@ -30,6 +26,27 @@ "dependsOn": ["^generate"], "cache": false }, - "lint": {} + "test": { + "dependsOn": ["@acme/vitest-config#build", "^test"] + }, + "test:watch": { + "cache": false, + "persistent": true + }, + "lint:check": { + "dependsOn": ["@acme/vitest-config#build", "^lint:check"] + }, + "lint:fix": {}, + "format:check": { + "dependsOn": ["^format:check"] + }, + "format:fix": {}, + "check-types": { + "dependsOn": ["@acme/vitest-config#build", "^check-types"] + }, + "dev": { + "cache": false, + "persistent": true + } } } From 18715322fcb2745844b9594a3bf6699ab69232c5 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:51:12 +0700 Subject: [PATCH 07/44] misc: run lint fix --- apps/nextjs/app/layout.tsx | 6 +----- apps/nextjs/app/page.tsx | 3 +-- apps/nextjs/core/bootstrap.ts | 6 ++---- apps/nextjs/data/index.ts | 2 +- tools/db/eslint.config.js | 4 ++-- tools/db/src/migrate.ts | 8 ++++---- tools/db/src/seed.ts | 4 ++-- tools/db/src/utils.ts | 1 - 8 files changed, 13 insertions(+), 21 deletions(-) diff --git a/apps/nextjs/app/layout.tsx b/apps/nextjs/app/layout.tsx index 225b603..f3ef34c 100644 --- a/apps/nextjs/app/layout.tsx +++ b/apps/nextjs/app/layout.tsx @@ -1,8 +1,4 @@ -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( {children} diff --git a/apps/nextjs/app/page.tsx b/apps/nextjs/app/page.tsx index d4a86bc..b174e8e 100644 --- a/apps/nextjs/app/page.tsx +++ b/apps/nextjs/app/page.tsx @@ -5,8 +5,7 @@ export default async function IndexPage() { return (
-

User List:

ร - {/*
{JSON.stringify(users, null, 2)}
*/} +

User List:

ร{/*
{JSON.stringify(users, null, 2)}
*/}
); } diff --git a/apps/nextjs/core/bootstrap.ts b/apps/nextjs/core/bootstrap.ts index c55eb76..b2e89ee 100644 --- a/apps/nextjs/core/bootstrap.ts +++ b/apps/nextjs/core/bootstrap.ts @@ -1,6 +1,6 @@ import 'dotenv/config'; -import { getDbContext, DbContextWithSchema } from "@acme/database-drizzle"; +import { getDbContext, DbContextWithSchema } from '@acme/database-drizzle'; export const getEnvVariable = (name: string) => { const value = process.env[name]; @@ -8,6 +8,4 @@ export const getEnvVariable = (name: string) => { return value; }; - -export const dbContext: DbContextWithSchema = getDbContext(getEnvVariable("DATABASE_URL")); - +export const dbContext: DbContextWithSchema = getDbContext(getEnvVariable('DATABASE_URL')); diff --git a/apps/nextjs/data/index.ts b/apps/nextjs/data/index.ts index ccc0371..d82238f 100644 --- a/apps/nextjs/data/index.ts +++ b/apps/nextjs/data/index.ts @@ -1,4 +1,4 @@ -"use server"; +'use server'; import { dbContext } from '../core/bootstrap'; diff --git a/tools/db/eslint.config.js b/tools/db/eslint.config.js index 158ba75..5a1cc0f 100644 --- a/tools/db/eslint.config.js +++ b/tools/db/eslint.config.js @@ -1,4 +1,4 @@ -import { nextJsConfig } from "@acme/eslint-config/next-js"; +import { config } from "@acme/eslint-config/base"; /** @type {import("eslint").Linter.Config} */ -export default nextJsConfig; +export default config; diff --git a/tools/db/src/migrate.ts b/tools/db/src/migrate.ts index e769367..d6ae504 100644 --- a/tools/db/src/migrate.ts +++ b/tools/db/src/migrate.ts @@ -1,9 +1,9 @@ import 'dotenv/config'; -import { getDbContext, migrate } from "@acme/database-drizzle"; +import { getDbContext, migrate } from '@acme/database-drizzle'; import { getEnvVariable } from './utils'; migrate({ - ...getDbContext(getEnvVariable("DATABASE_URL")), - migrationsFolder: "../../migrations/drizzle", -}); \ No newline at end of file + ...getDbContext(getEnvVariable('DATABASE_URL')), + migrationsFolder: '../../migrations/drizzle', +}); diff --git a/tools/db/src/seed.ts b/tools/db/src/seed.ts index b0a95b9..d2fac6e 100644 --- a/tools/db/src/seed.ts +++ b/tools/db/src/seed.ts @@ -1,6 +1,6 @@ import 'dotenv/config'; -import { getDbContext, seed } from "@acme/database-drizzle"; +import { getDbContext, seed } from '@acme/database-drizzle'; import { getEnvVariable } from './utils'; -seed(getDbContext(getEnvVariable("DATABASE_URL"))); \ No newline at end of file +seed(getDbContext(getEnvVariable('DATABASE_URL'))); diff --git a/tools/db/src/utils.ts b/tools/db/src/utils.ts index 9ab3ac9..6a32aa8 100644 --- a/tools/db/src/utils.ts +++ b/tools/db/src/utils.ts @@ -1,4 +1,3 @@ - export const getEnvVariable = (name: string) => { const value = process.env[name]; if (value == null) throw new Error(`environment variable ${name} not found`); From cb07a05ecc850f390315f8e06002c1e21afcde74 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 20:53:20 +0700 Subject: [PATCH 08/44] feat: add template project with ESLint, Prettier, TypeScript, and Vitest configurations --- pnpm-lock.yaml | 27 +++++++++++++++++++++++++++ tools/template/README.md | 3 +++ tools/template/eslint.config.mjs | 4 ++++ tools/template/package.json | 27 +++++++++++++++++++++++++++ tools/template/prettier.config.mjs | 5 +++++ tools/template/src/index.ts | 1 + tools/template/src/lib/shared.spec.ts | 8 ++++++++ tools/template/src/lib/shared.ts | 3 +++ tools/template/tsconfig.json | 5 +++++ tools/template/vitest.config.ts | 3 +++ 10 files changed, 86 insertions(+) create mode 100644 tools/template/README.md create mode 100644 tools/template/eslint.config.mjs create mode 100644 tools/template/package.json create mode 100644 tools/template/prettier.config.mjs create mode 100644 tools/template/src/index.ts create mode 100644 tools/template/src/lib/shared.spec.ts create mode 100644 tools/template/src/lib/shared.ts create mode 100644 tools/template/tsconfig.json create mode 100644 tools/template/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a553208..ce8031d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -252,6 +252,33 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + tools/template: + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + packages: '@ampproject/remapping@2.3.0': diff --git a/tools/template/README.md b/tools/template/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/tools/template/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/tools/template/eslint.config.mjs b/tools/template/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/tools/template/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/tools/template/package.json b/tools/template/package.json new file mode 100644 index 0000000..a4893f1 --- /dev/null +++ b/tools/template/package.json @@ -0,0 +1,27 @@ +{ + "name": "@acme/template", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/tools/template/prettier.config.mjs b/tools/template/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/tools/template/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/tools/template/src/index.ts b/tools/template/src/index.ts new file mode 100644 index 0000000..4dcc196 --- /dev/null +++ b/tools/template/src/index.ts @@ -0,0 +1 @@ +export * from './lib/shared'; diff --git a/tools/template/src/lib/shared.spec.ts b/tools/template/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/tools/template/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/tools/template/src/lib/shared.ts b/tools/template/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/tools/template/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/tools/template/tsconfig.json b/tools/template/tsconfig.json new file mode 100644 index 0000000..05900c0 --- /dev/null +++ b/tools/template/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/tools/template/vitest.config.ts b/tools/template/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/tools/template/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; From c645e5891952a6ee49c7aa764d5c0c7acd90c89b Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 21:09:08 +0700 Subject: [PATCH 09/44] feat: update core domain module with new ESLint and Prettier configurations, add shared library, and remove unused entities --- core/domain/README.md | 3 +++ core/domain/eslint.config.js | 4 ---- core/domain/eslint.config.mjs | 4 ++++ core/domain/package.json | 22 ++++++++++++++++++++-- core/domain/prettier.config.mjs | 5 +++++ core/domain/src/entities/User.ts | 7 ------- core/domain/src/index.ts | 2 +- core/domain/src/lib/shared.spec.ts | 8 ++++++++ core/domain/src/lib/shared.ts | 3 +++ core/domain/tsconfig.json | 7 ++----- core/domain/vitest.config.ts | 3 +++ pnpm-lock.yaml | 18 ++++++++++++++++++ 12 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 core/domain/README.md delete mode 100644 core/domain/eslint.config.js create mode 100644 core/domain/eslint.config.mjs create mode 100644 core/domain/prettier.config.mjs delete mode 100644 core/domain/src/entities/User.ts create mode 100644 core/domain/src/lib/shared.spec.ts create mode 100644 core/domain/src/lib/shared.ts create mode 100644 core/domain/vitest.config.ts diff --git a/core/domain/README.md b/core/domain/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/core/domain/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/core/domain/eslint.config.js b/core/domain/eslint.config.js deleted file mode 100644 index f6ede9c..0000000 --- a/core/domain/eslint.config.js +++ /dev/null @@ -1,4 +0,0 @@ -import { nextJsConfig } from "@acme/eslint-config/base"; - -/** @type {import("eslint").Linter.Config} */ -export default nextJsConfig; diff --git a/core/domain/eslint.config.mjs b/core/domain/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/core/domain/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/core/domain/package.json b/core/domain/package.json index 710bea5..6ef801d 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -1,9 +1,27 @@ { "name": "@acme/core-domain", "type": "module", + "exports": { + ".": "./src/index.ts" + }, "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, "devDependencies": { "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*" + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" } -} +} \ No newline at end of file diff --git a/core/domain/prettier.config.mjs b/core/domain/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/core/domain/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/core/domain/src/entities/User.ts b/core/domain/src/entities/User.ts deleted file mode 100644 index 6c36fc2..0000000 --- a/core/domain/src/entities/User.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class User { - constructor( - public id: string, - public name: string, - public email: string - ) {} -} diff --git a/core/domain/src/index.ts b/core/domain/src/index.ts index c6f32a7..4dcc196 100644 --- a/core/domain/src/index.ts +++ b/core/domain/src/index.ts @@ -1 +1 @@ -export * from './entities/User'; \ No newline at end of file +export * from './lib/shared'; diff --git a/core/domain/src/lib/shared.spec.ts b/core/domain/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/core/domain/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/core/domain/src/lib/shared.ts b/core/domain/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/core/domain/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/core/domain/tsconfig.json b/core/domain/tsconfig.json index 4d236f7..05900c0 100644 --- a/core/domain/tsconfig.json +++ b/core/domain/tsconfig.json @@ -1,8 +1,5 @@ { - "extends": "@acme/typescript-config/base.json", - "include": [ - "**/*.ts", - "**/*.tsx", - ], + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/domain/vitest.config.ts b/core/domain/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/core/domain/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce8031d..d1ffdd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,9 +144,27 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) packages/database-drizzle: dependencies: From beb9eee52053694b0f6b892a70aa71dd89711b3a Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 21:25:21 +0700 Subject: [PATCH 10/44] feat: create application module with initial TypeScript, ESLint, and Prettier setup, define user repository interface, and implement user use case --- core/application/.gitkeep | 0 core/application/README.md | 3 ++ core/application/eslint.config.mjs | 4 +++ core/application/package.json | 30 ++++++++++++++++++ core/application/prettier.config.mjs | 5 +++ core/application/src/index.ts | 2 ++ .../src/interfaces/IUserRepository.ts | 6 ++++ core/application/src/interfaces/index.ts | 1 + core/application/src/use-cases/UserUseCase.ts | 15 +++++++++ core/application/src/use-cases/index.ts | 1 + core/application/tsconfig.json | 5 +++ core/application/vitest.config.ts | 3 ++ core/domain/README.md | 4 +-- core/domain/package.json | 2 +- core/domain/src/entities/User.ts | 7 +++++ core/domain/src/index.ts | 2 +- core/domain/src/lib/shared.spec.ts | 8 ----- core/domain/src/lib/shared.ts | 3 -- pnpm-lock.yaml | 31 +++++++++++++++++++ 19 files changed, 116 insertions(+), 16 deletions(-) delete mode 100644 core/application/.gitkeep create mode 100644 core/application/README.md create mode 100644 core/application/eslint.config.mjs create mode 100644 core/application/package.json create mode 100644 core/application/prettier.config.mjs create mode 100644 core/application/src/index.ts create mode 100644 core/application/src/interfaces/IUserRepository.ts create mode 100644 core/application/src/interfaces/index.ts create mode 100644 core/application/src/use-cases/UserUseCase.ts create mode 100644 core/application/src/use-cases/index.ts create mode 100644 core/application/tsconfig.json create mode 100644 core/application/vitest.config.ts create mode 100644 core/domain/src/entities/User.ts delete mode 100644 core/domain/src/lib/shared.spec.ts delete mode 100644 core/domain/src/lib/shared.ts diff --git a/core/application/.gitkeep b/core/application/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/core/application/README.md b/core/application/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/core/application/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/core/application/eslint.config.mjs b/core/application/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/core/application/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/core/application/package.json b/core/application/package.json new file mode 100644 index 0000000..2a9d8cc --- /dev/null +++ b/core/application/package.json @@ -0,0 +1,30 @@ +{ + "name": "@acme/application", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@acme/domain": "workspace:*" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/core/application/prettier.config.mjs b/core/application/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/core/application/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/core/application/src/index.ts b/core/application/src/index.ts new file mode 100644 index 0000000..e9d7bdb --- /dev/null +++ b/core/application/src/index.ts @@ -0,0 +1,2 @@ +export * from './interfaces'; +export * from './use-cases'; \ No newline at end of file diff --git a/core/application/src/interfaces/IUserRepository.ts b/core/application/src/interfaces/IUserRepository.ts new file mode 100644 index 0000000..cf88118 --- /dev/null +++ b/core/application/src/interfaces/IUserRepository.ts @@ -0,0 +1,6 @@ +import { User } from "@acme/domain"; + +export interface IUserRepository { + create(user: User): Promise; + findById(id: string): Promise; +} diff --git a/core/application/src/interfaces/index.ts b/core/application/src/interfaces/index.ts new file mode 100644 index 0000000..def3935 --- /dev/null +++ b/core/application/src/interfaces/index.ts @@ -0,0 +1 @@ +export * from './IUserRepository'; \ No newline at end of file diff --git a/core/application/src/use-cases/UserUseCase.ts b/core/application/src/use-cases/UserUseCase.ts new file mode 100644 index 0000000..f7ae804 --- /dev/null +++ b/core/application/src/use-cases/UserUseCase.ts @@ -0,0 +1,15 @@ +import { User } from "@acme/domain"; +import { IUserRepository } from "../interfaces/IUserRepository"; + +export class UserUseCase { + constructor(private userRepo: IUserRepository) {} + + async create(data: { id: string; name: string; email: string }) { + const user = new User(data.id, data.name, data.email); + await this.userRepo.create(user); + } + + async getById(id: string) { + return this.userRepo.findById(id); + } +} diff --git a/core/application/src/use-cases/index.ts b/core/application/src/use-cases/index.ts new file mode 100644 index 0000000..e6050a6 --- /dev/null +++ b/core/application/src/use-cases/index.ts @@ -0,0 +1 @@ +export * from './UserUseCase'; \ No newline at end of file diff --git a/core/application/tsconfig.json b/core/application/tsconfig.json new file mode 100644 index 0000000..05900c0 --- /dev/null +++ b/core/application/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/core/application/vitest.config.ts b/core/application/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/core/application/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/core/domain/README.md b/core/domain/README.md index 7f0d98a..5b8995a 100644 --- a/core/domain/README.md +++ b/core/domain/README.md @@ -1,3 +1 @@ -# template - -Use for creating new projects. \ No newline at end of file +# domain diff --git a/core/domain/package.json b/core/domain/package.json index 6ef801d..a189353 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -1,5 +1,5 @@ { - "name": "@acme/core-domain", + "name": "@acme/domain", "type": "module", "exports": { ".": "./src/index.ts" diff --git a/core/domain/src/entities/User.ts b/core/domain/src/entities/User.ts new file mode 100644 index 0000000..a20125c --- /dev/null +++ b/core/domain/src/entities/User.ts @@ -0,0 +1,7 @@ +export class User { + constructor( + public id: string, + public name: string, + public email: string + ) {} +} \ No newline at end of file diff --git a/core/domain/src/index.ts b/core/domain/src/index.ts index 4dcc196..c6f32a7 100644 --- a/core/domain/src/index.ts +++ b/core/domain/src/index.ts @@ -1 +1 @@ -export * from './lib/shared'; +export * from './entities/User'; \ No newline at end of file diff --git a/core/domain/src/lib/shared.spec.ts b/core/domain/src/lib/shared.spec.ts deleted file mode 100644 index 9d58e76..0000000 --- a/core/domain/src/lib/shared.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect, it, describe } from 'vitest'; -import { shared } from './shared'; - -describe('shared', () => { - it('should work', () => { - expect(shared()).toEqual('shared'); - }); -}); diff --git a/core/domain/src/lib/shared.ts b/core/domain/src/lib/shared.ts deleted file mode 100644 index d734544..0000000 --- a/core/domain/src/lib/shared.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function shared(): string { - return 'shared'; -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1ffdd5..ca80b0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -139,6 +139,37 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/application: + dependencies: + '@acme/domain': + specifier: workspace:* + version: link:../domain + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/domain: devDependencies: '@acme/eslint-config': From 8c1a5ffea0daf889f7f9fac297d053f1f01985d1 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 21:33:43 +0700 Subject: [PATCH 11/44] feat: update user repository imports, add infrastructure module with user repository implementation, and configure ESLint, Prettier, and Vitest --- .../src/interfaces/IUserRepository.ts | 2 +- core/application/src/use-cases/UserUseCase.ts | 2 +- core/domain/package.json | 3 +- core/domain/src/entities/index.ts | 1 + core/infrastructure/.gitkeep | 0 core/infrastructure/README.md | 3 ++ core/infrastructure/eslint.config.mjs | 4 +++ core/infrastructure/package.json | 31 +++++++++++++++++ core/infrastructure/prettier.config.mjs | 5 +++ core/infrastructure/src/index.ts | 1 + .../src/repositories/UserRepository.ts | 14 ++++++++ core/infrastructure/src/repositories/index.ts | 1 + core/infrastructure/tsconfig.json | 5 +++ core/infrastructure/vitest.config.ts | 3 ++ pnpm-lock.yaml | 34 +++++++++++++++++++ 15 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 core/domain/src/entities/index.ts delete mode 100644 core/infrastructure/.gitkeep create mode 100644 core/infrastructure/README.md create mode 100644 core/infrastructure/eslint.config.mjs create mode 100644 core/infrastructure/package.json create mode 100644 core/infrastructure/prettier.config.mjs create mode 100644 core/infrastructure/src/index.ts create mode 100644 core/infrastructure/src/repositories/UserRepository.ts create mode 100644 core/infrastructure/src/repositories/index.ts create mode 100644 core/infrastructure/tsconfig.json create mode 100644 core/infrastructure/vitest.config.ts diff --git a/core/application/src/interfaces/IUserRepository.ts b/core/application/src/interfaces/IUserRepository.ts index cf88118..0b85642 100644 --- a/core/application/src/interfaces/IUserRepository.ts +++ b/core/application/src/interfaces/IUserRepository.ts @@ -1,4 +1,4 @@ -import { User } from "@acme/domain"; +import { User } from "@acme/domain/entities"; export interface IUserRepository { create(user: User): Promise; diff --git a/core/application/src/use-cases/UserUseCase.ts b/core/application/src/use-cases/UserUseCase.ts index f7ae804..3e9cb93 100644 --- a/core/application/src/use-cases/UserUseCase.ts +++ b/core/application/src/use-cases/UserUseCase.ts @@ -1,4 +1,4 @@ -import { User } from "@acme/domain"; +import { User } from "@acme/domain/entities"; import { IUserRepository } from "../interfaces/IUserRepository"; export class UserUseCase { diff --git a/core/domain/package.json b/core/domain/package.json index a189353..6703792 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -2,7 +2,8 @@ "name": "@acme/domain", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./entities": "./src/entities/index.ts" }, "private": true, "scripts": { diff --git a/core/domain/src/entities/index.ts b/core/domain/src/entities/index.ts new file mode 100644 index 0000000..42d2856 --- /dev/null +++ b/core/domain/src/entities/index.ts @@ -0,0 +1 @@ +export * from './User'; \ No newline at end of file diff --git a/core/infrastructure/.gitkeep b/core/infrastructure/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/core/infrastructure/README.md b/core/infrastructure/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/core/infrastructure/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/core/infrastructure/eslint.config.mjs b/core/infrastructure/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/core/infrastructure/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/core/infrastructure/package.json b/core/infrastructure/package.json new file mode 100644 index 0000000..f64fd07 --- /dev/null +++ b/core/infrastructure/package.json @@ -0,0 +1,31 @@ +{ + "name": "@acme/infrastructure", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@acme/application": "workspace:*", + "@acme/domain": "workspace:*" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/core/infrastructure/prettier.config.mjs b/core/infrastructure/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/core/infrastructure/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/core/infrastructure/src/index.ts b/core/infrastructure/src/index.ts new file mode 100644 index 0000000..4dcc196 --- /dev/null +++ b/core/infrastructure/src/index.ts @@ -0,0 +1 @@ +export * from './lib/shared'; diff --git a/core/infrastructure/src/repositories/UserRepository.ts b/core/infrastructure/src/repositories/UserRepository.ts new file mode 100644 index 0000000..04d88d7 --- /dev/null +++ b/core/infrastructure/src/repositories/UserRepository.ts @@ -0,0 +1,14 @@ +import { IUserRepository } from "@acme/application"; +import { User } from "@acme/domain"; + +export class UserRepository implements IUserRepository { + private users: Map = new Map(); + + async create(user: User): Promise { + this.users.set(user.id, user); + } + + async findById(id: string): Promise { + return this.users.get(id) ?? null; + } +} \ No newline at end of file diff --git a/core/infrastructure/src/repositories/index.ts b/core/infrastructure/src/repositories/index.ts new file mode 100644 index 0000000..cc97ef8 --- /dev/null +++ b/core/infrastructure/src/repositories/index.ts @@ -0,0 +1 @@ +export * from './UserRepository'; \ No newline at end of file diff --git a/core/infrastructure/tsconfig.json b/core/infrastructure/tsconfig.json new file mode 100644 index 0000000..05900c0 --- /dev/null +++ b/core/infrastructure/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/core/infrastructure/vitest.config.ts b/core/infrastructure/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/core/infrastructure/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ca80b0b..2717766 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,6 +197,40 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/infrastructure: + dependencies: + '@acme/application': + specifier: workspace:* + version: link:../application + '@acme/domain': + specifier: workspace:* + version: link:../domain + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + packages/database-drizzle: dependencies: '@libsql/client': From e08a3c5a6fbb80e68adeb39d866e4a1ef9ea088c Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 21:34:30 +0700 Subject: [PATCH 12/44] feat: add interface-adapters module with initial TypeScript, ESLint, Prettier, and Vitest setup, including shared library implementation and tests --- core/interface-adapters/.gitkeep | 0 core/interface-adapters/README.md | 3 +++ core/interface-adapters/eslint.config.mjs | 4 +++ core/interface-adapters/package.json | 27 +++++++++++++++++++ core/interface-adapters/prettier.config.mjs | 5 ++++ core/interface-adapters/src/index.ts | 1 + .../interface-adapters/src/lib/shared.spec.ts | 8 ++++++ core/interface-adapters/src/lib/shared.ts | 3 +++ core/interface-adapters/tsconfig.json | 5 ++++ core/interface-adapters/vitest.config.ts | 3 +++ pnpm-lock.yaml | 27 +++++++++++++++++++ 11 files changed, 86 insertions(+) delete mode 100644 core/interface-adapters/.gitkeep create mode 100644 core/interface-adapters/README.md create mode 100644 core/interface-adapters/eslint.config.mjs create mode 100644 core/interface-adapters/package.json create mode 100644 core/interface-adapters/prettier.config.mjs create mode 100644 core/interface-adapters/src/index.ts create mode 100644 core/interface-adapters/src/lib/shared.spec.ts create mode 100644 core/interface-adapters/src/lib/shared.ts create mode 100644 core/interface-adapters/tsconfig.json create mode 100644 core/interface-adapters/vitest.config.ts diff --git a/core/interface-adapters/.gitkeep b/core/interface-adapters/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/core/interface-adapters/README.md b/core/interface-adapters/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/core/interface-adapters/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/core/interface-adapters/eslint.config.mjs b/core/interface-adapters/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/core/interface-adapters/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json new file mode 100644 index 0000000..1d44fc3 --- /dev/null +++ b/core/interface-adapters/package.json @@ -0,0 +1,27 @@ +{ + "name": "@acme/interface-adapters", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/core/interface-adapters/prettier.config.mjs b/core/interface-adapters/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/core/interface-adapters/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/core/interface-adapters/src/index.ts b/core/interface-adapters/src/index.ts new file mode 100644 index 0000000..4dcc196 --- /dev/null +++ b/core/interface-adapters/src/index.ts @@ -0,0 +1 @@ +export * from './lib/shared'; diff --git a/core/interface-adapters/src/lib/shared.spec.ts b/core/interface-adapters/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/core/interface-adapters/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/core/interface-adapters/src/lib/shared.ts b/core/interface-adapters/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/core/interface-adapters/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/core/interface-adapters/tsconfig.json b/core/interface-adapters/tsconfig.json new file mode 100644 index 0000000..05900c0 --- /dev/null +++ b/core/interface-adapters/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/core/interface-adapters/vitest.config.ts b/core/interface-adapters/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/core/interface-adapters/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2717766..e042171 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -231,6 +231,33 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/interface-adapters: + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + packages/database-drizzle: dependencies: '@libsql/client': From 3d7b8f3a731ea53f40b9d09d23b285abbba22c90 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 21:49:26 +0700 Subject: [PATCH 13/44] feat: enhance application and interface-adapters modules with updated exports, new UserController implementation, and TypeScript configuration adjustments --- configs/config-typescript/bundler.json | 1 + core/application/package.json | 4 +++- core/application/src/index.ts | 4 ++-- core/application/src/interfaces/index.ts | 1 - core/application/src/use-cases/index.ts | 1 - .../src/repositories/UserRepository.ts | 2 +- core/interface-adapters/package.json | 6 +++++- .../src/controllers/UserController.ts | 15 +++++++++++++++ core/interface-adapters/src/index.ts | 1 - core/interface-adapters/src/lib/shared.spec.ts | 8 -------- core/interface-adapters/src/lib/shared.ts | 3 --- pnpm-lock.yaml | 4 ++++ 12 files changed, 31 insertions(+), 19 deletions(-) delete mode 100644 core/application/src/interfaces/index.ts delete mode 100644 core/application/src/use-cases/index.ts create mode 100644 core/interface-adapters/src/controllers/UserController.ts delete mode 100644 core/interface-adapters/src/lib/shared.spec.ts delete mode 100644 core/interface-adapters/src/lib/shared.ts diff --git a/configs/config-typescript/bundler.json b/configs/config-typescript/bundler.json index ea8be27..55ae9d7 100644 --- a/configs/config-typescript/bundler.json +++ b/configs/config-typescript/bundler.json @@ -5,6 +5,7 @@ "module": "ESNext", "moduleResolution": "Bundler", "allowJs": false, + "lib": ["ES2015"], "jsx": "preserve", "noEmit": true } diff --git a/core/application/package.json b/core/application/package.json index 2a9d8cc..04b5dca 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -2,7 +2,9 @@ "name": "@acme/application", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./use-cases/*": "./src/use-cases/*.ts", + "./interfaces/*": "./src/interfaces/*.ts" }, "private": true, "scripts": { diff --git a/core/application/src/index.ts b/core/application/src/index.ts index e9d7bdb..6faa5f3 100644 --- a/core/application/src/index.ts +++ b/core/application/src/index.ts @@ -1,2 +1,2 @@ -export * from './interfaces'; -export * from './use-cases'; \ No newline at end of file +// export * from './interfaces'; +// export * from './use-cases'; \ No newline at end of file diff --git a/core/application/src/interfaces/index.ts b/core/application/src/interfaces/index.ts deleted file mode 100644 index def3935..0000000 --- a/core/application/src/interfaces/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './IUserRepository'; \ No newline at end of file diff --git a/core/application/src/use-cases/index.ts b/core/application/src/use-cases/index.ts deleted file mode 100644 index e6050a6..0000000 --- a/core/application/src/use-cases/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './UserUseCase'; \ No newline at end of file diff --git a/core/infrastructure/src/repositories/UserRepository.ts b/core/infrastructure/src/repositories/UserRepository.ts index 04d88d7..602d3b8 100644 --- a/core/infrastructure/src/repositories/UserRepository.ts +++ b/core/infrastructure/src/repositories/UserRepository.ts @@ -1,4 +1,4 @@ -import { IUserRepository } from "@acme/application"; +import { IUserRepository } from "@acme/application/interfaces/IUserRepository"; import { User } from "@acme/domain"; export class UserRepository implements IUserRepository { diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index 1d44fc3..e41bdac 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -2,7 +2,8 @@ "name": "@acme/interface-adapters", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./controllers/*": "./src/controllers/*.ts" }, "private": true, "scripts": { @@ -14,6 +15,9 @@ "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, + "dependencies": { + "@acme/application": "workspace:*" + }, "devDependencies": { "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", diff --git a/core/interface-adapters/src/controllers/UserController.ts b/core/interface-adapters/src/controllers/UserController.ts new file mode 100644 index 0000000..270d1a9 --- /dev/null +++ b/core/interface-adapters/src/controllers/UserController.ts @@ -0,0 +1,15 @@ +import { UserUseCase } from "@acme/application/use-cases/UserUseCase"; + +export class UserController { + constructor(private userUseCase: UserUseCase) {} + + async create(req: any) { + await this.userUseCase.create(req.body); + return { status: "User created" }; + } + + async get(req: any) { + const user = await this.userUseCase.getById(req.params.id); + return user ?? { error: "User not found" }; + } +} \ No newline at end of file diff --git a/core/interface-adapters/src/index.ts b/core/interface-adapters/src/index.ts index 4dcc196..e69de29 100644 --- a/core/interface-adapters/src/index.ts +++ b/core/interface-adapters/src/index.ts @@ -1 +0,0 @@ -export * from './lib/shared'; diff --git a/core/interface-adapters/src/lib/shared.spec.ts b/core/interface-adapters/src/lib/shared.spec.ts deleted file mode 100644 index 9d58e76..0000000 --- a/core/interface-adapters/src/lib/shared.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect, it, describe } from 'vitest'; -import { shared } from './shared'; - -describe('shared', () => { - it('should work', () => { - expect(shared()).toEqual('shared'); - }); -}); diff --git a/core/interface-adapters/src/lib/shared.ts b/core/interface-adapters/src/lib/shared.ts deleted file mode 100644 index d734544..0000000 --- a/core/interface-adapters/src/lib/shared.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function shared(): string { - return 'shared'; -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e042171..6b90912 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,6 +232,10 @@ importers: version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) core/interface-adapters: + dependencies: + '@acme/application': + specifier: workspace:* + version: link:../application devDependencies: '@acme/eslint-config': specifier: workspace:* From bc8c9b927812db80ebd77cb3e4905581bf55ea93 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 22:07:09 +0700 Subject: [PATCH 14/44] feat: refactor application and interface-adapters modules to streamline exports, update repository imports, and implement dependency injection --- core/application/package.json | 4 +- core/application/src/index.ts | 4 +- .../src/interfaces/IUserRepository.ts | 2 +- core/application/src/interfaces/index.ts | 1 + core/application/src/use-cases/UserUseCase.ts | 2 +- core/application/src/use-cases/index.ts | 1 + core/di/.gitkeep | 0 core/di/README.md | 3 ++ core/di/eslint.config.mjs | 4 ++ core/di/package.json | 33 +++++++++++++++ core/di/prettier.config.mjs | 5 +++ core/di/src/ServiceRegistry.ts | 8 ++++ core/di/src/container.ts | 24 +++++++++++ core/di/src/index.ts | 1 + core/di/src/lib/shared.spec.ts | 8 ++++ core/di/src/lib/shared.ts | 3 ++ core/di/tsconfig.json | 5 +++ core/di/vitest.config.ts | 3 ++ core/domain/package.json | 2 +- core/domain/src/index.ts | 2 +- core/infrastructure/src/index.ts | 2 +- core/interface-adapters/package.json | 3 +- .../src/controllers/UserController.ts | 2 +- .../src/controllers/index.ts | 1 + core/interface-adapters/src/index.ts | 1 + pnpm-lock.yaml | 40 +++++++++++++++++++ 26 files changed, 151 insertions(+), 13 deletions(-) create mode 100644 core/application/src/interfaces/index.ts create mode 100644 core/application/src/use-cases/index.ts delete mode 100644 core/di/.gitkeep create mode 100644 core/di/README.md create mode 100644 core/di/eslint.config.mjs create mode 100644 core/di/package.json create mode 100644 core/di/prettier.config.mjs create mode 100644 core/di/src/ServiceRegistry.ts create mode 100644 core/di/src/container.ts create mode 100644 core/di/src/index.ts create mode 100644 core/di/src/lib/shared.spec.ts create mode 100644 core/di/src/lib/shared.ts create mode 100644 core/di/tsconfig.json create mode 100644 core/di/vitest.config.ts create mode 100644 core/interface-adapters/src/controllers/index.ts diff --git a/core/application/package.json b/core/application/package.json index 04b5dca..2a9d8cc 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -2,9 +2,7 @@ "name": "@acme/application", "type": "module", "exports": { - ".": "./src/index.ts", - "./use-cases/*": "./src/use-cases/*.ts", - "./interfaces/*": "./src/interfaces/*.ts" + ".": "./src/index.ts" }, "private": true, "scripts": { diff --git a/core/application/src/index.ts b/core/application/src/index.ts index 6faa5f3..e9d7bdb 100644 --- a/core/application/src/index.ts +++ b/core/application/src/index.ts @@ -1,2 +1,2 @@ -// export * from './interfaces'; -// export * from './use-cases'; \ No newline at end of file +export * from './interfaces'; +export * from './use-cases'; \ No newline at end of file diff --git a/core/application/src/interfaces/IUserRepository.ts b/core/application/src/interfaces/IUserRepository.ts index 0b85642..cf88118 100644 --- a/core/application/src/interfaces/IUserRepository.ts +++ b/core/application/src/interfaces/IUserRepository.ts @@ -1,4 +1,4 @@ -import { User } from "@acme/domain/entities"; +import { User } from "@acme/domain"; export interface IUserRepository { create(user: User): Promise; diff --git a/core/application/src/interfaces/index.ts b/core/application/src/interfaces/index.ts new file mode 100644 index 0000000..def3935 --- /dev/null +++ b/core/application/src/interfaces/index.ts @@ -0,0 +1 @@ +export * from './IUserRepository'; \ No newline at end of file diff --git a/core/application/src/use-cases/UserUseCase.ts b/core/application/src/use-cases/UserUseCase.ts index 3e9cb93..f7ae804 100644 --- a/core/application/src/use-cases/UserUseCase.ts +++ b/core/application/src/use-cases/UserUseCase.ts @@ -1,4 +1,4 @@ -import { User } from "@acme/domain/entities"; +import { User } from "@acme/domain"; import { IUserRepository } from "../interfaces/IUserRepository"; export class UserUseCase { diff --git a/core/application/src/use-cases/index.ts b/core/application/src/use-cases/index.ts new file mode 100644 index 0000000..e6050a6 --- /dev/null +++ b/core/application/src/use-cases/index.ts @@ -0,0 +1 @@ +export * from './UserUseCase'; \ No newline at end of file diff --git a/core/di/.gitkeep b/core/di/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/core/di/README.md b/core/di/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/core/di/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/core/di/eslint.config.mjs b/core/di/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/core/di/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/core/di/package.json b/core/di/package.json new file mode 100644 index 0000000..6feadd0 --- /dev/null +++ b/core/di/package.json @@ -0,0 +1,33 @@ +{ + "name": "@acme/di", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@acme/domain": "workspace:*", + "@acme/application": "workspace:*", + "@acme/infrastructure": "workspace:*", + "@acme/interface-adapters": "workspace:*" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/core/di/prettier.config.mjs b/core/di/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/core/di/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/core/di/src/ServiceRegistry.ts b/core/di/src/ServiceRegistry.ts new file mode 100644 index 0000000..21f0f37 --- /dev/null +++ b/core/di/src/ServiceRegistry.ts @@ -0,0 +1,8 @@ +import { createServiceRegistry } from "@thaitype/ioctopus"; +import { IUserRepository, UserUseCase } from "@acme/application"; +import { UserController } from "@acme/interface-adapters"; + +export const registry = createServiceRegistry() + .define("IUserRepository").mapTo() + .define("UserUseCase").mapTo() + .define("UserController").mapTo(); diff --git a/core/di/src/container.ts b/core/di/src/container.ts new file mode 100644 index 0000000..fe4d3ce --- /dev/null +++ b/core/di/src/container.ts @@ -0,0 +1,24 @@ +import { createContainer, createModule } from "@thaitype/ioctopus"; +import { registry } from "./ServiceRegistry"; +import { UserRepository } from "@acme/infrastructure"; +import { UserUseCase } from "@acme/application"; +import { UserController } from "@acme/interface-adapters"; + +const appModule = createModule(registry); + +appModule.bind("IUserRepository").toClass(UserRepository); + +appModule.bind("UserUseCase").toClass(UserUseCase, [ + "IUserRepository" +]); + +appModule.bind("UserController").toClass(UserController, [ + "UserUseCase" +]); + +export const container = createContainer(registry); +container.load("app", appModule); + +export function getInjection(token: Key) { + return container.get(token); +} \ No newline at end of file diff --git a/core/di/src/index.ts b/core/di/src/index.ts new file mode 100644 index 0000000..4dcc196 --- /dev/null +++ b/core/di/src/index.ts @@ -0,0 +1 @@ +export * from './lib/shared'; diff --git a/core/di/src/lib/shared.spec.ts b/core/di/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/core/di/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/core/di/src/lib/shared.ts b/core/di/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/core/di/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/core/di/tsconfig.json b/core/di/tsconfig.json new file mode 100644 index 0000000..05900c0 --- /dev/null +++ b/core/di/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/core/di/vitest.config.ts b/core/di/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/core/di/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/core/domain/package.json b/core/domain/package.json index 6703792..62fbcdf 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -3,7 +3,7 @@ "type": "module", "exports": { ".": "./src/index.ts", - "./entities": "./src/entities/index.ts" + "./entities": "./src/entities/*.ts" }, "private": true, "scripts": { diff --git a/core/domain/src/index.ts b/core/domain/src/index.ts index c6f32a7..034bb90 100644 --- a/core/domain/src/index.ts +++ b/core/domain/src/index.ts @@ -1 +1 @@ -export * from './entities/User'; \ No newline at end of file +export * from './entities'; \ No newline at end of file diff --git a/core/infrastructure/src/index.ts b/core/infrastructure/src/index.ts index 4dcc196..d5f5beb 100644 --- a/core/infrastructure/src/index.ts +++ b/core/infrastructure/src/index.ts @@ -1 +1 @@ -export * from './lib/shared'; +export * from './repositories'; \ No newline at end of file diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index e41bdac..d72a461 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -2,8 +2,7 @@ "name": "@acme/interface-adapters", "type": "module", "exports": { - ".": "./src/index.ts", - "./controllers/*": "./src/controllers/*.ts" + ".": "./src/index.ts" }, "private": true, "scripts": { diff --git a/core/interface-adapters/src/controllers/UserController.ts b/core/interface-adapters/src/controllers/UserController.ts index 270d1a9..2109f9d 100644 --- a/core/interface-adapters/src/controllers/UserController.ts +++ b/core/interface-adapters/src/controllers/UserController.ts @@ -1,4 +1,4 @@ -import { UserUseCase } from "@acme/application/use-cases/UserUseCase"; +import { UserUseCase } from "@acme/application"; export class UserController { constructor(private userUseCase: UserUseCase) {} diff --git a/core/interface-adapters/src/controllers/index.ts b/core/interface-adapters/src/controllers/index.ts new file mode 100644 index 0000000..cb3f127 --- /dev/null +++ b/core/interface-adapters/src/controllers/index.ts @@ -0,0 +1 @@ +export * from './UserController'; \ No newline at end of file diff --git a/core/interface-adapters/src/index.ts b/core/interface-adapters/src/index.ts index e69de29..4719b6a 100644 --- a/core/interface-adapters/src/index.ts +++ b/core/interface-adapters/src/index.ts @@ -0,0 +1 @@ +export * from './controllers'; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b90912..41af7a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,6 +170,46 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/di: + dependencies: + '@acme/application': + specifier: workspace:* + version: link:../application + '@acme/domain': + specifier: workspace:* + version: link:../domain + '@acme/infrastructure': + specifier: workspace:* + version: link:../infrastructure + '@acme/interface-adapters': + specifier: workspace:* + version: link:../interface-adapters + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + core/domain: devDependencies: '@acme/eslint-config': From 6778d1b677806652ae33de66bf460e0d02113f50 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 23 Mar 2025 22:12:23 +0700 Subject: [PATCH 15/44] feat: add CLI module with initial TypeScript, ESLint, Prettier setup, and implement add function with tests --- apps/cli/eslint.config.mjs | 4 + apps/cli/package.json | 31 ++++ apps/cli/prettier.config.mjs | 5 + apps/cli/src/__test__/add.test.ts | 8 + apps/cli/src/add.ts | 3 + apps/cli/src/assets/.gitkeep | 0 apps/cli/src/main.ts | 16 ++ apps/cli/tsconfig.json | 7 + core/di/src/index.ts | 2 +- pnpm-lock.yaml | 257 +++++++++++++++++------------- 10 files changed, 219 insertions(+), 114 deletions(-) create mode 100644 apps/cli/eslint.config.mjs create mode 100644 apps/cli/package.json create mode 100644 apps/cli/prettier.config.mjs create mode 100644 apps/cli/src/__test__/add.test.ts create mode 100644 apps/cli/src/add.ts create mode 100644 apps/cli/src/assets/.gitkeep create mode 100644 apps/cli/src/main.ts create mode 100644 apps/cli/tsconfig.json diff --git a/apps/cli/eslint.config.mjs b/apps/cli/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/apps/cli/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/apps/cli/package.json b/apps/cli/package.json new file mode 100644 index 0000000..2502021 --- /dev/null +++ b/apps/cli/package.json @@ -0,0 +1,31 @@ +{ + "name": "cli", + "version": "0.0.0", + "license": "MIT", + "private": true, + "scripts": { + "dev": "tsx watch ./src/main.ts", + "start": "tsx ./src/main.ts", + "build": "esbuild ./src/main.ts --bundle --minify --platform=node --outfile=dist/main.js", + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "@acme/di": "workspace:*" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@types/node": "^22.13.9", + "esbuild": "^0.25.1", + "eslint": "^9.22.0", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/apps/cli/prettier.config.mjs b/apps/cli/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/apps/cli/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/apps/cli/src/__test__/add.test.ts b/apps/cli/src/__test__/add.test.ts new file mode 100644 index 0000000..9d55fdc --- /dev/null +++ b/apps/cli/src/__test__/add.test.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { add } from '../add'; + +describe('Add', () => { + it('should add two numbers', () => { + expect(add(1, 2)).toBe(3); + }); +}); diff --git a/apps/cli/src/add.ts b/apps/cli/src/add.ts new file mode 100644 index 0000000..8d9b8a2 --- /dev/null +++ b/apps/cli/src/add.ts @@ -0,0 +1,3 @@ +export function add(a: number, b: number): number { + return a + b; +} diff --git a/apps/cli/src/assets/.gitkeep b/apps/cli/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/apps/cli/src/main.ts b/apps/cli/src/main.ts new file mode 100644 index 0000000..23e1b13 --- /dev/null +++ b/apps/cli/src/main.ts @@ -0,0 +1,16 @@ +import { getInjection } from '@acme/di'; +import { add } from './add'; + +// console.log('Hello World ' + add(1, 2) + ' ' + shared()); + +console.log('ARGS: ', process.argv); + +const userController = getInjection("UserController"); + +(async () => { + await userController.create({ + body: { id: "u1", name: "Alice", email: "alice@example.com" }, + }); + + console.log(`User: ${JSON.stringify(await userController.get({ params: { id: "u1" } }))}`); +})(); \ No newline at end of file diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json new file mode 100644 index 0000000..acdc07e --- /dev/null +++ b/apps/cli/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@acme/typescript-config/bundler.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": [ + "node_modules" + ] +} diff --git a/core/di/src/index.ts b/core/di/src/index.ts index 4dcc196..98870b8 100644 --- a/core/di/src/index.ts +++ b/core/di/src/index.ts @@ -1 +1 @@ -export * from './lib/shared'; +export * from './container'; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41af7a9..05a6ee4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,6 +22,37 @@ importers: specifier: ^2.4.4 version: 2.4.4 + apps/cli: + dependencies: + '@acme/di': + specifier: workspace:* + version: link:../../core/di + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@types/node': + specifier: ^22.13.9 + version: 22.13.11 + esbuild: + specifier: ^0.25.1 + version: 0.25.1 + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + apps/nextjs: dependencies: '@acme/database-drizzle': @@ -559,8 +590,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -583,8 +614,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -607,8 +638,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -631,8 +662,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -655,8 +686,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -679,8 +710,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -703,8 +734,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -727,8 +758,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -751,8 +782,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -775,8 +806,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -799,8 +830,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -823,8 +854,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -847,8 +878,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -871,8 +902,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -895,8 +926,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -919,8 +950,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -943,14 +974,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -973,8 +1004,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -985,8 +1016,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1009,8 +1040,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1033,8 +1064,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1057,8 +1088,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1081,8 +1112,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1105,8 +1136,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2167,8 +2198,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} engines: {node: '>=18'} hasBin: true @@ -3928,7 +3959,7 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.25.0': + '@esbuild/aix-ppc64@0.25.1': optional: true '@esbuild/android-arm64@0.18.20': @@ -3940,7 +3971,7 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.25.0': + '@esbuild/android-arm64@0.25.1': optional: true '@esbuild/android-arm@0.18.20': @@ -3952,7 +3983,7 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.25.0': + '@esbuild/android-arm@0.25.1': optional: true '@esbuild/android-x64@0.18.20': @@ -3964,7 +3995,7 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.25.0': + '@esbuild/android-x64@0.25.1': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -3976,7 +4007,7 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.25.0': + '@esbuild/darwin-arm64@0.25.1': optional: true '@esbuild/darwin-x64@0.18.20': @@ -3988,7 +4019,7 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.25.0': + '@esbuild/darwin-x64@0.25.1': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -4000,7 +4031,7 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.25.0': + '@esbuild/freebsd-arm64@0.25.1': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -4012,7 +4043,7 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.25.0': + '@esbuild/freebsd-x64@0.25.1': optional: true '@esbuild/linux-arm64@0.18.20': @@ -4024,7 +4055,7 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.25.0': + '@esbuild/linux-arm64@0.25.1': optional: true '@esbuild/linux-arm@0.18.20': @@ -4036,7 +4067,7 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.25.0': + '@esbuild/linux-arm@0.25.1': optional: true '@esbuild/linux-ia32@0.18.20': @@ -4048,7 +4079,7 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.25.0': + '@esbuild/linux-ia32@0.25.1': optional: true '@esbuild/linux-loong64@0.18.20': @@ -4060,7 +4091,7 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.25.0': + '@esbuild/linux-loong64@0.25.1': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -4072,7 +4103,7 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.25.0': + '@esbuild/linux-mips64el@0.25.1': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -4084,7 +4115,7 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.25.0': + '@esbuild/linux-ppc64@0.25.1': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -4096,7 +4127,7 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.25.0': + '@esbuild/linux-riscv64@0.25.1': optional: true '@esbuild/linux-s390x@0.18.20': @@ -4108,7 +4139,7 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.25.0': + '@esbuild/linux-s390x@0.25.1': optional: true '@esbuild/linux-x64@0.18.20': @@ -4120,10 +4151,10 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.25.0': + '@esbuild/linux-x64@0.25.1': optional: true - '@esbuild/netbsd-arm64@0.25.0': + '@esbuild/netbsd-arm64@0.25.1': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -4135,13 +4166,13 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.25.0': + '@esbuild/netbsd-x64@0.25.1': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.25.0': + '@esbuild/openbsd-arm64@0.25.1': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -4153,7 +4184,7 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.25.0': + '@esbuild/openbsd-x64@0.25.1': optional: true '@esbuild/sunos-x64@0.18.20': @@ -4165,7 +4196,7 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.25.0': + '@esbuild/sunos-x64@0.25.1': optional: true '@esbuild/win32-arm64@0.18.20': @@ -4177,7 +4208,7 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.25.0': + '@esbuild/win32-arm64@0.25.1': optional: true '@esbuild/win32-ia32@0.18.20': @@ -4189,7 +4220,7 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.25.0': + '@esbuild/win32-ia32@0.25.1': optional: true '@esbuild/win32-x64@0.18.20': @@ -4201,7 +4232,7 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.25.0': + '@esbuild/win32-x64@0.25.1': optional: true '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0)': @@ -4598,7 +4629,7 @@ snapshots: '@types/ws@8.18.0': dependencies: - '@types/node': 20.17.24 + '@types/node': 22.13.11 '@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: @@ -4887,9 +4918,9 @@ snapshots: buffer-from@1.1.2: {} - bundle-require@5.1.0(esbuild@0.25.0): + bundle-require@5.1.0(esbuild@0.25.1): dependencies: - esbuild: 0.25.0 + esbuild: 0.25.1 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -5217,10 +5248,10 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.25.0): + esbuild-register@3.6.0(esbuild@0.25.1): dependencies: debug: 4.4.0 - esbuild: 0.25.0 + esbuild: 0.25.1 transitivePeerDependencies: - supports-color optional: true @@ -5303,33 +5334,33 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.25.0: + esbuild@0.25.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 escalade@3.2.0: {} @@ -6335,8 +6366,8 @@ snapshots: prisma@6.4.1(typescript@5.8.2): dependencies: '@prisma/engines': 6.4.1 - esbuild: 0.25.0 - esbuild-register: 3.6.0(esbuild@0.25.0) + esbuild: 0.25.1 + esbuild-register: 3.6.0(esbuild@0.25.1) optionalDependencies: fsevents: 2.3.3 typescript: 5.8.2 @@ -6781,12 +6812,12 @@ snapshots: tsup@8.4.0(postcss@8.5.3)(tsx@4.19.1)(typescript@5.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.25.0) + bundle-require: 5.1.0(esbuild@0.25.1) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.0 debug: 4.4.0 - esbuild: 0.25.0 + esbuild: 0.25.1 joycon: 3.1.1 picocolors: 1.1.1 postcss-load-config: 6.0.1(postcss@8.5.3)(tsx@4.19.1) @@ -6941,7 +6972,7 @@ snapshots: vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1): dependencies: - esbuild: 0.25.0 + esbuild: 0.25.1 postcss: 8.5.3 rollup: 4.35.0 optionalDependencies: From 27cbe0961be60f29ef31685f94a0758be480eada Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 00:47:55 +0700 Subject: [PATCH 16/44] feat: add TypeScript as a dev dependency and update pnpm lockfile --- package.json | 3 ++- pnpm-lock.yaml | 36 +++++++++++++++++++----------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index d6cceed..4184d2d 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "devDependencies": { "prettier": "^3.2.5", "tsx": "4.19.1", - "turbo": "^2.4.4" + "turbo": "^2.4.4", + "typescript": "^5.8.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05a6ee4..c073869 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,6 +21,9 @@ importers: turbo: specifier: ^2.4.4 version: 2.4.4 + typescript: + specifier: ^5.8.2 + version: 5.8.2 apps/cli: dependencies: @@ -60,7 +63,7 @@ importers: version: link:../../packages/database-drizzle next: specifier: ^15.2.1 - version: 15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + 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 @@ -91,7 +94,7 @@ importers: version: 19.0.4(@types/react@19.0.10) '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -153,7 +156,7 @@ importers: version: link:../config-typescript '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) '@vitest/ui': specifier: 3.0.8 version: 3.0.8(vitest@3.0.9) @@ -190,7 +193,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -230,7 +233,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -257,7 +260,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -291,7 +294,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -322,7 +325,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -392,7 +395,7 @@ importers: version: link:../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -426,7 +429,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -453,7 +456,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -2781,6 +2784,7 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@3.1.3: @@ -4708,7 +4712,7 @@ snapshots: '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 - '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9)': + '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -6136,7 +6140,7 @@ snapshots: natural-compare@1.4.0: {} - next@15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.2.1 '@swc/counter': 0.1.3 @@ -6146,7 +6150,7 @@ snapshots: postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(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 @@ -6716,12 +6720,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0): + styled-jsx@5.1.6(react@19.0.0): dependencies: client-only: 0.0.1 react: 19.0.0 - optionalDependencies: - '@babel/core': 7.26.10 sucrase@3.35.0: dependencies: From dfa1c8b894256c71313852e9f15d1ce87ec3e2f0 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 00:51:05 +0700 Subject: [PATCH 17/44] feat: update Vitest TypeScript configuration to refine exclusion patterns --- configs/vitest-config/tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/vitest-config/tsconfig.json b/configs/vitest-config/tsconfig.json index d29c633..cd14837 100644 --- a/configs/vitest-config/tsconfig.json +++ b/configs/vitest-config/tsconfig.json @@ -1,8 +1,8 @@ { "extends": ["@acme/typescript-config/base.json"], "compilerOptions": { - "outDir": "dist" + "outDir": "dist", }, "include": ["configs", "scripts"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist", "**/node_modules", "../../node_modules"] } From 43c45e2484c3e07bb0bc0b1fb4d3cee4b7fab61f Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 09:30:12 +0700 Subject: [PATCH 18/44] feat: update VSCode settings to exclude node_modules and .turbo, remove unused test scripts, and delete shared module files --- .vscode/settings.json | 6 +++++- core/di/package.json | 2 -- core/di/src/lib/shared.spec.ts | 8 -------- core/di/src/lib/shared.ts | 3 --- turbo.json | 1 + 5 files changed, 6 insertions(+), 14 deletions(-) delete mode 100644 core/di/src/lib/shared.spec.ts delete mode 100644 core/di/src/lib/shared.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 44a73ec..6dd48d8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,9 @@ { "mode": "auto" } - ] + ], + "files.exclude": { + "**/node_modules": true, + "**/.turbo": true, + } } diff --git a/core/di/package.json b/core/di/package.json index 6feadd0..d67f4e9 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -6,8 +6,6 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", "format:check": "prettier -c src", diff --git a/core/di/src/lib/shared.spec.ts b/core/di/src/lib/shared.spec.ts deleted file mode 100644 index 9d58e76..0000000 --- a/core/di/src/lib/shared.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect, it, describe } from 'vitest'; -import { shared } from './shared'; - -describe('shared', () => { - it('should work', () => { - expect(shared()).toEqual('shared'); - }); -}); diff --git a/core/di/src/lib/shared.ts b/core/di/src/lib/shared.ts deleted file mode 100644 index d734544..0000000 --- a/core/di/src/lib/shared.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function shared(): string { - return 'shared'; -} diff --git a/turbo.json b/turbo.json index c5683a3..7e89f91 100644 --- a/turbo.json +++ b/turbo.json @@ -1,5 +1,6 @@ { "$schema": "https://turbo.build/schema.json", + "ui": "tui", "tasks": { "build": { "dependsOn": ["^build"], From c02d04b68a43add8a5f5d1ce1790225d5223ec85 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 14:05:27 +0700 Subject: [PATCH 19/44] refactor: refactor shared library with initial implementation, tests, and configuration files --- README.md | 4 +- {shared => packages/shared}/README.md | 0 {shared => packages/shared}/eslint.config.mjs | 0 {shared => packages/shared}/package.json | 0 .../shared}/prettier.config.mjs | 0 {shared => packages/shared}/src/index.ts | 0 .../shared}/src/lib/shared.spec.ts | 0 {shared => packages/shared}/src/lib/shared.ts | 0 {shared => packages/shared}/tsconfig.json | 0 {shared => packages/shared}/vitest.config.ts | 0 pnpm-lock.yaml | 43 ++++++++++--------- pnpm-workspace.yaml | 3 +- 12 files changed, 25 insertions(+), 25 deletions(-) rename {shared => packages/shared}/README.md (100%) rename {shared => packages/shared}/eslint.config.mjs (100%) rename {shared => packages/shared}/package.json (100%) rename {shared => packages/shared}/prettier.config.mjs (100%) rename {shared => packages/shared}/src/index.ts (100%) rename {shared => packages/shared}/src/lib/shared.spec.ts (100%) rename {shared => packages/shared}/src/lib/shared.ts (100%) rename {shared => packages/shared}/tsconfig.json (100%) rename {shared => packages/shared}/vitest.config.ts (100%) diff --git a/README.md b/README.md index 382f5bf..695cd8c 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,8 @@ A minimal setup that helps you get started quickly: โ”‚ โ”œโ”€โ”€ infrastructure/ # Contracts only (not implementations) โ”‚ โ””โ”€โ”€ di/ # DI container & registry โ”œโ”€โ”€ packages/ -โ”‚ โ””โ”€โ”€ db-postgres/ # Postgres implementation of repositories -โ””โ”€โ”€ shared/ # Common types, utils, constants +โ”‚ โ”œโ”€โ”€ db-postgres/ # Postgres implementation of repositories +โ”‚ โ””โ”€โ”€ shared/ # Common types, utils, constants ``` ## ๐Ÿ”— High-Level Dependency Diagram diff --git a/shared/README.md b/packages/shared/README.md similarity index 100% rename from shared/README.md rename to packages/shared/README.md diff --git a/shared/eslint.config.mjs b/packages/shared/eslint.config.mjs similarity index 100% rename from shared/eslint.config.mjs rename to packages/shared/eslint.config.mjs diff --git a/shared/package.json b/packages/shared/package.json similarity index 100% rename from shared/package.json rename to packages/shared/package.json diff --git a/shared/prettier.config.mjs b/packages/shared/prettier.config.mjs similarity index 100% rename from shared/prettier.config.mjs rename to packages/shared/prettier.config.mjs diff --git a/shared/src/index.ts b/packages/shared/src/index.ts similarity index 100% rename from shared/src/index.ts rename to packages/shared/src/index.ts diff --git a/shared/src/lib/shared.spec.ts b/packages/shared/src/lib/shared.spec.ts similarity index 100% rename from shared/src/lib/shared.spec.ts rename to packages/shared/src/lib/shared.spec.ts diff --git a/shared/src/lib/shared.ts b/packages/shared/src/lib/shared.ts similarity index 100% rename from shared/src/lib/shared.ts rename to packages/shared/src/lib/shared.ts diff --git a/shared/tsconfig.json b/packages/shared/tsconfig.json similarity index 100% rename from shared/tsconfig.json rename to packages/shared/tsconfig.json diff --git a/shared/vitest.config.ts b/packages/shared/vitest.config.ts similarity index 100% rename from shared/vitest.config.ts rename to packages/shared/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c073869..7a41e79 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,7 +63,7 @@ importers: version: link:../../packages/database-drizzle next: specifier: ^15.2.1 - version: 15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -94,7 +94,7 @@ importers: version: 19.0.4(@types/react@19.0.10) '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -156,7 +156,7 @@ importers: version: link:../config-typescript '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) '@vitest/ui': specifier: 3.0.8 version: 3.0.8(vitest@3.0.9) @@ -193,7 +193,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -233,7 +233,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -260,7 +260,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -294,7 +294,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -325,7 +325,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -379,23 +379,23 @@ importers: specifier: 5.8.2 version: 5.8.2 - shared: + packages/shared: devDependencies: '@acme/eslint-config': specifier: workspace:* - version: link:../configs/config-eslint + version: link:../../configs/config-eslint '@acme/prettier-config': specifier: workspace:* - version: link:../configs/prettier-config + version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* - version: link:../configs/config-typescript + version: link:../../configs/config-typescript '@acme/vitest-config': specifier: workspace:* - version: link:../configs/vitest-config + version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -429,7 +429,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -456,7 +456,7 @@ importers: version: link:../../configs/vitest-config '@vitest/coverage-istanbul': specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1)) + version: 3.0.9(vitest@3.0.9) eslint: specifier: ^9.22.0 version: 9.22.0 @@ -2784,7 +2784,6 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@3.1.3: @@ -4712,7 +4711,7 @@ snapshots: '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 - '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9(@types/node@22.13.11)(jsdom@26.0.0)(tsx@4.19.1))': + '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9)': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -6140,7 +6139,7 @@ snapshots: natural-compare@1.4.0: {} - next@15.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@next/env': 15.2.1 '@swc/counter': 0.1.3 @@ -6150,7 +6149,7 @@ snapshots: 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) + styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0) optionalDependencies: '@next/swc-darwin-arm64': 15.2.1 '@next/swc-darwin-x64': 15.2.1 @@ -6720,10 +6719,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.0.0): + styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0): dependencies: client-only: 0.0.1 react: 19.0.0 + optionalDependencies: + '@babel/core': 7.26.10 sucrase@3.35.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 613ec44..bc63c81 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,5 +3,4 @@ packages: - "core/*" - "packages/*" - "configs/*" - - "tools/*" - - "shared" \ No newline at end of file + - "tools/*" \ No newline at end of file From 755af9295f1fdc62c63b3298bc871aa70734b1d8 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 22:08:06 +0700 Subject: [PATCH 20/44] feat: add initial project setup with shared library, configuration files, and scripts --- .vscode/settings.json | 1 - apps/cli/package.json | 8 +- package.json | 2 +- pnpm-lock.yaml | 158 ++++++++++++++++++++++++++- tools/scripts/README.md | 3 + tools/scripts/eslint.config.mjs | 4 + tools/scripts/package.json | 35 ++++++ tools/scripts/prettier.config.mjs | 5 + tools/scripts/src/index.ts | 44 ++++++++ tools/scripts/src/lib/shared.spec.ts | 8 ++ tools/scripts/src/lib/shared.ts | 3 + tools/scripts/tsconfig.json | 8 ++ tools/scripts/vitest.config.d.ts | 3 + tools/scripts/vitest.config.d.ts.map | 1 + tools/scripts/vitest.config.js | 2 + tools/scripts/vitest.config.ts | 3 + 16 files changed, 279 insertions(+), 9 deletions(-) create mode 100644 tools/scripts/README.md create mode 100644 tools/scripts/eslint.config.mjs create mode 100644 tools/scripts/package.json create mode 100644 tools/scripts/prettier.config.mjs create mode 100644 tools/scripts/src/index.ts create mode 100644 tools/scripts/src/lib/shared.spec.ts create mode 100644 tools/scripts/src/lib/shared.ts create mode 100644 tools/scripts/tsconfig.json create mode 100644 tools/scripts/vitest.config.d.ts create mode 100644 tools/scripts/vitest.config.d.ts.map create mode 100644 tools/scripts/vitest.config.js create mode 100644 tools/scripts/vitest.config.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 6dd48d8..8bc6e3d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,6 @@ } ], "files.exclude": { - "**/node_modules": true, "**/.turbo": true, } } diff --git a/apps/cli/package.json b/apps/cli/package.json index 2502021..447cf6b 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -9,8 +9,8 @@ "build": "esbuild ./src/main.ts --bundle --minify --platform=node --outfile=dist/main.js", "test": "vitest run", "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", + "lint:check": "acme lint:check", + "lint:fix": "acme lint:fix", "format:check": "prettier -c src", "format:fix": "prettier --write src", "check-types": "tsc --noEmit" @@ -20,11 +20,11 @@ }, "devDependencies": { "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", "@acme/prettier-config": "workspace:*", + "@acme/scripts": "workspace:*", + "@acme/typescript-config": "workspace:*", "@types/node": "^22.13.9", "esbuild": "^0.25.1", - "eslint": "^9.22.0", "prettier": "^3.5.3", "vitest": "^3.0.8" } diff --git a/package.json b/package.json index 4184d2d..1b08719 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "test:coverage-report": "turbo run view-report" }, "engines": { - "node": ">=18" + "node": ">=22" }, "name": "typescript-clean-architecture", "packageManager": "pnpm@10.5.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a41e79..b3be7f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,9 @@ importers: '@acme/prettier-config': specifier: workspace:* version: link:../../configs/prettier-config + '@acme/scripts': + specifier: workspace:* + version: link:../../tools/scripts '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -46,9 +49,6 @@ importers: esbuild: specifier: ^0.25.1 version: 0.25.1 - eslint: - specifier: ^9.22.0 - version: 9.22.0 prettier: specifier: ^3.5.3 version: 3.5.3 @@ -440,6 +440,40 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + tools/scripts: + dependencies: + eslint: + specifier: ^9.22.0 + version: 9.22.0 + devDependencies: + '@acme/eslint-config': + specifier: workspace:* + version: link:../../configs/config-eslint + '@acme/prettier-config': + specifier: workspace:* + version: link:../../configs/prettier-config + '@acme/typescript-config': + specifier: workspace:* + version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + esbuild: + specifier: ^0.25.1 + version: 0.25.1 + execa: + specifier: ^9.5.2 + version: 9.5.2 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + tools/template: devDependencies: '@acme/eslint-config': @@ -1590,6 +1624,13 @@ packages: cpu: [x64] os: [win32] + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -2292,6 +2333,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.2.0: resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} engines: {node: '>=12.0.0'} @@ -2331,6 +2376,10 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2424,6 +2473,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -2524,6 +2577,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2622,6 +2679,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -2641,6 +2702,10 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -2656,6 +2721,10 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -2934,6 +3003,10 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nwsapi@2.2.19: resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} @@ -3016,6 +3089,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} @@ -3031,6 +3108,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -3111,6 +3192,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + prisma@6.4.1: resolution: {integrity: sha512-q2uJkgXnua/jj66mk6P9bX/zgYJFI/jn4Yp0aS6SPRrjH/n6VyOV7RDe1vHD0DX8Aanx4MvgmUPPoYnR6MJnPg==} engines: {node: '>=18.18'} @@ -3378,6 +3463,10 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -3597,6 +3686,10 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -3806,6 +3899,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + snapshots: '@ampproject/remapping@2.3.0': @@ -4602,6 +4699,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.35.0': optional: true + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': @@ -5480,6 +5581,21 @@ snapshots: esutils@2.0.3: {} + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + expect-type@1.2.0: {} fast-deep-equal@3.1.3: {} @@ -5519,6 +5635,10 @@ snapshots: fflate@0.8.2: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -5630,6 +5750,11 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -5739,6 +5864,8 @@ snapshots: transitivePeerDependencies: - supports-color + human-signals@8.0.0: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -5838,6 +5965,8 @@ snapshots: is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} is-regex@1.2.1: @@ -5855,6 +5984,8 @@ snapshots: is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -5872,6 +6003,8 @@ snapshots: is-typedarray@1.0.0: {} + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -6178,6 +6311,11 @@ snapshots: node-releases@2.0.19: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nwsapi@2.2.19: {} nyc@17.1.0: @@ -6301,6 +6439,8 @@ snapshots: dependencies: callsites: 3.1.0 + parse-ms@4.0.0: {} + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -6311,6 +6451,8 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: @@ -6366,6 +6508,10 @@ snapshots: prettier@3.5.3: {} + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + prisma@6.4.1(typescript@5.8.2): dependencies: '@prisma/engines': 6.4.1 @@ -6717,6 +6863,8 @@ snapshots: strip-bom@4.0.0: {} + strip-final-newline@4.0.0: {} + strip-json-comments@3.1.1: {} styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0): @@ -6940,6 +7088,8 @@ snapshots: undici-types@6.20.0: {} + unicorn-magic@0.3.0: {} + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -7164,3 +7314,5 @@ snapshots: yargs-parser: 18.1.3 yocto-queue@0.1.0: {} + + yoctocolors@2.1.1: {} diff --git a/tools/scripts/README.md b/tools/scripts/README.md new file mode 100644 index 0000000..7f0d98a --- /dev/null +++ b/tools/scripts/README.md @@ -0,0 +1,3 @@ +# template + +Use for creating new projects. \ No newline at end of file diff --git a/tools/scripts/eslint.config.mjs b/tools/scripts/eslint.config.mjs new file mode 100644 index 0000000..5a1cc0f --- /dev/null +++ b/tools/scripts/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@acme/eslint-config/base"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/tools/scripts/package.json b/tools/scripts/package.json new file mode 100644 index 0000000..85e05d2 --- /dev/null +++ b/tools/scripts/package.json @@ -0,0 +1,35 @@ +{ + "name": "@acme/scripts", + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "bin": { + "acme": "dist/index.js" + }, + "private": true, + "scripts": { + "build": "tsc", + "test": "vitest run", + "test:watch": "vitest watch", + "lint:check": "eslint ./src", + "lint:fix": "eslint --fix ./src", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "check-types": "tsc --noEmit" + }, + "dependencies": { + "eslint": "^9.22.0" + }, + "devDependencies": { + "@acme/eslint-config": "workspace:*", + "@acme/prettier-config": "workspace:*", + "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.8", + "esbuild": "^0.25.1", + "execa": "^9.5.2", + "prettier": "^3.5.3", + "vitest": "^3.0.8" + } +} \ No newline at end of file diff --git a/tools/scripts/prettier.config.mjs b/tools/scripts/prettier.config.mjs new file mode 100644 index 0000000..7ff22c9 --- /dev/null +++ b/tools/scripts/prettier.config.mjs @@ -0,0 +1,5 @@ +import { config } from "@acme/prettier-config/base"; + +export default config; + + diff --git a/tools/scripts/src/index.ts b/tools/scripts/src/index.ts new file mode 100644 index 0000000..f8cd1a1 --- /dev/null +++ b/tools/scripts/src/index.ts @@ -0,0 +1,44 @@ +// export * from './lib/shared'; +import { execa } from 'execa'; +import {fileURLToPath} from 'node:url'; +import path from 'node:path'; + +// const command = 'eslint src --max-warnings 0'; +let commands: string[] = []; + +const filename = fileURLToPath(import.meta.url); // Like __filename in CommonJS +const dirname = path.dirname(fileURLToPath(import.meta.url)); // Like __dirname in CommonJS + +const rootFile = path.resolve(dirname, '..'); +const nodeModules = path.resolve(rootFile, 'node_modules'); +const binDir = path.resolve(nodeModules, '.bin'); + +console.log(`Working on rootFile: ${rootFile} = ${binDir}`); + +const commandMap: Record = { + "lint:check": "eslint src", + "lint:fix": "eslint src --fix", +}; + +const arg = process.argv[2]; +if (arg) { + if (commandMap[arg]) { + commands = (commandMap[arg].split(' ')); + } else { + console.log(`Command ${arg} not found`); + process.exit(1); + } +} else { + console.log(`Please provide a command`); + process.exit(1); +} + +(async () => { + const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', preferLocal: true, localDir: binDir })`${[...commands]}`; + subprocess.stdout.pipe(process.stdout); + subprocess.stderr.pipe(process.stderr); + await subprocess.catch((error) => { + console.error(error); + process.exit(1); + }); +})(); \ No newline at end of file diff --git a/tools/scripts/src/lib/shared.spec.ts b/tools/scripts/src/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/tools/scripts/src/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/tools/scripts/src/lib/shared.ts b/tools/scripts/src/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/tools/scripts/src/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/tools/scripts/tsconfig.json b/tools/scripts/tsconfig.json new file mode 100644 index 0000000..70fe716 --- /dev/null +++ b/tools/scripts/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": ["@acme/typescript-config/base.json"], + "compilerOptions": { + "outDir": "dist", + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "**/node_modules", "../../node_modules"] +} diff --git a/tools/scripts/vitest.config.d.ts b/tools/scripts/vitest.config.d.ts new file mode 100644 index 0000000..701ad39 --- /dev/null +++ b/tools/scripts/vitest.config.d.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; +export default baseConfig; +//# sourceMappingURL=vitest.config.d.ts.map \ No newline at end of file diff --git a/tools/scripts/vitest.config.d.ts.map b/tools/scripts/vitest.config.d.ts.map new file mode 100644 index 0000000..91ad50b --- /dev/null +++ b/tools/scripts/vitest.config.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,eAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/tools/scripts/vitest.config.js b/tools/scripts/vitest.config.js new file mode 100644 index 0000000..b87015c --- /dev/null +++ b/tools/scripts/vitest.config.js @@ -0,0 +1,2 @@ +import { baseConfig } from "@acme/vitest-config/base"; +export default baseConfig; diff --git a/tools/scripts/vitest.config.ts b/tools/scripts/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/tools/scripts/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; From af45894147b82fd6f31ace1b42b92b47b1c3cabb Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 22:59:55 +0700 Subject: [PATCH 21/44] feat: rename tp @acme/mono tool --- apps/cli/package.json | 6 +++--- pnpm-lock.yaml | 8 ++++---- tools/{scripts => mono}/README.md | 0 tools/{scripts => mono}/eslint.config.mjs | 0 tools/{scripts => mono}/package.json | 4 ++-- tools/{scripts => mono}/prettier.config.mjs | 0 tools/{scripts => mono}/src/index.ts | 0 tools/{scripts => mono}/src/lib/shared.spec.ts | 0 tools/{scripts => mono}/src/lib/shared.ts | 0 tools/{scripts => mono}/tsconfig.json | 0 tools/{scripts => mono}/vitest.config.ts | 0 tools/scripts/vitest.config.d.ts | 3 --- tools/scripts/vitest.config.d.ts.map | 1 - tools/scripts/vitest.config.js | 2 -- 14 files changed, 9 insertions(+), 15 deletions(-) rename tools/{scripts => mono}/README.md (100%) rename tools/{scripts => mono}/eslint.config.mjs (100%) rename tools/{scripts => mono}/package.json (93%) rename tools/{scripts => mono}/prettier.config.mjs (100%) rename tools/{scripts => mono}/src/index.ts (100%) rename tools/{scripts => mono}/src/lib/shared.spec.ts (100%) rename tools/{scripts => mono}/src/lib/shared.ts (100%) rename tools/{scripts => mono}/tsconfig.json (100%) rename tools/{scripts => mono}/vitest.config.ts (100%) delete mode 100644 tools/scripts/vitest.config.d.ts delete mode 100644 tools/scripts/vitest.config.d.ts.map delete mode 100644 tools/scripts/vitest.config.js diff --git a/apps/cli/package.json b/apps/cli/package.json index 447cf6b..d1987c8 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -9,8 +9,8 @@ "build": "esbuild ./src/main.ts --bundle --minify --platform=node --outfile=dist/main.js", "test": "vitest run", "test:watch": "vitest watch", - "lint:check": "acme lint:check", - "lint:fix": "acme lint:fix", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", "format:check": "prettier -c src", "format:fix": "prettier --write src", "check-types": "tsc --noEmit" @@ -21,7 +21,7 @@ "devDependencies": { "@acme/eslint-config": "workspace:*", "@acme/prettier-config": "workspace:*", - "@acme/scripts": "workspace:*", + "@acme/mono": "workspace:*", "@acme/typescript-config": "workspace:*", "@types/node": "^22.13.9", "esbuild": "^0.25.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3be7f5..5bfabaa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,12 +34,12 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/prettier-config': specifier: workspace:* version: link:../../configs/prettier-config - '@acme/scripts': - specifier: workspace:* - version: link:../../tools/scripts '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -440,7 +440,7 @@ importers: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) - tools/scripts: + tools/mono: dependencies: eslint: specifier: ^9.22.0 diff --git a/tools/scripts/README.md b/tools/mono/README.md similarity index 100% rename from tools/scripts/README.md rename to tools/mono/README.md diff --git a/tools/scripts/eslint.config.mjs b/tools/mono/eslint.config.mjs similarity index 100% rename from tools/scripts/eslint.config.mjs rename to tools/mono/eslint.config.mjs diff --git a/tools/scripts/package.json b/tools/mono/package.json similarity index 93% rename from tools/scripts/package.json rename to tools/mono/package.json index 85e05d2..18c9d41 100644 --- a/tools/scripts/package.json +++ b/tools/mono/package.json @@ -1,11 +1,11 @@ { - "name": "@acme/scripts", + "name": "@acme/mono", "type": "module", "exports": { ".": "./src/index.ts" }, "bin": { - "acme": "dist/index.js" + "mono": "dist/index.js" }, "private": true, "scripts": { diff --git a/tools/scripts/prettier.config.mjs b/tools/mono/prettier.config.mjs similarity index 100% rename from tools/scripts/prettier.config.mjs rename to tools/mono/prettier.config.mjs diff --git a/tools/scripts/src/index.ts b/tools/mono/src/index.ts similarity index 100% rename from tools/scripts/src/index.ts rename to tools/mono/src/index.ts diff --git a/tools/scripts/src/lib/shared.spec.ts b/tools/mono/src/lib/shared.spec.ts similarity index 100% rename from tools/scripts/src/lib/shared.spec.ts rename to tools/mono/src/lib/shared.spec.ts diff --git a/tools/scripts/src/lib/shared.ts b/tools/mono/src/lib/shared.ts similarity index 100% rename from tools/scripts/src/lib/shared.ts rename to tools/mono/src/lib/shared.ts diff --git a/tools/scripts/tsconfig.json b/tools/mono/tsconfig.json similarity index 100% rename from tools/scripts/tsconfig.json rename to tools/mono/tsconfig.json diff --git a/tools/scripts/vitest.config.ts b/tools/mono/vitest.config.ts similarity index 100% rename from tools/scripts/vitest.config.ts rename to tools/mono/vitest.config.ts diff --git a/tools/scripts/vitest.config.d.ts b/tools/scripts/vitest.config.d.ts deleted file mode 100644 index 701ad39..0000000 --- a/tools/scripts/vitest.config.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { baseConfig } from "@acme/vitest-config/base"; -export default baseConfig; -//# sourceMappingURL=vitest.config.d.ts.map \ No newline at end of file diff --git a/tools/scripts/vitest.config.d.ts.map b/tools/scripts/vitest.config.d.ts.map deleted file mode 100644 index 91ad50b..0000000 --- a/tools/scripts/vitest.config.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,eAAe,UAAU,CAAC"} \ No newline at end of file diff --git a/tools/scripts/vitest.config.js b/tools/scripts/vitest.config.js deleted file mode 100644 index b87015c..0000000 --- a/tools/scripts/vitest.config.js +++ /dev/null @@ -1,2 +0,0 @@ -import { baseConfig } from "@acme/vitest-config/base"; -export default baseConfig; From aa959937332b4bbf63c3b3cfb103ec51f71c3340 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 23:19:46 +0700 Subject: [PATCH 22/44] feat: update package dependencies and add script for linting commands --- pnpm-lock.yaml | 3 +++ tools/mono/package.json | 1 + tools/mono/{src => scripts}/index.ts | 0 tools/mono/src/lib/shared.spec.ts | 8 -------- tools/mono/src/lib/shared.ts | 3 --- tools/mono/tsconfig.json | 2 +- 6 files changed, 5 insertions(+), 12 deletions(-) rename tools/mono/{src => scripts}/index.ts (100%) delete mode 100644 tools/mono/src/lib/shared.spec.ts delete mode 100644 tools/mono/src/lib/shared.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bfabaa..6ecb689 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -458,6 +458,9 @@ importers: '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config + '@types/node': + specifier: ^22 + version: 22.13.11 '@vitest/coverage-istanbul': specifier: ^3.0.8 version: 3.0.9(vitest@3.0.9) diff --git a/tools/mono/package.json b/tools/mono/package.json index 18c9d41..bfd3c8b 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -26,6 +26,7 @@ "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", + "@types/node": "^22", "@vitest/coverage-istanbul": "^3.0.8", "esbuild": "^0.25.1", "execa": "^9.5.2", diff --git a/tools/mono/src/index.ts b/tools/mono/scripts/index.ts similarity index 100% rename from tools/mono/src/index.ts rename to tools/mono/scripts/index.ts diff --git a/tools/mono/src/lib/shared.spec.ts b/tools/mono/src/lib/shared.spec.ts deleted file mode 100644 index 9d58e76..0000000 --- a/tools/mono/src/lib/shared.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect, it, describe } from 'vitest'; -import { shared } from './shared'; - -describe('shared', () => { - it('should work', () => { - expect(shared()).toEqual('shared'); - }); -}); diff --git a/tools/mono/src/lib/shared.ts b/tools/mono/src/lib/shared.ts deleted file mode 100644 index d734544..0000000 --- a/tools/mono/src/lib/shared.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function shared(): string { - return 'shared'; -} diff --git a/tools/mono/tsconfig.json b/tools/mono/tsconfig.json index 70fe716..ca7f3c7 100644 --- a/tools/mono/tsconfig.json +++ b/tools/mono/tsconfig.json @@ -3,6 +3,6 @@ "compilerOptions": { "outDir": "dist", }, - "include": ["src"], + "include": ["scripts"], "exclude": ["node_modules", "dist", "**/node_modules", "../../node_modules"] } From beff4a8ccd18a6a2d53376307abfc28c892f28bf Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 23:32:22 +0700 Subject: [PATCH 23/44] feat: update project configuration and dependencies, remove vitest config --- package.json | 4 +--- pnpm-lock.yaml | 27 +++++++++------------------ tools/mono/package.json | 9 +++------ tools/mono/vitest.config.ts | 3 --- 4 files changed, 13 insertions(+), 30 deletions(-) delete mode 100644 tools/mono/vitest.config.ts diff --git a/package.json b/package.json index 1b08719..f745ecd 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,5 @@ { + "name": "typescript-clean-architecture", "private": true, "scripts": { "build": "turbo run build", @@ -12,14 +13,11 @@ "engines": { "node": ">=22" }, - "name": "typescript-clean-architecture", "packageManager": "pnpm@10.5.2", "dependencies": { "@thaitype/ioctopus": "^2.1.1" }, "devDependencies": { - "prettier": "^3.2.5", - "tsx": "4.19.1", "turbo": "^2.4.4", "typescript": "^5.8.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ecb689..b0a45a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,12 +12,6 @@ importers: specifier: ^2.1.1 version: 2.1.1 devDependencies: - prettier: - specifier: ^3.2.5 - version: 3.5.3 - tsx: - specifier: 4.19.1 - version: 4.19.1 turbo: specifier: ^2.4.4 version: 2.4.4 @@ -442,9 +436,9 @@ importers: tools/mono: dependencies: - eslint: - specifier: ^9.22.0 - version: 9.22.0 + execa: + specifier: ^9.5.2 + version: 9.5.2 devDependencies: '@acme/eslint-config': specifier: workspace:* @@ -455,24 +449,21 @@ importers: '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': - specifier: workspace:* - version: link:../../configs/vitest-config '@types/node': specifier: ^22 version: 22.13.11 - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) esbuild: specifier: ^0.25.1 version: 0.25.1 - execa: - specifier: ^9.5.2 - version: 9.5.2 + eslint: + specifier: ^9.22.0 + version: 9.22.0 prettier: specifier: ^3.5.3 version: 3.5.3 + typescript: + specifier: ^5.8.2 + version: 5.8.2 vitest: specifier: ^3.0.8 version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) diff --git a/tools/mono/package.json b/tools/mono/package.json index bfd3c8b..2b6215b 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -10,8 +10,6 @@ "private": true, "scripts": { "build": "tsc", - "test": "vitest run", - "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", "format:check": "prettier -c src", @@ -19,18 +17,17 @@ "check-types": "tsc --noEmit" }, "dependencies": { - "eslint": "^9.22.0" + "execa": "^9.5.2" }, "devDependencies": { "@acme/eslint-config": "workspace:*", "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "eslint": "^9.22.0", "@types/node": "^22", - "@vitest/coverage-istanbul": "^3.0.8", "esbuild": "^0.25.1", - "execa": "^9.5.2", "prettier": "^3.5.3", + "typescript": "^5.8.2", "vitest": "^3.0.8" } } \ No newline at end of file diff --git a/tools/mono/vitest.config.ts b/tools/mono/vitest.config.ts deleted file mode 100644 index 485f5fb..0000000 --- a/tools/mono/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { baseConfig } from "@acme/vitest-config/base"; - -export default baseConfig; From 725fc5402e1339370ccb46a5f060c1e3fd56a081 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 23:34:09 +0700 Subject: [PATCH 24/44] feat: add shared library implementation with tests and vitest configuration --- apps/cli/lib/shared.spec.ts | 8 ++++++++ apps/cli/lib/shared.ts | 3 +++ apps/cli/package.json | 1 + apps/cli/vitest.config.ts | 3 +++ pnpm-lock.yaml | 3 +++ 5 files changed, 18 insertions(+) create mode 100644 apps/cli/lib/shared.spec.ts create mode 100644 apps/cli/lib/shared.ts create mode 100644 apps/cli/vitest.config.ts diff --git a/apps/cli/lib/shared.spec.ts b/apps/cli/lib/shared.spec.ts new file mode 100644 index 0000000..9d58e76 --- /dev/null +++ b/apps/cli/lib/shared.spec.ts @@ -0,0 +1,8 @@ +import { expect, it, describe } from 'vitest'; +import { shared } from './shared'; + +describe('shared', () => { + it('should work', () => { + expect(shared()).toEqual('shared'); + }); +}); diff --git a/apps/cli/lib/shared.ts b/apps/cli/lib/shared.ts new file mode 100644 index 0000000..d734544 --- /dev/null +++ b/apps/cli/lib/shared.ts @@ -0,0 +1,3 @@ +export function shared(): string { + return 'shared'; +} diff --git a/apps/cli/package.json b/apps/cli/package.json index d1987c8..eb2af6d 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -26,6 +26,7 @@ "@types/node": "^22.13.9", "esbuild": "^0.25.1", "prettier": "^3.5.3", + "@vitest/coverage-istanbul": "^3.0.8", "vitest": "^3.0.8" } } \ No newline at end of file diff --git a/apps/cli/vitest.config.ts b/apps/cli/vitest.config.ts new file mode 100644 index 0000000..485f5fb --- /dev/null +++ b/apps/cli/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from "@acme/vitest-config/base"; + +export default baseConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0a45a7..b278dcf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,6 +40,9 @@ importers: '@types/node': specifier: ^22.13.9 version: 22.13.11 + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) esbuild: specifier: ^0.25.1 version: 0.25.1 From 1baa7f9a5d688584433931d487a240bd4e90529a Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Mon, 24 Mar 2025 23:54:26 +0700 Subject: [PATCH 25/44] feat: update CLI scripts to use mono commands and add initial index file --- apps/cli/package.json | 24 +++++++--------- apps/cli/src/{main.ts => index.ts} | 8 +++--- package.json | 7 ++++- pnpm-lock.yaml | 44 +++++++++++------------------- tools/mono/package.json | 7 +---- tools/mono/scripts/index.ts | 23 ++++++---------- 6 files changed, 46 insertions(+), 67 deletions(-) rename apps/cli/src/{main.ts => index.ts} (65%) diff --git a/apps/cli/package.json b/apps/cli/package.json index eb2af6d..559803e 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -4,29 +4,25 @@ "license": "MIT", "private": true, "scripts": { - "dev": "tsx watch ./src/main.ts", - "start": "tsx ./src/main.ts", - "build": "esbuild ./src/main.ts --bundle --minify --platform=node --outfile=dist/main.js", - "test": "vitest run", - "test:watch": "vitest watch", + "dev": "mono dev", + "start": "mono start", + "build": "mono build", + "test": "mono test", + "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", - "check-types": "tsc --noEmit" + "format:check": "mono format:check", + "format:fix": "mono format:fix", + "check-types": "mono check-types" }, "dependencies": { "@acme/di": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/prettier-config": "workspace:*", - "@acme/mono": "workspace:*", "@acme/typescript-config": "workspace:*", - "@types/node": "^22.13.9", - "esbuild": "^0.25.1", - "prettier": "^3.5.3", - "@vitest/coverage-istanbul": "^3.0.8", - "vitest": "^3.0.8" + "@types/node": "^22.13.9" } } \ No newline at end of file diff --git a/apps/cli/src/main.ts b/apps/cli/src/index.ts similarity index 65% rename from apps/cli/src/main.ts rename to apps/cli/src/index.ts index 23e1b13..8704be4 100644 --- a/apps/cli/src/main.ts +++ b/apps/cli/src/index.ts @@ -5,12 +5,12 @@ import { add } from './add'; console.log('ARGS: ', process.argv); -const userController = getInjection("UserController"); +const userController = getInjection('UserController'); (async () => { await userController.create({ - body: { id: "u1", name: "Alice", email: "alice@example.com" }, + body: { id: 'u1', name: 'Alice', email: 'alice@example.com' }, }); - console.log(`User: ${JSON.stringify(await userController.get({ params: { id: "u1" } }))}`); -})(); \ No newline at end of file + console.log(`User: ${JSON.stringify(await userController.get({ params: { id: 'u1' } }))}`); +})(); diff --git a/package.json b/package.json index f745ecd..0fb25b0 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,11 @@ }, "devDependencies": { "turbo": "^2.4.4", - "typescript": "^5.8.2" + "@vitest/coverage-istanbul": "^3.0.8", + "typescript": "^5.8.2", + "eslint": "^9.22.0", + "esbuild": "^0.25.1", + "prettier": "^3.5.3", + "vitest": "^3.0.8" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b278dcf..04928cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,12 +12,27 @@ importers: specifier: ^2.1.1 version: 2.1.1 devDependencies: + '@vitest/coverage-istanbul': + specifier: ^3.0.8 + version: 3.0.9(vitest@3.0.9) + esbuild: + specifier: ^0.25.1 + version: 0.25.1 + eslint: + specifier: ^9.22.0 + version: 9.22.0 + prettier: + specifier: ^3.5.3 + version: 3.5.3 turbo: specifier: ^2.4.4 version: 2.4.4 typescript: specifier: ^5.8.2 version: 5.8.2 + vitest: + specifier: ^3.0.8 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) apps/cli: dependencies: @@ -40,18 +55,6 @@ importers: '@types/node': specifier: ^22.13.9 version: 22.13.11 - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - esbuild: - specifier: ^0.25.1 - version: 0.25.1 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) apps/nextjs: dependencies: @@ -453,23 +456,8 @@ importers: specifier: workspace:* version: link:../../configs/config-typescript '@types/node': - specifier: ^22 + specifier: ^22.13.9 version: 22.13.11 - esbuild: - specifier: ^0.25.1 - version: 0.25.1 - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - typescript: - specifier: ^5.8.2 - version: 5.8.2 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) tools/template: devDependencies: diff --git a/tools/mono/package.json b/tools/mono/package.json index 2b6215b..191a026 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -23,11 +23,6 @@ "@acme/eslint-config": "workspace:*", "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "eslint": "^9.22.0", - "@types/node": "^22", - "esbuild": "^0.25.1", - "prettier": "^3.5.3", - "typescript": "^5.8.2", - "vitest": "^3.0.8" + "@types/node": "^22.13.9" } } \ No newline at end of file diff --git a/tools/mono/scripts/index.ts b/tools/mono/scripts/index.ts index f8cd1a1..1012196 100644 --- a/tools/mono/scripts/index.ts +++ b/tools/mono/scripts/index.ts @@ -1,23 +1,18 @@ -// export * from './lib/shared'; import { execa } from 'execa'; -import {fileURLToPath} from 'node:url'; -import path from 'node:path'; -// const command = 'eslint src --max-warnings 0'; let commands: string[] = []; -const filename = fileURLToPath(import.meta.url); // Like __filename in CommonJS -const dirname = path.dirname(fileURLToPath(import.meta.url)); // Like __dirname in CommonJS - -const rootFile = path.resolve(dirname, '..'); -const nodeModules = path.resolve(rootFile, 'node_modules'); -const binDir = path.resolve(nodeModules, '.bin'); - -console.log(`Working on rootFile: ${rootFile} = ${binDir}`); - const commandMap: Record = { "lint:check": "eslint src", "lint:fix": "eslint src --fix", + "test": "vitest run", + "test:watch": "vitest watch", + "format:check": "prettier -c src", + "format:fix": "prettier --write src", + "build": "esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js", + "dev": "tsx watch ./src/index.ts", + "start": "tsx ./src/index.ts", + "check-types": "tsc --noEmit", }; const arg = process.argv[2]; @@ -34,7 +29,7 @@ if (arg) { } (async () => { - const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', preferLocal: true, localDir: binDir })`${[...commands]}`; + const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; subprocess.stdout.pipe(process.stdout); subprocess.stderr.pipe(process.stderr); await subprocess.catch((error) => { From 851201878278af88141c031b6129efb431f7c97a Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:19:33 +0700 Subject: [PATCH 26/44] feat: add vitest configuration and update CLI command handling --- apps/cli/package.json | 1 + apps/cli/vitest.config.ts | 2 +- apps/nextjs/package.json | 7 ++----- pnpm-lock.yaml | 18 ++++++------------ tools/mono/scripts/index.ts | 31 +++++++++++++++++++++++++------ 5 files changed, 35 insertions(+), 24 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index 559803e..83c67ec 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -23,6 +23,7 @@ "@acme/eslint-config": "workspace:*", "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", "@types/node": "^22.13.9" } } \ No newline at end of file diff --git a/apps/cli/vitest.config.ts b/apps/cli/vitest.config.ts index 485f5fb..919ad98 100644 --- a/apps/cli/vitest.config.ts +++ b/apps/cli/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index bfeea8c..f59af47 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -20,16 +20,13 @@ "@acme/database-drizzle": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", "@acme/prettier-config": "workspace:*", "@types/node": "^22.13.9", "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@types/react-dom": "19.0.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04928cc..d5d3a36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,6 +52,9 @@ importers: '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config '@types/node': specifier: ^22.13.9 version: 22.13.11 @@ -74,6 +77,9 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/prettier-config': specifier: workspace:* version: link:../../configs/prettier-config @@ -92,18 +98,6 @@ importers: '@types/react-dom': specifier: 19.0.4 version: 19.0.4(@types/react@19.0.10) - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) configs/config-eslint: devDependencies: diff --git a/tools/mono/scripts/index.ts b/tools/mono/scripts/index.ts index 1012196..ae87d34 100644 --- a/tools/mono/scripts/index.ts +++ b/tools/mono/scripts/index.ts @@ -1,14 +1,16 @@ import { execa } from 'execa'; -let commands: string[] = []; +let commands: string[][] = []; -const commandMap: Record = { +const commandMap: Record = { "lint:check": "eslint src", "lint:fix": "eslint src --fix", "test": "vitest run", "test:watch": "vitest watch", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", + // "format:check": "prettier -c src", + // "format:fix": "prettier --write src", + "format:check": ["prettier -c ./**/*.{ts,tsx}", "prettier -c ./*.ts"], + "format:fix": ["prettier --write ./**/*.{ts,tsx}", "prettier --write ./*.ts"], "build": "esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js", "dev": "tsx watch ./src/index.ts", "start": "tsx ./src/index.ts", @@ -18,7 +20,11 @@ const commandMap: Record = { const arg = process.argv[2]; if (arg) { if (commandMap[arg]) { - commands = (commandMap[arg].split(' ')); + if (typeof commandMap[arg] === 'string') { + commands.push(commandMap[arg].split(' ')); + } else { + commands = commandMap[arg].map((command) => command.split(' ')); + } } else { console.log(`Command ${arg} not found`); process.exit(1); @@ -28,7 +34,7 @@ if (arg) { process.exit(1); } -(async () => { +export async function runCommand(commands: string[]) { const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; subprocess.stdout.pipe(process.stdout); subprocess.stderr.pipe(process.stderr); @@ -36,4 +42,17 @@ if (arg) { console.error(error); process.exit(1); }); +} + +(async () => { + for(const command of commands) { + await runCommand(command); + } + // const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; + // subprocess.stdout.pipe(process.stdout); + // subprocess.stderr.pipe(process.stderr); + // await subprocess.catch((error) => { + // console.error(error); + // process.exit(1); + // }); })(); \ No newline at end of file From 63e4708dbd693e0b6f72e43a13c60de444740bd5 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:31:27 +0700 Subject: [PATCH 27/44] chore: move prettier from package level into root workspace --- apps/cli/package.json | 1 - apps/cli/prettier.config.mjs | 5 --- apps/nextjs/package.json | 3 +- apps/nextjs/prettier.config.mjs | 5 --- configs/prettier-config/README.md | 3 -- configs/prettier-config/base.js | 13 ------- configs/prettier-config/package.json | 12 ------- core/application/package.json | 1 - core/application/prettier.config.mjs | 5 --- core/di/package.json | 1 - core/di/prettier.config.mjs | 5 --- core/domain/package.json | 1 - core/domain/prettier.config.mjs | 5 --- core/infrastructure/package.json | 1 - core/infrastructure/prettier.config.mjs | 5 --- core/interface-adapters/package.json | 1 - core/interface-adapters/prettier.config.mjs | 5 --- package.json | 17 +++++++-- packages/shared/package.json | 1 - packages/shared/prettier.config.mjs | 5 --- pnpm-lock.yaml | 39 --------------------- tools/db/package.json | 1 - tools/db/prettier.config.mjs | 5 --- tools/mono/package.json | 1 - tools/mono/prettier.config.mjs | 5 --- tools/template/package.json | 1 - tools/template/prettier.config.mjs | 5 --- 27 files changed, 15 insertions(+), 137 deletions(-) delete mode 100644 apps/cli/prettier.config.mjs delete mode 100644 apps/nextjs/prettier.config.mjs delete mode 100644 configs/prettier-config/README.md delete mode 100644 configs/prettier-config/base.js delete mode 100644 configs/prettier-config/package.json delete mode 100644 core/application/prettier.config.mjs delete mode 100644 core/di/prettier.config.mjs delete mode 100644 core/domain/prettier.config.mjs delete mode 100644 core/infrastructure/prettier.config.mjs delete mode 100644 core/interface-adapters/prettier.config.mjs delete mode 100644 packages/shared/prettier.config.mjs delete mode 100644 tools/db/prettier.config.mjs delete mode 100644 tools/mono/prettier.config.mjs delete mode 100644 tools/template/prettier.config.mjs diff --git a/apps/cli/package.json b/apps/cli/package.json index 83c67ec..b77a9d5 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -21,7 +21,6 @@ "devDependencies": { "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", "@types/node": "^22.13.9" diff --git a/apps/cli/prettier.config.mjs b/apps/cli/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/apps/cli/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index f59af47..7bd54e8 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -9,7 +9,7 @@ "start": "next start", "lint:check": "next lint --max-warnings 0", "lint:fix": "next lint --fix", - "format:check": "prettier -c ./**/*.{ts,tsx} && prettier -c ./*.ts", + "format:check": "mono format:check", "format:fix": "prettier --write ./**/*.{ts,tsx} && prettier --write ./*.ts", "check-types": "tsc --noEmit" }, @@ -24,7 +24,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@types/node": "^22.13.9", "@types/react": "19.0.10", "@types/react-dom": "19.0.4" diff --git a/apps/nextjs/prettier.config.mjs b/apps/nextjs/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/apps/nextjs/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/configs/prettier-config/README.md b/configs/prettier-config/README.md deleted file mode 100644 index 8b42d90..0000000 --- a/configs/prettier-config/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `@turbo/eslint-config` - -Collection of internal eslint configurations. diff --git a/configs/prettier-config/base.js b/configs/prettier-config/base.js deleted file mode 100644 index 9ddbf32..0000000 --- a/configs/prettier-config/base.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @see https://prettier.io/docs/configuration - * @type {import("prettier").Config} - */ -export const config = { - trailingComma: 'es5', - tabWidth: 2, - useTabs: false, - semi: true, - singleQuote: true, - printWidth: 120, - arrowParens: 'avoid', -}; \ No newline at end of file diff --git a/configs/prettier-config/package.json b/configs/prettier-config/package.json deleted file mode 100644 index e91290b..0000000 --- a/configs/prettier-config/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "@acme/prettier-config", - "version": "0.0.0", - "type": "module", - "private": true, - "exports": { - "./base": "./base.js" - }, - "devDependencies": { - "prettier": "^3.5.3" - } -} diff --git a/core/application/package.json b/core/application/package.json index 2a9d8cc..66e1232 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -21,7 +21,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/application/prettier.config.mjs b/core/application/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/core/application/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/core/di/package.json b/core/di/package.json index d67f4e9..1879540 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -22,7 +22,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/di/prettier.config.mjs b/core/di/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/core/di/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/core/domain/package.json b/core/domain/package.json index 62fbcdf..0477af2 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -19,7 +19,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/domain/prettier.config.mjs b/core/domain/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/core/domain/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/core/infrastructure/package.json b/core/infrastructure/package.json index f64fd07..3c75e99 100644 --- a/core/infrastructure/package.json +++ b/core/infrastructure/package.json @@ -22,7 +22,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/infrastructure/prettier.config.mjs b/core/infrastructure/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/core/infrastructure/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index d72a461..d05defc 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -21,7 +21,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/interface-adapters/prettier.config.mjs b/core/interface-adapters/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/core/interface-adapters/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/package.json b/package.json index 0fb25b0..d8c6fd2 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,10 @@ "scripts": { "build": "turbo run build", "dev": "turbo run dev", - "lint": "turbo lint:check format:check check-types", - "lint:fix": "turbo lint:fix format:fix", + "lint": "turbo lint:check check-types && npm run format", + "lint:fix": "turbo lint:fix && npm run format:fix", + "format": "prettier -c ./**/*.{ts,tsx}", + "format:fix": "prettier --write ./**/*.{ts,tsx}", "test": "turbo run test", "test:watch": "turbo run test:watch", "test:coverage-report": "turbo run view-report" @@ -25,5 +27,14 @@ "esbuild": "^0.25.1", "prettier": "^3.5.3", "vitest": "^3.0.8" + }, + "prettier": { + "trailingComma": "es5", + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "printWidth": 120, + "arrowParens": "avoid" } -} +} \ No newline at end of file diff --git a/packages/shared/package.json b/packages/shared/package.json index 45faf2a..2b6f7e1 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -18,7 +18,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/packages/shared/prettier.config.mjs b/packages/shared/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/packages/shared/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5d3a36..1bf6ee8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -46,9 +46,6 @@ importers: '@acme/mono': specifier: workspace:* version: link:../../tools/mono - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -80,9 +77,6 @@ importers: '@acme/mono': specifier: workspace:* version: link:../../tools/mono - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -137,12 +131,6 @@ importers: configs/config-typescript: {} - configs/prettier-config: - devDependencies: - prettier: - specifier: ^3.5.3 - version: 3.5.3 - configs/vitest-config: devDependencies: '@acme/typescript-config': @@ -176,9 +164,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -216,9 +201,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -243,9 +225,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -277,9 +256,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -308,9 +284,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -378,9 +351,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -412,9 +382,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -443,9 +410,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -458,9 +422,6 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/prettier-config': - specifier: workspace:* - version: link:../../configs/prettier-config '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript diff --git a/tools/db/package.json b/tools/db/package.json index f1571d7..06ae0d2 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -22,7 +22,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/tools/db/prettier.config.mjs b/tools/db/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/tools/db/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/tools/mono/package.json b/tools/mono/package.json index 191a026..bbc4474 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -21,7 +21,6 @@ }, "devDependencies": { "@acme/eslint-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@types/node": "^22.13.9" } diff --git a/tools/mono/prettier.config.mjs b/tools/mono/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/tools/mono/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - diff --git a/tools/template/package.json b/tools/template/package.json index a4893f1..ce2d2af 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -18,7 +18,6 @@ "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", - "@acme/prettier-config": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/tools/template/prettier.config.mjs b/tools/template/prettier.config.mjs deleted file mode 100644 index 7ff22c9..0000000 --- a/tools/template/prettier.config.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { config } from "@acme/prettier-config/base"; - -export default config; - - From 482e29f605dff2afe2edb998ce368ef5d560a8c3 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:33:25 +0700 Subject: [PATCH 28/44] fix: standardize import quotes and ensure consistent export formatting across modules --- configs/vitest-config/configs/base-config.ts | 8 ++--- configs/vitest-config/configs/ui-config.ts | 6 ++-- .../scripts/collect-json-outputs.ts | 27 ++++++-------- core/application/src/index.ts | 2 +- .../src/interfaces/IUserRepository.ts | 2 +- core/application/src/interfaces/index.ts | 2 +- core/application/src/use-cases/UserUseCase.ts | 4 +-- core/application/src/use-cases/index.ts | 2 +- core/application/vitest.config.ts | 2 +- core/di/src/ServiceRegistry.ts | 15 ++++---- core/di/src/container.ts | 24 ++++++------- core/di/src/index.ts | 2 +- core/di/vitest.config.ts | 2 +- core/domain/src/entities/User.ts | 2 +- core/domain/src/entities/index.ts | 2 +- core/domain/src/index.ts | 2 +- core/domain/vitest.config.ts | 2 +- core/infrastructure/src/index.ts | 2 +- .../src/repositories/UserRepository.ts | 6 ++-- core/infrastructure/src/repositories/index.ts | 2 +- core/infrastructure/vitest.config.ts | 2 +- .../src/controllers/UserController.ts | 8 ++--- .../src/controllers/index.ts | 2 +- core/interface-adapters/src/index.ts | 2 +- core/interface-adapters/vitest.config.ts | 2 +- packages/database-drizzle/drizzle.config.ts | 12 +++---- packages/database-drizzle/src/database.ts | 9 +++-- packages/database-drizzle/src/index.ts | 8 ++--- packages/database-drizzle/src/migrate.ts | 8 ++--- packages/database-drizzle/src/schema.ts | 36 +++++++++---------- packages/database-drizzle/src/seed.ts | 5 ++- packages/shared/vitest.config.ts | 2 +- tools/mono/scripts/index.ts | 26 +++++++------- tools/template/vitest.config.ts | 2 +- 34 files changed, 114 insertions(+), 126 deletions(-) diff --git a/configs/vitest-config/configs/base-config.ts b/configs/vitest-config/configs/base-config.ts index af0de7a..1945039 100644 --- a/configs/vitest-config/configs/base-config.ts +++ b/configs/vitest-config/configs/base-config.ts @@ -1,13 +1,13 @@ -import { defineConfig } from "vitest/config"; -import path from "node:path"; +import { defineConfig } from 'vitest/config'; +import path from 'node:path'; export const baseConfig = defineConfig({ test: { coverage: { - provider: "istanbul", + provider: 'istanbul', reporter: [ [ - "json", + 'json', { file: `../coverage.json`, }, diff --git a/configs/vitest-config/configs/ui-config.ts b/configs/vitest-config/configs/ui-config.ts index b3afdf8..7e1d7de 100644 --- a/configs/vitest-config/configs/ui-config.ts +++ b/configs/vitest-config/configs/ui-config.ts @@ -1,11 +1,11 @@ -import { defineProject, mergeConfig } from "vitest/config"; -import { baseConfig } from "./base-config.js"; +import { defineProject, mergeConfig } from 'vitest/config'; +import { baseConfig } from './base-config.js'; export const uiConfig = mergeConfig( baseConfig, defineProject({ test: { - environment: "jsdom", + environment: 'jsdom', }, }) ); diff --git a/configs/vitest-config/scripts/collect-json-outputs.ts b/configs/vitest-config/scripts/collect-json-outputs.ts index c77c4a8..d4910dd 100644 --- a/configs/vitest-config/scripts/collect-json-outputs.ts +++ b/configs/vitest-config/scripts/collect-json-outputs.ts @@ -1,14 +1,14 @@ -import fs from "fs/promises"; -import path from "path"; -import { glob } from "glob"; +import fs from 'fs/promises'; +import path from 'path'; +import { glob } from 'glob'; async function collectCoverageFiles() { try { // Define the patterns to search - const patterns = ["../../apps/*", "../../packages/*" , "../../core/*" , "../../shared"]; + const patterns = ['../../apps/*', '../../packages/*', '../../core/*', '../../shared']; // Define the destination directory (you can change this as needed) - const destinationDir = path.join(process.cwd(), "coverage/raw"); + const destinationDir = path.join(process.cwd(), 'coverage/raw'); // Create the destination directory if it doesn't exist await fs.mkdir(destinationDir, { recursive: true }); @@ -28,7 +28,7 @@ async function collectCoverageFiles() { if (stats.isDirectory()) { allDirectories.push(match); - const coverageFilePath = path.join(match, "coverage.json"); + const coverageFilePath = path.join(match, 'coverage.json'); // Check if coverage.json exists in this directory try { @@ -39,10 +39,7 @@ async function collectCoverageFiles() { // Copy it to the destination with a unique name const directoryName = path.basename(match); - const destinationFile = path.join( - destinationDir, - `${directoryName}.json` - ); + const destinationFile = path.join(destinationDir, `${directoryName}.json`); await fs.copyFile(coverageFilePath, destinationFile); } catch (err) { @@ -53,19 +50,15 @@ async function collectCoverageFiles() { } // Create clean patterns for display (without any "../" prefixes) - const replaceDotPatterns = (str: string) => str.replace(/\.\.\//g, ""); + const replaceDotPatterns = (str: string) => str.replace(/\.\.\//g, ''); if (directoriesWithCoverage.length > 0) { - console.log( - `Found coverage.json in: ${directoriesWithCoverage - .map(replaceDotPatterns) - .join(", ")}` - ); + console.log(`Found coverage.json in: ${directoriesWithCoverage.map(replaceDotPatterns).join(', ')}`); } console.log(`Coverage collected into: ${path.join(process.cwd())}`); } catch (error) { - console.error("Error collecting coverage files:", error); + console.error('Error collecting coverage files:', error); } } diff --git a/core/application/src/index.ts b/core/application/src/index.ts index e9d7bdb..04d4877 100644 --- a/core/application/src/index.ts +++ b/core/application/src/index.ts @@ -1,2 +1,2 @@ export * from './interfaces'; -export * from './use-cases'; \ No newline at end of file +export * from './use-cases'; diff --git a/core/application/src/interfaces/IUserRepository.ts b/core/application/src/interfaces/IUserRepository.ts index cf88118..0b38c2c 100644 --- a/core/application/src/interfaces/IUserRepository.ts +++ b/core/application/src/interfaces/IUserRepository.ts @@ -1,4 +1,4 @@ -import { User } from "@acme/domain"; +import { User } from '@acme/domain'; export interface IUserRepository { create(user: User): Promise; diff --git a/core/application/src/interfaces/index.ts b/core/application/src/interfaces/index.ts index def3935..124e149 100644 --- a/core/application/src/interfaces/index.ts +++ b/core/application/src/interfaces/index.ts @@ -1 +1 @@ -export * from './IUserRepository'; \ No newline at end of file +export * from './IUserRepository'; diff --git a/core/application/src/use-cases/UserUseCase.ts b/core/application/src/use-cases/UserUseCase.ts index f7ae804..1e5cf0b 100644 --- a/core/application/src/use-cases/UserUseCase.ts +++ b/core/application/src/use-cases/UserUseCase.ts @@ -1,5 +1,5 @@ -import { User } from "@acme/domain"; -import { IUserRepository } from "../interfaces/IUserRepository"; +import { User } from '@acme/domain'; +import { IUserRepository } from '../interfaces/IUserRepository'; export class UserUseCase { constructor(private userRepo: IUserRepository) {} diff --git a/core/application/src/use-cases/index.ts b/core/application/src/use-cases/index.ts index e6050a6..982b673 100644 --- a/core/application/src/use-cases/index.ts +++ b/core/application/src/use-cases/index.ts @@ -1 +1 @@ -export * from './UserUseCase'; \ No newline at end of file +export * from './UserUseCase'; diff --git a/core/application/vitest.config.ts b/core/application/vitest.config.ts index 485f5fb..919ad98 100644 --- a/core/application/vitest.config.ts +++ b/core/application/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/core/di/src/ServiceRegistry.ts b/core/di/src/ServiceRegistry.ts index 21f0f37..980b6e7 100644 --- a/core/di/src/ServiceRegistry.ts +++ b/core/di/src/ServiceRegistry.ts @@ -1,8 +1,11 @@ -import { createServiceRegistry } from "@thaitype/ioctopus"; -import { IUserRepository, UserUseCase } from "@acme/application"; -import { UserController } from "@acme/interface-adapters"; +import { createServiceRegistry } from '@thaitype/ioctopus'; +import { IUserRepository, UserUseCase } from '@acme/application'; +import { UserController } from '@acme/interface-adapters'; export const registry = createServiceRegistry() - .define("IUserRepository").mapTo() - .define("UserUseCase").mapTo() - .define("UserController").mapTo(); + .define('IUserRepository') + .mapTo() + .define('UserUseCase') + .mapTo() + .define('UserController') + .mapTo(); diff --git a/core/di/src/container.ts b/core/di/src/container.ts index fe4d3ce..2aa9879 100644 --- a/core/di/src/container.ts +++ b/core/di/src/container.ts @@ -1,24 +1,20 @@ -import { createContainer, createModule } from "@thaitype/ioctopus"; -import { registry } from "./ServiceRegistry"; -import { UserRepository } from "@acme/infrastructure"; -import { UserUseCase } from "@acme/application"; -import { UserController } from "@acme/interface-adapters"; +import { createContainer, createModule } from '@thaitype/ioctopus'; +import { registry } from './ServiceRegistry'; +import { UserRepository } from '@acme/infrastructure'; +import { UserUseCase } from '@acme/application'; +import { UserController } from '@acme/interface-adapters'; const appModule = createModule(registry); -appModule.bind("IUserRepository").toClass(UserRepository); +appModule.bind('IUserRepository').toClass(UserRepository); -appModule.bind("UserUseCase").toClass(UserUseCase, [ - "IUserRepository" -]); +appModule.bind('UserUseCase').toClass(UserUseCase, ['IUserRepository']); -appModule.bind("UserController").toClass(UserController, [ - "UserUseCase" -]); +appModule.bind('UserController').toClass(UserController, ['UserUseCase']); export const container = createContainer(registry); -container.load("app", appModule); +container.load('app', appModule); export function getInjection(token: Key) { return container.get(token); -} \ No newline at end of file +} diff --git a/core/di/src/index.ts b/core/di/src/index.ts index 98870b8..85ee15b 100644 --- a/core/di/src/index.ts +++ b/core/di/src/index.ts @@ -1 +1 @@ -export * from './container'; \ No newline at end of file +export * from './container'; diff --git a/core/di/vitest.config.ts b/core/di/vitest.config.ts index 485f5fb..919ad98 100644 --- a/core/di/vitest.config.ts +++ b/core/di/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/core/domain/src/entities/User.ts b/core/domain/src/entities/User.ts index a20125c..6c36fc2 100644 --- a/core/domain/src/entities/User.ts +++ b/core/domain/src/entities/User.ts @@ -4,4 +4,4 @@ export class User { public name: string, public email: string ) {} -} \ No newline at end of file +} diff --git a/core/domain/src/entities/index.ts b/core/domain/src/entities/index.ts index 42d2856..f6b9f36 100644 --- a/core/domain/src/entities/index.ts +++ b/core/domain/src/entities/index.ts @@ -1 +1 @@ -export * from './User'; \ No newline at end of file +export * from './User'; diff --git a/core/domain/src/index.ts b/core/domain/src/index.ts index 034bb90..697510e 100644 --- a/core/domain/src/index.ts +++ b/core/domain/src/index.ts @@ -1 +1 @@ -export * from './entities'; \ No newline at end of file +export * from './entities'; diff --git a/core/domain/vitest.config.ts b/core/domain/vitest.config.ts index 485f5fb..919ad98 100644 --- a/core/domain/vitest.config.ts +++ b/core/domain/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/core/infrastructure/src/index.ts b/core/infrastructure/src/index.ts index d5f5beb..c51b022 100644 --- a/core/infrastructure/src/index.ts +++ b/core/infrastructure/src/index.ts @@ -1 +1 @@ -export * from './repositories'; \ No newline at end of file +export * from './repositories'; diff --git a/core/infrastructure/src/repositories/UserRepository.ts b/core/infrastructure/src/repositories/UserRepository.ts index 602d3b8..a5a16aa 100644 --- a/core/infrastructure/src/repositories/UserRepository.ts +++ b/core/infrastructure/src/repositories/UserRepository.ts @@ -1,5 +1,5 @@ -import { IUserRepository } from "@acme/application/interfaces/IUserRepository"; -import { User } from "@acme/domain"; +import { IUserRepository } from '@acme/application/interfaces/IUserRepository'; +import { User } from '@acme/domain'; export class UserRepository implements IUserRepository { private users: Map = new Map(); @@ -11,4 +11,4 @@ export class UserRepository implements IUserRepository { async findById(id: string): Promise { return this.users.get(id) ?? null; } -} \ No newline at end of file +} diff --git a/core/infrastructure/src/repositories/index.ts b/core/infrastructure/src/repositories/index.ts index cc97ef8..5301133 100644 --- a/core/infrastructure/src/repositories/index.ts +++ b/core/infrastructure/src/repositories/index.ts @@ -1 +1 @@ -export * from './UserRepository'; \ No newline at end of file +export * from './UserRepository'; diff --git a/core/infrastructure/vitest.config.ts b/core/infrastructure/vitest.config.ts index 485f5fb..919ad98 100644 --- a/core/infrastructure/vitest.config.ts +++ b/core/infrastructure/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/core/interface-adapters/src/controllers/UserController.ts b/core/interface-adapters/src/controllers/UserController.ts index 2109f9d..8f9eb5c 100644 --- a/core/interface-adapters/src/controllers/UserController.ts +++ b/core/interface-adapters/src/controllers/UserController.ts @@ -1,15 +1,15 @@ -import { UserUseCase } from "@acme/application"; +import { UserUseCase } from '@acme/application'; export class UserController { constructor(private userUseCase: UserUseCase) {} async create(req: any) { await this.userUseCase.create(req.body); - return { status: "User created" }; + return { status: 'User created' }; } async get(req: any) { const user = await this.userUseCase.getById(req.params.id); - return user ?? { error: "User not found" }; + return user ?? { error: 'User not found' }; } -} \ No newline at end of file +} diff --git a/core/interface-adapters/src/controllers/index.ts b/core/interface-adapters/src/controllers/index.ts index cb3f127..777db7c 100644 --- a/core/interface-adapters/src/controllers/index.ts +++ b/core/interface-adapters/src/controllers/index.ts @@ -1 +1 @@ -export * from './UserController'; \ No newline at end of file +export * from './UserController'; diff --git a/core/interface-adapters/src/index.ts b/core/interface-adapters/src/index.ts index 4719b6a..a608394 100644 --- a/core/interface-adapters/src/index.ts +++ b/core/interface-adapters/src/index.ts @@ -1 +1 @@ -export * from './controllers'; \ No newline at end of file +export * from './controllers'; diff --git a/core/interface-adapters/vitest.config.ts b/core/interface-adapters/vitest.config.ts index 485f5fb..919ad98 100644 --- a/core/interface-adapters/vitest.config.ts +++ b/core/interface-adapters/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/packages/database-drizzle/drizzle.config.ts b/packages/database-drizzle/drizzle.config.ts index cb580a4..d7267be 100644 --- a/packages/database-drizzle/drizzle.config.ts +++ b/packages/database-drizzle/drizzle.config.ts @@ -1,6 +1,6 @@ -import "dotenv/config"; +import 'dotenv/config'; -import type { Config } from "drizzle-kit"; +import type { Config } from 'drizzle-kit'; const getEnvVariable = (name: string) => { const value = process.env[name]; @@ -9,10 +9,10 @@ const getEnvVariable = (name: string) => { }; export default { - schema: "./src/schema.ts", - out: "./drizzle", - dialect: "postgresql", + schema: './src/schema.ts', + out: './drizzle', + dialect: 'postgresql', dbCredentials: { - url: getEnvVariable("DATABASE_URL"), + url: getEnvVariable('DATABASE_URL'), }, } satisfies Config; diff --git a/packages/database-drizzle/src/database.ts b/packages/database-drizzle/src/database.ts index 5837f23..99bd29e 100644 --- a/packages/database-drizzle/src/database.ts +++ b/packages/database-drizzle/src/database.ts @@ -1,9 +1,9 @@ -import "dotenv/config"; +import 'dotenv/config'; -import { drizzle, PostgresJsDatabase } from "drizzle-orm/postgres-js"; -import postgres from "postgres"; +import { drizzle, PostgresJsDatabase } from 'drizzle-orm/postgres-js'; +import postgres from 'postgres'; -import * as schema from "./schema"; +import * as schema from './schema'; export interface DbContext = Record> { client: postgres.Sql; @@ -17,4 +17,3 @@ export function getDbContext(databaseUrl: string): DbContextWithSchema { const db = drizzle(client, { schema }); return { client, db }; } - diff --git a/packages/database-drizzle/src/index.ts b/packages/database-drizzle/src/index.ts index 7a15482..0a1c2cd 100644 --- a/packages/database-drizzle/src/index.ts +++ b/packages/database-drizzle/src/index.ts @@ -1,4 +1,4 @@ -export * from "./schema"; -export * from "./database"; -export * from "./migrate"; -export * from "./seed"; \ No newline at end of file +export * from './schema'; +export * from './database'; +export * from './migrate'; +export * from './seed'; diff --git a/packages/database-drizzle/src/migrate.ts b/packages/database-drizzle/src/migrate.ts index 8c5a553..c7d0abd 100644 --- a/packages/database-drizzle/src/migrate.ts +++ b/packages/database-drizzle/src/migrate.ts @@ -1,5 +1,5 @@ -import { drizzle } from "drizzle-orm/postgres-js"; -import { migrate as migrateSchema } from "drizzle-orm/postgres-js/migrator"; +import { drizzle } from 'drizzle-orm/postgres-js'; +import { migrate as migrateSchema } from 'drizzle-orm/postgres-js/migrator'; import { DbContext } from './database'; export interface MigrationOptions extends DbContext { @@ -10,8 +10,8 @@ export async function migrate(options: MigrationOptions) { const { client, migrationsFolder } = options; await migrateSchema(drizzle(client), { // migrationsFolder: `${__dirname}/drizzle`, - migrationsFolder + migrationsFolder, }); await client.end(); process.exit(0); -}; +} diff --git a/packages/database-drizzle/src/schema.ts b/packages/database-drizzle/src/schema.ts index 48a5a32..7cc1e85 100644 --- a/packages/database-drizzle/src/schema.ts +++ b/packages/database-drizzle/src/schema.ts @@ -1,28 +1,28 @@ -import { relations } from "drizzle-orm"; -import { integer, pgTable, serial, text, varchar } from "drizzle-orm/pg-core"; +import { relations } from 'drizzle-orm'; +import { integer, pgTable, serial, text, varchar } from 'drizzle-orm/pg-core'; -export const users = pgTable("users", { - id: serial("id").primaryKey(), - name: varchar("name").notNull(), +export const users = pgTable('users', { + id: serial('id').primaryKey(), + name: varchar('name').notNull(), }); -export const posts = pgTable("posts", { - id: serial("id").primaryKey(), - title: varchar("title").notNull(), - content: text("content").notNull(), - authorId: integer("author_id") - .references(() => users.id, { onDelete: "cascade" }) +export const posts = pgTable('posts', { + id: serial('id').primaryKey(), + title: varchar('title').notNull(), + content: text('content').notNull(), + authorId: integer('author_id') + .references(() => users.id, { onDelete: 'cascade' }) .notNull(), }); -export const comments = pgTable("comments", { - id: serial("id").primaryKey(), - text: text("text"), - authorId: integer("author_id") - .references(() => users.id, { onDelete: "cascade" }) +export const comments = pgTable('comments', { + id: serial('id').primaryKey(), + text: text('text'), + authorId: integer('author_id') + .references(() => users.id, { onDelete: 'cascade' }) .notNull(), - postId: integer("post_id") - .references(() => posts.id, { onDelete: "cascade" }) + postId: integer('post_id') + .references(() => posts.id, { onDelete: 'cascade' }) .notNull(), }); diff --git a/packages/database-drizzle/src/seed.ts b/packages/database-drizzle/src/seed.ts index 22b9583..e7972a3 100644 --- a/packages/database-drizzle/src/seed.ts +++ b/packages/database-drizzle/src/seed.ts @@ -1,5 +1,5 @@ -import { users } from "./schema"; -import { DbContext } from "./database"; +import { users } from './schema'; +import { DbContext } from './database'; /** * Execute seed the database @@ -11,4 +11,3 @@ export async function seed(dbContext: DbContext) { } await client.end(); } - diff --git a/packages/shared/vitest.config.ts b/packages/shared/vitest.config.ts index 485f5fb..919ad98 100644 --- a/packages/shared/vitest.config.ts +++ b/packages/shared/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; diff --git a/tools/mono/scripts/index.ts b/tools/mono/scripts/index.ts index ae87d34..e40bdac 100644 --- a/tools/mono/scripts/index.ts +++ b/tools/mono/scripts/index.ts @@ -3,18 +3,16 @@ import { execa } from 'execa'; let commands: string[][] = []; const commandMap: Record = { - "lint:check": "eslint src", - "lint:fix": "eslint src --fix", - "test": "vitest run", - "test:watch": "vitest watch", + 'lint:check': 'eslint src', + 'lint:fix': 'eslint src --fix', + test: 'vitest run', + 'test:watch': 'vitest watch', // "format:check": "prettier -c src", // "format:fix": "prettier --write src", - "format:check": ["prettier -c ./**/*.{ts,tsx}", "prettier -c ./*.ts"], - "format:fix": ["prettier --write ./**/*.{ts,tsx}", "prettier --write ./*.ts"], - "build": "esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js", - "dev": "tsx watch ./src/index.ts", - "start": "tsx ./src/index.ts", - "check-types": "tsc --noEmit", + build: 'esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js', + dev: 'tsx watch ./src/index.ts', + start: 'tsx ./src/index.ts', + 'check-types': 'tsc --noEmit', }; const arg = process.argv[2]; @@ -23,7 +21,7 @@ if (arg) { if (typeof commandMap[arg] === 'string') { commands.push(commandMap[arg].split(' ')); } else { - commands = commandMap[arg].map((command) => command.split(' ')); + commands = commandMap[arg].map(command => command.split(' ')); } } else { console.log(`Command ${arg} not found`); @@ -38,14 +36,14 @@ export async function runCommand(commands: string[]) { const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; subprocess.stdout.pipe(process.stdout); subprocess.stderr.pipe(process.stderr); - await subprocess.catch((error) => { + await subprocess.catch(error => { console.error(error); process.exit(1); }); } (async () => { - for(const command of commands) { + for (const command of commands) { await runCommand(command); } // const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; @@ -55,4 +53,4 @@ export async function runCommand(commands: string[]) { // console.error(error); // process.exit(1); // }); -})(); \ No newline at end of file +})(); diff --git a/tools/template/vitest.config.ts b/tools/template/vitest.config.ts index 485f5fb..919ad98 100644 --- a/tools/template/vitest.config.ts +++ b/tools/template/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from "@acme/vitest-config/base"; +import { baseConfig } from '@acme/vitest-config/base'; export default baseConfig; From d2f1d6490febd0c8333be35dc48f4daf176cd944 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:35:45 +0700 Subject: [PATCH 29/44] refactor: rename lint script and update formatting commands for consistency --- .github/workflows/test-and-build.yml | 2 +- package.json | 4 ++-- tools/mono/scripts/index.ts | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index bb2cf47..4849d9e 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -35,7 +35,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Lint - run: pnpm lint + run: pnpm lint:check # - name: Run tests # run: pnpm test diff --git a/package.json b/package.json index d8c6fd2..2c8939e 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "scripts": { "build": "turbo run build", "dev": "turbo run dev", - "lint": "turbo lint:check check-types && npm run format", + "lint:check": "turbo lint:check check-types && npm run format", "lint:fix": "turbo lint:fix && npm run format:fix", - "format": "prettier -c ./**/*.{ts,tsx}", + "format:check": "prettier -c ./**/*.{ts,tsx}", "format:fix": "prettier --write ./**/*.{ts,tsx}", "test": "turbo run test", "test:watch": "turbo run test:watch", diff --git a/tools/mono/scripts/index.ts b/tools/mono/scripts/index.ts index e40bdac..63aa8cf 100644 --- a/tools/mono/scripts/index.ts +++ b/tools/mono/scripts/index.ts @@ -2,16 +2,15 @@ import { execa } from 'execa'; let commands: string[][] = []; +// prettier-ignore const commandMap: Record = { 'lint:check': 'eslint src', 'lint:fix': 'eslint src --fix', - test: 'vitest run', + 'test': 'vitest run', 'test:watch': 'vitest watch', - // "format:check": "prettier -c src", - // "format:fix": "prettier --write src", - build: 'esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js', - dev: 'tsx watch ./src/index.ts', - start: 'tsx ./src/index.ts', + 'build': 'esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js', + 'dev': 'tsx watch ./src/index.ts', + 'start': 'tsx ./src/index.ts', 'check-types': 'tsc --noEmit', }; From acd5f9d2d81429126dc99aed7d089282d198aad7 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:38:05 +0700 Subject: [PATCH 30/44] chore: remove format check and fix scripts from package.json files --- apps/cli/package.json | 2 -- apps/nextjs/package.json | 2 -- core/application/package.json | 2 -- core/di/package.json | 2 -- core/domain/package.json | 2 -- core/infrastructure/package.json | 2 -- core/interface-adapters/package.json | 2 -- package.json | 2 -- packages/shared/package.json | 2 -- tools/db/package.json | 2 -- tools/mono/package.json | 2 -- tools/template/package.json | 2 -- 12 files changed, 24 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index b77a9d5..002c0cd 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -11,8 +11,6 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "format:check": "mono format:check", - "format:fix": "mono format:fix", "check-types": "mono check-types" }, "dependencies": { diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 7bd54e8..369d16b 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -9,8 +9,6 @@ "start": "next start", "lint:check": "next lint --max-warnings 0", "lint:fix": "next lint --fix", - "format:check": "mono format:check", - "format:fix": "prettier --write ./**/*.{ts,tsx} && prettier --write ./*.ts", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/core/application/package.json b/core/application/package.json index 66e1232..134f7f0 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -10,8 +10,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/core/di/package.json b/core/di/package.json index 1879540..398164e 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -8,8 +8,6 @@ "scripts": { "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/core/domain/package.json b/core/domain/package.json index 0477af2..fef6207 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -11,8 +11,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "devDependencies": { diff --git a/core/infrastructure/package.json b/core/infrastructure/package.json index 3c75e99..90baf4b 100644 --- a/core/infrastructure/package.json +++ b/core/infrastructure/package.json @@ -10,8 +10,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index d05defc..e5c53da 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -10,8 +10,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/package.json b/package.json index 2c8939e..9399bd8 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,6 @@ "dev": "turbo run dev", "lint:check": "turbo lint:check check-types && npm run format", "lint:fix": "turbo lint:fix && npm run format:fix", - "format:check": "prettier -c ./**/*.{ts,tsx}", - "format:fix": "prettier --write ./**/*.{ts,tsx}", "test": "turbo run test", "test:watch": "turbo run test:watch", "test:coverage-report": "turbo run view-report" diff --git a/packages/shared/package.json b/packages/shared/package.json index 2b6f7e1..58bc634 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -10,8 +10,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "devDependencies": { diff --git a/tools/db/package.json b/tools/db/package.json index 06ae0d2..6fa9cfe 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -10,8 +10,6 @@ "db:migrate": "tsx scripts/migrate.ts", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/tools/mono/package.json b/tools/mono/package.json index bbc4474..a426869 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -12,8 +12,6 @@ "build": "tsc", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "dependencies": { diff --git a/tools/template/package.json b/tools/template/package.json index ce2d2af..8e47ee2 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -10,8 +10,6 @@ "test:watch": "vitest watch", "lint:check": "eslint ./src", "lint:fix": "eslint --fix ./src", - "format:check": "prettier -c src", - "format:fix": "prettier --write src", "check-types": "tsc --noEmit" }, "devDependencies": { From e1fc200ef9ae8506ae1af484bbbe93d3e214467d Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:39:29 +0700 Subject: [PATCH 31/44] fix: update check-types script to use mono for type checking --- apps/nextjs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 369d16b..e0ba88f 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -9,7 +9,7 @@ "start": "next start", "lint:check": "next lint --max-warnings 0", "lint:fix": "next lint --fix", - "check-types": "tsc --noEmit" + "check-types": "mono check-types" }, "dependencies": { "next": "^15.2.1", From 2ef42a00f52cbc3ad71a5256a4d2648eb5f16953 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 00:50:42 +0700 Subject: [PATCH 32/44] refactor: simplify command execution and add utility functions for argument processing --- tools/mono/scripts/index.ts | 46 +++++-------------------------------- tools/mono/scripts/libs.ts | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 40 deletions(-) create mode 100644 tools/mono/scripts/libs.ts diff --git a/tools/mono/scripts/index.ts b/tools/mono/scripts/index.ts index 63aa8cf..e5da508 100644 --- a/tools/mono/scripts/index.ts +++ b/tools/mono/scripts/index.ts @@ -1,9 +1,7 @@ -import { execa } from 'execa'; - -let commands: string[][] = []; +import { type MonoScripts, processArgs, runCommand } from './libs.js'; // prettier-ignore -const commandMap: Record = { +const scripts: MonoScripts = { 'lint:check': 'eslint src', 'lint:fix': 'eslint src --fix', 'test': 'vitest run', @@ -14,42 +12,10 @@ const commandMap: Record = { 'check-types': 'tsc --noEmit', }; -const arg = process.argv[2]; -if (arg) { - if (commandMap[arg]) { - if (typeof commandMap[arg] === 'string') { - commands.push(commandMap[arg].split(' ')); - } else { - commands = commandMap[arg].map(command => command.split(' ')); - } - } else { - console.log(`Command ${arg} not found`); - process.exit(1); - } -} else { - console.log(`Please provide a command`); - process.exit(1); -} - -export async function runCommand(commands: string[]) { - const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; - subprocess.stdout.pipe(process.stdout); - subprocess.stderr.pipe(process.stderr); - await subprocess.catch(error => { - console.error(error); - process.exit(1); - }); -} - (async () => { - for (const command of commands) { - await runCommand(command); + for (const command of processArgs(process.argv[2], scripts)) { + await runCommand(command, { + preferLocal: true, + }); } - // const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe' })`${[...commands]}`; - // subprocess.stdout.pipe(process.stdout); - // subprocess.stderr.pipe(process.stderr); - // await subprocess.catch((error) => { - // console.error(error); - // process.exit(1); - // }); })(); diff --git a/tools/mono/scripts/libs.ts b/tools/mono/scripts/libs.ts new file mode 100644 index 0000000..e72a271 --- /dev/null +++ b/tools/mono/scripts/libs.ts @@ -0,0 +1,46 @@ +import { execa } from "execa"; +import {fileURLToPath} from 'node:url'; +import path from 'node:path'; + +export type MonoScripts = Record; + +const filename = fileURLToPath(import.meta.url); // ESM style like __filename in CommonJS +const dirname = path.dirname(filename); // ESM style like __dirname in CommonJS + +const rootFile = path.resolve(dirname, '..'); +const nodeModules = path.resolve(rootFile, 'node_modules'); +const binDir = path.resolve(nodeModules, '.bin'); + +export async function runCommand(commands: string[], options?: { + /** + * Whether to prefer local binaries over global ones + * @default true + */ + preferLocal?: boolean; +}) { + const preferLocal = options?.preferLocal ?? true; + const execaOptions = preferLocal ? { preferLocal: true, localDir: binDir } : {}; + const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', ...execaOptions })`${[...commands]}`; + subprocess.stdout.pipe(process.stdout); + subprocess.stderr.pipe(process.stderr); + await subprocess.catch(error => { + console.error(error); + process.exit(1); + }); +} + +export function processArgs(arg: string, commandMap: Record) { + if (!arg) { + console.log(`Please provide a command`); + process.exit(1); + } + + if (!commandMap[arg]) { + console.log(`Command ${arg} not found`); + process.exit(1); + } + + return typeof commandMap[arg] === "string" + ? [commandMap[arg].split(" ")] + : commandMap[arg].map((command) => command.split(" ")); +} \ No newline at end of file From e25a66f9c7ba39ffa5cc6173fda883c84d51b79a Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 09:41:25 +0700 Subject: [PATCH 33/44] feat: add mono CLI and update package configurations for improved script management --- configs/vitest-config/configs/base-config.ts | 1 + core/application/package.json | 17 +- core/di/package.json | 16 +- core/domain/package.json | 20 +- core/infrastructure/package.json | 17 +- core/interface-adapters/package.json | 13 +- package.json | 2 + packages/database-drizzle/package.json | 15 +- packages/database-drizzle/vitest.config.ts | 3 + packages/shared/package.json | 17 +- pnpm-lock.yaml | 341 ++----------------- tools/db/package.json | 7 +- tools/mono/package.json | 4 +- tools/mono/{scripts/index.ts => src/cli.ts} | 0 tools/mono/src/index.ts | 1 + tools/mono/{scripts => src}/libs.ts | 33 +- tools/mono/tsconfig.json | 2 +- tools/template/package.json | 14 +- turbo.json | 9 +- 19 files changed, 131 insertions(+), 401 deletions(-) create mode 100644 packages/database-drizzle/vitest.config.ts rename tools/mono/{scripts/index.ts => src/cli.ts} (100%) create mode 100644 tools/mono/src/index.ts rename tools/mono/{scripts => src}/libs.ts (65%) diff --git a/configs/vitest-config/configs/base-config.ts b/configs/vitest-config/configs/base-config.ts index 1945039..f906a9d 100644 --- a/configs/vitest-config/configs/base-config.ts +++ b/configs/vitest-config/configs/base-config.ts @@ -3,6 +3,7 @@ import path from 'node:path'; export const baseConfig = defineConfig({ test: { + passWithNoTests: true, coverage: { provider: 'istanbul', reporter: [ diff --git a/core/application/package.json b/core/application/package.json index 134f7f0..d3a4004 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -6,22 +6,19 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "dependencies": { "@acme/domain": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file diff --git a/core/di/package.json b/core/di/package.json index 398164e..2d53809 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -6,23 +6,23 @@ }, "private": true, "scripts": { - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "dependencies": { + "@acme/mono": "workspace:*", "@acme/domain": "workspace:*", "@acme/application": "workspace:*", "@acme/infrastructure": "workspace:*", "@acme/interface-adapters": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file diff --git a/core/domain/package.json b/core/domain/package.json index fef6207..e0a241e 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -2,24 +2,20 @@ "name": "@acme/domain", "type": "module", "exports": { - ".": "./src/index.ts", - "./entities": "./src/entities/*.ts" + ".": "./src/index.ts" }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file diff --git a/core/infrastructure/package.json b/core/infrastructure/package.json index 90baf4b..a759972 100644 --- a/core/infrastructure/package.json +++ b/core/infrastructure/package.json @@ -6,23 +6,20 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "dependencies": { "@acme/application": "workspace:*", "@acme/domain": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index e5c53da..ee7d601 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -6,16 +6,17 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "dependencies": { "@acme/application": "workspace:*" }, - "devDependencies": { + "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", diff --git a/package.json b/package.json index 9399bd8..6ec181d 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,8 @@ "dev": "turbo run dev", "lint:check": "turbo lint:check check-types && npm run format", "lint:fix": "turbo lint:fix && npm run format:fix", + "format": "prettier --check ./**/*.{ts,tsx}", + "format:fix": "prettier --write ./**/*.{ts,tsx}", "test": "turbo run test", "test:watch": "turbo run test:watch", "test:coverage-report": "turbo run view-report" diff --git a/packages/database-drizzle/package.json b/packages/database-drizzle/package.json index 41aeb82..3c8aec8 100644 --- a/packages/database-drizzle/package.json +++ b/packages/database-drizzle/package.json @@ -5,7 +5,11 @@ ".": "./src/index.ts" }, "scripts": { - "lint": "eslint . --max-warnings 0", + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types", "db:studio": "drizzle-kit studio", "generate": "drizzle-kit generate" }, @@ -16,14 +20,11 @@ "postgres": "^3.4.5" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", + "@acme/vitest-config": "workspace:*", "@types/node": "^20.11.24", - "drizzle-kit": "^0.30.5", - "eslint": "^9.21.0", - "rimraf": "^5.0.5", - "tsup": "^8.0.2", - "tsx": "4.19.1", - "typescript": "5.8.2" + "drizzle-kit": "^0.30.5" } } diff --git a/packages/database-drizzle/vitest.config.ts b/packages/database-drizzle/vitest.config.ts new file mode 100644 index 0000000..919ad98 --- /dev/null +++ b/packages/database-drizzle/vitest.config.ts @@ -0,0 +1,3 @@ +import { baseConfig } from '@acme/vitest-config/base'; + +export default baseConfig; diff --git a/packages/shared/package.json b/packages/shared/package.json index 58bc634..ce3ed01 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -6,19 +6,16 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1bf6ee8..42ce2c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,24 +164,15 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) core/di: dependencies: @@ -197,6 +188,9 @@ importers: '@acme/interface-adapters': specifier: workspace:* version: link:../interface-adapters + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono devDependencies: '@acme/eslint-config': specifier: workspace:* @@ -207,42 +201,21 @@ importers: '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) core/domain: devDependencies: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) core/infrastructure: dependencies: @@ -256,24 +229,15 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) core/interface-adapters: dependencies: @@ -284,6 +248,9 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -321,54 +288,36 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript + '@acme/vitest-config': + specifier: workspace:* + version: link:../../configs/vitest-config '@types/node': specifier: ^20.11.24 version: 20.17.24 drizzle-kit: specifier: ^0.30.5 version: 0.30.5 - eslint: - specifier: ^9.21.0 - version: 9.22.0 - rimraf: - specifier: ^5.0.5 - version: 5.0.10 - tsup: - specifier: ^8.0.2 - version: 8.4.0(postcss@8.5.3)(tsx@4.19.1)(typescript@5.8.2) - tsx: - specifier: 4.19.1 - version: 4.19.1 - typescript: - specifier: 5.8.2 - version: 5.8.2 packages/shared: devDependencies: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) tools/db: dependencies: @@ -382,6 +331,9 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -422,6 +374,9 @@ importers: '@acme/eslint-config': specifier: workspace:* version: link:../../configs/config-eslint + '@acme/mono': + specifier: workspace:* + version: link:../mono '@acme/typescript-config': specifier: workspace:* version: link:../../configs/config-typescript @@ -1732,9 +1687,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - append-transform@2.0.0: resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} engines: {node: '>=8'} @@ -1812,12 +1764,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -1865,10 +1811,6 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1897,20 +1839,12 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - consola@3.4.0: - resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} - engines: {node: ^14.18.0 || >=16.10.0} - convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -2734,10 +2668,6 @@ packages: resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} engines: {node: 20 || >=22} - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} @@ -2795,17 +2725,6 @@ packages: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} os: [darwin, linux, win32] - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -2820,9 +2739,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2896,9 +2812,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.9: resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3081,10 +2994,6 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -3093,24 +3002,6 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -3175,10 +3066,6 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -3222,10 +3109,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - rollup@4.35.0: resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3343,10 +3226,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - spawn-wrap@2.0.0: resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} engines: {node: '>=8'} @@ -3424,11 +3303,6 @@ packages: babel-plugin-macros: optional: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3448,13 +3322,6 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3496,48 +3363,19 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - tr46@5.1.0: resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} engines: {node: '>=18'} - 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-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.4.0: - resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - tsx@4.19.1: resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} @@ -3724,9 +3562,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -3743,9 +3578,6 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -4859,8 +4691,6 @@ snapshots: ansi-styles@6.2.1: {} - any-promise@1.3.0: {} - append-transform@2.0.0: dependencies: default-require-extensions: 3.0.1 @@ -4962,11 +4792,6 @@ snapshots: buffer-from@1.1.2: {} - bundle-require@5.1.0(esbuild@0.25.1): - dependencies: - esbuild: 0.25.1 - load-tsconfig: 0.2.5 - busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -5018,10 +4843,6 @@ snapshots: check-error@2.1.1: {} - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - clean-stack@2.2.0: {} client-only@0.0.1: {} @@ -5054,14 +4875,10 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@4.1.1: {} - commondir@1.0.1: {} concat-map@0.0.1: {} - consola@3.4.0: {} - convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} @@ -5377,6 +5194,7 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + optional: true esbuild@0.25.1: optionalDependencies: @@ -6035,8 +5853,6 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 - joycon@3.1.1: {} - js-base64@3.7.7: {} js-tokens@4.0.0: {} @@ -6117,12 +5933,6 @@ snapshots: '@libsql/linux-x64-musl': 0.4.7 '@libsql/win32-x64-msvc': 0.4.7 - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - load-tsconfig@0.2.5: {} - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -6135,8 +5945,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -6202,12 +6010,6 @@ snapshots: ms@2.1.3: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - nanoid@3.3.9: {} natural-compare@1.4.0: {} @@ -6415,21 +6217,12 @@ snapshots: picomatch@4.0.2: {} - pirates@4.0.6: {} - pkg-dir@4.2.0: dependencies: find-up: 4.1.0 possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(postcss@8.5.3)(tsx@4.19.1): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - postcss: 8.5.3 - tsx: 4.19.1 - postcss@8.4.31: dependencies: nanoid: 3.3.9 @@ -6489,8 +6282,6 @@ snapshots: react@19.0.0: {} - readdirp@4.1.2: {} - reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -6537,10 +6328,6 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.10: - dependencies: - glob: 10.4.5 - rollup@4.35.0: dependencies: '@types/estree': 1.0.6 @@ -6716,10 +6503,6 @@ snapshots: source-map@0.6.1: {} - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - spawn-wrap@2.0.0: dependencies: foreground-child: 2.0.0 @@ -6814,16 +6597,6 @@ snapshots: optionalDependencies: '@babel/core': 7.26.10 - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -6844,14 +6617,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -6883,57 +6648,23 @@ snapshots: dependencies: tldts: 6.1.85 - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - tr46@5.1.0: dependencies: punycode: 2.3.1 - tree-kill@1.2.2: {} - ts-api-utils@2.0.1(typescript@5.8.2): dependencies: typescript: 5.8.2 - ts-interface-checker@0.1.13: {} - tslib@2.8.1: {} - tsup@8.4.0(postcss@8.5.3)(tsx@4.19.1)(typescript@5.8.2): - dependencies: - bundle-require: 5.1.0(esbuild@0.25.1) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.0 - debug: 4.4.0 - esbuild: 0.25.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.3)(tsx@4.19.1) - resolve-from: 5.0.0 - rollup: 4.35.0 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.12 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.3 - typescript: 5.8.2 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.19.1: dependencies: esbuild: 0.23.1 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 + optional: true turbo-darwin-64@2.4.4: optional: true @@ -7119,8 +6850,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - webidl-conversions@4.0.2: {} - webidl-conversions@7.0.0: {} whatwg-encoding@3.1.1: @@ -7134,12 +6863,6 @@ snapshots: tr46: 5.1.0 webidl-conversions: 7.0.0 - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 diff --git a/tools/db/package.json b/tools/db/package.json index 6fa9cfe..50d14c4 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -8,15 +8,16 @@ "scripts": { "db:seed": "tsx scripts/seed.ts", "db:migrate": "tsx scripts/migrate.ts", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "dependencies": { "dotenv": "^16.4.7", "@acme/database-drizzle": "workspace:*" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", diff --git a/tools/mono/package.json b/tools/mono/package.json index a426869..3949f99 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -2,10 +2,10 @@ "name": "@acme/mono", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/cli.ts" }, "bin": { - "mono": "dist/index.js" + "mono": "dist/cli.js" }, "private": true, "scripts": { diff --git a/tools/mono/scripts/index.ts b/tools/mono/src/cli.ts similarity index 100% rename from tools/mono/scripts/index.ts rename to tools/mono/src/cli.ts diff --git a/tools/mono/src/index.ts b/tools/mono/src/index.ts new file mode 100644 index 0000000..dc097c9 --- /dev/null +++ b/tools/mono/src/index.ts @@ -0,0 +1 @@ +export * from './libs.js'; diff --git a/tools/mono/scripts/libs.ts b/tools/mono/src/libs.ts similarity index 65% rename from tools/mono/scripts/libs.ts rename to tools/mono/src/libs.ts index e72a271..6584885 100644 --- a/tools/mono/scripts/libs.ts +++ b/tools/mono/src/libs.ts @@ -1,8 +1,8 @@ -import { execa } from "execa"; -import {fileURLToPath} from 'node:url'; +import { execa } from 'execa'; +import { fileURLToPath } from 'node:url'; import path from 'node:path'; -export type MonoScripts = Record; +export type MonoScripts = Record; const filename = fileURLToPath(import.meta.url); // ESM style like __filename in CommonJS const dirname = path.dirname(filename); // ESM style like __dirname in CommonJS @@ -11,16 +11,19 @@ const rootFile = path.resolve(dirname, '..'); const nodeModules = path.resolve(rootFile, 'node_modules'); const binDir = path.resolve(nodeModules, '.bin'); -export async function runCommand(commands: string[], options?: { - /** - * Whether to prefer local binaries over global ones - * @default true - */ - preferLocal?: boolean; -}) { +export async function runCommand( + commands: string[], + options?: { + /** + * Whether to prefer local binaries over global ones + * @default true + */ + preferLocal?: boolean; + } +) { const preferLocal = options?.preferLocal ?? true; const execaOptions = preferLocal ? { preferLocal: true, localDir: binDir } : {}; - const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', ...execaOptions })`${[...commands]}`; + const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', ...execaOptions })`${[...commands]}`; subprocess.stdout.pipe(process.stdout); subprocess.stderr.pipe(process.stderr); await subprocess.catch(error => { @@ -40,7 +43,7 @@ export function processArgs(arg: string, commandMap: Record command.split(" ")); -} \ No newline at end of file + return typeof commandMap[arg] === 'string' + ? [commandMap[arg].split(' ')] + : commandMap[arg].map(command => command.split(' ')); +} diff --git a/tools/mono/tsconfig.json b/tools/mono/tsconfig.json index ca7f3c7..70fe716 100644 --- a/tools/mono/tsconfig.json +++ b/tools/mono/tsconfig.json @@ -3,6 +3,6 @@ "compilerOptions": { "outDir": "dist", }, - "include": ["scripts"], + "include": ["src"], "exclude": ["node_modules", "dist", "**/node_modules", "../../node_modules"] } diff --git a/tools/template/package.json b/tools/template/package.json index 8e47ee2..139f47e 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -6,13 +6,17 @@ }, "private": true, "scripts": { - "test": "vitest run", - "test:watch": "vitest watch", - "lint:check": "eslint ./src", - "lint:fix": "eslint --fix ./src", - "check-types": "tsc --noEmit" + "dev": "mono dev", + "start": "mono start", + "build": "mono build", + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" }, "devDependencies": { + "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", "@acme/vitest-config": "workspace:*", diff --git a/turbo.json b/turbo.json index 7e89f91..02505b3 100644 --- a/turbo.json +++ b/turbo.json @@ -28,14 +28,14 @@ "cache": false }, "test": { - "dependsOn": ["@acme/vitest-config#build", "^test"] + "dependsOn": ["build-tools", "^test"] }, "test:watch": { "cache": false, "persistent": true }, "lint:check": { - "dependsOn": ["@acme/vitest-config#build", "^lint:check"] + "dependsOn": ["build-tools", "^lint:check"] }, "lint:fix": {}, "format:check": { @@ -43,7 +43,10 @@ }, "format:fix": {}, "check-types": { - "dependsOn": ["@acme/vitest-config#build", "^check-types"] + "dependsOn": ["build-tools", "^check-types"] + }, + "build-tools": { + "dependsOn": ["@acme/vitest-config#build" , "@acme/mono#build"] }, "dev": { "cache": false, From 6882ddeea715dc83536769a906538719900c72cb Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 09:50:05 +0700 Subject: [PATCH 34/44] format: code --- core/di/src/ServiceRegistry.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/core/di/src/ServiceRegistry.ts b/core/di/src/ServiceRegistry.ts index 980b6e7..3c56895 100644 --- a/core/di/src/ServiceRegistry.ts +++ b/core/di/src/ServiceRegistry.ts @@ -2,10 +2,8 @@ import { createServiceRegistry } from '@thaitype/ioctopus'; import { IUserRepository, UserUseCase } from '@acme/application'; import { UserController } from '@acme/interface-adapters'; +// prettier-ignore export const registry = createServiceRegistry() - .define('IUserRepository') - .mapTo() - .define('UserUseCase') - .mapTo() - .define('UserController') - .mapTo(); + .define('IUserRepository').mapTo() + .define('UserUseCase').mapTo() + .define('UserController').mapTo(); From e86519d25f9bd9ec20d3f00cd852524948f24af9 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 10:18:11 +0700 Subject: [PATCH 35/44] chore: clean up package dependencies in pnpm-lock.yaml and package.json --- pnpm-lock.yaml | 12 ------------ tools/template/package.json | 6 +----- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42ce2c7..2675505 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -383,18 +383,6 @@ importers: '@acme/vitest-config': specifier: workspace:* version: link:../../configs/vitest-config - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) packages: diff --git a/tools/template/package.json b/tools/template/package.json index 139f47e..50860d5 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -19,10 +19,6 @@ "@acme/mono": "workspace:*", "@acme/eslint-config": "workspace:*", "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/vitest-config": "workspace:*" } } \ No newline at end of file From 1777d3181d0af493d3be6722051f838fce762859 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 10:49:55 +0700 Subject: [PATCH 36/44] chore: remove unused dependency on @acme/mono from package.json --- core/di/package.json | 1 - tools/mono/src/libs.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/core/di/package.json b/core/di/package.json index 2d53809..9c3bc28 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -13,7 +13,6 @@ "check-types": "mono check-types" }, "dependencies": { - "@acme/mono": "workspace:*", "@acme/domain": "workspace:*", "@acme/application": "workspace:*", "@acme/infrastructure": "workspace:*", diff --git a/tools/mono/src/libs.ts b/tools/mono/src/libs.ts index 6584885..a4c03cf 100644 --- a/tools/mono/src/libs.ts +++ b/tools/mono/src/libs.ts @@ -4,6 +4,7 @@ import path from 'node:path'; export type MonoScripts = Record; +// Read "Pure ESM package": https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c const filename = fileURLToPath(import.meta.url); // ESM style like __filename in CommonJS const dirname = path.dirname(filename); // ESM style like __dirname in CommonJS From 580ade086d4afa06a76f5c14c7901741c9bb539f Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 11:19:30 +0700 Subject: [PATCH 37/44] refactor: rename configs package pattern to start with config --- apps/cli/eslint.config.mjs | 2 +- apps/cli/package.json | 6 +- apps/cli/tsconfig.json | 2 +- apps/cli/vitest.config.ts | 2 +- apps/nextjs/eslint.config.js | 2 +- apps/nextjs/package.json | 6 +- apps/nextjs/tsconfig.json | 2 +- apps/nextjs/vitest.config.ts | 2 +- configs/config-eslint/base.js | 14 +- configs/config-eslint/next.js | 26 +-- configs/config-eslint/package.json | 2 +- configs/config-eslint/react-internal.js | 20 +- configs/config-typescript/package.json | 2 +- .../configs/base-config.ts | 0 .../configs/ui-config.ts | 0 .../package.json | 10 +- .../scripts/collect-json-outputs.ts | 0 .../tsconfig.json | 2 +- .../turbo.json | 2 +- core/application/eslint.config.mjs | 2 +- core/application/package.json | 6 +- core/application/tsconfig.json | 2 +- core/application/vitest.config.ts | 2 +- core/di/eslint.config.mjs | 2 +- core/di/package.json | 6 +- core/di/tsconfig.json | 2 +- core/di/vitest.config.ts | 2 +- core/domain/eslint.config.mjs | 2 +- core/domain/package.json | 6 +- core/domain/tsconfig.json | 2 +- core/domain/vitest.config.ts | 2 +- core/infrastructure/eslint.config.mjs | 2 +- core/infrastructure/package.json | 6 +- core/infrastructure/tsconfig.json | 2 +- core/infrastructure/vitest.config.ts | 2 +- core/interface-adapters/eslint.config.mjs | 2 +- core/interface-adapters/package.json | 6 +- core/interface-adapters/tsconfig.json | 2 +- core/interface-adapters/vitest.config.ts | 2 +- package.json | 8 +- packages/database-drizzle/eslint.config.mjs | 2 +- packages/database-drizzle/package.json | 6 +- packages/database-drizzle/tsconfig.json | 2 +- packages/database-drizzle/vitest.config.ts | 2 +- packages/shared/eslint.config.mjs | 2 +- packages/shared/package.json | 6 +- packages/shared/tsconfig.json | 2 +- packages/shared/vitest.config.ts | 2 +- pnpm-lock.yaml | 216 ++++++++---------- tools/db/eslint.config.js | 2 +- tools/db/package.json | 6 +- tools/db/tsconfig.json | 2 +- tools/mono/eslint.config.mjs | 2 +- tools/mono/package.json | 4 +- tools/mono/tsconfig.json | 2 +- tools/template/eslint.config.mjs | 2 +- tools/template/package.json | 6 +- tools/template/tsconfig.json | 2 +- tools/template/vitest.config.ts | 2 +- turbo.json | 2 +- 60 files changed, 213 insertions(+), 229 deletions(-) rename configs/{vitest-config => config-vitest}/configs/base-config.ts (100%) rename configs/{vitest-config => config-vitest}/configs/ui-config.ts (100%) rename configs/{vitest-config => config-vitest}/package.json (77%) rename configs/{vitest-config => config-vitest}/scripts/collect-json-outputs.ts (100%) rename configs/{vitest-config => config-vitest}/tsconfig.json (76%) rename configs/{vitest-config => config-vitest}/turbo.json (88%) diff --git a/apps/cli/eslint.config.mjs b/apps/cli/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/apps/cli/eslint.config.mjs +++ b/apps/cli/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/apps/cli/package.json b/apps/cli/package.json index 002c0cd..527e633 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -18,9 +18,9 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*", "@types/node": "^22.13.9" } } \ No newline at end of file diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index acdc07e..8810e4d 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": [ "node_modules" diff --git a/apps/cli/vitest.config.ts b/apps/cli/vitest.config.ts index 919ad98..5992b4e 100644 --- a/apps/cli/vitest.config.ts +++ b/apps/cli/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/apps/nextjs/eslint.config.js b/apps/nextjs/eslint.config.js index 158ba75..13b9842 100644 --- a/apps/nextjs/eslint.config.js +++ b/apps/nextjs/eslint.config.js @@ -1,4 +1,4 @@ -import { nextJsConfig } from "@acme/eslint-config/next-js"; +import { nextJsConfig } from '@acme/config-eslint/next-js'; /** @type {import("eslint").Linter.Config} */ export default nextJsConfig; diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index e0ba88f..c463a28 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -19,9 +19,9 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*", "@types/node": "^22.13.9", "@types/react": "19.0.10", "@types/react-dom": "19.0.4" diff --git a/apps/nextjs/tsconfig.json b/apps/nextjs/tsconfig.json index dce75d8..087900d 100644 --- a/apps/nextjs/tsconfig.json +++ b/apps/nextjs/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/nextjs.json", + "extends": "@acme/config-typescript/nextjs.json", "compilerOptions": { "plugins": [{ "name": "next" }] }, "include": [ "next-env.d.ts", diff --git a/apps/nextjs/vitest.config.ts b/apps/nextjs/vitest.config.ts index 919ad98..5992b4e 100644 --- a/apps/nextjs/vitest.config.ts +++ b/apps/nextjs/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/configs/config-eslint/base.js b/configs/config-eslint/base.js index 09d316e..9bcbf88 100644 --- a/configs/config-eslint/base.js +++ b/configs/config-eslint/base.js @@ -1,8 +1,8 @@ -import js from "@eslint/js"; -import eslintConfigPrettier from "eslint-config-prettier"; -import turboPlugin from "eslint-plugin-turbo"; -import tseslint from "typescript-eslint"; -import onlyWarn from "eslint-plugin-only-warn"; +import js from '@eslint/js'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import turboPlugin from 'eslint-plugin-turbo'; +import tseslint from 'typescript-eslint'; +import onlyWarn from 'eslint-plugin-only-warn'; /** * A shared ESLint configuration for the repository. @@ -18,7 +18,7 @@ export const config = [ turbo: turboPlugin, }, rules: { - "turbo/no-undeclared-env-vars": "warn", + 'turbo/no-undeclared-env-vars': 'warn', }, }, { @@ -27,6 +27,6 @@ export const config = [ }, }, { - ignores: ["dist/**"], + ignores: ['dist/**'], }, ]; diff --git a/configs/config-eslint/next.js b/configs/config-eslint/next.js index 6bf01a7..364681d 100644 --- a/configs/config-eslint/next.js +++ b/configs/config-eslint/next.js @@ -1,11 +1,11 @@ -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"; +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. @@ -28,22 +28,22 @@ export const nextJsConfig = [ }, { plugins: { - "@next/next": pluginNext, + '@next/next': pluginNext, }, rules: { ...pluginNext.configs.recommended.rules, - ...pluginNext.configs["core-web-vitals"].rules, + ...pluginNext.configs['core-web-vitals'].rules, }, }, { plugins: { - "react-hooks": pluginReactHooks, + 'react-hooks': pluginReactHooks, }, - settings: { react: { version: "detect" } }, + settings: { react: { version: 'detect' } }, rules: { ...pluginReactHooks.configs.recommended.rules, // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", + 'react/react-in-jsx-scope': 'off', }, }, ]; diff --git a/configs/config-eslint/package.json b/configs/config-eslint/package.json index aa68efa..cb2ec4f 100644 --- a/configs/config-eslint/package.json +++ b/configs/config-eslint/package.json @@ -1,5 +1,5 @@ { - "name": "@acme/eslint-config", + "name": "@acme/config-eslint", "version": "0.0.0", "type": "module", "private": true, diff --git a/configs/config-eslint/react-internal.js b/configs/config-eslint/react-internal.js index daeccba..b8b50e7 100644 --- a/configs/config-eslint/react-internal.js +++ b/configs/config-eslint/react-internal.js @@ -1,10 +1,10 @@ -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"; +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. @@ -27,13 +27,13 @@ export const config = [ }, { plugins: { - "react-hooks": pluginReactHooks, + 'react-hooks': pluginReactHooks, }, - settings: { react: { version: "detect" } }, + settings: { react: { version: 'detect' } }, rules: { ...pluginReactHooks.configs.recommended.rules, // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", + 'react/react-in-jsx-scope': 'off', }, }, ]; diff --git a/configs/config-typescript/package.json b/configs/config-typescript/package.json index 7d3a2f0..cdf46c3 100644 --- a/configs/config-typescript/package.json +++ b/configs/config-typescript/package.json @@ -1,5 +1,5 @@ { - "name": "@acme/typescript-config", + "name": "@acme/config-typescript", "version": "0.0.0", "private": true, "publishConfig": { diff --git a/configs/vitest-config/configs/base-config.ts b/configs/config-vitest/configs/base-config.ts similarity index 100% rename from configs/vitest-config/configs/base-config.ts rename to configs/config-vitest/configs/base-config.ts diff --git a/configs/vitest-config/configs/ui-config.ts b/configs/config-vitest/configs/ui-config.ts similarity index 100% rename from configs/vitest-config/configs/ui-config.ts rename to configs/config-vitest/configs/ui-config.ts diff --git a/configs/vitest-config/package.json b/configs/config-vitest/package.json similarity index 77% rename from configs/vitest-config/package.json rename to configs/config-vitest/package.json index 6d4b327..d777350 100644 --- a/configs/vitest-config/package.json +++ b/configs/config-vitest/package.json @@ -1,5 +1,5 @@ { - "name": "@acme/vitest-config", + "name": "@acme/config-vitest", "type": "module", "exports": { "./base": "./dist/configs/base-config.js", @@ -13,12 +13,12 @@ "view-report": "open coverage/report/index.html" }, "devDependencies": { - "@acme/typescript-config": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "@vitest/ui": "3.0.8", + "@acme/config-typescript": "workspace:*", + "@vitest/coverage-istanbul": "^3.0.9", + "@vitest/ui": "3.0.9", "glob": "^11.0.1", "jsdom": "^26.0.0", "nyc": "^17.1.0", - "vitest": "^3.0.8" + "vitest": "^3.0.9" } } diff --git a/configs/vitest-config/scripts/collect-json-outputs.ts b/configs/config-vitest/scripts/collect-json-outputs.ts similarity index 100% rename from configs/vitest-config/scripts/collect-json-outputs.ts rename to configs/config-vitest/scripts/collect-json-outputs.ts diff --git a/configs/vitest-config/tsconfig.json b/configs/config-vitest/tsconfig.json similarity index 76% rename from configs/vitest-config/tsconfig.json rename to configs/config-vitest/tsconfig.json index cd14837..d63f2c9 100644 --- a/configs/vitest-config/tsconfig.json +++ b/configs/config-vitest/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": ["@acme/typescript-config/base.json"], + "extends": ["@acme/config-typescript/base.json"], "compilerOptions": { "outDir": "dist", }, diff --git a/configs/vitest-config/turbo.json b/configs/config-vitest/turbo.json similarity index 88% rename from configs/vitest-config/turbo.json rename to configs/config-vitest/turbo.json index c328141..396051c 100644 --- a/configs/vitest-config/turbo.json +++ b/configs/config-vitest/turbo.json @@ -15,7 +15,7 @@ "outputs": ["coverage/report/**"] }, "view-report": { - "dependsOn": ["@acme/vitest-config#build", "report"], + "dependsOn": ["@acme/config-vitest#build", "report"], "cache": false } } diff --git a/core/application/eslint.config.mjs b/core/application/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/core/application/eslint.config.mjs +++ b/core/application/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/core/application/package.json b/core/application/package.json index d3a4004..cd3a159 100644 --- a/core/application/package.json +++ b/core/application/package.json @@ -17,8 +17,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/core/application/tsconfig.json b/core/application/tsconfig.json index 05900c0..20d02e0 100644 --- a/core/application/tsconfig.json +++ b/core/application/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/application/vitest.config.ts b/core/application/vitest.config.ts index 919ad98..5992b4e 100644 --- a/core/application/vitest.config.ts +++ b/core/application/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/core/di/eslint.config.mjs b/core/di/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/core/di/eslint.config.mjs +++ b/core/di/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/core/di/package.json b/core/di/package.json index 9c3bc28..3d946d6 100644 --- a/core/di/package.json +++ b/core/di/package.json @@ -20,8 +20,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/core/di/tsconfig.json b/core/di/tsconfig.json index 05900c0..20d02e0 100644 --- a/core/di/tsconfig.json +++ b/core/di/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/di/vitest.config.ts b/core/di/vitest.config.ts index 919ad98..5992b4e 100644 --- a/core/di/vitest.config.ts +++ b/core/di/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/core/domain/eslint.config.mjs b/core/domain/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/core/domain/eslint.config.mjs +++ b/core/domain/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/core/domain/package.json b/core/domain/package.json index e0a241e..f880b9a 100644 --- a/core/domain/package.json +++ b/core/domain/package.json @@ -14,8 +14,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/core/domain/tsconfig.json b/core/domain/tsconfig.json index 05900c0..20d02e0 100644 --- a/core/domain/tsconfig.json +++ b/core/domain/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/domain/vitest.config.ts b/core/domain/vitest.config.ts index 919ad98..5992b4e 100644 --- a/core/domain/vitest.config.ts +++ b/core/domain/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/core/infrastructure/eslint.config.mjs b/core/infrastructure/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/core/infrastructure/eslint.config.mjs +++ b/core/infrastructure/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/core/infrastructure/package.json b/core/infrastructure/package.json index a759972..4eda29b 100644 --- a/core/infrastructure/package.json +++ b/core/infrastructure/package.json @@ -18,8 +18,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/core/infrastructure/tsconfig.json b/core/infrastructure/tsconfig.json index 05900c0..20d02e0 100644 --- a/core/infrastructure/tsconfig.json +++ b/core/infrastructure/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/infrastructure/vitest.config.ts b/core/infrastructure/vitest.config.ts index 919ad98..5992b4e 100644 --- a/core/infrastructure/vitest.config.ts +++ b/core/infrastructure/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/core/interface-adapters/eslint.config.mjs b/core/interface-adapters/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/core/interface-adapters/eslint.config.mjs +++ b/core/interface-adapters/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index ee7d601..25e0dce 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -17,9 +17,9 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/core/interface-adapters/tsconfig.json b/core/interface-adapters/tsconfig.json index 05900c0..20d02e0 100644 --- a/core/interface-adapters/tsconfig.json +++ b/core/interface-adapters/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/core/interface-adapters/vitest.config.ts b/core/interface-adapters/vitest.config.ts index 919ad98..5992b4e 100644 --- a/core/interface-adapters/vitest.config.ts +++ b/core/interface-adapters/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/package.json b/package.json index 6ec181d..f4e0f4d 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "dev": "turbo run dev", "lint:check": "turbo lint:check check-types && npm run format", "lint:fix": "turbo lint:fix && npm run format:fix", - "format": "prettier --check ./**/*.{ts,tsx}", - "format:fix": "prettier --write ./**/*.{ts,tsx}", + "format": "prettier --check ./**/*.{ts,tsx,js}", + "format:fix": "prettier --write ./**/*.{ts,tsx,js}", "test": "turbo run test", "test:watch": "turbo run test:watch", "test:coverage-report": "turbo run view-report" @@ -21,12 +21,12 @@ }, "devDependencies": { "turbo": "^2.4.4", - "@vitest/coverage-istanbul": "^3.0.8", + "@vitest/coverage-istanbul": "^3.0.9", "typescript": "^5.8.2", "eslint": "^9.22.0", "esbuild": "^0.25.1", "prettier": "^3.5.3", - "vitest": "^3.0.8" + "vitest": "^3.0.9" }, "prettier": { "trailingComma": "es5", diff --git a/packages/database-drizzle/eslint.config.mjs b/packages/database-drizzle/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/packages/database-drizzle/eslint.config.mjs +++ b/packages/database-drizzle/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/packages/database-drizzle/package.json b/packages/database-drizzle/package.json index 3c8aec8..c449559 100644 --- a/packages/database-drizzle/package.json +++ b/packages/database-drizzle/package.json @@ -21,9 +21,9 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*", "@types/node": "^20.11.24", "drizzle-kit": "^0.30.5" } diff --git a/packages/database-drizzle/tsconfig.json b/packages/database-drizzle/tsconfig.json index da6684b..005bfb8 100644 --- a/packages/database-drizzle/tsconfig.json +++ b/packages/database-drizzle/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/base.json", + "extends": "@acme/config-typescript/base.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/packages/database-drizzle/vitest.config.ts b/packages/database-drizzle/vitest.config.ts index 919ad98..5992b4e 100644 --- a/packages/database-drizzle/vitest.config.ts +++ b/packages/database-drizzle/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/packages/shared/eslint.config.mjs b/packages/shared/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/packages/shared/eslint.config.mjs +++ b/packages/shared/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/packages/shared/package.json b/packages/shared/package.json index ce3ed01..dbaad76 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -14,8 +14,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index 05900c0..20d02e0 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/packages/shared/vitest.config.ts b/packages/shared/vitest.config.ts index 919ad98..5992b4e 100644 --- a/packages/shared/vitest.config.ts +++ b/packages/shared/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2675505..03b7179 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 2.1.1 devDependencies: '@vitest/coverage-istanbul': - specifier: ^3.0.8 + specifier: ^3.0.9 version: 3.0.9(vitest@3.0.9) esbuild: specifier: ^0.25.1 @@ -31,8 +31,8 @@ importers: specifier: ^5.8.2 version: 5.8.2 vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + specifier: ^3.0.9 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) apps/cli: dependencies: @@ -40,18 +40,18 @@ importers: specifier: workspace:* version: link:../../core/di devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@types/node': specifier: ^22.13.9 version: 22.13.11 @@ -71,18 +71,18 @@ importers: specifier: ^19.0.0 version: 19.0.0(react@19.0.0) devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@types/node': specifier: ^22.13.9 version: 22.13.11 @@ -131,17 +131,17 @@ importers: configs/config-typescript: {} - configs/vitest-config: + configs/config-vitest: devDependencies: - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../config-typescript '@vitest/coverage-istanbul': - specifier: ^3.0.8 + specifier: ^3.0.9 version: 3.0.9(vitest@3.0.9) '@vitest/ui': - specifier: 3.0.8 - version: 3.0.8(vitest@3.0.9) + specifier: 3.0.9 + version: 3.0.9(vitest@3.0.9) glob: specifier: ^11.0.1 version: 11.0.1 @@ -152,8 +152,8 @@ importers: specifier: ^17.1.0 version: 17.1.0 vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + specifier: ^3.0.9 + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) core/application: dependencies: @@ -161,18 +161,18 @@ importers: specifier: workspace:* version: link:../domain devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono core/di: dependencies: @@ -188,34 +188,34 @@ importers: '@acme/interface-adapters': specifier: workspace:* version: link:../interface-adapters - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono core/domain: devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': + specifier: workspace:* + version: link:../../configs/config-vitest + '@acme/mono': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../tools/mono core/infrastructure: dependencies: @@ -226,18 +226,18 @@ importers: specifier: workspace:* version: link:../domain devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono core/interface-adapters: dependencies: @@ -245,18 +245,18 @@ importers: specifier: workspace:* version: link:../application devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../../tools/mono '@vitest/coverage-istanbul': specifier: ^3.0.8 version: 3.0.9(vitest@3.0.9) @@ -268,7 +268,7 @@ importers: version: 3.5.3 vitest: specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) packages/database-drizzle: dependencies: @@ -285,18 +285,18 @@ importers: specifier: ^3.4.5 version: 3.4.5 devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': + specifier: workspace:* + version: link:../../configs/config-vitest + '@acme/mono': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../tools/mono '@types/node': specifier: ^20.11.24 version: 20.17.24 @@ -306,18 +306,18 @@ importers: packages/shared: devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../../tools/mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': + specifier: workspace:* + version: link:../../configs/config-vitest + '@acme/mono': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../tools/mono tools/db: dependencies: @@ -328,18 +328,18 @@ importers: specifier: ^16.4.7 version: 16.4.7 devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../../configs/config-vitest + '@acme/mono': + specifier: workspace:* + version: link:../mono '@vitest/coverage-istanbul': specifier: ^3.0.8 version: 3.0.9(vitest@3.0.9) @@ -351,7 +351,7 @@ importers: version: 3.5.3 vitest: specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) tools/mono: dependencies: @@ -359,10 +359,10 @@ importers: specifier: ^9.5.2 version: 9.5.2 devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript '@types/node': @@ -371,18 +371,18 @@ importers: tools/template: devDependencies: - '@acme/eslint-config': + '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint - '@acme/mono': - specifier: workspace:* - version: link:../mono - '@acme/typescript-config': + '@acme/config-typescript': specifier: workspace:* version: link:../../configs/config-typescript - '@acme/vitest-config': + '@acme/config-vitest': + specifier: workspace:* + version: link:../../configs/config-vitest + '@acme/mono': specifier: workspace:* - version: link:../../configs/vitest-config + version: link:../mono packages: @@ -1612,9 +1612,6 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.8': - resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} - '@vitest/pretty-format@3.0.9': resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} @@ -1627,13 +1624,10 @@ packages: '@vitest/spy@3.0.9': resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} - '@vitest/ui@3.0.8': - resolution: {integrity: sha512-MfTjaLU+Gw/lYorgwFZ06Cym+Mj9hPfZh/Q91d4JxyAHiicAakPTvS7zYCSHF+5cErwu2PVBe1alSjuh6L/UiA==} + '@vitest/ui@3.0.9': + resolution: {integrity: sha512-FpZD4aIv/qNpwkV3XbLV6xldWFHMgoNWAJEgg5GmpObmAOLAErpYjew9dDwXdYdKOS3iZRKdwI+P3JOJcYeUBg==} peerDependencies: - vitest: 3.0.8 - - '@vitest/utils@3.0.8': - resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} + vitest: 3.0.9 '@vitest/utils@3.0.9': resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} @@ -4584,7 +4578,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) + vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) transitivePeerDependencies: - supports-color @@ -4603,10 +4597,6 @@ snapshots: optionalDependencies: vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) - '@vitest/pretty-format@3.0.8': - dependencies: - tinyrainbow: 2.0.0 - '@vitest/pretty-format@3.0.9': dependencies: tinyrainbow: 2.0.0 @@ -4626,22 +4616,16 @@ snapshots: dependencies: tinyspy: 3.0.2 - '@vitest/ui@3.0.8(vitest@3.0.9)': + '@vitest/ui@3.0.9(vitest@3.0.9)': dependencies: - '@vitest/utils': 3.0.8 + '@vitest/utils': 3.0.9 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.1 tinyglobby: 0.2.12 tinyrainbow: 2.0.0 - vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1) - - '@vitest/utils@3.0.8': - dependencies: - '@vitest/pretty-format': 3.0.8 - loupe: 3.1.3 - tinyrainbow: 2.0.0 + vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) '@vitest/utils@3.0.9': dependencies: @@ -6792,7 +6776,7 @@ snapshots: fsevents: 2.3.3 tsx: 4.19.1 - vitest@3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.8)(jsdom@26.0.0)(tsx@4.19.1): + vitest@3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1): dependencies: '@vitest/expect': 3.0.9 '@vitest/mocker': 3.0.9(vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1)) @@ -6816,7 +6800,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.13.11 - '@vitest/ui': 3.0.8(vitest@3.0.9) + '@vitest/ui': 3.0.9(vitest@3.0.9) jsdom: 26.0.0 transitivePeerDependencies: - jiti diff --git a/tools/db/eslint.config.js b/tools/db/eslint.config.js index 5a1cc0f..bf8a42d 100644 --- a/tools/db/eslint.config.js +++ b/tools/db/eslint.config.js @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from '@acme/config-eslint/base'; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/tools/db/package.json b/tools/db/package.json index 50d14c4..b44a86d 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -18,9 +18,9 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*", "@vitest/coverage-istanbul": "^3.0.8", "eslint": "^9.22.0", "prettier": "^3.5.3", diff --git a/tools/db/tsconfig.json b/tools/db/tsconfig.json index 647fa06..90fabe6 100644 --- a/tools/db/tsconfig.json +++ b/tools/db/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/base.json", + "extends": "@acme/config-typescript/base.json", "compilerOptions": { "plugins": [{ "name": "next" }] }, "include": [ "next-env.d.ts", diff --git a/tools/mono/eslint.config.mjs b/tools/mono/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/tools/mono/eslint.config.mjs +++ b/tools/mono/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/tools/mono/package.json b/tools/mono/package.json index 3949f99..1a5b5d3 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -18,8 +18,8 @@ "execa": "^9.5.2" }, "devDependencies": { - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", "@types/node": "^22.13.9" } } \ No newline at end of file diff --git a/tools/mono/tsconfig.json b/tools/mono/tsconfig.json index 70fe716..1deb92a 100644 --- a/tools/mono/tsconfig.json +++ b/tools/mono/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": ["@acme/typescript-config/base.json"], + "extends": ["@acme/config-typescript/base.json"], "compilerOptions": { "outDir": "dist", }, diff --git a/tools/template/eslint.config.mjs b/tools/template/eslint.config.mjs index 5a1cc0f..f209c80 100644 --- a/tools/template/eslint.config.mjs +++ b/tools/template/eslint.config.mjs @@ -1,4 +1,4 @@ -import { config } from "@acme/eslint-config/base"; +import { config } from "@acme/config-eslint/base"; /** @type {import("eslint").Linter.Config} */ export default config; diff --git a/tools/template/package.json b/tools/template/package.json index 50860d5..cf71994 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -17,8 +17,8 @@ }, "devDependencies": { "@acme/mono": "workspace:*", - "@acme/eslint-config": "workspace:*", - "@acme/typescript-config": "workspace:*", - "@acme/vitest-config": "workspace:*" + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file diff --git a/tools/template/tsconfig.json b/tools/template/tsconfig.json index 05900c0..20d02e0 100644 --- a/tools/template/tsconfig.json +++ b/tools/template/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@acme/typescript-config/bundler.json", + "extends": "@acme/config-typescript/bundler.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], "exclude": ["node_modules"] } diff --git a/tools/template/vitest.config.ts b/tools/template/vitest.config.ts index 919ad98..5992b4e 100644 --- a/tools/template/vitest.config.ts +++ b/tools/template/vitest.config.ts @@ -1,3 +1,3 @@ -import { baseConfig } from '@acme/vitest-config/base'; +import { baseConfig } from '@acme/config-vitest/base'; export default baseConfig; diff --git a/turbo.json b/turbo.json index 02505b3..676608e 100644 --- a/turbo.json +++ b/turbo.json @@ -46,7 +46,7 @@ "dependsOn": ["build-tools", "^check-types"] }, "build-tools": { - "dependsOn": ["@acme/vitest-config#build" , "@acme/mono#build"] + "dependsOn": ["@acme/config-vitest#build" , "@acme/mono#build"] }, "dev": { "cache": false, From 3b985170242a626021e75a0bbd39df605fca91c9 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 11:21:44 +0700 Subject: [PATCH 38/44] chore: remove unused dependencies from package.json in interface-adapters and db --- core/interface-adapters/package.json | 5 +---- pnpm-lock.yaml | 21 --------------------- tools/db/package.json | 6 +----- 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/core/interface-adapters/package.json b/core/interface-adapters/package.json index 25e0dce..d96cedc 100644 --- a/core/interface-adapters/package.json +++ b/core/interface-adapters/package.json @@ -20,9 +20,6 @@ "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", "@acme/config-vitest": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@vitest/coverage-istanbul": "^3.0.8" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03b7179..c9d8e39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,15 +260,6 @@ importers: '@vitest/coverage-istanbul': specifier: ^3.0.8 version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) packages/database-drizzle: dependencies: @@ -340,18 +331,6 @@ importers: '@acme/mono': specifier: workspace:* version: link:../mono - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) - eslint: - specifier: ^9.22.0 - version: 9.22.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - vitest: - specifier: ^3.0.8 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) tools/mono: dependencies: diff --git a/tools/db/package.json b/tools/db/package.json index b44a86d..1e5314e 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -20,10 +20,6 @@ "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8", - "eslint": "^9.22.0", - "prettier": "^3.5.3", - "vitest": "^3.0.8" + "@acme/config-vitest": "workspace:*" } } \ No newline at end of file From 53ca00ed4d17ad3de379f58715eb0534e14ad2b2 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 11:44:15 +0700 Subject: [PATCH 39/44] docs: update README to reflect new project structure and template usage --- README.md | 341 +++++++++++++++++++----------------------------------- 1 file changed, 117 insertions(+), 224 deletions(-) diff --git a/README.md b/README.md index 695cd8c..4c05e17 100644 --- a/README.md +++ b/README.md @@ -35,151 +35,134 @@ Clean Architecture helps you: --- -### Core Principles: +## ๐Ÿ”ฐ Template Project Overview -| Layer | Responsibility | -|----------------------|----------------------------------------------------------------------------------| -| **Domain** | Business entities, rules, invariants (pure, stable) | -| **Application** | Use cases, business workflows, interfaces for repositories/services | -| **Interface Adapters** | Controllers, presenters, mappers, validators (connect input/output to use cases) | -| **Infrastructure** | Concrete implementations of services, repositories (DB, APIs, email, etc.) | -| **DI (Dependency Injection)** | Wiring dependencies to keep layers decoupled | +This project follows a modular monorepo layout: + +```bash +. +โ”œโ”€โ”€ apps/ # Applications (UI, CLI, etc) +โ”‚ โ”œโ”€โ”€ nextjs/ # Next.js frontend (App Router) +โ”‚ โ””โ”€โ”€ cli/ # CLI tools (e.g., for batch scripts) +โ”‚ +โ”œโ”€โ”€ core/ # Clean architecture layers +โ”‚ โ”œโ”€โ”€ domain/ # Business entities, value objects +โ”‚ โ”œโ”€โ”€ application/ # Use cases, interfaces +โ”‚ โ”œโ”€โ”€ interface-adapters/ # Controllers, adapters, presenters +โ”‚ โ”œโ”€โ”€ infrastructure/ # Implementations (e.g., repositories) +โ”‚ โ””โ”€โ”€ di/ # Dependency injection setup +โ”‚ +โ”œโ”€โ”€ packages/ # Modular services +โ”‚ โ”œโ”€โ”€ database-drizzle/ # DB setup with Drizzle ORM +โ”‚ โ””โ”€โ”€ shared/ # Cross-cutting shared utils +โ”‚ +โ”œโ”€โ”€ configs/ # Centralized configuration presets +โ”‚ โ”œโ”€โ”€ config-eslint/ # Shared ESLint config +โ”‚ โ”œโ”€โ”€ config-typescript/ # Shared TSConfig presets +โ”‚ โ””โ”€โ”€ config-vitest/ # Shared Vitest setup +โ”‚ +โ”œโ”€โ”€ tools/ # Toolchain scripts and helpers +โ”‚ โ”œโ”€โ”€ db/ # DB migration + seed tooling +โ”‚ โ”œโ”€โ”€ mono/ # CLI wrapper for build/test/lint/dev +โ”‚ โ””โ”€โ”€ template/ # Reusable project template package +โ”‚ +โ”œโ”€โ”€ turbo.json # Task orchestration config +โ””โ”€โ”€ pnpm-workspace.yaml # Defines workspace structure +``` --- -## ๐Ÿš€ Starter Project Structure +## ๐Ÿ“ฆ Template Generator -A minimal setup that helps you get started quickly: +To get started, copy and rename the `tools/template` package: ```bash -. -โ”œโ”€โ”€ apps/ -โ”‚ โ””โ”€โ”€ web/ # App entry point (e.g., Next.js, Express) -โ”œโ”€โ”€ core/ -โ”‚ โ”œโ”€โ”€ domain/ # Business entities -โ”‚ โ”œโ”€โ”€ application/ # Use cases and interfaces -โ”‚ โ”œโ”€โ”€ interface-adapters/ # Controllers, mappers, validators -โ”‚ โ”œโ”€โ”€ infrastructure/ # Contracts only (not implementations) -โ”‚ โ””โ”€โ”€ di/ # DI container & registry -โ”œโ”€โ”€ packages/ -โ”‚ โ”œโ”€โ”€ db-postgres/ # Postgres implementation of repositories -โ”‚ โ””โ”€โ”€ shared/ # Common types, utils, constants +cp -r tools/template core/new-package ``` -## ๐Ÿ”— High-Level Dependency Diagram - -**Arrow direction (โ†’)** means "depends on" or "uses" โ€” the arrow always points from the **dependent** to the **dependency**. +This includes: +- Standard tooling via `mono` +- `tsconfig`, `eslint`, `vitest` setup +- Example `lib` and test file -### ๐Ÿ” Example Interpretation: -- `application โ†’ domain` - โ†ณ e.g., `CreateUserUseCase` uses `User` entity โ†’ `import { User } from "@acme/domain"` +Just update the package name and start building! -- `interface-adapters โ†’ application` - โ†ณ e.g., `UserController` calls `CreateUserUseCase` โ†’ `import { CreateUserUseCase } from "@acme/application"` +--- -- `infrastructure โ†’ application` - โ†ณ e.g., `UserRepository` implements `IUserRepository` โ†’ `import { IUserRepository } from "@acme/application"` +## ๐Ÿ”ง Build Tooling with Turborepo + Mono -- `apps/web โ†’ di` - โ†ณ e.g., web app resolves controller via DI โ†’ `const userController = resolve("UserController")` +### ๐Ÿงฉ Centralized Toolchain via `tools/mono` -- `shared โ†’ all` - โ†ณ e.g., shared `utils`, `types`, or `constants` are imported across layers +We build a custom toolchain named `mono` that we can easily manage to control the build process. -For example: -- `application โ†’ domain` = Application layer depends on domain models -- `interface-adapters โ†’ application` = Controllers use application use cases -- `infrastructure โ†’ application` = Implementations depend on interfaces defined in application -- `apps/web โ†’ di` = App depends on the DI wiring +Instead of installing build tools (like esbuild, vitest, eslint) in every package, we centralize them via: -```mermaid -graph TD +- `tools/mono`: Unified CLI for commands like `dev`, `test`, `build` +- `configs/*`: Shared config presets (eslint, tsconfig, vitest) -%% Core layers -A[domain] --> B[application] -B --> C[interface-adapters] -B --> D[infrastructure] -C --> E[di] -D --> E - -%% App layer -E --> F[apps/web] - -%% External packages -H[packages/db-postgres] --> D - -%% Shared -J[shared] --> B -J --> C -J --> D -J --> E -J --> F - -style A fill:#f9f,stroke:#333,stroke-width:2 -style B fill:#bbf,stroke:#333,stroke-width:2 -style C fill:#cfc,stroke:#333,stroke-width:2 -style D fill:#fcc,stroke:#333,stroke-width:2 -style E fill:#ffc,stroke:#333,stroke-width:2 -style F fill:#eee,stroke:#333,stroke-width:2 -style H fill:#ddd,stroke:#999,stroke-dasharray: 5 -style J fill:#eee,stroke:#666,stroke-dasharray: 3 +Example `mono` script: +```ts +const scripts: MonoScripts = { + 'lint:check': 'eslint src', + 'lint:fix': 'eslint src --fix', + 'test': 'vitest run', + 'test:watch': 'vitest watch', + 'build': 'esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js', + 'dev': 'tsx watch ./src/index.ts', + 'start': 'tsx ./src/index.ts', + 'check-types': 'tsc --noEmit', +}; ``` ---- +### ๐Ÿงช How packages use `mono` + +Each package delegates scripts to `mono`: +```json +{ + "scripts": { + "dev": "mono dev", + "start": "mono start", + "build": "mono build", + "test": "mono test", + "test:watch": "mono test:watch", + "lint:check": "mono lint:check", + "lint:fix": "mono lint:fix", + "check-types": "mono check-types" + }, + "devDependencies": { + "@acme/mono": "workspace:*", + "@acme/config-eslint": "workspace:*", + "@acme/config-typescript": "workspace:*", + "@acme/config-vitest": "workspace:*" + } +} +``` -## ๐ŸŒฑ Future Project Structure (Scalable & Modular) +### ๐Ÿ›  Root `package.json` dependencies +```json +{ + "devDependencies": { + "turbo": "^2.4.4", + "@vitest/coverage-istanbul": "^3.0.9", + "typescript": "^5.8.2", + "eslint": "^9.22.0", + "esbuild": "^0.25.1", + "prettier": "^3.5.3", + "vitest": "^3.0.9" + } +} +``` -Once your project grows, the structure expands like this: +### ๐Ÿง  Workspace definition -```bash -. -โ”œโ”€โ”€ apps/ -โ”‚ โ”œโ”€โ”€ web/ # Web/API app -โ”‚ โ””โ”€โ”€ cli/ # CLI commands (optional) -โ”‚ -โ”œโ”€โ”€ core/ -โ”‚ โ”œโ”€โ”€ domain/ -โ”‚ โ”‚ โ”œโ”€โ”€ entities/ -โ”‚ โ”‚ โ”œโ”€โ”€ value-objects/ -โ”‚ โ”‚ โ””โ”€โ”€ errors/ -โ”‚ โ”œโ”€โ”€ application/ -โ”‚ โ”‚ โ”œโ”€โ”€ use-cases/ -โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ commands/ -โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ queries/ -โ”‚ โ”‚ โ””โ”€โ”€ interfaces/ -โ”‚ โ”œโ”€โ”€ interface-adapters/ -โ”‚ โ”‚ โ”œโ”€โ”€ controllers/ -โ”‚ โ”‚ โ”œโ”€โ”€ graphql/ # GraphQL resolvers -โ”‚ โ”‚ โ”œโ”€โ”€ cli/ # CLI entry points -โ”‚ โ”‚ โ”œโ”€โ”€ webhooks/ # Webhook handlers (e.g., Stripe) -โ”‚ โ”‚ โ”œโ”€โ”€ events/ # Event-driven adapters (e.g., RabbitMQ) -โ”‚ โ”‚ โ”œโ”€โ”€ middlewares/ # HTTP middlewares -โ”‚ โ”‚ โ”œโ”€โ”€ presenters/ # View-friendly formatters (DTOs) -โ”‚ โ”‚ โ””โ”€โ”€ validators/ # Zod/Yup validators -โ”‚ โ”œโ”€โ”€ infrastructure/ -โ”‚ โ”‚ โ”œโ”€โ”€ gateways/ -โ”‚ โ”‚ โ””โ”€โ”€ persistence/ -โ”‚ โ””โ”€โ”€ di/ -โ”‚ โ”œโ”€โ”€ container.ts -โ”‚ โ”œโ”€โ”€ ServiceRegistry.ts -โ”‚ โ””โ”€โ”€ resolve.ts -โ”‚ -โ”œโ”€โ”€ packages/ -โ”‚ โ”œโ”€โ”€ db-mongodb/ # MongoDB implementation -โ”‚ โ”œโ”€โ”€ db-postgres/ # PostgreSQL implementation -โ”‚ โ”œโ”€โ”€ cache-redis/ # Redis cache adapter (for ICacheService) -โ”‚ โ”œโ”€โ”€ mq-rabbitmq/ # RabbitMQ adapter (for IMessageQueueService) -โ”‚ โ”œโ”€โ”€ email-sendgrid/ # SendGrid adapter -โ”‚ โ””โ”€โ”€ logger-pino/ # Pino logger service -โ”‚ -โ”œโ”€โ”€ shared/ -โ”‚ โ”œโ”€โ”€ types/ -โ”‚ โ”œโ”€โ”€ utils/ -โ”‚ โ”œโ”€โ”€ config/ -โ”‚ โ””โ”€โ”€ constants/ -โ”‚ -โ”œโ”€โ”€ tools/ # Scripts, CLI helpers -โ””โ”€โ”€ design-system/ # (Optional) UI components +```yaml +# pnpm-workspace.yaml +packages: + - "apps/*" + - "core/*" + - "packages/*" + - "configs/*" + - "tools/*" ``` --- @@ -189,122 +172,32 @@ Once your project grows, the structure expands like this: ```mermaid graph TD -%% Core layers A[domain] --> B[application] B --> C[interface-adapters] B --> D[infrastructure] C --> E[di] D --> E - -%% App layer -E --> F[apps/web] - -%% External packages -G[packages/db-mongodb] --> D -H[packages/db-postgres] --> D -I[packages/email-sendgrid] --> D -X[packages/cache-redis] --> D -Y[packages/mq-rabbitmq] --> D - -%% Shared -J[shared] --> B -J --> C -J --> D -J --> E -J --> F - -style A fill:#f9f,stroke:#333,stroke-width:2 -style B fill:#bbf,stroke:#333,stroke-width:2 -style C fill:#cfc,stroke:#333,stroke-width:2 -style D fill:#fcc,stroke:#333,stroke-width:2 -style E fill:#ffc,stroke:#333,stroke-width:2 -style F fill:#eee,stroke:#333,stroke-width:2 -style G fill:#ddd,stroke:#999,stroke-dasharray: 5 -style H fill:#ddd,stroke:#999,stroke-dasharray: 5 -style I fill:#ddd,stroke:#999,stroke-dasharray: 5 -style X fill:#ddd,stroke:#999,stroke-dasharray: 5 -style Y fill:#ddd,stroke:#999,stroke-dasharray: 5 -style J fill:#eee,stroke:#666,stroke-dasharray: 3 +E --> F[apps/nextjs] +E --> G[apps/cli] +H[packages/database-drizzle] --> D +I[packages/shared] --> B +I --> C +I --> D +I --> E +I --> F ``` --- ## ๐Ÿง  Dependency Injection -This template uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus) โ€” a simple, metadata-free IoC container for TypeScript that works across runtimes (Node, Edge, etc). - -However, this project use a forked version of `ioctopus` when the original package is fully support type-safety, this project will switch back to the original package, see [issue#3](https://github.com/thaitype/ioctopus/issues/3) - ---- - -## ๐Ÿงช Example Usage +Uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus), a fast, lightweight container with no `reflect-metadata` needed. You resolve anything with: ```ts -// apps/web/index.ts -import { resolve } from "@acme/di"; - -const userController = resolve("UserController"); -await userController.create({ - body: { id: "u1", name: "Alice" }, -}); +import { getInjection } from "@acme/di"; +const userController = getInjection("UserController"); ``` --- -## ๐Ÿงช Testing - -Because each layer is isolated, you can easily test use cases like this: - -```ts -import { CreateUserUseCase } from "@acme/application"; - -const mockRepo = { - create: vi.fn(), -}; - -const useCase = new CreateUserUseCase(mockRepo); -await useCase.execute({ id: "u1", name: "Alice", email: "test@example.com" }); -``` - ---- - -## ๐Ÿ“š Glossary - -| Term | Meaning | -|-------------------|-------------------------------------------------------------------------| -| **Use Case** | One unit of business logic (e.g. CreateUser) | -| **Controller** | Handles incoming requests and calls use cases | -| **Presenter** | Formats output for UI or external clients | -| **Gateway** | Interface to external systems (e.g. DB, Email, Redis) | -| **Interface Adapter** | Layer that translates between external input/output and core logic | -| **Repository** | Contract for accessing data, implemented in infrastructure | - ---- - -## ๐Ÿ›  Getting Started - -1. Clone the repo -2. Run `pnpm install` -3. Start hacking in `/core/` - ---- - Happy coding! โœจ Let your architecture evolve, not collapse. ๐Ÿ—๏ธ - ---- - -## Q&A - -### ๐Ÿ†š Shared vs Domain - -### `shared/` -- Generic, reusable code: utilities, types, config loaders, constants -- Not tied to any business logic -- Can be used by any layer **except** `domain` -- Example: `formatDate()`, `PaginatedResult`, `Zod` validators - -### `domain/` -- Contains business entities, rules, and core logic -- No external dependencies โ€” must be 100% pure and stable -- Should not import from `shared` (to preserve isolation) -- Example: `User`, `Order`, `EmailAddress`, domain-specific errors From 5a2985a58066f9a49afcfab0c77193d687633315 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 11:49:58 +0700 Subject: [PATCH 40/44] docs: update README to clarify package creation and toolchain usage --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4c05e17..059128e 100644 --- a/README.md +++ b/README.md @@ -74,18 +74,19 @@ This project follows a modular monorepo layout: ## ๐Ÿ“ฆ Template Generator -To get started, copy and rename the `tools/template` package: +To create a new package, copy and rename the `tools/template` folder: ```bash cp -r tools/template core/new-package ``` This includes: +- Preconfigured build/dev/test scripts - Standard tooling via `mono` - `tsconfig`, `eslint`, `vitest` setup -- Example `lib` and test file +- Minimal boilerplate with `lib` + test examples -Just update the package name and start building! +Just update the package name in `package.json` and start coding! --- @@ -93,12 +94,12 @@ Just update the package name and start building! ### ๐Ÿงฉ Centralized Toolchain via `tools/mono` -We build a custom toolchain named `mono` that we can easily manage to control the build process. +We built a custom toolchain named `mono` to easily manage and control the build process across all packages. -Instead of installing build tools (like esbuild, vitest, eslint) in every package, we centralize them via: +Instead of installing build tools like `esbuild`, `vitest`, and `eslint` in every package, we centralize them via: - `tools/mono`: Unified CLI for commands like `dev`, `test`, `build` -- `configs/*`: Shared config presets (eslint, tsconfig, vitest) +- `configs/*`: Shared config presets for linting, TS, and testing Example `mono` script: ```ts @@ -116,7 +117,8 @@ const scripts: MonoScripts = { ### ๐Ÿงช How packages use `mono` -Each package delegates scripts to `mono`: +Each package reuses the `mono` CLI by mapping local scripts: + ```json { "scripts": { @@ -139,6 +141,9 @@ Each package delegates scripts to `mono`: ``` ### ๐Ÿ›  Root `package.json` dependencies + +Tools are only installed once at the root: + ```json { "devDependencies": { @@ -193,6 +198,8 @@ I --> F Uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus), a fast, lightweight container with no `reflect-metadata` needed. You resolve anything with: +To resolve any service: + ```ts import { getInjection } from "@acme/di"; const userController = getInjection("UserController"); From 4d06289924a2e57201311b93febb3339f166c724 Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 12:00:47 +0700 Subject: [PATCH 41/44] docs: remove backup README and add detailed database and future project structure documentation --- README.backup.md | 117 -------------------- README.md | 35 +++++- docs/database.md | 40 +++++++ docs.md => docs/future-project-structure.md | 11 +- 4 files changed, 78 insertions(+), 125 deletions(-) delete mode 100644 README.backup.md create mode 100644 docs/database.md rename docs.md => docs/future-project-structure.md (88%) diff --git a/README.backup.md b/README.backup.md deleted file mode 100644 index 582c80c..0000000 --- a/README.backup.md +++ /dev/null @@ -1,117 +0,0 @@ -# TypeScript Clean Architecture - -[![Test and Build](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml/badge.svg)](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml) - -> In progess! - -This is turborepo starter with Drizzle ORM and PostgreSQL pre-configured. - -> [!NOTE] -> This example uses `pnpm` as package manager. - -## Using this example - -Clone the repository: - -```sh -git clone https://github.com/htsh-tsyk/turbo-drizzle.git -``` - -## What's inside? - -This Turborepo includes the following packages/apps: - -### Apps and Packages - -- `web`: another [Next.js](https://nextjs.org/) app -- `@repo/database`: Drizzle ORM wrapper to manage & access your database -- `@repo/ui`: a stub React component library shared by a `web` application -- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) -- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo - -Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). - -### Utilities - -This Turborepo has some additional tools already setup for you: - -- [TypeScript](https://www.typescriptlang.org/) for static type checking -- [ESLint](https://eslint.org/) for code linting -- [Prettier](https://prettier.io) for code formatting -- [Drizzle for database ORM](https://orm.drizzle.team/) for database ORM - -### Build - -To build all apps and packages, run the following command: - -``` -cd turbo-drizzle -cp apps/web/.env.default apps/web/.env -pnpm install -pnpm build -``` - -### Database - -We use [Drizzle ORM](https://orm.drizzle.team/) to manage & access our database. As such you will need a database for this project, either locally or hosted in the cloud. - -To make this process easier, we offer a [`docker-compose.yml`](https://docs.docker.com/compose/) file to deploy a PostgreSQL server locally with a new database named `repo_development` (To change this update the `POSTGRES_DB` environment variable in the `docker-compose.yml` file): - -```bash -cd turbo-drizzle -docker-compose up -d -``` - -Once deployed you will need to copy the `.env.default` file to `.env` in order for Drizzle to have a `DATABASE_URL` environment variable to access. - -```bash -cp apps/web/.env.default apps/web/.env -``` - -If you added a custom database name, or use a cloud based database, you will need to update the `DATABASE_URL` in your `.env` accordingly. - -Once deployed & up & running, you will need to create & deploy migrations to your database to add the necessary tables. This can be done using [Drizzle Migrate](https://orm.drizzle.team/docs/migrations): - -in `database` package: (command `drizzle-kit generate`) - -``` -pnpm generate -``` - -```bash -pnpm turbo db:migrate -``` - -An optional additional step is to seed some initial or fake data to your database. - -To do this update check the seed script located in `packages/database/scripts/seed.ts` & add or update any users you wish to seed to the database. - -Once edited run the following command to run tell Drizzle to run the seed script defined in the Drizzle configuration: - -```bash -pnpm turbo db:seed -``` - -### Develop - -To develop all apps and packages, run the following command: - -```shell -pnpm dev -``` - -## Useful Links - -Learn more about the power of Turborepo: - -- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) -- [Caching](https://turbo.build/repo/docs/core-concepts/caching) -- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) -- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) -- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) -- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) - -## References -- Drizzle Turbo Repo Template: https://github.com/htsh-tsyk/turbo-drizzle/tree/main -- Next.js Clean Architecture: https://github.com/nikolovlazar/nextjs-clean-architecture/tree/main -- Next.js 15 on turborepo template: https://github.com/vercel/turborepo/tree/c59da312df134cc1aaf7c269bc3cd0b78c073b07/examples/basic \ No newline at end of file diff --git a/README.md b/README.md index 059128e..070c737 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # ๐Ÿงฑ Clean Architecture Template for TypeScript Monorepos +[![Test and Build](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml/badge.svg)](https://github.com/thaitype/typescript-clean-architecture/actions/workflows/test-and-build.yml) + This is a **Clean Architecture starter template** designed for monorepos using **Turborepo** + **pnpm** + **TypeScript**. It's simple enough to get started quickly and scalable enough to grow into a large production system. --- @@ -13,6 +15,8 @@ pnpm install pnpm dev ``` +Read all document in [docs](./docs) folder. + --- ## ๐Ÿง  What is Clean Architecture? @@ -23,9 +27,9 @@ pnpm dev - Code is **testable**, **modular**, and easy to **extend** - Dependencies always point **inward**, from outer layers toward the core -## ๐Ÿค” Why Clean Architecture? +## ๐Ÿค” Why This Project Helps You -Clean Architecture helps you: +By leveraging Clean Architecture, this template enables you to: - โœจ Write framework-agnostic business logic - ๐Ÿงช Test use cases in isolation (no DB or HTTP server needed) @@ -35,6 +39,33 @@ Clean Architecture helps you: --- +## ๐Ÿ›  Usage (Root-Level Scripts) + +The root `package.json` includes common scripts powered by `turbo`: + + +### Script Descriptions + +- `dev`: Run all development servers/command in parallel, +- `build`: Build all packages respecting their dependency graph +- `test`: Run tests across all workspaces, including coverage test +- `test:watch`: Watch and re-run tests interactively +- `lint:check`: Run lint and type checks +- `lint:fix`: Automatically fix lint issues +- `format`: Check Prettier formatting +- `format:fix`: Auto-format using Prettier +- `test:coverage-report`: Run Show summary coverage report for all packages + +## How to run package in specific package + +For example to run only `cli` package: + +```bash +pnpm run dev --filter=cli +``` + +--- + ## ๐Ÿ”ฐ Template Project Overview This project follows a modular monorepo layout: diff --git a/docs/database.md b/docs/database.md new file mode 100644 index 0000000..a194af1 --- /dev/null +++ b/docs/database.md @@ -0,0 +1,40 @@ +# Database + +We use [Drizzle ORM](https://orm.drizzle.team/) to manage & access our database. As such you will need a database for this project, either locally or hosted in the cloud. + +To make this process easier, we offer a [`docker-compose.yml`](https://docs.docker.com/compose/) file to deploy a PostgreSQL server locally with a new database named `repo_development` (To change this update the `POSTGRES_DB` environment variable in the `docker-compose.yml` file): + +```bash +cd turbo-drizzle +docker-compose up -d +``` + +Once deployed you will need to copy the `.env.default` file to `.env` in order for Drizzle to have a `DATABASE_URL` environment variable to access. + +```bash +cp apps/web/.env.default apps/web/.env +``` + +If you added a custom database name, or use a cloud based database, you will need to update the `DATABASE_URL` in your `.env` accordingly. + +Once deployed & up & running, you will need to create & deploy migrations to your database to add the necessary tables. This can be done using [Drizzle Migrate](https://orm.drizzle.team/docs/migrations): + +in `database` package: (command `drizzle-kit generate`) + +``` +pnpm generate +``` + +```bash +pnpm turbo db:migrate +``` + +An optional additional step is to seed some initial or fake data to your database. + +To do this update check the seed script located in `packages/database/scripts/seed.ts` & add or update any users you wish to seed to the database. + +Once edited run the following command to run tell Drizzle to run the seed script defined in the Drizzle configuration: + +```bash +pnpm turbo db:seed +``` \ No newline at end of file diff --git a/docs.md b/docs/future-project-structure.md similarity index 88% rename from docs.md rename to docs/future-project-structure.md index 8260aec..aa612fe 100644 --- a/docs.md +++ b/docs/future-project-structure.md @@ -41,15 +41,14 @@ Once your project grows, the structure expands like this: โ”‚ โ”œโ”€โ”€ cache-redis/ # Redis cache adapter (for ICacheService) โ”‚ โ”œโ”€โ”€ mq-rabbitmq/ # RabbitMQ adapter (for IMessageQueueService) โ”‚ โ”œโ”€โ”€ email-sendgrid/ # SendGrid adapter +โ”‚ โ”œโ”€โ”€ shared/ # Cross-cutting shared utils โ”‚ โ””โ”€โ”€ logger-pino/ # Pino logger service โ”‚ -โ”œโ”€โ”€ shared/ -โ”‚ โ”œโ”€โ”€ types/ -โ”‚ โ”œโ”€โ”€ utils/ -โ”‚ โ”œโ”€โ”€ config/ -โ”‚ โ””โ”€โ”€ constants/ +โ”œโ”€โ”€ tools/ # Toolchain scripts and helpers +โ”‚ โ”œโ”€โ”€ db/ # DB migration + seed tooling +โ”‚ โ”œโ”€โ”€ mono/ # CLI wrapper for build/test/lint/dev +โ”‚ โ””โ”€โ”€ template/ # Reusable project template package โ”‚ -โ”œโ”€โ”€ tools/ # Scripts, CLI helpers โ””โ”€โ”€ design-system/ # (Optional) UI components ``` From 8f2ce8e8388b9fc5866b0abfd4489f50b38017be Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 12:07:38 +0700 Subject: [PATCH 42/44] docs: add references and resources for monorepo and clean architecture concepts --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 070c737..9a611e8 100644 --- a/README.md +++ b/README.md @@ -239,3 +239,17 @@ const userController = getInjection("UserController"); --- Happy coding! โœจ Let your architecture evolve, not collapse. ๐Ÿ—๏ธ + +--- + +## Read More +- Basic Concept of Monorepo by Turborepo: +- Clean Architecture: + +## References + +Some codes template bring the idea from those repositories: +- Drizzle Turbo Repo Template: +- Next.js Clean Architecture: +- Next.js 15 on turborepo template: +- Vitest on Turbo Repo: \ No newline at end of file From 892210423e7ce0fd411a1650f7dbb73f6bd37e5a Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Tue, 25 Mar 2025 12:08:30 +0700 Subject: [PATCH 43/44] docs: enhance README with IoC container details and add Q&A documentation --- README.md | 4 +++- docs/q-and-a.md | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 docs/q-and-a.md diff --git a/README.md b/README.md index 9a611e8..76265ac 100644 --- a/README.md +++ b/README.md @@ -227,7 +227,9 @@ I --> F ## ๐Ÿง  Dependency Injection -Uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus), a fast, lightweight container with no `reflect-metadata` needed. You resolve anything with: +This template uses [`@thaitype/ioctopus`](https://www.npmjs.com/package/@thaitype/ioctopus) โ€” a simple, metadata-free IoC container for TypeScript that works across runtimes (Node, Edge, etc). + +However, this project use a forked version of `ioctopus` when the original package is fully support type-safety, this project will switch back to the original package, see [issue#3](https://github.com/thaitype/ioctopus/issues/3) To resolve any service: diff --git a/docs/q-and-a.md b/docs/q-and-a.md new file mode 100644 index 0000000..f6bcb00 --- /dev/null +++ b/docs/q-and-a.md @@ -0,0 +1,26 @@ +# Q&A + +## ๐Ÿ†š Shared vs Domain + +### `shared/` +- Generic, reusable code: utilities, types, config loaders, constants +- Not tied to any business logic +- Can be used by any layer **except** `domain` +- Example: `formatDate()`, `PaginatedResult`, `Zod` validators + +### `domain/` +- Contains business entities, rules, and core logic +- No external dependencies โ€” must be 100% pure and stable +- Should not import from `shared` (to preserve isolation) +- Example: `User`, `Order`, `EmailAddress`, domain-specific errors + +## ๐Ÿ“š Glossary + +| Term | Meaning | +|-------------------|-------------------------------------------------------------------------| +| **Use Case** | One unit of business logic (e.g. CreateUser) | +| **Controller** | Handles incoming requests and calls use cases | +| **Presenter** | Formats output for UI or external clients | +| **Gateway** | Interface to external systems (e.g. DB, Email, Redis) | +| **Interface Adapter** | Layer that translates between external input/output and core logic | +| **Repository** | Contract for accessing data, implemented in infrastructure | \ No newline at end of file From 60bd76640e412a1154ab27a8d8fd4a779b04387b Mon Sep 17 00:00:00 2001 From: Thada Wangthammang Date: Sun, 18 May 2025 23:57:50 +0700 Subject: [PATCH 44/44] Migrate to T3 Stack with Users Domain in Clean Architecture (#3) * feat: migrate to clean architecture (#1) * Feature/migrate to t3 stacks (#2) * misc: update import paths and enhance tsconfig for consistent module resolution * misc: change alias from # to ~ * feat: migrate to t3 stack * feat: change VERCEL_URL to BASE_URL * fix: import * Feature: add Data Layer for Users Domain (#3) * feat: update README and docker-compose for MongoDB setup * feat: refactor User entity and repository, add mongoose integration * refactor: remove unused shared and add functions, clean up tests * feat: implement in-memory and mongoose user repositories, update dependency bindings * feat: switch IUserRepository binding to MongooseUserRepository and export mongoose module * refactor: di to outside * feat: add MongooseClient for MongoDB connection management and update exports * chore: upgrade deps * chore: update dependencies and devDependencies in package.json files * refactor: BaseController * feat: enhance DI container with MongoDB configuration and add AppConfig interface * feat: add dotenv configuration for MongoDB connection and update docker-compose for ARM architecture * feat: implement DIContainer for dependency injection and update index export * feat: enhance dependency injection with shared module and implement logging interfaces * feat: refactor UserController and SharedControllerDeps for improved dependency management; enhance error handling in runCommand * refactor: type * feat: add 'check-types:watch' script to various package.json files and update CLI for type checking * feat: enhance User entity and Mongoose model with createdAt and updatedAt fields; implement getById method in UserController * feat: implement UserController and UserDto; refactor user repository interfaces and use cases for improved structure and functionality * feat: refactor user-related entities and repositories for improved type handling; update UserController and CLI logging * feat: introduce SystemMetadata interface and refactor User and UserDto types for improved structure; remove unused types * feat: refactor IUserRepository and UserUseCase to use UserUseCaseInput and UserUseCaseOutput types; remove UserDto and update UserController accordingly * feat: refactor IUserRepository and UserUseCase to use UserUseCaseArgs; implement additional methods for CRUD operations and pagination * feat: implement user listing and pagination in UserController; remove InMemoryUserRepository and update related exports * refactor: core package with prefix number layer * refactor: remove unused shared components and simplify UserController dependencies * refactor: replace DIContainer with AppContextBuilder for improved dependency management and initialization * refactor: remove unused MongoUri and MongoOptions definitions from ServiceRegistry * refactor: clean up code formatting and improve consistency across various files * resolve conflict * fix: remove unused UI property from turbo.json --- .github/workflows/test-and-build.yml | 7 +- .gitignore | 6 +- .husky/pre-push | 1 + README.md | 2 +- apps/cli/.env.example | 1 + apps/cli/package.json | 13 +- apps/cli/src/index.ts | 45 +- apps/nextjs/app/_components/post.tsx | 50 + apps/nextjs/app/api/trpc/[trpc]/route.ts | 32 + apps/nextjs/app/layout.tsx | 26 +- apps/nextjs/app/page.tsx | 50 +- apps/nextjs/core/bootstrap.ts | 2 +- apps/nextjs/env.js | 43 + apps/nextjs/next.config.js | 6 + apps/nextjs/package.json | 28 +- apps/nextjs/postcss.config.js | 5 + apps/nextjs/server/api/root.ts | 23 + apps/nextjs/server/api/routers/post.ts | 36 + apps/nextjs/server/api/trpc.ts | 102 + apps/nextjs/styles/globals.css | 6 + apps/nextjs/trpc/query-client.ts | 20 + apps/nextjs/trpc/react.tsx | 77 + apps/nextjs/trpc/server.ts | 27 + apps/nextjs/tsconfig.json | 9 +- apps/nextjs/tsconfig.tsbuildinfo | 1 + configs/config-eslint/package.json | 18 +- configs/config-typescript/base.json | 8 +- configs/config-vitest/package.json | 8 +- core/{domain => 1-domain}/README.md | 0 .../eslint.config.mjs | 0 core/{domain => 1-domain}/package.json | 9 +- core/1-domain/src/entities/SystemMetadata.ts | 6 + core/1-domain/src/entities/User.ts | 7 + core/1-domain/src/entities/index.ts | 2 + core/{domain => 1-domain}/src/index.ts | 0 core/{application => 1-domain}/tsconfig.json | 0 .../vitest.config.ts | 0 core/{application => 2-application}/README.md | 0 core/{di => 2-application}/eslint.config.mjs | 0 .../package.json | 10 +- core/2-application/src/composed/.gitkeep | 0 core/2-application/src/index.ts | 1 + core/2-application/src/types.ts | 10 + .../src/users/IUserRepository.ts | 17 + core/2-application/src/users/UserUseCase.ts | 34 + .../src/users/UserUseCaseArgs.ts | 34 + core/2-application/src/users/index.ts | 3 + core/{di => 2-application}/tsconfig.json | 0 core/{di => 2-application}/vitest.config.ts | 0 core/{di => 3-interface-adapters}/README.md | 0 .../eslint.config.mjs | 0 .../package.json | 14 +- core/3-interface-adapters/src/index.ts | 1 + .../src/users/UserController.ts | 44 + .../src/users}/index.ts | 0 .../tsconfig.json | 0 .../vitest.config.ts | 0 .../README.md | 0 .../eslint.config.mjs | 0 .../package.json | 12 +- .../src/clients/MongooseClient.ts | 35 + core/4-infrastructure/src/clients/index.ts | 1 + core/4-infrastructure/src/index.ts | 2 + core/4-infrastructure/src/mongoose/index.ts | 1 + .../src/mongoose/users/MongooseUserModel.ts | 15 + .../mongoose/users/MongooseUserRepository.ts | 64 + .../src/mongoose/users/index.ts | 2 + .../tsconfig.json | 0 .../vitest.config.ts | 0 core/application/src/index.ts | 2 - .../src/interfaces/IUserRepository.ts | 6 - core/application/src/interfaces/index.ts | 1 - core/application/src/use-cases/UserUseCase.ts | 15 - core/application/src/use-cases/index.ts | 1 - core/di/src/container.ts | 20 - core/di/src/index.ts | 1 - core/domain/src/entities/User.ts | 7 - core/domain/src/entities/index.ts | 1 - core/infrastructure/src/index.ts | 1 - .../src/repositories/UserRepository.ts | 14 - core/infrastructure/src/repositories/index.ts | 1 - .../src/controllers/UserController.ts | 15 - core/interface-adapters/src/index.ts | 1 - {core/interface-adapters => di}/README.md | 0 .../eslint.config.mjs | 0 {core/di => di}/package.json | 12 +- di/src/AppConfig.ts | 8 + di/src/AppContextBuilder.ts | 54 + {core/di => di}/src/ServiceRegistry.ts | 8 +- di/src/index.ts | 1 + {core/interface-adapters => di}/tsconfig.json | 0 .../vitest.config.ts | 0 docker-compose.yml | 20 +- docs/README.md | 10 + package.json | 37 +- packages/database-drizzle/package.json | 11 +- packages/database-drizzle/src/migrate.ts | 2 +- packages/database-drizzle/src/seed.ts | 2 +- packages/shared/package.json | 12 +- packages/shared/src/index.ts | 1 + packages/shared/src/logger/ConsoleLogger.ts | 76 + packages/shared/src/logger/ILogger.ts | 17 + packages/shared/src/logger/InMemoryLogger.ts | 52 + packages/shared/src/logger/NoopLogger.ts | 13 + packages/shared/src/logger/index.ts | 4 + pnpm-lock.yaml | 3305 ++++++++++------- pnpm-workspace.yaml | 1 + tools/db/package.json | 10 +- tools/mono/package.json | 7 +- tools/mono/src/cli.ts | 1 + tools/mono/src/libs.ts | 7 +- tools/template/package.json | 6 +- turbo.json | 5 +- 113 files changed, 3233 insertions(+), 1511 deletions(-) create mode 100644 .husky/pre-push create mode 100644 apps/cli/.env.example create mode 100644 apps/nextjs/app/_components/post.tsx create mode 100644 apps/nextjs/app/api/trpc/[trpc]/route.ts create mode 100644 apps/nextjs/env.js create mode 100644 apps/nextjs/postcss.config.js create mode 100644 apps/nextjs/server/api/root.ts create mode 100644 apps/nextjs/server/api/routers/post.ts create mode 100644 apps/nextjs/server/api/trpc.ts create mode 100644 apps/nextjs/styles/globals.css create mode 100644 apps/nextjs/trpc/query-client.ts create mode 100644 apps/nextjs/trpc/react.tsx create mode 100644 apps/nextjs/trpc/server.ts create mode 100644 apps/nextjs/tsconfig.tsbuildinfo rename core/{domain => 1-domain}/README.md (100%) rename core/{application => 1-domain}/eslint.config.mjs (100%) rename core/{domain => 1-domain}/package.json (69%) create mode 100644 core/1-domain/src/entities/SystemMetadata.ts create mode 100644 core/1-domain/src/entities/User.ts create mode 100644 core/1-domain/src/entities/index.ts rename core/{domain => 1-domain}/src/index.ts (100%) rename core/{application => 1-domain}/tsconfig.json (100%) rename core/{application => 1-domain}/vitest.config.ts (100%) rename core/{application => 2-application}/README.md (100%) rename core/{di => 2-application}/eslint.config.mjs (100%) rename core/{application => 2-application}/package.json (69%) create mode 100644 core/2-application/src/composed/.gitkeep create mode 100644 core/2-application/src/index.ts create mode 100644 core/2-application/src/types.ts create mode 100644 core/2-application/src/users/IUserRepository.ts create mode 100644 core/2-application/src/users/UserUseCase.ts create mode 100644 core/2-application/src/users/UserUseCaseArgs.ts create mode 100644 core/2-application/src/users/index.ts rename core/{di => 2-application}/tsconfig.json (100%) rename core/{di => 2-application}/vitest.config.ts (100%) rename core/{di => 3-interface-adapters}/README.md (100%) rename core/{domain => 3-interface-adapters}/eslint.config.mjs (100%) rename core/{interface-adapters => 3-interface-adapters}/package.json (60%) create mode 100644 core/3-interface-adapters/src/index.ts create mode 100644 core/3-interface-adapters/src/users/UserController.ts rename core/{interface-adapters/src/controllers => 3-interface-adapters/src/users}/index.ts (100%) rename core/{domain => 3-interface-adapters}/tsconfig.json (100%) rename core/{domain => 3-interface-adapters}/vitest.config.ts (100%) rename core/{infrastructure => 4-infrastructure}/README.md (100%) rename core/{infrastructure => 4-infrastructure}/eslint.config.mjs (100%) rename core/{infrastructure => 4-infrastructure}/package.json (66%) create mode 100644 core/4-infrastructure/src/clients/MongooseClient.ts create mode 100644 core/4-infrastructure/src/clients/index.ts create mode 100644 core/4-infrastructure/src/index.ts create mode 100644 core/4-infrastructure/src/mongoose/index.ts create mode 100644 core/4-infrastructure/src/mongoose/users/MongooseUserModel.ts create mode 100644 core/4-infrastructure/src/mongoose/users/MongooseUserRepository.ts create mode 100644 core/4-infrastructure/src/mongoose/users/index.ts rename core/{infrastructure => 4-infrastructure}/tsconfig.json (100%) rename core/{infrastructure => 4-infrastructure}/vitest.config.ts (100%) delete mode 100644 core/application/src/index.ts delete mode 100644 core/application/src/interfaces/IUserRepository.ts delete mode 100644 core/application/src/interfaces/index.ts delete mode 100644 core/application/src/use-cases/UserUseCase.ts delete mode 100644 core/application/src/use-cases/index.ts delete mode 100644 core/di/src/container.ts delete mode 100644 core/di/src/index.ts delete mode 100644 core/domain/src/entities/User.ts delete mode 100644 core/domain/src/entities/index.ts delete mode 100644 core/infrastructure/src/index.ts delete mode 100644 core/infrastructure/src/repositories/UserRepository.ts delete mode 100644 core/infrastructure/src/repositories/index.ts delete mode 100644 core/interface-adapters/src/controllers/UserController.ts delete mode 100644 core/interface-adapters/src/index.ts rename {core/interface-adapters => di}/README.md (100%) rename {core/interface-adapters => di}/eslint.config.mjs (100%) rename {core/di => di}/package.json (73%) create mode 100644 di/src/AppConfig.ts create mode 100644 di/src/AppContextBuilder.ts rename {core/di => di}/src/ServiceRegistry.ts (52%) create mode 100644 di/src/index.ts rename {core/interface-adapters => di}/tsconfig.json (100%) rename {core/interface-adapters => di}/vitest.config.ts (100%) create mode 100644 docs/README.md create mode 100644 packages/shared/src/logger/ConsoleLogger.ts create mode 100644 packages/shared/src/logger/ILogger.ts create mode 100644 packages/shared/src/logger/InMemoryLogger.ts create mode 100644 packages/shared/src/logger/NoopLogger.ts create mode 100644 packages/shared/src/logger/index.ts diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index 4849d9e..e705ff8 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -9,7 +9,7 @@ on: - main env: - NODE_VERSION: 20.18.x + NODE_VERSION: 22.14.x # PNPM_VERSION: 10.5.x jobs: @@ -43,6 +43,5 @@ jobs: - name: Prepare .env file run: cp apps/nextjs/.env.default apps/nextjs/.env - # Ignore build until fix server action build in Next.js - # - name: Build project - # run: pnpm build + - name: Build project + run: pnpm build diff --git a/.gitignore b/.gitignore index d79527e..3e5d276 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,8 @@ generated .env -coverage.json \ No newline at end of file +coverage.json + +tsconfig.tsbuildinfo + +.nx diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 0000000..02a41d1 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1 @@ +pnpm lint:check diff --git a/README.md b/README.md index 76265ac..2a43fcb 100644 --- a/README.md +++ b/README.md @@ -254,4 +254,4 @@ Some codes template bring the idea from those repositories: - Drizzle Turbo Repo Template: - Next.js Clean Architecture: - Next.js 15 on turborepo template: -- Vitest on Turbo Repo: \ No newline at end of file +- Vitest on Turbo Repo: diff --git a/apps/cli/.env.example b/apps/cli/.env.example new file mode 100644 index 0000000..4c27159 --- /dev/null +++ b/apps/cli/.env.example @@ -0,0 +1 @@ +MONGO_URI=mongodb://root:example@localhost:27017/test-db?authSource=admin \ No newline at end of file diff --git a/apps/cli/package.json b/apps/cli/package.json index 527e633..cdc80ff 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -4,23 +4,24 @@ "license": "MIT", "private": true, "scripts": { - "dev": "mono dev", "start": "mono start", "build": "mono build", "test": "mono test", "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { - "@acme/di": "workspace:*" + "@acme/di": "workspace:*", + "dotenv": "^16.5.0" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", "@acme/config-vitest": "workspace:*", - "@types/node": "^22.13.9" + "@acme/mono": "workspace:*", + "@types/node": "^22.15.18" } -} \ No newline at end of file +} diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 8704be4..1a9b016 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -1,16 +1,43 @@ -import { getInjection } from '@acme/di'; -import { add } from './add'; +import dotenv from 'dotenv'; +import { AppContextBuilder } from '@acme/di'; -// console.log('Hello World ' + add(1, 2) + ' ' + shared()); +dotenv.config(); console.log('ARGS: ', process.argv); -const userController = getInjection('UserController'); +const app = new AppContextBuilder({ + mongo: { + uri: process.env.MONGO_URI!, + options: { + timeoutMS: 1000, + }, + }, +}); (async () => { - await userController.create({ - body: { id: 'u1', name: 'Alice', email: 'alice@example.com' }, - }); + await app.init(); + const userController = app.get('UserController'); + // const createdUser = await userController.create({ name: 'Alice', email: 'alice@example.com' }); - console.log(`User: ${JSON.stringify(await userController.get({ params: { id: 'u1' } }))}`); -})(); + const listUsers = await userController.listWithPagination({ + limit: 2, + offset: 2, + }); + for (const user of listUsers.items) { + console.log(`User: ${JSON.stringify(user)}`); + } + console.log(`Has next: ${listUsers.hasNext}`); + // console.log(`User with ID: ${JSON.stringify(createdUser.id)}`); + console.log('Complete'); +})() + .catch(err => { + if (err instanceof Error) { + console.error('Error: ', err.message); + } else { + console.error('Error: ', err); + } + process.exit(1); + }) + .finally(async () => { + await app.shutdown(); + }); diff --git a/apps/nextjs/app/_components/post.tsx b/apps/nextjs/app/_components/post.tsx new file mode 100644 index 0000000..59a1f8d --- /dev/null +++ b/apps/nextjs/app/_components/post.tsx @@ -0,0 +1,50 @@ +'use client'; + +import { useState } from 'react'; + +import { api } from '~/trpc/react'; + +export function LatestPost() { + const [latestPost] = api.post.getLatest.useSuspenseQuery(); + + const utils = api.useUtils(); + const [name, setName] = useState(''); + const createPost = api.post.create.useMutation({ + onSuccess: async () => { + await utils.post.invalidate(); + setName(''); + }, + }); + + return ( +
+ {latestPost ? ( +

Your most recent post: {latestPost.name}

+ ) : ( +

You have no posts yet.

+ )} +
{ + e.preventDefault(); + createPost.mutate({ name }); + }} + className="flex flex-col gap-2" + > + setName(e.target.value)} + className="w-full rounded-full bg-white/10 px-4 py-2 text-white" + /> + +
+
+ ); +} diff --git a/apps/nextjs/app/api/trpc/[trpc]/route.ts b/apps/nextjs/app/api/trpc/[trpc]/route.ts new file mode 100644 index 0000000..5756411 --- /dev/null +++ b/apps/nextjs/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,32 @@ +import { fetchRequestHandler } from '@trpc/server/adapters/fetch'; +import { type NextRequest } from 'next/server'; + +import { env } from '~/env'; +import { appRouter } from '~/server/api/root'; +import { createTRPCContext } from '~/server/api/trpc'; + +/** + * This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when + * handling a HTTP request (e.g. when you make requests from Client Components). + */ +const createContext = async (req: NextRequest) => { + return createTRPCContext({ + headers: req.headers, + }); +}; + +const handler = (req: NextRequest) => + fetchRequestHandler({ + endpoint: '/api/trpc', + req, + router: appRouter, + createContext: () => createContext(req), + onError: + env.NODE_ENV === 'development' + ? ({ path, error }) => { + console.error(`โŒ tRPC failed on ${path ?? ''}: ${error.message}`); + } + : undefined, + }); + +export { handler as GET, handler as POST }; diff --git a/apps/nextjs/app/layout.tsx b/apps/nextjs/app/layout.tsx index f3ef34c..ee27b47 100644 --- a/apps/nextjs/app/layout.tsx +++ b/apps/nextjs/app/layout.tsx @@ -1,7 +1,27 @@ -export default function RootLayout({ children }: { children: React.ReactNode }) { +import '~/styles/globals.css'; + +import { type Metadata } from 'next'; +import { Geist } from 'next/font/google'; + +import { TRPCReactProvider } from '~/trpc/react'; + +export const metadata: Metadata = { + title: 'Create T3 App', + description: 'Generated by create-t3-app', + icons: [{ rel: 'icon', url: '/favicon.ico' }], +}; + +const geist = Geist({ + subsets: ['latin'], + variable: '--font-geist-sans', +}); + +export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) { return ( - - {children} + + + {children} + ); } diff --git a/apps/nextjs/app/page.tsx b/apps/nextjs/app/page.tsx index b174e8e..43a260b 100644 --- a/apps/nextjs/app/page.tsx +++ b/apps/nextjs/app/page.tsx @@ -1,11 +1,49 @@ -// import { fetchUsers } from "../data"; +import Link from 'next/link'; -export default async function IndexPage() { - // const users = await fetchUsers(); +import { LatestPost } from '~/app/_components/post'; +import { api, HydrateClient } from '~/trpc/server'; + +export default async function Home() { + const hello = await api.post.hello({ text: 'from tRPC' }); + + void api.post.getLatest.prefetch(); return ( -
-

User List:

ร{/*
{JSON.stringify(users, null, 2)}
*/} -
+ +
+
+

+ Create T3 App +

+
+ +

First Steps โ†’

+
+ Just the basics - Everything you need to know to set up your database and authentication. +
+ + +

Documentation โ†’

+
+ Learn more about Create T3 App, the libraries it uses, and how to deploy it. +
+ +
+
+

{hello ? hello.greeting : 'Loading tRPC query...'}

+
+ + +
+
+
); } diff --git a/apps/nextjs/core/bootstrap.ts b/apps/nextjs/core/bootstrap.ts index b2e89ee..fafcc22 100644 --- a/apps/nextjs/core/bootstrap.ts +++ b/apps/nextjs/core/bootstrap.ts @@ -1,6 +1,6 @@ import 'dotenv/config'; -import { getDbContext, DbContextWithSchema } from '@acme/database-drizzle'; +import { getDbContext, type DbContextWithSchema } from '@acme/database-drizzle'; export const getEnvVariable = (name: string) => { const value = process.env[name]; diff --git a/apps/nextjs/env.js b/apps/nextjs/env.js new file mode 100644 index 0000000..a17cf15 --- /dev/null +++ b/apps/nextjs/env.js @@ -0,0 +1,43 @@ +// @ts-check +import { createEnv } from "@t3-oss/env-nextjs"; +import { z } from "zod"; + +export const env = createEnv({ + /** + * Specify your server-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. + */ + server: { + NODE_ENV: z.enum(["development", "test", "production"]), + }, + + /** + * Specify your client-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. To expose them to the client, prefix them with + * `NEXT_PUBLIC_`. + */ + client: { + // NEXT_PUBLIC_API_PATH: z.string().url(), + // NEXT_PUBLIC_CLIENTVAR: z.string(), + }, + + /** + * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g. + * middlewares) or client-side so we need to destruct manually. + */ + runtimeEnv: { + NODE_ENV: process.env.NODE_ENV, + // NEXT_PUBLIC_API_PATH: process.env.NEXT_PUBLIC_API_PATH, + // NEXT_PUBLIC_CLIENTVAR: process.env.NEXT_PUBLIC_CLIENTVAR, + }, + /** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially + * useful for Docker builds. + */ + skipValidation: !!process.env.SKIP_ENV_VALIDATION, + /** + * Makes it so that empty strings are treated as undefined. `SOME_VAR: z.string()` and + * `SOME_VAR=''` will throw an error. + */ + emptyStringAsUndefined: true, +}); diff --git a/apps/nextjs/next.config.js b/apps/nextjs/next.config.js index 4678774..47347f1 100644 --- a/apps/nextjs/next.config.js +++ b/apps/nextjs/next.config.js @@ -1,3 +1,9 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +import "./env.js"; + /** @type {import('next').NextConfig} */ const nextConfig = {}; diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index c463a28..db6a5bc 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -9,21 +9,33 @@ "start": "next start", "lint:check": "next lint --max-warnings 0", "lint:fix": "next lint --fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { - "next": "^15.2.1", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "@acme/database-drizzle": "workspace:*" + "@t3-oss/env-nextjs": "^0.12.0", + "@tanstack/react-query": "^5.76.1", + "@acme/database-drizzle": "workspace:*", + "@trpc/client": "^11.1.2", + "@trpc/react-query": "^11.1.2", + "@trpc/server": "^11.1.2", + "next": "^15.3.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "server-only": "^0.0.1", + "superjson": "^2.2.2", + "zod": "^3.24.4" }, "devDependencies": { - "@acme/mono": "workspace:*", + "@tailwindcss/postcss": "^4.1.7", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", "@acme/config-vitest": "workspace:*", - "@types/node": "^22.13.9", + "@acme/mono": "workspace:*", + "@types/node": "^22.15.18", "@types/react": "19.0.10", - "@types/react-dom": "19.0.4" + "@types/react-dom": "19.0.4", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^4.1.7" } } diff --git a/apps/nextjs/postcss.config.js b/apps/nextjs/postcss.config.js new file mode 100644 index 0000000..c2ddf74 --- /dev/null +++ b/apps/nextjs/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; diff --git a/apps/nextjs/server/api/root.ts b/apps/nextjs/server/api/root.ts new file mode 100644 index 0000000..4a6e7dc --- /dev/null +++ b/apps/nextjs/server/api/root.ts @@ -0,0 +1,23 @@ +import { postRouter } from '~/server/api/routers/post'; +import { createCallerFactory, createTRPCRouter } from '~/server/api/trpc'; + +/** + * This is the primary router for your server. + * + * All routers added in /api/routers should be manually added here. + */ +export const appRouter = createTRPCRouter({ + post: postRouter, +}); + +// export type definition of API +export type AppRouter = typeof appRouter; + +/** + * Create a server-side caller for the tRPC API. + * @example + * const trpc = createCaller(createContext); + * const res = await trpc.post.all(); + * ^? Post[] + */ +export const createCaller = createCallerFactory(appRouter); diff --git a/apps/nextjs/server/api/routers/post.ts b/apps/nextjs/server/api/routers/post.ts new file mode 100644 index 0000000..1ba7301 --- /dev/null +++ b/apps/nextjs/server/api/routers/post.ts @@ -0,0 +1,36 @@ +import { z } from 'zod'; + +import { createTRPCRouter, publicProcedure } from '~/server/api/trpc'; + +// Mocked DB +export interface Post { + id: number; + name: string; +} +const posts: Post[] = [ + { + id: 1, + name: 'Hello World', + }, +]; + +export const postRouter = createTRPCRouter({ + hello: publicProcedure.input(z.object({ text: z.string() })).query(({ input }) => { + return { + greeting: `Hello ${input.text}`, + }; + }), + + create: publicProcedure.input(z.object({ name: z.string().min(1) })).mutation(async ({ input }) => { + const post: Post = { + id: posts.length + 1, + name: input.name, + }; + posts.push(post); + return post; + }), + + getLatest: publicProcedure.query(() => { + return posts.at(-1) ?? null; + }), +}); diff --git a/apps/nextjs/server/api/trpc.ts b/apps/nextjs/server/api/trpc.ts new file mode 100644 index 0000000..57f6ae2 --- /dev/null +++ b/apps/nextjs/server/api/trpc.ts @@ -0,0 +1,102 @@ +/** + * YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS: + * 1. You want to modify request context (see Part 1). + * 2. You want to create a new middleware or type of procedure (see Part 3). + * + * TL;DR - This is where all the tRPC server stuff is created and plugged in. The pieces you will + * need to use are documented accordingly near the end. + */ +import { initTRPC } from '@trpc/server'; +import superjson from 'superjson'; +import { ZodError } from 'zod'; + +/** + * 1. CONTEXT + * + * This section defines the "contexts" that are available in the backend API. + * + * These allow you to access things when processing a request, like the database, the session, etc. + * + * This helper generates the "internals" for a tRPC context. The API handler and RSC clients each + * wrap this and provides the required context. + * + * @see https://trpc.io/docs/server/context + */ +export const createTRPCContext = async (opts: { headers: Headers }) => { + return { + ...opts, + }; +}; + +/** + * 2. INITIALIZATION + * + * This is where the tRPC API is initialized, connecting the context and transformer. We also parse + * ZodErrors so that you get typesafety on the frontend if your procedure fails due to validation + * errors on the backend. + */ +const t = initTRPC.context().create({ + transformer: superjson, + errorFormatter({ shape, error }) { + return { + ...shape, + data: { + ...shape.data, + zodError: error.cause instanceof ZodError ? error.cause.flatten() : null, + }, + }; + }, +}); + +/** + * Create a server-side caller. + * + * @see https://trpc.io/docs/server/server-side-calls + */ +export const createCallerFactory = t.createCallerFactory; + +/** + * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT) + * + * These are the pieces you use to build your tRPC API. You should import these a lot in the + * "/src/server/api/routers" directory. + */ + +/** + * This is how you create new routers and sub-routers in your tRPC API. + * + * @see https://trpc.io/docs/router + */ +export const createTRPCRouter = t.router; + +/** + * Middleware for timing procedure execution and adding an artificial delay in development. + * + * You can remove this if you don't like it, but it can help catch unwanted waterfalls by simulating + * network latency that would occur in production but not in local development. + */ +const timingMiddleware = t.middleware(async ({ next, path }) => { + const start = Date.now(); + + if (t._config.isDev) { + // artificial delay in dev + const waitMs = Math.floor(Math.random() * 400) + 100; + await new Promise(resolve => setTimeout(resolve, waitMs)); + } + + const result = await next(); + + const end = Date.now(); + console.log(`[TRPC] ${path} took ${end - start}ms to execute`); + + return result; +}); + +/** + * Public (unauthenticated) procedure + * + * This is the base piece you use to build new queries and mutations on your tRPC API. It does not + * guarantee that a user querying is authorized, but you can still access user session data if they + * are logged in. + */ +export const publicProcedure = t.procedure.use(timingMiddleware); diff --git a/apps/nextjs/styles/globals.css b/apps/nextjs/styles/globals.css new file mode 100644 index 0000000..8fe04fa --- /dev/null +++ b/apps/nextjs/styles/globals.css @@ -0,0 +1,6 @@ +@import "tailwindcss"; + +@theme { + --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +} diff --git a/apps/nextjs/trpc/query-client.ts b/apps/nextjs/trpc/query-client.ts new file mode 100644 index 0000000..6a5021f --- /dev/null +++ b/apps/nextjs/trpc/query-client.ts @@ -0,0 +1,20 @@ +import { defaultShouldDehydrateQuery, QueryClient } from '@tanstack/react-query'; +import SuperJSON from 'superjson'; + +export const createQueryClient = () => + new QueryClient({ + defaultOptions: { + queries: { + // With SSR, we usually want to set some default staleTime + // above 0 to avoid refetching immediately on the client + staleTime: 30 * 1000, + }, + dehydrate: { + serializeData: SuperJSON.serialize, + shouldDehydrateQuery: query => defaultShouldDehydrateQuery(query) || query.state.status === 'pending', + }, + hydrate: { + deserializeData: SuperJSON.deserialize, + }, + }, + }); diff --git a/apps/nextjs/trpc/react.tsx b/apps/nextjs/trpc/react.tsx new file mode 100644 index 0000000..becf34a --- /dev/null +++ b/apps/nextjs/trpc/react.tsx @@ -0,0 +1,77 @@ +'use client'; + +import { QueryClientProvider, type QueryClient } from '@tanstack/react-query'; +import { httpBatchStreamLink, loggerLink } from '@trpc/client'; +import { createTRPCReact } from '@trpc/react-query'; +import { type inferRouterInputs, type inferRouterOutputs } from '@trpc/server'; +import { useState } from 'react'; +import SuperJSON from 'superjson'; + +import { type AppRouter } from '~/server/api/root'; +import { createQueryClient } from './query-client'; + +let clientQueryClientSingleton: QueryClient | undefined = undefined; +const getQueryClient = () => { + if (typeof window === 'undefined') { + // Server: always make a new query client + return createQueryClient(); + } + // Browser: use singleton pattern to keep the same query client + clientQueryClientSingleton ??= createQueryClient(); + + return clientQueryClientSingleton; +}; + +export const api = createTRPCReact(); + +/** + * Inference helper for inputs. + * + * @example type HelloInput = RouterInputs['example']['hello'] + */ +export type RouterInputs = inferRouterInputs; + +/** + * Inference helper for outputs. + * + * @example type HelloOutput = RouterOutputs['example']['hello'] + */ +export type RouterOutputs = inferRouterOutputs; + +export function TRPCReactProvider(props: { children: React.ReactNode }) { + const queryClient = getQueryClient(); + + const [trpcClient] = useState(() => + api.createClient({ + links: [ + loggerLink({ + enabled: op => + process.env.NODE_ENV === 'development' || (op.direction === 'down' && op.result instanceof Error), + }), + httpBatchStreamLink({ + transformer: SuperJSON, + url: getBaseUrl() + '/api/trpc', + headers: () => { + const headers = new Headers(); + headers.set('x-trpc-source', 'nextjs-react'); + return headers; + }, + }), + ], + }) + ); + + return ( + + + {props.children} + + + ); +} + +function getBaseUrl() { + if (typeof window !== 'undefined') return window.location.origin; + if (process.env.BASE_URL) return `https://${process.env.BASE_URL}`; + return `http://localhost:${process.env.PORT ?? 3000}`; +} diff --git a/apps/nextjs/trpc/server.ts b/apps/nextjs/trpc/server.ts new file mode 100644 index 0000000..38bc4bd --- /dev/null +++ b/apps/nextjs/trpc/server.ts @@ -0,0 +1,27 @@ +import 'server-only'; + +import { createHydrationHelpers } from '@trpc/react-query/rsc'; +import { headers } from 'next/headers'; +import { cache } from 'react'; + +import { createCaller, type AppRouter } from '~/server/api/root'; +import { createTRPCContext } from '~/server/api/trpc'; +import { createQueryClient } from './query-client'; + +/** + * This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when + * handling a tRPC call from a React Server Component. + */ +const createContext = cache(async () => { + const heads = new Headers(await headers()); + heads.set('x-trpc-source', 'rsc'); + + return createTRPCContext({ + headers: heads, + }); +}); + +const getQueryClient = cache(createQueryClient); +const caller = createCaller(createContext); + +export const { trpc: api, HydrateClient } = createHydrationHelpers(caller, getQueryClient); diff --git a/apps/nextjs/tsconfig.json b/apps/nextjs/tsconfig.json index 087900d..122decf 100644 --- a/apps/nextjs/tsconfig.json +++ b/apps/nextjs/tsconfig.json @@ -1,6 +1,13 @@ { "extends": "@acme/config-typescript/nextjs.json", - "compilerOptions": { "plugins": [{ "name": "next" }] }, + "compilerOptions": { + /* Path Aliases */ + "baseUrl": ".", + "paths": { + "~/*": ["./*"] + }, + "plugins": [{ "name": "next" }] + }, "include": [ "next-env.d.ts", "next.config.js", diff --git a/apps/nextjs/tsconfig.tsbuildinfo b/apps/nextjs/tsconfig.tsbuildinfo new file mode 100644 index 0000000..e061499 --- /dev/null +++ b/apps/nextjs/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/styled-jsx/types/css.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/styled-jsx/types/macro.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/styled-jsx/types/style.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/styled-jsx/types/global.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/styled-jsx/types/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/amp.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/get-page-files.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.15.18/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/canary.d.ts","../../node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/experimental.d.ts","../../node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/canary.d.ts","../../node_modules/.pnpm/@types+react-dom@19.0.4_@types+react@19.0.10/node_modules/@types/react-dom/experimental.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/fallback.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/webpack/webpack.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/load-custom-routes.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/body-streams.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/cache-control.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/setup-exception-listeners.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/worker.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/constants.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/app-router-headers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/rendering-mode.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/require-hook.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/experimental/ppr.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/page-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-polyfill-crypto.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-baseline.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-extensions/random.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-extensions/date.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/node-environment.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/page-extensions-type.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-kind.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/route-module.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/deep-readonly.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/load-components.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/cache-handlers/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/response-cache/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/render-result.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/flight-data-helpers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/mitt.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/with-router.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/router.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/route-loader.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/page-loader.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/bloom-filter.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/router.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/templates/pages.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/pages/module.d.ts","../../node_modules/.pnpm/@types+react@19.0.10/node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/react-dev-overlay/pages/pages-dev-overlay.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/render.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/response-cache/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/instrumentation/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-matchers/route-matcher.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/i18n-provider.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/normalizer.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/suffix.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/rsc.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/next-data.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/after/builtin-request-context.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/base-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/next-url.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/request.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/response.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/adapter.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/use-cache/cache-life.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/constants.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/app-dir-module.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/cache-signal.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/fallback-params.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/lazy-result.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/implicit-tags.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot-instance.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/clean-async-snapshot.external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/app-render.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/server-inserted-metadata.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/error-boundary.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/layout-router.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/render-from-template-context.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/client-page.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/client-segment.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/search-params.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/hooks-server-context.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/resolvers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/types/icons.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/metadata/metadata.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/metadata/metadata-boundary.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/rsc/preloads.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/rsc/postpone.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/rsc/taint.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/collect-segment-data.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/entry-base.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/templates/app-page.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-page/module.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/async-storage/work-store.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/http.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-status-code.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect-error.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/templates/app-route.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-route/module.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/segment-config/app/app-segments.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/static-paths/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/utils.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/turborepo-access-trace/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/turborepo-access-trace/result.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/turborepo-access-trace/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/export/routes/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/export/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/export/worker.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/worker.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/after/after.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/after/after-context.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/params.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/route-matches/route-match.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request-meta.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/cli/next-test.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/config-shared.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/base-http/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/api-utils/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/base-http/node.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/async-callback-set.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","../../node_modules/.pnpm/sharp@0.34.1/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/image-optimizer.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/next-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/lib/coalesced-function.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/router-utils/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/trace/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/trace/trace.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/trace/shared.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/trace/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/load-jsconfig.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/webpack-config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/swc/generated-native.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/build/swc/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/parse-version-info.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/react-dev-overlay/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/hot-reloader-types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/telemetry/storage.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/render-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/router-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/lru-cache.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/lib/dev-bundler-service.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/static-paths-worker.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/dev/next-dev-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/next.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","../../node_modules/.pnpm/@next+env@15.3.2/node_modules/@next/env/dist/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/utils.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_app.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/app.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/use-cache/cache-tag.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/cache.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/runtime-config.external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/config.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_document.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/document.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/dynamic.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dynamic.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/pages/_error.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/error.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/head.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/head.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/cookies.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/headers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/draft-mode.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/headers.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/get-img-props.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/image-component.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/shared/lib/image-external.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/image.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/link.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/link.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/redirect.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/not-found.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/forbidden.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/unauthorized.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/unstable-rethrow.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/navigation.react-server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/components/navigation.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/navigation.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/router.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/client/script.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/script.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@vercel/og/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/after/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/root-params.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/server/request/connection.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/server.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/types/global.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/types/compiled.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/image-types/global.d.ts","./next-env.d.ts","../../node_modules/.pnpm/@t3-oss+env-core@0.12.0_typescript@5.8.3_zod@3.24.4/node_modules/@t3-oss/env-core/dist/index.d.ts","../../node_modules/.pnpm/@t3-oss+env-nextjs@0.12.0_typescript@5.8.3_zod@3.24.4/node_modules/@t3-oss/env-nextjs/dist/index.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/typealiases.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/util.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/zoderror.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/locales/en.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/errors.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/parseutil.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/enumutil.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/errorutil.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/helpers/partialutil.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/standard-schema.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/types.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/external.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/lib/index.d.ts","../../node_modules/.pnpm/zod@3.24.4/node_modules/zod/index.d.ts","./env.js","./next.config.js","../../configs/config-vitest/dist/configs/base-config.d.ts","./vitest.config.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/observable/types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/observable/observable.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/observable/operators.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/observable/behaviorsubject.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/observable/index.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/rpc/codes.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/trpcerror.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/vendor/standard-schema-v1/spec.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/parser.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/middleware.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/tracked.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/utils.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/procedurebuilder.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/procedure.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/rpc/envelopes.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/transformer.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/rpc/parsetrpcmessage.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/rpc/index.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/formatter.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/jsonl.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/sse.types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/sse.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/rootconfig.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/router.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/clientish/inferrable.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/clientish/serialize.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/clientish/inference.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/createproxy.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/error/geterrorshape.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/contenttype.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/contenttypeparsers.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/formdatatoobject.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/gethttpstatuscode.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/aborterror.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/parseconnectionparams.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/http/resolveresponse.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/inittrpc.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/createdeferred.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/disposable.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import/stream/utils/asynciterable.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/vendor/standard-schema-v1/error.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/vendor/unpromise/types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/vendor/unpromise/unpromise.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/vendor/unpromise/index.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/unstable-core-do-not-import.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/@trpc/server/index.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/@trpc/server/http.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/adapters/fetch/types.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/adapters/fetch/fetchrequesthandler.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/adapters/fetch/index.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/index.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/transformer.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/plainer.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/types.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/registry.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/class-registry.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/custom-transformer-registry.d.ts","../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/index.d.ts","./server/api/trpc.ts","./server/api/routers/post.ts","./server/api/root.ts","./app/api/trpc/[trpc]/route.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/entity.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/logger.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/casing.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/operations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/sql.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/expressions/conditions.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/expressions/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/expressions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/functions/aggregate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/functions/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/functions/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sql/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/bigintt.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/bytes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/custom.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/datetime.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/primitives/chars.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/primitives/buffer.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/codecs/context.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/codecs/ifaces.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/conutils.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/httpscram.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/ifaces.d.ts","../../node_modules/.pnpm/@petamoriken+float16@3.9.1/node_modules/@petamoriken/float16/index.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/utils.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/codecs/codecs.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/errors/tags.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/errors/base.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/errors/index.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/options.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/codecs/registry.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/primitives/event.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/primitives/lru.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/baseconn.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/retry.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/transaction.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/enums.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/util.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/typeutil.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/strictmap.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/reservedkeywords.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/casts.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/functions.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/querytypes.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/globals.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/operators.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/scalars.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries/types.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/queries.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/analyzequery.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/reflection/index.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/baseclient.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/nodeclient.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/systemutils.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/rawconn.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/memory.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/range.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/pgvector.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/postgis.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/datatypes/wkt.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/index.shared.d.ts","../../node_modules/.pnpm/gel@2.0.1/node_modules/gel/dist/index.node.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/date-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/localdate.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/localtime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/relative-duration.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/timestamptz.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/expressions.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/relations.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/query-promise.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/runnable-query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/gel-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/migrator.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/mysql-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/bigserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/cidr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/double-precision.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/inet.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/sequence.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/int.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/interval.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/jsonb.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/line.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/macaddr.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/macaddr8.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/point.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/postgis_extension/geometry.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/smallserial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/uuid.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/vector_extension/bit.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/vector_extension/halfvec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/vector_extension/sparsevec.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/vector_extension/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/roles.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/policies.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/refresh-materialized-view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/utils/array.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/utils/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/pg-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/binary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/boolean.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/char.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/date.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/datetime.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/decimal.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/double.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/enum.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/float.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/int.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/json.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/mediumint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/serial.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/smallint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/time.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/date.common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/timestamp.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/tinyint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/varbinary.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/varchar.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/vector.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/year.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/bigint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/schema.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/singlestore-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/checks.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/custom.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/indexes.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/primary-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/unique-constraint.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/count.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/query.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/subquery.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/view-base.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/db.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/raw.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/delete.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/update.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/insert.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/select.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/dialect.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/view.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/utils.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/integer.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/numeric.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/real.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/text.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/all.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/table.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/foreign-keys.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/blob.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/columns/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/query-builders/select.types.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/sqlite-core/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/column-builder.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/column.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/alias.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/errors.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/view-common.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/index.d.ts","../../packages/database-drizzle/src/schema.ts","../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/config.d.ts","../../node_modules/.pnpm/postgres@3.4.5/node_modules/postgres/types/index.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/postgres-js/session.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/postgres-js/driver.d.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/postgres-js/index.d.ts","../../packages/database-drizzle/src/database.ts","../../node_modules/.pnpm/drizzle-orm@0.40.1_@libsql+client@0.14.0_@prisma+client@6.4.1_prisma@6.4.1_typescript@5_fff753c2c9e3d7779a4ef846d9b77852/node_modules/drizzle-orm/postgres-js/migrator.d.ts","../../packages/database-drizzle/src/migrate.ts","../../packages/database-drizzle/src/seed.ts","../../packages/database-drizzle/src/index.ts","./core/bootstrap.ts","./data/index.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/removable.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/subscribable.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/hydration-bahdifrr.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/queriesobserver.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/infinitequeryobserver.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/notifymanager.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/focusmanager.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/onlinemanager.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/streamedquery.d.ts","../../node_modules/.pnpm/@tanstack+query-core@5.76.0/node_modules/@tanstack/query-core/build/modern/index.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/types.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usequeries.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/queryoptions.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usequery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usesuspensequery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usesuspenseinfinitequery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usesuspensequeries.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/useprefetchquery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/useprefetchinfinitequery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/infinitequeryoptions.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/queryclientprovider.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/queryerrorresetboundary.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/hydrationboundary.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/useisfetching.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usemutationstate.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/usemutation.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/useinfinitequery.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/isrestoringprovider.d.ts","../../node_modules/.pnpm/@tanstack+react-query@5.76.1_react@19.1.0/node_modules/@tanstack/react-query/build/modern/index.d.ts","./trpc/query-client.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/internals/subscriptions.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/internals/types.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/trpcclienterror.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/internals/contenttypes.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/types.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/internals/trpcuntypedclient.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/createtrpcuntypedclient.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/createtrpcclient.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/getfetch.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/internals/transformer.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/unstable-internals.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/internals/httputils.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/httpbatchlinkoptions.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/httpbatchlink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/httpbatchstreamlink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/httplink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/loggerlink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/splitlink.d.ts","../../node_modules/.pnpm/@trpc+server@11.1.2_typescript@5.8.3/node_modules/@trpc/server/dist/http.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/internals/urlwithconnectionparams.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/wslink/wsclient/options.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/wslink/wsclient/wsclient.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/wslink/createwsclient.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/wslink/wslink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/httpsubscriptionlink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links/retrylink.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/links.d.ts","../../node_modules/.pnpm/@trpc+client@11.1.2_@trpc+server@11.1.2_typescript@5.8.3__typescript@5.8.3/node_modules/@trpc/client/dist/index.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/internals/usequeries.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/hooks/types.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/types.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/createtrpcreact.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/internals/getquerykey.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/internals/context.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/hooks/createhooksinternal.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/proxy/decorationproxy.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/utils/inferreactqueryprocedure.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/proxy/utilsproxy.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/proxy/usequeriesproxy.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/hooks/createroothooks.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/queryclient.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/polymorphism/mutationlike.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/polymorphism/querylike.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/polymorphism/routerlike.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/polymorphism/utilslike.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/polymorphism/index.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/internals/getclientargs.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/shared/index.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/rsc.d.ts","./trpc/server.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@next/font/dist/types.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","../../node_modules/.pnpm/next@15.3.2_@babel+core@7.26.10_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/font/google/index.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/utils/createutilityfunctions.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/createtrpcqueryutils.d.ts","../../node_modules/.pnpm/@trpc+react-query@11.1.2_@tanstack+react-query@5.76.1_react@19.1.0__@trpc+client@11.1.2_af7e9a3598ba04a922b3cb84eddb040e/node_modules/@trpc/react-query/dist/index.d.ts","./trpc/react.tsx","./app/layout.tsx","./app/_components/post.tsx","./app/page.tsx","./.next/types/cache-life.d.ts","./.next/types/app/layout.ts","./.next/types/app/page.ts","./.next/types/app/api/trpc/[trpc]/route.ts"],"fileIdsList":[[97,139,469,559],[97,139,336,1002],[97,139,336,1004],[97,139,423,424,425,426],[83,97,139,1001],[97,139,469,492,547,556,558],[97,139,473,997,1001],[97,139,447,994,1003],[97,139,912],[97,139,913],[97,139,477,491],[97,139,473,474],[97,139,473,492],[97,139,556,557],[97,139,491,556],[97,139,491,548,555],[97,139,555,943],[83,97,139,548,555,558,943,944,972,1000],[83,97,139,441,556,558,944,993],[97,139,494],[97,139],[97,139,476],[97,139,916],[97,139,915,916],[97,139,915,916,917,918,919,920,921,922,923],[97,139,915,916,917],[83,97,139,924],[83,97,139,266,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942],[97,139,924,925],[83,97,139],[83,97,139,266],[97,139,924],[97,139,924,925,934],[97,139,924,925,927],[97,139,500,542,946,947,950,951],[97,139,542,950],[97,139,946],[97,139,946,947,951,952,953,971],[97,139,542],[97,139,500,542,945,947,949],[97,139,949,957,958,959,960,961,962,968,969,970],[97,139,548,949,957],[97,139,542,946,949,956],[97,139,542,949,956],[97,139,542,949,955,964],[97,139,542,946,949,955],[97,139,963],[97,139,542,947,949],[97,139,542,949],[97,139,500,542,945,946,947,948],[97,139,965,966],[97,139,964],[97,139,500,542,548,945,947,949,965],[97,139,542,949,955,967],[97,139,945,954],[97,139,542,992,998],[97,139,542,943,972,973,974,975,979,992],[97,139,972,976,977,981,999],[83,97,139,542,943,972,977,992],[97,139,977],[97,139,542,976,992],[97,139,542,943,992],[83,97,139,542,548,943,972,992],[97,139,542,972,973,974,975,978],[97,139,979],[83,97,139,542,943,972,977,978],[97,139,973,974,975,976,978,980,982,983,984,985,990,991],[97,139,986,987,988,989],[97,139,542,981],[97,139,542,972,974,976,981],[97,139,542,986,987],[97,139,542,982],[97,139,542,979],[97,139,542,972,973],[97,139,542,943,972,974,975,977,978,981],[97,139,943],[97,139,542,943,974,977],[97,139,542,943,972,992],[97,139,542,972,992],[97,139,543,545],[97,139,545,546],[97,139,543,544],[97,139,544],[97,139,543],[97,139,496],[97,139,496,497,498,499],[97,139,501,503,504,505,506,507,508,509,510,511,513,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541],[97,139,500,510,521,522,523],[97,139,520],[97,139,501],[97,139,503,510,515],[97,139,503,510,520],[97,139,502],[97,139,511,521],[97,139,505],[97,139,501,503,515],[97,139,511],[97,139,503,511,521],[97,139,501,503,510,515,521],[97,139,501,506,508,509,513,516,520,521],[97,139,501,503,505,510],[97,139,504],[97,139,503,509],[97,139,500,501,505,506,507,508,510],[97,139,516,517,519,542],[97,139,500,501,503,509,510,520],[97,139,502,510,511],[97,139,502,512,514],[97,139,512,513],[97,139,501,507,518],[97,139,515,520,521],[97,139,539,540],[97,139,539],[97,136,139],[97,138,139],[139],[97,139,144,174],[97,139,140,145,151,152,159,171,182],[97,139,140,141,151,159],[92,93,94,97,139],[97,139,142,183],[97,139,143,144,152,160],[97,139,144,171,179],[97,139,145,147,151,159],[97,138,139,146],[97,139,147,148],[97,139,151],[97,139,149,151],[97,138,139,151],[97,139,151,152,153,171,182],[97,139,151,152,153,166,171,174],[97,134,139,187],[97,134,139,147,151,154,159,171,182],[97,139,151,152,154,155,159,171,179,182],[97,139,154,156,171,179,182],[95,96,97,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188],[97,139,151,157],[97,139,158,182],[97,139,147,151,159,171],[97,139,160],[97,139,161],[97,138,139,162],[97,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188],[97,139,164],[97,139,165],[97,139,151,166,167],[97,139,166,168,183,185],[97,139,151,171,172,174],[97,139,173,174],[97,139,171,172],[97,139,174],[97,139,175],[97,136,139,171],[97,139,151,177,178],[97,139,177,178],[97,139,144,159,171,179],[97,139,180],[97,139,159,181],[97,139,154,165,182],[97,139,144,183],[97,139,171,184],[97,139,158,185],[97,139,186],[97,139,144,151,153,162,171,182,185,187],[97,139,171,188],[83,97,139,192,194],[83,87,97,139,190,191,192,193,417,465],[83,87,97,139,191,194,417,465],[83,87,97,139,190,194,417,465],[81,82,97,139],[97,139,560,563,567,660,897],[97,139,560,568,897],[97,139,560,567,568,684,739,810,861,895,897],[97,139,560,563,567,568,896],[97,139,560],[97,139,571],[97,139,653,658,680],[97,139,560,576,653],[97,139,580,581,582,583,631,632,633,634,635,636,638,639,640,641,642,643,644,645,646,656],[97,139,560,579,655,896,897],[97,139,560,655,896,897],[97,139,560,567,568,648,653,654,896,897],[97,139,560,567,568,653,655,896,897],[97,139,560,630,655,896,897],[97,139,560,655,896],[97,139,560,653,655,896,897],[97,139,579,580,581,582,583,631,632,633,634,635,636,638,639,640,641,642,643,644,645,646,655,656],[97,139,560,578,655,896],[97,139,560,630,637,655,896,897],[97,139,560,630,637,653,655,896,897],[97,139,560,637,653,655,896,897],[97,139,560,565,567,568,573,653,657,658,660,662,665,666,667,669,675,676,680],[97,139,560,567,568,653,657,660,675,679,680],[97,139,560,653,657],[97,139,577,578,648,649,650,651,652,653,654,657,667,668,669,675,676,678,679,681,682,683],[97,139,560,567,653,657],[97,139,560,567,649,653],[97,139,560,567,653,669],[97,139,560,565,566,567,653,663,664,669,676,680],[97,139,670,671,672,673,674,677,680],[97,139,560,563,565,566,567,573,648,653,655,663,664,669,671,676,677,680],[97,139,560,565,567,573,657,667,674,676,680],[97,139,560,567,568,653,660,663,664,669,676],[97,139,560,567,661,663,664],[97,139,560,567,663,664,669,676,679],[97,139,560,565,566,567,568,573,653,657,658,663,664,667,669,676,680],[97,139,563,564,565,566,567,568,573,653,657,658,669,674,679],[97,139,560,563,565,566,567,568,653,655,658,663,664,669,676,680,897],[97,139,560,567,578,653],[97,139,560,568,576,660,661,668,676,680],[97,139,565,566,567],[97,139,560,563,577,647,648,650,651,652,654,655,896],[97,139,577,648,650,651,652,653,654,657,679,684,896,897,901],[97,139,560,567],[97,139,560,566,567,568,573,655,658,677,678,896],[97,139,560,561,563,564,565,568,576,659,660,663,896,897,898,899,900],[97,139,714,722,735],[97,139,560,567,714],[97,139,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,705,706,707,708,709,717],[97,139,560,716,896,897],[97,139,560,568,716,896,897],[97,139,560,567,568,714,715,896,897],[97,139,560,567,568,714,716,896,897],[97,139,560,568,714,716,896,897],[97,139,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,705,706,707,708,709,716,717],[97,139,560,696,716,896,897],[97,139,560,568,704,896,897],[97,139,560,565,567,568,660,714,721,722,727,728,729,730,732,735],[97,139,560,567,568,660,714,716,719,720,725,726,732,735],[97,139,560,714,718],[97,139,685,711,712,713,714,715,718,721,727,729,731,732,733,734,736,737,738],[97,139,560,567,714,718],[97,139,560,567,714,722,732],[97,139,560,565,567,568,663,714,716,727,732,735],[97,139,720,723,724,725,726,735],[97,139,560,563,567,573,663,664,714,716,724,725,727,732,735],[97,139,560,565,721,723,727,735],[97,139,560,567,568,660,663,714,727,732],[97,139,560,565,566,567,568,573,663,711,714,718,721,722,727,732,735],[97,139,563,564,565,566,567,568,573,714,718,722,723,732,734],[97,139,560,565,567,568,663,714,716,727,732,735,897],[97,139,560,714,734],[97,139,560,567,568,660,727,731,735],[97,139,565,566,567,573,724],[97,139,560,563,685,710,711,712,713,715,716,896],[97,139,685,711,712,713,714,715,723,734,739,896,897,901],[97,139,560,566,567,573,718,722,724,733,896],[97,139,563,567,897],[97,139,781,787,804],[97,139,560,576,781],[97,139,741,742,743,744,745,747,748,749,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,784],[97,139,560,751,783,896,897],[97,139,560,783,896,897],[97,139,560,568,783,896,897],[97,139,560,567,568,776,781,782,896,897],[97,139,560,567,568,781,783,896,897],[97,139,560,783,896],[97,139,560,568,746,783,896,897],[97,139,560,568,781,783,896,897],[97,139,741,742,743,744,745,747,748,749,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,783,784,785],[97,139,560,750,783,896],[97,139,560,753,783,896,897],[97,139,560,781,783,896,897],[97,139,560,746,753,781,783,896,897],[97,139,560,568,746,781,783,896,897],[97,139,560,565,567,568,660,781,786,787,788,789,790,791,792,794,799,800,803,804],[97,139,560,567,568,660,719,781,786,794,799,803,804],[97,139,560,781,786],[97,139,740,750,776,777,778,779,780,781,782,786,792,793,794,799,800,802,803,805,806,807,809],[97,139,560,567,781,786],[97,139,560,567,777,781],[97,139,560,567,568,781,794],[97,139,560,565,566,567,573,663,664,781,794,800,804],[97,139,791,795,796,797,798,801,804],[97,139,560,563,565,566,567,573,663,664,776,781,783,794,796,800,801,804],[97,139,560,565,567,786,792,798,800,804],[97,139,560,567,568,660,663,664,781,794,800],[97,139,560,567,663,664,794,800,803],[97,139,560,565,566,567,568,573,663,664,781,786,787,792,794,800,804],[97,139,563,564,565,566,567,568,573,781,786,787,794,798,803],[97,139,560,563,565,566,567,568,573,663,664,781,783,787,794,800,804,897],[97,139,560,567,750,781,785,803],[97,139,560,568,576,660,661,793,800,804],[97,139,565,566,567,573,801],[97,139,560,563,740,775,776,778,779,780,782,783,896],[97,139,740,776,778,779,780,781,782,786,803,810,896,897,901],[97,139,808],[97,139,560,566,567,568,573,783,787,801,802,896],[97,139,560,568,793,904,905],[97,139,905,906],[97,139,719,906],[97,139,560,561,567,568,660,794,800,804,810,904],[97,139,560,576],[97,139,563,564,565,567,568,896,897],[97,139,560,563,567,568,571,659,897],[97,139,896],[97,139,901],[97,139,840,857],[97,139,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,830,831,832,833,834,835,842],[97,139,560,841,896,897],[97,139,560,568,841,896,897],[97,139,560,568,840,896,897],[97,139,560,567,568,840,841,896,897],[97,139,560,568,840,841,896,897],[97,139,560,568,576,841,896,897],[97,139,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,830,831,832,833,834,835,841,842],[97,139,560,821,841,896,897],[97,139,560,568,829,896,897],[97,139,560,565,567,660,840,847,849,850,851,854,856,857],[97,139,560,567,568,660,719,840,841,844,845,846,856,857],[97,139,837,838,839,840,843,847,851,854,855,856,858,859,860],[97,139,560,567,840,843],[97,139,560,840,843],[97,139,560,567,840,856],[97,139,560,565,567,568,663,840,841,847,856,857],[97,139,844,845,846,852,853,857],[97,139,560,563,567,663,664,840,841,845,847,856,857],[97,139,560,565,847,851,852,857],[97,139,560,565,566,567,568,573,663,840,843,847,851,856,857],[97,139,563,564,565,566,567,568,573,840,843,852,856],[97,139,560,565,567,568,663,840,841,847,856,857,897],[97,139,560,840],[97,139,560,567,568,660,847,855,857],[97,139,565,566,567,573,853],[97,139,560,563,836,837,838,839,841,896],[97,139,837,838,839,840,861,896,897],[97,139,560,561,568,660,847,848,855],[97,139,560,561,567,568,660,847,856,857],[97,139,567,897],[97,139,569,570],[97,139,572,574],[97,139,567,573,897],[97,139,567,571,575],[97,139,560,562,563,565,566,568,897],[97,139,870,888,893],[97,139,560,567,888],[97,139,863,883,884,885,886,891],[97,139,560,568,890,896,897],[97,139,560,567,568,888,889,896,897],[97,139,560,567,568,888,890,896,897],[97,139,863,883,884,885,886,890,891],[97,139,560,568,882,888,890,896,897],[97,139,560,890,896,897],[97,139,560,568,888,890,896,897],[97,139,560,565,567,568,660,867,868,869,870,873,878,879,888,893],[97,139,560,567,568,660,719,873,878,888,892,893],[97,139,560,888,892],[97,139,862,864,865,866,869,871,873,878,879,881,882,888,889,892,894],[97,139,560,567,888,892],[97,139,560,567,873,881,888],[97,139,560,565,566,567,568,663,664,873,879,888,890,893],[97,139,874,875,876,877,880,893],[97,139,560,565,566,567,568,573,663,664,864,873,875,879,880,888,890,893],[97,139,560,565,869,877,879,893],[97,139,560,567,568,660,663,664,873,879,888],[97,139,560,567,661,663,664,879],[97,139,560,565,566,567,568,573,663,664,869,870,873,879,888,892,893],[97,139,563,564,565,566,567,568,573,870,873,877,881,888,892],[97,139,560,565,566,567,568,663,664,870,873,879,888,890,893,897],[97,139,560,567,660,661,663,871,872,879,893],[97,139,565,566,567,573,880],[97,139,560,563,862,864,865,866,887,889,890,896],[97,139,560,888,890],[97,139,862,864,865,866,881,888,889,895,901],[97,139,560,566,567,573,870,880,890,896],[97,139,560,564,567,568,897],[97,139,561,563,567,897],[97,139,584,588,589,591,594,598,602,603,604,619],[97,139,586,588,591,597,598,599,600,601],[97,139,586,587,588,593],[97,139,588,594],[97,139,586,587],[97,139,588,591],[97,139,584],[97,139,627],[97,139,595],[97,139,595,596],[97,139,593],[97,139,591,598,619,620,621,622,623,629],[97,139,584,586,588,591,593,594,597,599,624,625,626,627,628],[97,139,620],[97,139,587,594,597],[97,139,585],[97,139,602],[97,139,588,605,620],[97,139,605,606,607,608,609,617,618],[97,139,610,611,613,614,615,616],[97,139,591,607],[97,139,591,607,608],[97,139,591,605,608,612],[97,139,591,605,607,608,611],[97,139,591,605],[97,139,589,599,602],[97,139,591,598,602,620],[97,139,589,590,591,592],[89,97,139],[97,139,421],[97,139,428],[97,139,198,212,213,214,216,380],[97,139,198,202,204,205,206,207,208,369,380,382],[97,139,380],[97,139,213,232,349,358,376],[97,139,198],[97,139,195],[97,139,400],[97,139,380,382,399],[97,139,303,346,349,471],[97,139,313,328,358,375],[97,139,263],[97,139,363],[97,139,362,363,364],[97,139,362],[91,97,139,154,195,198,202,205,209,210,211,213,217,225,226,297,359,360,380,417],[97,139,198,215,252,300,380,396,397,471],[97,139,215,471],[97,139,226,300,301,380,471],[97,139,471],[97,139,198,215,216,471],[97,139,209,361,368],[97,139,165,266,376],[97,139,266,376],[83,97,139,266,320],[97,139,243,261,376,454],[97,139,355,448,449,450,451,453],[97,139,266],[97,139,354],[97,139,354,355],[97,139,206,240,241,298],[97,139,242,243,298],[97,139,452],[97,139,243,298],[83,97,139,199,442],[83,97,139,182],[83,97,139,215,250],[83,97,139,215],[97,139,248,253],[83,97,139,249,420],[97,139,995],[83,87,97,139,154,189,190,191,194,417,463,464],[97,139,154],[97,139,154,202,232,268,287,298,365,366,380,381,471],[97,139,225,367],[97,139,417],[97,139,197],[83,97,139,303,317,327,337,339,375],[97,139,165,303,317,336,337,338,375],[97,139,330,331,332,333,334,335],[97,139,332],[97,139,336],[83,97,139,249,266,420],[83,97,139,266,418,420],[83,97,139,266,420],[97,139,287,372],[97,139,372],[97,139,154,381,420],[97,139,324],[97,138,139,323],[97,139,227,231,238,269,298,310,312,313,314,316,348,375,378,381],[97,139,315],[97,139,227,243,298,310],[97,139,313,375],[97,139,313,320,321,322,324,325,326,327,328,329,340,341,342,343,344,345,375,376,471],[97,139,308],[97,139,154,165,227,231,232,237,239,243,273,287,296,297,348,371,380,381,382,417,471],[97,139,375],[97,138,139,213,231,297,310,311,371,373,374,381],[97,139,313],[97,138,139,237,269,290,304,305,306,307,308,309,312,375,376],[97,139,154,290,291,304,381,382],[97,139,213,287,297,298,310,371,375,381],[97,139,154,380,382],[97,139,154,171,378,381,382],[97,139,154,165,182,195,202,215,227,231,232,238,239,244,268,269,270,272,273,276,277,279,282,283,284,285,286,298,370,371,376,378,380,381,382],[97,139,154,171],[97,139,198,199,200,210,378,379,417,420,471],[97,139,154,171,182,229,398,400,401,402,403,471],[97,139,165,182,195,229,232,269,270,277,287,295,298,371,376,378,383,384,390,396,413,414],[97,139,209,210,225,297,360,371,380],[97,139,154,182,199,202,269,378,380,388],[97,139,302],[97,139,154,410,411,412],[97,139,378,380],[97,139,310,311],[97,139,231,269,370,420],[97,139,154,165,277,287,378,384,390,392,396,413,416],[97,139,154,209,225,396,406],[97,139,198,244,370,380,408],[97,139,154,215,244,380,391,392,404,405,407,409],[91,97,139,227,230,231,417,420],[97,139,154,165,182,202,209,217,225,232,238,239,269,270,272,273,285,287,295,298,370,371,376,377,378,383,384,385,387,389,420],[97,139,154,171,209,378,390,410,415],[97,139,220,221,222,223,224],[97,139,276,278],[97,139,280],[97,139,278],[97,139,280,281],[97,139,154,202,237,381],[97,139,154,165,197,199,227,231,232,238,239,265,267,378,382,417,420],[97,139,154,165,182,201,206,269,377,381],[97,139,304],[97,139,305],[97,139,306],[97,139,376],[97,139,228,235],[97,139,154,202,228,238],[97,139,234,235],[97,139,236],[97,139,228,229],[97,139,228,245],[97,139,228],[97,139,275,276,377],[97,139,274],[97,139,229,376,377],[97,139,271,377],[97,139,229,376],[97,139,348],[97,139,230,233,238,269,298,303,310,317,319,347,378,381],[97,139,243,254,257,258,259,260,261,318],[97,139,357],[97,139,213,230,231,291,298,313,324,328,350,351,352,353,355,356,359,370,375,380],[97,139,243],[97,139,265],[97,139,154,230,238,246,262,264,268,378,417,420],[97,139,243,254,255,256,257,258,259,260,261,418],[97,139,229],[97,139,291,292,295,371],[97,139,154,276,380],[97,139,290,313],[97,139,289],[97,139,285,291],[97,139,288,290,380],[97,139,154,201,291,292,293,294,380,381],[83,97,139,240,242,298],[97,139,299],[83,97,139,199],[83,97,139,376],[83,91,97,139,231,239,417,420],[97,139,199,442,443],[83,97,139,253],[83,97,139,165,182,197,247,249,251,252,420],[97,139,215,376,381],[97,139,376,386],[83,97,139,152,154,165,197,253,300,417,418,419],[83,97,139,190,191,194,417,465],[83,84,85,86,87,97,139],[97,139,144],[97,139,393,394,395],[97,139,393],[83,87,97,139,154,156,165,189,190,191,192,194,195,197,273,336,382,416,420,465],[97,139,430],[97,139,432],[97,139,434],[97,139,996],[97,139,436],[97,139,438,439,440],[97,139,444],[88,90,97,139,422,427,429,431,433,435,437,441,445,447,456,457,459,469,470,471,472],[97,139,446],[97,139,455],[97,139,249],[97,139,458],[97,138,139,291,292,293,295,327,376,460,461,462,465,466,467,468],[97,139,189],[97,139,171],[97,139,171,189],[97,139,551,552],[97,139,551],[97,139,551,552,553,554],[97,139,549,555],[97,139,555],[97,139,549,550],[97,106,110,139,182],[97,106,139,171,182],[97,101,139],[97,103,106,139,179,182],[97,139,159,179],[97,101,139,189],[97,103,106,139,159,182],[97,98,99,102,105,139,151,171,182],[97,106,113,139],[97,98,104,139],[97,106,127,128,139],[97,102,106,139,174,182,189],[97,127,139,189],[97,100,101,139,189],[97,106,139],[97,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,132,133,139],[97,106,121,139],[97,106,113,114,139],[97,104,106,114,115,139],[97,105,139],[97,98,101,106,139],[97,106,110,114,115,139],[97,110,139],[97,104,106,109,139,182],[97,98,103,106,113,139],[97,101,106,127,139,187,189],[97,139,490],[97,139,480,481],[97,139,478,479,480,482,483,488],[97,139,479,480],[97,139,489],[97,139,480],[97,139,478,479,480,483,484,485,486,487],[97,139,478,479,490],[97,139,902,903,904,907],[97,139,902,908,910,911],[97,139,907,908,909],[97,139,810,901],[97,139,902,908]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"51409be337d5cdf32915ace99a4c49bf62dbc124a49135120dfdff73236b0bad","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"3b724a66c071d616203133f8d099a0cb881b0b43fd42e8621e611243c5f30cd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"b200675fd112ffef97c166d0341fb33f6e29e9f27660adde7868e95c5bc98beb","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"9ba5b6a30cb7961b68ad4fb18dca148db151c2c23b8d0a260fc18b83399d19d3","impliedFormat":1},{"version":"3f3edb8e44e3b9df3b7ca3219ab539710b6a7f4fe16bd884d441af207e03cd57","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"8cf7e92bdb2862c2d28ba4535c43dc599cfbc0025db5ed9973d9b708dcbe3d98","affectsGlobalScope":true,"impliedFormat":1},{"version":"278e70975bd456bba5874eaee17692355432e8d379b809a97f6af0eee2b702d8","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"1dc73f8854e5c4506131c4d95b3a6c24d0c80336d3758e95110f4c7b5cb16397","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"c878f74b6d10b267f6075c51ac1d8becd15b4aa6a58f79c0cfe3b24908357f60","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"8c2ad42d5d1a2e8e6112625767f8794d9537f1247907378543106f7ba6c7df90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"12e8ce658dd17662d82fb0509d2057afc5e6ee30369a2e9e0957eff725b1f11d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"858f999b3e4a45a4e74766d43030941466460bf8768361d254234d5870480a53","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"63b05afa6121657f25e99e1519596b0826cda026f09372c9100dfe21417f4bd6","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1},{"version":"f23dfbb07f71e879e5a23cdd5a1f7f1585c6a8aae8c250b6eba13600956c72dd","impliedFormat":1},{"version":"b2ba94df355e65e967875bf67ea1bbf6d5a0e8dc141a3d36d5b6d7c3c0f234b6","impliedFormat":1},{"version":"115b2ad73fa7d175cd71a5873d984c21593b2a022f1a2036cc39d9f53629e5dc","impliedFormat":1},{"version":"1be330b3a0b00590633f04c3b35db7fa618c9ee079258e2b24c137eb4ffcd728","impliedFormat":1},{"version":"45a9b3079cd70a2668f441b79b4f4356b4e777788c19f29b6f42012a749cfea6","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"7bd32a723a12f78ed756747468f2030bdd55774c68f628de07598dba5b912b14","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"a1d3d6e9718cceaf1e4352845387af0620564d3d2dff02611a5c3276f73c26cb","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"57d6ac03382e30e9213641ff4f18cf9402bb246b77c13c8e848c0b1ca2b7ef92","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"57e47d02e88abef89d214cdf52b478104dc17997015746e288cbb580beaef266","impliedFormat":1},{"version":"b1177acd771acfcc2648a03fc03ad3b3a1b1d2bdfa6769db0f669293b596ca13","impliedFormat":1},{"version":"3494c5bf00c1a40293ee5ff5128334b63d346abbf560c8987202c92dbc5bdc48","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"99d62b942e98f691f508fc752637fec27661970aa3b0f5eb5a1e2775b995c273","impliedFormat":1},{"version":"a9af0e608929aaf9ce96bd7a7b99c9360636c31d73670e4af09a09950df97841","impliedFormat":1},{"version":"48d37b90a04e753a925228f50304d02c4f95d57bf682f8bb688621c3cd9d32ec","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"b68c4ed987ef5693d3dccd85222d60769463aca404f2ffca1c4c42781dce388e","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"12b8dfed70961bea1861e5d39e433580e71323abb5d33da6605182ec569db584","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"7e560f533aaf88cf9d3b427dcf6c112dd3f2ee26d610e2587583b6c354c753db","impliedFormat":1},{"version":"71e0082342008e4dfb43202df85ea0986ef8e003c921a1e49999d0234a3019da","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ce41407ff95aad31e28897741dfffb236d966eb38894f7a791c3a575b53f9d02","impliedFormat":1},{"version":"fac1803c07fbc9574815fdb83afddd9d0d4a2ce13f56d4e4cbb4525f8c09ee0a","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"5eef43ef86c9c3945780211c2ce25cb9b66143a102713e56a2bea85163c5c3c7","impliedFormat":1},{"version":"a2a1cdf7273ad6641938a487ecf2fdd38f60abce41907817e44ab39e482e8739","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"4548fac59ea69a3ffd6c0285a4c53e0d736d936937b74297e3b5c4dfcd902419","impliedFormat":1},{"version":"4da246ee3b860278888dd51913e6407a09ca43530db886e7bec2a592c9b9bde6","impliedFormat":1},{"version":"8c05ac9ead787bfc3e144b88bdc7d1ad8c0c7f1cd8412ab58cd3e1208d1990af","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"8bba776476c48b0e319d243f353190f24096057acede3c2f620fee17ff885dba","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"2b2f9dac86b659e6d5cd623bcc21519910a48114fc0cef52d8f86962c48d44e2","impliedFormat":1},{"version":"7e8b76334c75984d57a810a0652c61066ffacede59001dfc5c633565f791ee60","impliedFormat":1},{"version":"72ca9ca89ca15055cbb6ce767b6bf56615be5f1ea6a87ab432ee0603c8d19010","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"cecad464ddaf764e5490018d248a8df1733f3d63435fbddac72941c1f4005b66","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"51b1709e7ad186919a0e30237a8607100143a86d28771b3d3f046359aca1e65c","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"56013416784a6b754f3855f8f2bf6ce132320679b8a435389aca0361bce4df6b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"224e9eedb2ea67e27f28d699b19b1d966e9320e9ea8ac233b2a31dbd753b0dfe","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c51641ab4bfa31b7a50a0ca37edff67f56fab3149881024345b13f2b48b7d2de","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"52abbd5035a97ebfb4240ec8ade2741229a7c26450c84eb73490dc5ea048b911","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"4360ad4de54de2d5c642c4375d5eab0e7fe94ebe8adca907e6c186bbef75a54d","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"9c9cae45dc94c2192c7d25f80649414fa13c425d0399a2c7cb2b979e4e50af42","impliedFormat":1},{"version":"6c87b6bcf4336b29c837ea49afbdde69cc15a91cbbfd9f20c0af8694927dec08","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"6dd9bcf10678b889842d467706836a0ab42e6c58711e33918ed127073807ee65","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"ef9efc827cdad89c4ee54142164c793f530aa4d844ca9121cc35368310d5fb9c","impliedFormat":1},{"version":"643672ce383e1c58ea665a92c5481f8441edbd3e91db36e535abccbc9035adeb","impliedFormat":1},{"version":"8fa022ea514ce0ea78ac9b7092a9f97f08ead20c839c779891019e110fce8307","impliedFormat":1},{"version":"c93235337600b786fd7d0ff9c71a00f37ca65c4d63e5d695fc75153be2690f09","impliedFormat":1},{"version":"fa45f48f2def181ab2fb107a032c91b6c043ad05a179f3fbaafb8e5411fd01e4","impliedFormat":1},{"version":"a8e493c0355aabdd495e141bf1c4ec93454a0698c8675df466724adc2fcfe630","impliedFormat":1},{"version":"99702c9058170ae70ea72acbf01be3111784f06152dbf478f52c9afe423528bd","impliedFormat":1},{"version":"cf32f58a7ad3498c69c909121772971ffdee176b882f39c78532d0e0ab41a30d","impliedFormat":1},{"version":"e2bbc579a2fda9473e06b2a68d693e56928900f73ccfc03dabea789fe144e8a5","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"d05fb434f4ba073aed74b6c62eff1723c835de2a963dbb091e000a2decb5a691","impliedFormat":1},{"version":"bff8c8bffbf5f302a30ccb1c0557dae477892d50a80eecfe393bd89bac7fb41d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"a58abf1f5c8feb335475097abeddd32fd71c4dc2065a3d28cf15cacabad9654a","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"f0f05149debcf31b3a717ce8dd16e0323a789905cb9e27239167b604153b8885","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"b4f4d239a6632b86b315a6e4cfe0fac4e4bf6c934263bc07dd2bf5c7dbb8e6a5","impliedFormat":1},{"version":"0d44227395ae4a117dd7c8c9a048e18ade1f1f631bc5b883f9d469126e3cedab","impliedFormat":1},{"version":"9e21f8e2c0cfea713a4a372f284b60089c0841eb90bf3610539d89dbcd12d65a","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"a072c5f254d5cbb6522c0d4eeeb7cc4a6ce7f2f8ad84e2593d903bfe3aa44176","impliedFormat":1},{"version":"52b390f86821086a1be50100487faa9f7b23fc04343efb590f304382b4950e04","impliedFormat":1},{"version":"87122b31fe473758a5724388c93826caab566f62be2196aefc2ae8b04b814b52","impliedFormat":1},{"version":"063ab26d3488a665d2c3bc963b18ce220dad7351190629179165bc8c499c6cd9","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"fb400501bee56d86fa9b490e9d8b07d7df163d34d8235fcea27c3f9e8d064d1a","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"794998dc1c5a19ce77a75086fe829fb9c92f2fd07b5631c7d5e0d04fd9bc540c","impliedFormat":1},{"version":"409678793827cdf5814e027b1f9e52a0445acb1c322282311c1c4e0855a0918e","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"3545dc8a9bdbd33db34462af7eed83f703083e4fee9135dadbba7edfe1e7db3c","impliedFormat":1},{"version":"7b5153a9b237898879441e5ddb576ded76ef3ab4c5baee4bb749ca5c72fc395d","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"d5c2934185201f0768fb80d220f0e617cd05aa4c0c791ffcd508646c474b3c44","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"e326c507507d6c6f3df4152e9e132a6189b30e14a262782796c2a627ba5d42cc","impliedFormat":1},{"version":"75efc43fb206f3825eb219c96b1e59fdabf2f2f042f424fa5f96335b99897540","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"ca651584d8d718c1f0655ec4b0c340fbcd967ec1e1758807af3a3f43bc81f81e","impliedFormat":1},{"version":"cfb5f0ab72180f4e0b9ed1534847a63d5394b9a8ee685ae149d25fd53f1aec66","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"f613e4e752659ebd241be4d991c05200248b50e753fcecf50a249d30f4367794","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"de1ccef0cb3623291d55871e39eb7005cb79d8da519cb46959b0ba5e2422184f","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"7cd657e359eac7829db5f02c856993e8945ffccc71999cdfb4ab3bf801a1bbc6","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"f0f3f57e29b40e9cb0c4b155a96de2f61e51700d2c335dd547ef3c85e668c6a8","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"0afb5274275ea76a4082a46597d1d23f7fede2887e591d8e02f9874934912c6f","impliedFormat":1},{"version":"6a76daf108400ca1333e325772f24f40ebdde2120ef68f8c87d7a1adf0257541","impliedFormat":1},{"version":"313698394e61f0343ebf11b64e5cde7e948110eaba98e8dbd7bdd67ee8df2639","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"91357dba2d5a7234ccfae834dc8363b5635e08f373bd18f548a9046b01864619","impliedFormat":1},{"version":"f31bbb122869d8903ff13c1036bdefc1e6a5bac9b2c3c35e42a9de84d43cd04a","impliedFormat":1},{"version":"c7fdbcfa0991e15215e2a5751676115cac943b39289791546c7197d7bb889c51","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"4eac446ac161245bfc6daa95f2cc64d2da4f7844e36a7a5641abfd4771ef0923","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"076527b1c2fd207de3101ba10e0c2b7d155aa8369cc7fe3eed723811e428223d","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"397f568f996f8ffcf12d9156342552b0da42f6571eadba6bce61c99e1651977d","impliedFormat":1},{"version":"ff0c0d446569f8756be0882b520fd94429468de9f922ab6bf9eed4da55eb0187","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"a52674bc98da7979607e0f44d4c015c59c1b1d264c83fc50ec79ff2cfea06723","impliedFormat":1},{"version":"89b3d1b267c4380fbb8e5cadccbb284843b90066f16a2f6e8a5b3a030bb7dcfb","impliedFormat":1},{"version":"f58226e78464f9c85be6cf47c665a8e33b32121ab4cdb2670b66a06f1114a55c","impliedFormat":1},{"version":"9b06ce81ad598c9c6b011cb66182fa66575ad6bd1f8f655830a6a0223a197ab7","impliedFormat":1},{"version":"e108f38a04a607f9386d68a4c6f3fdae1b712960f11f6482c6f1769bab056c2e","impliedFormat":1},{"version":"a3128a84a9568762a2996df79717d92154d18dd894681fc0ab3a098fa7f8ee3b","affectsGlobalScope":true,"impliedFormat":1},{"version":"347791f3792f436950396dd6171d6450234358001ae7c94ca209f1406566ccbf","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"51bf55bb6eb80f11b3aa59fb0a9571565a7ea304a19381f6da5630f4b2e206c4","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"22b87e96a61c525464e115db0148593a861e77806fd37ab280e1903019a6e212","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"9a01f12466488eccd8d9eafc8fecb9926c175a4bf4a8f73a07c3bcf8b3363282","impliedFormat":1},{"version":"b80f624162276f24a4ec78b8e86fbee80ca255938e12f8b58e7a8f1a6937120b","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"b95a6f019095dd1d48fd04965b50dfd63e5743a6e75478343c46d2582a5132bf","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"a61e739f0b2c0165086c77a28d7e4b58a2a8703c646cd1e1641788484afc6ff2","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"9e40365afca304124bc53eb03412643abf074a1580e4dc279a7a16000d11f985","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4e18cfe14fa8602c7ff80cbbddb91e31608e5ae20bd361fe7e6a607706cb033c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a1219ee18b9282b4c6a31f1f0bcc9255b425e99363268ba6752a932cf76662f0","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"f2b3bca04d1bfe583daae1e1f798c92ec24bb6693bd88d0a09ba6802dee362a8",{"version":"3d9ffe5532661757c488c902d069c0ad44fa08e95e5ee350e725247052163088","impliedFormat":99},{"version":"ab70090e3e1015c9f094514a174b0fe40f321126b491165d3b94ff236451e060","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"950f2cd81e30d0ecdf70ab78fcfd85fc5bb28b45ebb08c860daff059feea412e","impliedFormat":1},{"version":"3a5af4fba7b27b815bb40f52715aedebaa4b371da3e5a664e7e0798c9b638825","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"49c632082dc8a916353288d3d8b2dc82b3471794249a381d090d960c8ceac908","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"71addb585c2db7b8e53dc1b0bcfa58c6c67c6e4fa2b968942046749d66f82e7e","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"e703cfacb9965c4d4155346c65a0091ecded90ea98874ed6b3f36286577c4dde","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},"2a91153919ae476149c66d2a27f9a48ec4078ea93708c39e4faebd78070d0445","911257d2786f4621125b8770d52173a6b0bd6a30edbc8f62edb06bfa77694b25","0181636e9e8ab475c3d18bc9570dbc3bd0bf74438ce18161e33e281078471408","3c1ae77e0709d84823fd5859607260df43a9705d9e25fb97088a2a6f80340d0e",{"version":"922c5d53ac633f4ea2118c829f238c92c8c119a770b85c3839ebc33ae73481f1","impliedFormat":1},{"version":"b95c56faed3b270fc797e999c94ba61b2955b84817e41c4396d08c7fc30e622c","impliedFormat":1},{"version":"7046ff4839a28ef6131e49ed1b4e85b3fd1058cd231144d68ba1b0427b90420a","impliedFormat":1},{"version":"d19ca30df7b680dc0906c9a4715dc16e7017d9e86a8e0fa7c0fa6d16e0c4ca11","impliedFormat":1},{"version":"765103c058a5cf332507e360423969ec5ac1fb5f65cb3bcb2cb7d3f5368ddc78","impliedFormat":1},{"version":"18803796f9c495cd6bbb0ed3f481b0f03f439697c324503ee9b74ec3bc955d76","impliedFormat":1},{"version":"62849e3b6684b1a011407b1e6937a9950ec76cdd89dc9dd186f90f51b2fa1b17","impliedFormat":1},{"version":"24c81ef984b6d5410e1211d2a10c1f2949c480d4ea64805b90cc371be2e1c1a2","impliedFormat":1},{"version":"7cabd85a8d68308771fc9d79cf2e0dad378fc693e90a9014abc0ff931f0e96ce","impliedFormat":1},{"version":"9d353ac9d0761ec28d0e8dd80ef7446082e67f3a996694d4dc6ba0e000aca16a","impliedFormat":1},{"version":"d21c26a416b08f3fcddceb3f4f73c34a9e068587ed1eb13ed4ce5b1f03e3d5a8","impliedFormat":1},{"version":"eac697d597bc773cdd983ec26c7712615126ece0f61103eea5c8ddaf8b61c780","impliedFormat":1},{"version":"f3aa8852d85fd434f50375d73ec385cf690eb2572a673531729016ce6d5cd83d","impliedFormat":1},{"version":"584f0af2c8e37580eb00460bab48135272d533532c576f48a647d17d7495acbd","impliedFormat":1},{"version":"6559a6f4971e5a46e78f7441ed5be06109c8ad2ef19dbc35e7d5573a20ecabfe","impliedFormat":1},{"version":"319452c00b17d98a3ac96afa74c40d8a671870ab195446d59601e972f260d1dd","impliedFormat":1},{"version":"6311b40eaec89111b2df13a0c4e79d14d05a5952e81478df6db524d65c634c0c","impliedFormat":1},{"version":"5ccf205ef07d92ec79cca7343405b0afc018038b552fd61cfb09f8de5812e436","impliedFormat":1},{"version":"be1561053576a52f4d65494e2f1282289320a532293094134321a44a93cf4915","impliedFormat":1},{"version":"2503d3273669e086ab8e554d0b6fe5d671389b3a35e7fc603baaada94113e120","impliedFormat":1},{"version":"3e222fd197a24a52e8c353e4adcd2c753cf99a6ce789c31e19fc5e22bea7e946","impliedFormat":1},{"version":"65d1dd8496f3652e099601f8a7ecd7466f98f485840433401fe752fa8eaea0d1","impliedFormat":1},{"version":"7ae6dda0a85d52025d2447b907df1c42cc9e8a0ec9888b74db7aa3c518d47a20","impliedFormat":1},{"version":"923c659df6fed011fca5795c6f04c995c058d1f3fbb7dabe6ac63575c4e1e1ea","impliedFormat":1},{"version":"4bd04163114d549129e7d83ec196c4b42c3b54290f6503834c5f2ae1fc6a36c1","impliedFormat":1},{"version":"06b9d8331726caafee76934a01daa68499a227814789cccceca5f32c05a23278","impliedFormat":1},{"version":"3a78e76c6ee612a5b999f31c96b0dd2acc98c8381634e3f77acb6cc412122ba0","impliedFormat":1},{"version":"0522931b2e428655c8db278de0d30f294df49ab3a23dabb09ddf573e9d85308d","impliedFormat":1},{"version":"ce33e3e9d16eab3fb9b1f185de0f8cffceb167c0b6b8bc4ab4a0c75578a902d7","impliedFormat":1},{"version":"7920c876c0e4e2c4e20ce338078b1feb89e0f0a602b8721c41b7a1b238fc0ef6","impliedFormat":1},{"version":"3f66022953976892b00452afbe401cc5c2c1c8d5431f6a401828d9a34d709ecb","impliedFormat":1},{"version":"a05830ea9c450ad9c46fd0f45af55a319da79fa39815418fac24e360c293bbfa","impliedFormat":1},{"version":"b86bab80709e56e701ade7a89b10f60023ef05afe17386b21bfda761e9fe1906","impliedFormat":1},{"version":"05118e49d06ef589dfbd78bb4a3fd31ea0fb0409c1ffd8b9c63b506a574cbf34","impliedFormat":1},{"version":"a0176513f40c8866a9c45e14e59034167fe58b52a337f45ab60c93c1a02be24e","impliedFormat":1},{"version":"e6fc388db026fb2a9f9d6b3f768708204563010fab490c13467eca29d1eedea6","impliedFormat":1},{"version":"2b16fdc5559e14279c559d6c5838748cc5319e2d9af4a01e402293771c0fc419","impliedFormat":1},{"version":"93322ba70bb796d4e202f21906ac754951423c0082a48914b9b53ade8c9b5ede","impliedFormat":1},{"version":"f9588fed67ccb13e3f99b2dd307554b5aff2112b990eaab18443c46a658931cf","impliedFormat":1},{"version":"9bca5bfb246dd839a667174acaf84fc015d48b9e91a66fd76109c18e56a30733","impliedFormat":1},{"version":"f3c97f8567f4e826f2a47d44bd149cf03eae4792fa9deb2f83b018d80de26bb7","impliedFormat":1},{"version":"557c779495f8e0974f309ef96d2d35210ad0bb27c4f4e813dfa4ee9864aff5dc","impliedFormat":1},{"version":"7c5ce5c3ed01f3b637832c9f1e0b5d2cddd35d5a58372754052909be5bf4a30a","impliedFormat":1},{"version":"93f9f163172ac0ad9d2b85d49a56c9f72ab4f07a9e34a618aff02b2fc6d50a3f","impliedFormat":1},{"version":"856c5962987f5df99a4c1508dce88c86afacdf52c3b5115458a96c89287ad2b2","impliedFormat":1},{"version":"7c0313e7640561ead793dcee8eeef4518af1eb0b57cd293b0c4e7c9e04bb510f","impliedFormat":1},{"version":"8a54c46ccea0dd3a6f22e700a1b6ff148249a611cb2453a19751e6a5fab79dc4","impliedFormat":1},{"version":"471ae99272593aff598174b117aa92ae25019546b7ab4c1265f12c27dc33fd0e","impliedFormat":1},{"version":"d8da35bbf8cc88d965d387ca82e13f9d28bc3104a0bb5839a87d118e1e7b4eb7","impliedFormat":1},{"version":"dcd348aab65d6d0d56c2440d7a2dbd4e7934cd72af300d71cde9c3386f5593de","impliedFormat":1},{"version":"62ce0b7352085e6c5ae931791449e10a12f5d4ddf5230dee4881125c018c8c7e","impliedFormat":1},{"version":"3164044225b7cee9a155dbf5fa2eb5e78e5c9016dda1d90227fa60935954d890","impliedFormat":1},{"version":"f0db478710e82808f13826749f9bebf49c00fb821a9912c86789fb521f5168d6","impliedFormat":1},{"version":"fcea37d4da54ce2003ef3d287593743d797de193b4069b595e982144ff22b12d","impliedFormat":99},{"version":"1974d9cd45125039b651dfa8bcb9689e8c1d4d8a7dc20db710a27fe0d497fe6f","impliedFormat":99},{"version":"3b29f7d21bd6a07aea9adc06ee9612d3d86fa03663e3364b4d2c067c7f547e5e","impliedFormat":99},{"version":"01545f0274a774e191f06380ddedaec2b2dfbd021ca2e8775f7819959beb2cb4","impliedFormat":99},{"version":"6c557db1095e0588b7d82d9bdd9e4328872d436a94f2025da271d5ef57845309","impliedFormat":99},{"version":"2827790fc4a5c48d032a79a8d547eca0620d7fc7c997b830417f6de5b04c7c3d","impliedFormat":99},{"version":"7bba3bab37aa81a0b9628c26b43c38bfae8316e3e54a9a0572c2eaa7b20518c7","impliedFormat":99},"632efe7a2185fa8d7c9c24bb2f4422ab7a713e12127db3470b412eb2b400eb94","de8812d9ce48428c3da38547534dcd42bd9939e8e915fa6b7f1e88ac41415749","5a18f5365eca8f19ee360522492d7fe68efcf7fed0ff846ead50f6d37310e5cd","2e65bec18aaa45fd54438e9cfccd889ca1aa56485add7f81087fe3d590bd0ebe",{"version":"c6fe327c538417b8dd5b9bb32abcd7911534b10da3a4514f3445cdb28cf3abf2","impliedFormat":99},{"version":"0065cdb7ac9f5b19921632de63f888ec2cc11ad57f7fc868f44bf0faad2fce3e","impliedFormat":99},{"version":"8c1adc3171d0287f3a26f4891a7d1834c89999573a9b444aa5ff519dcc43a2b7","impliedFormat":99},{"version":"16de02d4e7ae55933e1e310af296e8802753f2f9c60bf7436413b51cae0a451c","impliedFormat":99},{"version":"1921b8b1513bb282e741587ec802ef76a643a3a56b9ee07f549911eab532ee2e","impliedFormat":99},{"version":"a16b99c0d3511955f5abc6c01590b01b062e8375f43816e831cb402c03a09400","impliedFormat":99},{"version":"d03f3549a814f5c5d1a62950349aad23dcf9f830873b78ac59ab7266e5b4a14a","impliedFormat":99},{"version":"5a2cf4cd852a58131b320da62269b2143850920ce27e8fdec41fed5c2c54ec95","impliedFormat":99},{"version":"03200d03f2b750f0bc64cbbeac20d5bacb986dc6b2de4e464b47589ad9c6b740","impliedFormat":99},{"version":"99f169da66be3a487ce1fe30b11f33ed2bdf57893729caaea453517d9a7fa523","impliedFormat":99},{"version":"043195af0b52aadd10713870dd60369df0377ed153104b26e6bac1213b19f63e","impliedFormat":99},{"version":"ad17a36132569045ab97c8e5badf8febb556011a8ed7b2776ff823967d6d5aca","impliedFormat":99},{"version":"698d2b22251dbbfc0735e2d6ed350addead9ad031fac48b8bb316e0103d865db","impliedFormat":99},{"version":"abbb31e3da98902306359386224021bfb6cfa2496c89bbbde7ee2065cf58297c","impliedFormat":99},{"version":"ff10facf373a13d2864ff4de38c4892d74be27d9c6468dac49c08adabbf9b0eb","impliedFormat":99},{"version":"97b1cf4599cc3bc2e84b997aa1af60d91ca489d96bea0e20aaff0e52a5504b29","impliedFormat":99},{"version":"853dfbcd0999d3edc6be547d83dc0e0d75bf44530365b9583e75519d35984c35","impliedFormat":99},{"version":"9c80bed388d4ed47080423402db9cb1b35a31449045a83a0487f4dfde3d9d747","impliedFormat":99},{"version":"f29bc6a122a4a26c4e23289daae3aa845a18af10da90989cb8b51987e962b7be","impliedFormat":99},{"version":"3a1f39e098971c10633a064bd7a5dbdec464fcf3864300772763c16aa24457f9","impliedFormat":99},{"version":"20e614d6e045d687c3f7d707561b7655ad6177e859afc0c55649b7e346704c77","impliedFormat":99},{"version":"aa0ae1910ba709bc9db460bdc89a6a24d262be1fbea99451bedac8cbbc5fb0cd","impliedFormat":99},{"version":"161d113c2a8b8484de2916480c7ba505c81633d201200d12678f7f91b7a086f0","impliedFormat":99},{"version":"b998a57d4f43e32ac50a1a11f4505e1d7f71c3b87f155c140debe40df10386c8","impliedFormat":99},{"version":"24cfdd7b4af49b900081ce9145d09fc819ede369a1d3bab71b5af087a4c0ed6f","impliedFormat":1},{"version":"45399a23f22807169e94e90187d51115055cca9c49dd3144771149f9d98f005b","impliedFormat":1},{"version":"365372b744347f5c7ffc18a3c866601aaa8f3502ee14894f993ec4a2c7e8ce5f","impliedFormat":1},{"version":"b8b3d4973e65c48ff94d50dab5a41ca399cdf67794efe90817b5127cacaf4a5c","impliedFormat":1},{"version":"f788992ae874e3833e1e8a218a1ea57edaae936093717f9261f2c727e7149df9","impliedFormat":1},{"version":"966f74824fd8319abcbac78f101ca8da3dbc5e3c5d22a4aa5496cf5313ae7e71","impliedFormat":1},{"version":"f26735d503b8e547e3272867216e2d07a8f4c78a53ad2072ccd100b6fd4544fa","impliedFormat":1},{"version":"4aa7d15aac55231a44a1b009e5db96445132f61198949ec757d4961ad05da546","impliedFormat":1},{"version":"1030b8b64ccf2ee1f9a88bc19e0df0d9adb6685b62be7e50df7a80d0827183a2","impliedFormat":1},{"version":"a4eecd2ef7307bb379fcd1abbe21663719a491dd92aa59f8da09828799cb460e","impliedFormat":1},{"version":"7da6e24c344302ad35b19c7dd6c4bf5d03909077122651efebd7941141fb0ac9","impliedFormat":1},{"version":"16b68b9f141d2133125b87450a1b9ecdf3244f458b3ccd526b670b020e466d3b","impliedFormat":1},{"version":"a91457f43c260cbe23d270cf9c574f23a2c7025666fb63a165ce118320d9998d","impliedFormat":1},{"version":"78582e937911bcbb19683c241f8b997a0880191befab0fa9bb825202de94beb9","impliedFormat":1},{"version":"37e157fdfe79649adf4bcb04cdf916763f06a81ba0da22a20e415a67fdcb9568","impliedFormat":1},{"version":"7ca41c7a49da2a789aecd60d33b19d3a20341e74142a6ad8b5bf8f75631452d0","impliedFormat":1},{"version":"69969c422afa202ce1fe7c671bc39cb394e8a96ff233e79acda87a16f36e8b47","impliedFormat":1},{"version":"dc206d53e8de6b8f1546796a4f7b7645034808f035846d04647d05274c7cdc1c","impliedFormat":1},{"version":"ff0d27d50662009c77dd79d344518ea817ec2631fd5822011b987782d4d55da1","impliedFormat":1},{"version":"e880483592add7da466453c0f77e4efde23ecaf6972321e2a640757f88878cb4","impliedFormat":1},{"version":"c4178a6e73d72acc479c815be991f358ee95c8ab131698ccd670c16a3846fcc8","impliedFormat":1},{"version":"1fc41f91ccb9546b0d2af0485e23317144329e16f558a56eece633e9022bf273","impliedFormat":1},{"version":"31e9a821f05d6efea42991c1a38a020cbc62a6ceab7ddf9d269b48c640e4a1e0","impliedFormat":1},{"version":"bec8bb1ecf05ab4ce02b708eed5ae6a06f6716d4f6e9edc8c03de70f2bd3d1da","impliedFormat":1},{"version":"7783b4b8a51f5aa5d852ca49661a79895c7ae03b6add344b3d81cb9017a0f56b","impliedFormat":1},{"version":"6191a671cf9e869854f8ade1d1284cc51b7305914afe49826449bab7edea7e09","impliedFormat":1},{"version":"edaf103fd90a0c7d0bd6746d462f380113a9cdf5cfc8c6e52335bde997e06e73","impliedFormat":1},{"version":"847e353512835983bac84b9bf902c7ca152b4e32c8a30f48638ebfab594e8cec","impliedFormat":1},{"version":"8ca6732a85ad7299099a9b6e334d46ffe6372fadacf27c5ea09d9d5e22baa3e8","impliedFormat":1},{"version":"9e369d3c7a0420688f8d758e926948eee9bae4c5540d8c4ea607d164298010d1","impliedFormat":1},{"version":"3fa3acfb5ef13845e865876826239430361021f61e54733c08713c34ce0c5d19","impliedFormat":1},{"version":"46191b37660a7995faf4265cd21bcb193e50d676229b2fe67f5b985eeb857080","impliedFormat":1},{"version":"ccaf25e24a400e3e9ac2b9b25ac4deb1c48c6fa79b061b82188a9d8bfb674a7e","impliedFormat":1},{"version":"ba8405d7a0ea7054966990989bd422ab848be55cae7dbd9f5f6811a9079a964d","impliedFormat":1},{"version":"afe40b8a2c84353150fe6d136bb3cff1d03b621226d47faf26ec298017b05b3e","impliedFormat":1},{"version":"76cf9cb15ca8f1f4c4051d8338816b42fa73fcf5ad49ba1e42c95bb2fa1093ae","impliedFormat":1},{"version":"acaf985858b460cda38cc9da7855ba41f614b3f25b6cf4f253d50207240a270d","impliedFormat":1},{"version":"8f03d9387209fcf2df408c885401a4b82683b0697e4e9851d1d0ba115c4c43be","impliedFormat":1},{"version":"f389881ab08f3c53b7bcd380ff9be12fa3a2d8ffbdc353a45c2abf9debaac9bf","impliedFormat":1},{"version":"4235f6c5f79d251cf66c6c1296079eb1ca9bdb74f9c159434265c3170044a6df","impliedFormat":1},{"version":"22348bf28d5e8f6a749cb5443d32c7e63020acb37288d1e1360371e1e92024a5","impliedFormat":1},{"version":"c9c9310a1eaab368389d4bccd09fa042eed7373c76ac5e4c5cb4d3c06061506d","impliedFormat":1},{"version":"a92350544cabcd219f4105119c16c2c6a66db74d2445d56f53dcd1d40ce71874","impliedFormat":1},{"version":"3da2a7bdb4e45bcce672a3ee47f4d9ffed5b1eaa9e20cecc6e651e2039c287b6","impliedFormat":1},{"version":"75704c292fcf508c18a4a5facdd5172695c6892d83a7c94459542eaa03e406a9","impliedFormat":1},{"version":"bfb3007d0000a925516f1a1b84077fbb1a87f7686284e39409ada86de8bdda0b","impliedFormat":1},{"version":"70975a41b683fad56c8b2abf5f57e6d20ebeea40b9fcda5c74b78a786bd30302","impliedFormat":1},{"version":"5710e8ed9797ae0042e815eb8f87df2956cb1bf912939c9b98eeb58494a63c13","impliedFormat":99},{"version":"a6bb421dccfec767dbd3e99180b24c07c4a216c0fd549f54a3313f6ce3f9d2c7","impliedFormat":99},{"version":"3b6f1be46f573b1c1f3e6cd949890bfb96b40ff90b6f313e425a379c1c4d5d77","impliedFormat":99},{"version":"28a2c54d0a78d32c29f7279ca04dc6c7860c008579e4e3033938c0ed0201eb9a","impliedFormat":99},{"version":"c2714a402843287624210a47ebea2b1c8dd3ad1438f448633f6831e31eaf37b8","impliedFormat":99},{"version":"b89945ec6707415d739f3e76f2820982d4927dc6b681910b3c433b5ad261b817","impliedFormat":99},{"version":"a72d5822fb2a2c1ef985b30aed889f4c00342c90e12318762fccc550c6a599cf","impliedFormat":99},{"version":"c8616ab60eda93ca87fbb20aada1d6a6cdbcd2cb181a70a2d7728a3cb0613391","impliedFormat":99},{"version":"eeddfd3e0b09890822068de5248d38144f8328e74b5292847eb4e558d8aba8cb","impliedFormat":99},{"version":"d4dc0b6592543314c8549c71e35ad2ec4a57904662d905ff9585836bde1c855a","impliedFormat":99},{"version":"56e1687a174cd10912a35a4676af434bb213aafa5d4371040986c578afe644ab","impliedFormat":99},{"version":"470c280cc484340b97d0942e0c3aa312399eba3849ceb95312d0d7413bac7458","impliedFormat":99},{"version":"ae183f4a6300aad2be92cdbd4dd12d8bcd36eddf8dd1846f998c237235fe0c33","impliedFormat":99},{"version":"4b0eeffddaf51b967e95926a825a6ba1205b81b3a8fecddbe21eaf0e86bdee91","impliedFormat":99},{"version":"bf3ec0d42e33e487c359a989b30e1c9e90fa06de484dc4751e93fb34a9b5cf90","impliedFormat":99},{"version":"7b9656a61d83df1a46c38c2984dbf96dd057bf48f477ddf3f8990311ab98ec23","impliedFormat":99},{"version":"366b85ddb698f3a035e0caa68dc9fef39a85c4368c0810eaf937c3a3c63ac31e","impliedFormat":99},{"version":"d440ee730bc60a5c605903842e398863e7ecdb7a91fc32a9152f14061bf6cc17","impliedFormat":99},{"version":"a12c86c4a691608d19a75320946c80bbce38bb62c091dda32572aee7158edd38","impliedFormat":99},{"version":"3109cb3f8ab0308d2944c26742b6a8a02b4a4ffc23f479a81f0e945d6a6721dd","impliedFormat":99},{"version":"a2289c12a987f2a06f4cf049afde4fdc9455a4af37913445148865938c6eb613","impliedFormat":99},{"version":"55933c1450edcfaf166429425dbbad0a27c0ae8672d5ab5d427e46946a6f2f63","impliedFormat":99},{"version":"6c684fda6998db4112e82367c9e82e27996dc8086a10d58ac9b51d89770d5f9d","impliedFormat":99},{"version":"5c4b4dd983471fcaed17ad3241c98a1f880729f1ca579ddbcdae7e0bf04035df","impliedFormat":99},{"version":"9e430429c7e9e70071a836ac91a1bf6e6651f91d47d9f4baf0a92eefc6130818","impliedFormat":99},{"version":"b3db7f6d7ef72669dc83fa1ff7b90a2ec31d1d8f82778f2a00ef6d101f5247e5","impliedFormat":99},{"version":"354f61bd2a5acaf20462bc4d61048aa25f8fc0dd04dfe3d2f30bdbabbab54e7d","impliedFormat":99},{"version":"d51756340928e549f076c832d7bc2b4180385597b0b4daaa50e422bed53e1a72","impliedFormat":99},{"version":"6139824680a34eba08979f2e21785a761870384a4df16c143b19288aced9c346","impliedFormat":99},{"version":"c7d89156a4f0313c66377afd14063a9e5be3f8e01a7b5fae4723ef07a2628e55","impliedFormat":99},{"version":"730cb342a128f5a8a036ffbd6dbc1135b623ce2100cefe1e1817bb8845bc7100","impliedFormat":99},{"version":"78e387f16df573a98dd51b3c86d023ddbd5bf68e510711a9fee8340e7ccc3703","impliedFormat":99},{"version":"e2381c64702025b4d57b005e94ed0b994b5592488d76f1e5f67f59d1860ebb70","impliedFormat":99},{"version":"d7dfcb039ff9cff38ccd48d2cc1ba95ca45c316670eddbcf81784e21b7128692","impliedFormat":99},{"version":"acaf0a60eb243938f7742df08bf5d52482fbea033fd27141ee3a6d878bbb0d3d","impliedFormat":99},{"version":"fb89aeecfc8eb28f5677c2c89bced74d13442b7f4ebd01ce2ce92127d1b36d69","impliedFormat":99},{"version":"9e91cb0a5bd7aefa2b94a2872828d6d2321df0ca44412e74d99e8b94e579b7d8","impliedFormat":99},{"version":"081afba15153825732ab407c45bb424da23db83a04209bf4b5ec7766de55b192","impliedFormat":99},{"version":"e6f510fd5e057bd09042ee9cc61b26eaa06ca05db32aaafb04d3c6066c6073f8","impliedFormat":99},{"version":"e5aa35b3740170492e06e60989d35a222cfda2148507c650ea55753f726c9213","impliedFormat":99},{"version":"057aa42f6983120c35373aed62b219ffcbd7b476b2df08709139a9eb8dfeed26","impliedFormat":99},{"version":"95a0c46b4675d4d02de6a7c167738f1176b53b26ebec9ccfe8e5d9acb0dc7aee","impliedFormat":99},{"version":"94ad4d9745811c482ae3bad61e5b206e0904f77e0dacf783199193a3df9f6ce6","impliedFormat":99},{"version":"9550812e22ca36beb9b31bd59bc30469bd2f8d86668bda4b543949646e6eaf36","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"d295b018b872fa06efeaf4de4913a9e9bd9aef792023b2742a3d150b14439bf5","impliedFormat":99},{"version":"4ecd02d0e4ccf7befb9c28802c6c208060e33291d56fd1868900ca295c399077","impliedFormat":99},{"version":"37ada75be4b3f6b888f538091020d81b2a0ad721dc42734f70f639fa4703a5c8","impliedFormat":99},{"version":"aa73ff0024d5434a3e87ea2824f6faece7aad7b9f6c22bd399268241ca051dc7","impliedFormat":99},{"version":"ad8b2108dbdd9fb383e8d288198565920d991d50bc0f7a0744219c7c5e05c9f1","impliedFormat":99},{"version":"782868b723c055c5612c4a243f72a78a8b3c0c3b707ae04954e36e8ab966df4c","impliedFormat":99},{"version":"3de9d9ad4876972e7599fc0b3bddb0fddb1923be75787480a599045a30f14292","impliedFormat":99},{"version":"1a58d5f5b15bb6360c94e51f304b07ca754c60da9f67b3262f7490cd5cdbe70d","impliedFormat":99},{"version":"9fc243c4c87d8560348501080341e923be2e70bf7b5e09a1b26c585d97ae8535","impliedFormat":99},{"version":"4f97089fe15655ae448c9d005bb9a87cc4e599b155edc9e115738c87aa788464","impliedFormat":99},{"version":"2fff037c771e3fe6108b14137e56827197944b855aa2df40f21fa2d8a2758e1e","impliedFormat":99},{"version":"22929f9874783b059156ee3cfa864d6f718e1abf9c139f298a037ae0274186f6","impliedFormat":99},{"version":"c72a7c316459b2e872ca4a9aca36cc05d1354798cee10077c57ff34a34440ac2","impliedFormat":99},{"version":"3e5bbf8893b975875f5325ebf790ab1ab38a4173f295ffea2ed1f108d9b1512c","impliedFormat":99},{"version":"9e4a38448c1d26d4503cf408cc96f81b7440a3f0a95d2741df2459fe29807f67","impliedFormat":99},{"version":"84124d21216da35986f92d4d7d1192ca54620baeca32b267d6d7f08b5db00df9","impliedFormat":99},{"version":"c08976f55a00ddbb3b13a68a9a0d418117f35c6e2d40f1f6f55468fc180a01f0","impliedFormat":99},{"version":"25f5bf39f0785a2976d0af5ac02f5c18ca759cde62bc48dd1d0d99871d9ad86f","impliedFormat":99},{"version":"877c73fdbe90937b3c16b5827526a428bf053957a202ac8c2fd88d6eab437764","impliedFormat":99},{"version":"e324b2143fa6e32fac37ed9021b88815e181b045a9f17dbb555b72d55e47cdc1","impliedFormat":99},{"version":"3e90ea83e3803a3da248229e3027a01428c3b3de0f3029f86c121dc76c5cdcc2","impliedFormat":99},{"version":"9368c3e26559a30ad3431d461f3e1b9060ab1d59413f9576e37e19aaf2458041","impliedFormat":99},{"version":"915e5bb8e0e5e65f1dc5f5f36b53872ffcdcaef53903e1c5db7338ea0d57587a","impliedFormat":99},{"version":"92cf986f065f18496f7fcb4f135bff8692588c5973e6c270d523191ef13525ad","impliedFormat":99},{"version":"652f2bd447e7135918bc14c74b964e5fe48f0ba10ff05e96ed325c45ac2e65fb","impliedFormat":99},{"version":"cc2156d0ec0f00ff121ce1a91e23bd2f35b5ab310129ad9f920ddaf1a18c2a4d","impliedFormat":99},{"version":"7b371e5d6e44e49b5c4ff88312ae00e11ab798cfcdd629dee13edc97f32133d8","impliedFormat":99},{"version":"e9166dab89930e97bb2ce6fc18bcc328de1287b1d6e42c2349a0f136fc1f73e6","impliedFormat":99},{"version":"6dc0813d9091dfaed7d19df0c5a079ee72e0248ce5e412562c5633913900be25","impliedFormat":99},{"version":"e704c601079399b3f2ec4acdfc4c761f5fe42f533feaaab7d2c1c1528248ca3e","impliedFormat":99},{"version":"49104d28daa32b15716179e61d76b343635c40763d75fe11369f681a8346b976","impliedFormat":99},{"version":"6d414a0690dd5e23448958babe29b6aeb984faf8ff79248310f6c9718a9196ad","impliedFormat":99},{"version":"0bfdb8230777769f3953fd41cf29c3cb61262a0be678dd5c899e859c0d159efe","impliedFormat":99},{"version":"97e685ac984fc93dcdae6c24f733a7a466274c103fdcf5d3b028eaa9245f59d6","impliedFormat":99},{"version":"68526ea8f3bbf75a95f63a3629bebe3eb8a8d2f81af790ce40bc6aad352a0c12","impliedFormat":99},{"version":"bcab57f5fe8791f2576249dfcc21a688ecf2a5929348cfe94bf3eb152cff8205","impliedFormat":99},{"version":"b5428f35f4ebf7ea46652b0158181d9c709e40a0182e93034b291a9dc53718d8","impliedFormat":99},{"version":"0afcd28553038bca2db622646c1e7fcf3fb6a1c4d3b919ef205a6014edeeae0f","impliedFormat":99},{"version":"ee016606dd83ceedc6340f36c9873fbc319a864948bc88837e71bd3b99fdb4f6","impliedFormat":99},{"version":"0e09ffe659fdd2e452e1cbe4159a51059ae4b2de7c9a02227553f69b82303234","impliedFormat":99},{"version":"4126cb6e6864f09ca50c23a6986f74e8744e6216f08c0e1fe91ab16260dab248","impliedFormat":99},{"version":"4927dba9193c224e56aa3e71474d17623d78a236d58711d8f517322bd752b320","impliedFormat":99},{"version":"3d3f189177511d1452e7095471e3e7854b8c44d94443485dc21f6599c2161921","impliedFormat":99},{"version":"bb0519ff5ef245bbf829d51ad1f90002de702b536691f25334136864be259ec5","impliedFormat":99},{"version":"a64e28f2333ea0324632cf81fd73dc0f7090525547a76308cb1dfe5dab96596a","impliedFormat":99},{"version":"883f9faa0229f5d114f8c89dadd186d0bdf60bdafe94d67d886e0e3b81a3372e","impliedFormat":99},{"version":"d204b9ae964f73721d593e97c54fc55f7fd67de826ce9e9f14b1e762190f23d1","impliedFormat":99},{"version":"c010c1317efa90a9b10d67f0ad6b96bde45818b6cdca32afababcf7a2dd7ecc3","impliedFormat":99},{"version":"68115cdc58303bad32e2b6d59e821ccaada2c3fb63f964df7bd4b2ebd6735e80","impliedFormat":99},{"version":"7db31e5afa6ffa20d6e65505d1af449415e8a489d628f93a9a1f487d89a218c6","impliedFormat":99},{"version":"db5968a602bb6c07ab2d608e3035489d443f3556209ded7c0679e0c9c7b671ed","impliedFormat":99},{"version":"d010efe139c8bb78497dc7185dddbbcefc84d3059b5d8549c26221257818a961","impliedFormat":99},{"version":"85059ed9b6605d92c753daf3a534855ba944be69ff1a12ab4eca28cefbabd07a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"ea68a96f4e2ba9ca97d557b7080fbdb7f6e6cf781bb6d2e084e54da2ac2bb36c","impliedFormat":99},{"version":"00173ffba39168fe3027099da73666fbedfb305284b64eaaee25bb0037e354b2","impliedFormat":99},{"version":"f3ed9a4ec3123351b2a8cba473e9a6f173eab5458309f380fe0039642f70bcae","impliedFormat":99},{"version":"21f96085ed19d415725c5a7d665de964f8283cacef43957de10bdd0333721cc4","impliedFormat":99},{"version":"e8d4da9e0859c6d41c4f1c3f4d0e70446554ba6a6ab91e470f01af6a2dcac9bf","impliedFormat":99},{"version":"39defc828dbdf47affd1e83ae63798fbb0224e158549db98e632742ab5ddaebd","impliedFormat":99},{"version":"a10fd5d76a2aaba572bec4143a35ff58912e81f107aa9e6d97f0cd11e4f12483","impliedFormat":99},{"version":"1215f54401c4af167783d0f88f5bfb2dcb6f0dacf48495607920229a84005538","impliedFormat":99},{"version":"52869a2597d5c33241d1debc4dfb0c1c0a5a05b8a7b5f85de5cfe0e553e86f47","impliedFormat":99},{"version":"2fe93aef0ee58eaa1b22a9b93c8d8279fe94490160703e1aabeff026591f8300","impliedFormat":99},{"version":"bbb02e695c037f84947e56da3485bb0d0da9493ed005fa59e4b3c5bc6d448529","impliedFormat":99},{"version":"ba666b3ab51c8bc916c0cebc11a23f4afec6c504c767fd5f0228358f7d285322","impliedFormat":99},{"version":"c10972922d1887fe48ed1722e04ab963e85e1ac12263a167edef9b804a2af097","impliedFormat":99},{"version":"6efeacbd1759ea57a4c7264eb766c531ae0ab2c00385294be58bc5031ef43ad1","impliedFormat":99},{"version":"1c261f5504d0175be4f1b6b99f101f4c3a129a5a29fc768e65c52d6861ca5784","impliedFormat":99},{"version":"f0e69b5877b378d47cbac219992b851e2bbc0f7e3a3d3579d67496dabd341ec4","impliedFormat":99},{"version":"b5ea27f19a54feca5621f5ba36a51026128ea98e7777e5d47f08b79637527cf5","impliedFormat":99},{"version":"b54890769fa3c34ab3eb7e315b474f52d5237c86c35f17d59eb21541e7078f11","impliedFormat":99},{"version":"c133db4b6c17a96db7fa36607c59151dec1e5364d9444cbe15e8c0ea4943861e","impliedFormat":99},{"version":"3a0514f77606d399838431166a0da6dbd9f3c7914eae5bbfbd603e3b6a552959","impliedFormat":99},{"version":"fa568f8d605595e1cffbfca3e8c8c492cf88ae2c6ed151f6c64acf0f9e8c25d8","impliedFormat":99},{"version":"c76fb65cb2eb09a0ee91f02ff5b43a607b94a12c34d16d005b2c0afc62870766","impliedFormat":99},{"version":"cf7af60a0d4308a150df0ab01985aabb1128638df2c22dd81a2f5b74495a3e45","impliedFormat":99},{"version":"913bbf31f6b3a7388b0c92c39aec4e2b5dba6711bf3b04d065bd80c85b6da007","impliedFormat":99},{"version":"42d8c168ca861f0a5b3c4c1a91ff299f07e07c2dd31532cd586fd1ee7b5e3ae6","impliedFormat":99},{"version":"a29faa7cb35193109ec1777562ca52c72e7382ffe9916b26859b5874ad61ff29","impliedFormat":99},{"version":"15bdf2eeef95500ba9f1602896e288cb425e50462b77a07fa4ca23f1068abb21","impliedFormat":99},{"version":"452db58fd828ab87401f6cecc9a44e75fa40716cc4be80a6f66cf0a43c5a60cc","impliedFormat":99},{"version":"54592d0215a3fd239a6aa773b1e1a448dc598b7be6ce9554629cd006ee63a9d6","impliedFormat":99},{"version":"9ee28966bb038151e21e240234f81c6ba5be6fde90b07a9e57d4d84ae8bc030c","impliedFormat":99},{"version":"ad639ad2ec93535c23cfa42fbd23d0d44be0fb50668dd57ee9b38b913e912430","impliedFormat":99},{"version":"956e43b28b5244b27fdb431a1737a90f68c042e162673769330947a8d727d399","impliedFormat":99},{"version":"92a2034da56c329a965c55fd7cffb31ccb293627c7295a114a2ccd19ab558d28","impliedFormat":99},{"version":"c1b7957cd42a98ab392ef9027565404e5826d290a2b3239a81fbac51970b2e63","impliedFormat":99},{"version":"4861ee34a633706bcbba4ea64216f52c82c0b972f3e790b14cf02202994d87c5","impliedFormat":99},{"version":"7af4e33f8b95528de005282d6cca852c48d293655dd7118ad3ce3d4e2790146f","impliedFormat":99},{"version":"df345b8d5bf736526fb45ae28992d043b2716838a128d73a47b18efffe90ffa7","impliedFormat":99},{"version":"a6e18a521af3c12bb42bf2da73d0ef1a82420425726c662d068d8d4d813b16c5","impliedFormat":99},{"version":"dcc38f415a89780b34d827b45493d6dbadb05447d194feb4498172e508c416ac","impliedFormat":99},{"version":"7e917e3b599572a2dd9cfa58ff1f68fda9e659537c077a2c08380b2f2b14f523","impliedFormat":99},{"version":"20b108e922abd1c1966c3f7eb79e530d9ac2140e5f51bfa90f299ad5a3180cf9","impliedFormat":99},{"version":"2bc82315d4e4ed88dc470778e2351a11bc32d57e5141807e4cdb612727848740","impliedFormat":99},{"version":"e2dd1e90801b6cd63705f8e641e41efd1e65abd5fce082ef66d472ba1e7b531b","impliedFormat":99},{"version":"a3cb22545f99760ba147eec92816f8a96222fbb95d62e00706a4c0637176df28","impliedFormat":99},{"version":"287671a0fe52f3e017a58a7395fd8e00f1d7cd9af974a8c4b2baf35cfda63cfa","impliedFormat":99},{"version":"e2cdad7543a43a2fb6ed9b5928821558a03665d3632c95e3212094358ae5896b","impliedFormat":99},{"version":"326a980e72f7b9426be0805774c04838e95195b467bea2072189cefe708e9be7","impliedFormat":99},{"version":"e3588e9db86c6eaa572c313a23bf10f7f2f8370e62972996ac79b99da065acaa","impliedFormat":99},{"version":"1f4700278d1383d6b53ef1f5aecd88e84d1b7e77578761838ffac8e305655c29","impliedFormat":99},{"version":"6362a4854c52419f71f14d3fee88b3b434d1e89dcd58a970e9a82602c0fd707a","impliedFormat":99},{"version":"fb1cc1e09d57dfeb315875453a228948b904cbe1450aaf8fda396ff58364a740","impliedFormat":99},{"version":"50652ed03ea16011bb20e5fa5251301bb7e88c80a6bf0c2ea7ed469be353923b","impliedFormat":99},{"version":"d388e0c1c9a42d59ce88412d3f6ce111f63ce2ff558e0a3f84510092431dfee0","impliedFormat":99},{"version":"35ea0a1e995aef5ae19b1553548a793c76eb31bdf7fef30bc74656660c3a09c3","impliedFormat":99},{"version":"56f4ae4e34cbff1e4158ccada4feea68a357bae86adb3bedaa65260d0af579df","impliedFormat":99},{"version":"88ca3a19c8b99e409299e1173d2fe1b79c5960e966f2f3a7db6788969414f546","impliedFormat":99},{"version":"a4f90a12cbfac13b45d256697ce70a6b4227790ca2bf3898ffd2359c19eab4eb","impliedFormat":99},{"version":"4a6c2ac831cff2d8fa846dfb010ee5f7afce3f1b9bd294298ee54fdc555f1161","impliedFormat":99},{"version":"8395cc6350a8233a4da1c471bdac6b63d5ed0a0605da9f1e0c50818212145b5b","impliedFormat":99},{"version":"b58dda762d6bd8608d50e1a9cc4b4a1663a9d4aa50a9476d592a6ecdc6194af4","impliedFormat":99},{"version":"bc14cb4f3868dab2a0293f54a8fe10aa23c0428f37aece586270e35631dd6b67","impliedFormat":99},{"version":"2d4530d6228c27906cb4351f0b6af52ff761a7fab728622c5f67e946f55f7f00","impliedFormat":99},{"version":"ec359d001e98bf56b0e06b4882bd1421fd088d4d181dff3138f52175c0582a51","impliedFormat":99},{"version":"ed88c3365f1ed406cd592ab4c69c9e31aedbaabaf5450cc93e0f0bd576a48180","impliedFormat":99},{"version":"73468feda625fe017c2904c4d753e8e4e2e292502af8bcd4db59ff56a762692a","impliedFormat":99},{"version":"a85b5df75328fb3857cb558055d78d9aeb437214a766af0ad309ea1bfe943e6e","impliedFormat":99},{"version":"f80561a76c0187c98313433339bb44818fd98dc10f31c0574b0e9e5ba2912700","impliedFormat":99},{"version":"45c293919f535342cd0fcfe2da1a8d346014f7a368e4ec401ebdde80293eef96","impliedFormat":99},{"version":"d8cf10c52fcfed3459ed885435124dfa75b7536c6dc7d56970e2a7c2015533a6","impliedFormat":99},{"version":"77dabe31d44c48782c529d5c9acddc41f799bf9b424b259596131efc77355478","impliedFormat":99},{"version":"6801ebe0b7ab3b24832bc352e939302f481496b5d90b3bc128c00823990d7c7d","impliedFormat":99},{"version":"0abb1feddc76a0283c7e8e8910c28b366612a71f8bfdd5ca42271d7ad96e50b2","impliedFormat":99},{"version":"ac56b2f316b70d6a727fdbbcfa8d124bcd1798c293487acb2b27a43b5c886bb0","impliedFormat":99},{"version":"d849376baf73ec0b17ffd29de702a2fdbbe0c0390ec91bebf12b6732bf430d29","impliedFormat":99},{"version":"70de5b72bc833ab9ee7430534435d10e8edb218d06fdf781e0cae39a7b96067b","impliedFormat":99},{"version":"0f9c9f7d13a5cf1c63eb56318b6ae4dfa2accef1122b2e88b5ed1c22a4f24e3b","impliedFormat":99},{"version":"c693f9c0fda89d41e7670429d30ddcda570f9ad63a7301379695916524eb6d2e","impliedFormat":99},{"version":"66a83abc49216ddee4049056ee2b345c08c912529e93aa725d6cae384561de83","impliedFormat":99},{"version":"6b514d5159d0d189675a1d5a707ba068a6da6bc097afb2828aae0c98d8b32f08","impliedFormat":99},{"version":"39d7dbcfec85393fedc8c7cf62ee93f7e97c67605279492b085723b54ccaca8e","impliedFormat":99},{"version":"81882f1fa8d1e43debb7fa1c71f50aa14b81de8c94a7a75db803bb714a9d4e27","impliedFormat":99},{"version":"d2c74e0608352d6eb35b35633cdbce7ed49c3c4498720c9dd8053fdc47a9db8a","impliedFormat":99},{"version":"bca335fd821572e3f8f1522f6c3999b0bc1fe3782b4d443c317df57c925543ed","impliedFormat":99},{"version":"73332a05f142e33969f9a9b4fb9c12b08b57f09ada25eb3bb94194ca035dc83d","impliedFormat":99},{"version":"c366621e6a8febe9bbca8c26275a1272d99a45440156ca11c860df7aa9d97e6d","impliedFormat":99},{"version":"d9397a54c21d12091a2c9f1d6e40d23baa327ae0b5989462a7a4c6e88e360781","impliedFormat":99},{"version":"dc0e2f7f4d1f850eb20e226de8e751d29d35254b36aa34412509e74d79348b75","impliedFormat":99},{"version":"c7bc760336ac14f9423c83ca2eec570a2be6f73d2ce7f890c6cce76c931c8e15","impliedFormat":99},{"version":"dea1773a15722931fbfe48c14a2a1e1ad4b06a9d9f315b6323ee112c0522c814","impliedFormat":99},{"version":"b26e3175cf5cee8367964e73647d215d1bf38be594ac5362a096c611c0e2eea8","impliedFormat":99},{"version":"4280093ace6386de2a0d941b04cff77dda252f59a0c08282bd3d41ccc79f1a50","impliedFormat":99},{"version":"fe17427083904947a4125a325d5e2afa3a3d34adaedf6630170886a74803f4a2","impliedFormat":99},{"version":"0246f9f332b3c3171dcdd10edafab6eccb918c04b2509a74e251f82e8d423fb7","impliedFormat":99},{"version":"f6ef33c2ff6bbdf1654609a6ca52e74600d16d933fda1893f969fc922160d4d7","impliedFormat":99},{"version":"1abd22816a0d992fd33b3465bf17a5c8066bf13a8c6ca4fc0cd28884b495762d","impliedFormat":99},{"version":"82032a08169ea01cf01aa5fd3f7a02f1f417697df5e42fc27d811d23450bc28d","impliedFormat":99},{"version":"9c8cbd1871126e98602502444cffb28997e6aa9fbc62d85a844d9fd142e9ae1b","impliedFormat":99},{"version":"b0e20abc4a73df8f97b3f1223cc330e9ba3b2062db1908aa2a97754a792139ac","impliedFormat":99},{"version":"bc1f2428d738ab789339030078adf313100471c37d8d69f6cf512a5715333afc","impliedFormat":99},{"version":"dc500c6a23c9432849c82478bdab762fa7bdf9245298c2279a7063dd05ae9f9a","impliedFormat":99},{"version":"cd1b6a2503fc554dcab602e053565c4696e4262b641b897664d840a61f519229","impliedFormat":99},{"version":"af1580cd202df0e33fc592fe1d75d720c15930a4127a87633542b33811316724","impliedFormat":99},{"version":"af6106fc6900a51b49a8e6f4c5a8f18295eb9ae34efbea3c2b7db45e42b41b5e","impliedFormat":99},{"version":"cd090c8806133525e1085f6b820618194d0133e6fc328d03956969d211a9c885","impliedFormat":99},{"version":"9ea6fea875302b2bb3976f7431680affc45a4319499d057ce12be04e4f487bf9","impliedFormat":99},{"version":"66e0c3f9875da7be383d0c78c8b8940b6ebae3c6a0fbfd7e77698b5e8ade3b05","impliedFormat":99},{"version":"da38d326fe6a72491cad23ea22c4c94dfc244363b6a3ec8a03b5ad5f4ee6337b","impliedFormat":99},{"version":"da587bf084b08ea4e36a134ec5fb19ae71a0f32ec3ec2a22158029cb2b671e28","impliedFormat":99},{"version":"517a31c520e08c51cfe6d372bc0f5a6bf7bd6287b670bcaa180a1e05c6d4c4da","impliedFormat":99},{"version":"0263d94b7d33716a01d3e3a348b56c2c59e6d897d89b4210bdbf27311127223c","impliedFormat":99},{"version":"d0120e583750834bf1951c8b9936781a98426fe8d3ad3d951f96e12f43090469","impliedFormat":99},{"version":"a2e6a99c0fb4257e9301d592da0834a2cb321b9b1e0a81498424036109295f8b","impliedFormat":99},{"version":"c6b5ae9f99f1fccadc23d56307a28c8490c48e687678f2cafa006b3b9b8e73e4","impliedFormat":99},{"version":"eae178ee8d7292bcd23be2b773dda60b055bc008a0ddce2acc1bfe30cc36cf04","impliedFormat":99},{"version":"e0b5f197fb47b39a4689ad356b8488e335bbf399b283492c0ffae0cfda88837b","impliedFormat":99},{"version":"adb7aa4b8d8b423d0d7e78b6a8affb88c3a32a98e21cd54fcafd570ad8588d0c","impliedFormat":99},{"version":"643e22362c15304f344868ec0e7c0b4a1bc2b56c8b81d5b9f0ee0a6f3c690fff","impliedFormat":99},{"version":"f89e713e33bfcc7cc1d505a1e76f260b7aae72f8ba83f800ab47b5db2fed8653","impliedFormat":99},{"version":"4c3be904cab639b22989d13a9c4ea1184388af2ff27c4f5b39960628a76629db","impliedFormat":99},{"version":"307009cbc7927f6c2e7b482db913589f8093108b8bd4a450cfe749b80476aea0","impliedFormat":99},{"version":"a5bf6d947ce6a4f1935e692c376058493dbfbd9f69d9b60bbaf43fd5d22c324b","impliedFormat":99},{"version":"4927ef881b202105603e8416d63f317a1f1ea47d321e32826b9b20a44caa55e2","impliedFormat":99},{"version":"7deb9fb41fbf45e79da80de7e0eb10437cd81a36024edff239aa59228849b2d3","impliedFormat":99},{"version":"f9fdd2efc37eefc321338d39b5bd341b2aa82292b72610cb900f205f6803ff66","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"7139f89a25baa378770397bf9efd6e15061eb63d42df3591e946a87ef2197fea","impliedFormat":99},{"version":"956aeea3c94b894b3ae95a9691c1a8fa6f9eae47d30817a59c14908113322caa","impliedFormat":99},{"version":"87cbb57d0f80470800378bff30f8bc7e2c99a7b30a818bf7ccbf049407714a10","impliedFormat":99},{"version":"cc411cd97607f993efb008c8b8a67207e50fdd927b7e33657e8e332c2326c9f3","impliedFormat":99},{"version":"b144c6cdf6525af185cd417dc85fd680a386f0840d7135932a8b6839fdee4da6","impliedFormat":99},{"version":"2125e8c5695ddfded3b93c3537b379df2b4dcd3cdad97fa6ec87d51beda0bef1","impliedFormat":99},{"version":"572ee8f367fe4068ccb83f44028ddb124c93e3b2dcc20d65e27544d77a0b84d3","impliedFormat":99},{"version":"7d604c1d876ef8b7fec441cf799296fd0d8f66844cf2232d82cf36eb2ddff8fe","impliedFormat":99},{"version":"7b86b536d3e8ca578f8fbc7e48500f89510925aeda67ed82d5b5a3213baf5685","impliedFormat":99},{"version":"861596a3b58ade9e9733374bd6b45e5833b8b80fd2eb9fe504368fc8f73ae257","impliedFormat":99},{"version":"a3da7cf20826f3344ad9a8a56da040186a1531cace94e2788a2db795f277df94","impliedFormat":99},{"version":"900a9da363740d29e4df6298e09fad18ae01771d4639b4024aa73841c6a725da","impliedFormat":99},{"version":"4e979a85e80e332414f45089ff02f396683c0b5919598032a491eb7b981fedfd","impliedFormat":99},{"version":"6d3496cac1c65b8a645ecbb3e45ec678dd4d39ce360eecbcb6806a33e3d9a7ae","impliedFormat":99},{"version":"9909129eb7301f470e49bbf19f62a6e7dcdfe9c39fdc3f5030fd1578565c1d28","impliedFormat":99},{"version":"442f6a9e83bb7d79ff61877dc5f221eea37f1d8609d8848dfbc6228ebc7a8e90","impliedFormat":99},{"version":"10c21d52b988b30fcd2ee3ef277a15c7e5913e14da0641f8d50db18a3c4e6bef","impliedFormat":99},{"version":"7e4fc245cc369ba9c1a39df427563e008b8bfe5bf73c6c3f5d3a928d926a8708","impliedFormat":99},{"version":"2dd4989deea8669628ef01af137d9494c12bbfc5ff2bbe033369631932c558cb","impliedFormat":99},{"version":"d39330cb139d83d5fa5071995bb615ea48aa093018646d4985acd3c04b4e443d","impliedFormat":99},{"version":"663800dc36a836040573a5bb161d044da01e1eaf827ccc71a40721c532125a80","impliedFormat":99},{"version":"f28691d933673efd0f69ac7eae66dea47f44d8aa29ec3f9e8b3210f3337d34df","impliedFormat":99},{"version":"fa9c4f35c92322c61ec9a7f90dd2a290c35723348891f1459946186b189a129a","impliedFormat":99},{"version":"687208233ae7a969baa2d0c565c9f24eb4cb1e64d6cfb30f71afec9e929e58c2","impliedFormat":99},{"version":"f716500cce26a598e550ac0908723b9c452e0929738c55a3c7fe3c348416c3d0","impliedFormat":99},{"version":"6b7c511d20403a5a1e3f5099056bc55973479960ceff56c066ff0dd14174c53c","impliedFormat":99},{"version":"48b83bd0962dac0e99040e91a49f794d341c7271e1744d84e1077e43ecda9e04","impliedFormat":99},{"version":"d7c98c7c260b3f68f766ec9bbd19d354db2254c190c5c6258ae6147283d308f0","impliedFormat":99},{"version":"ffa53626a9de934a9447b4152579a54a61b2ea103dbbf02b0f65519bfef98cdd","impliedFormat":99},{"version":"c427b591bfddecf5501efa905b408291a189ae579a06e4794407c8e94c8709fc","impliedFormat":99},{"version":"b6e9b15869788861fff21ec7f371bda9a2e1a1b15040cc005db4d2e792ece5ca","impliedFormat":99},{"version":"22c844fbe7c52ee4e27da1e33993c3bbb60f378fa27bb8348f32841baecb9086","impliedFormat":99},{"version":"dee6934166088b55fe84eae24de63d2e7aae9bfe918dfe635b252f682ceca95a","impliedFormat":99},{"version":"c39b9c4f5cc37a8ed51bef12075f5d023135e11a9b215739fd0dd87ee8da804a","impliedFormat":99},{"version":"db027bc9edef650cff3cbe542959f0d4ef8532073308c04a5217af25fc4f5860","impliedFormat":99},{"version":"a4e026fe4d88d36f577fbd38a390bd846a698206b6d0ca669a70c226e444af1b","impliedFormat":99},{"version":"165f3c6426e7dfff8fb0c34952d11d3b8528cb18502a7350d2eeb967177b2eb7","impliedFormat":99},{"version":"fa910f88f55844718a277ee9519206abce66629de2692676c3e2ad1c9278bdfd","impliedFormat":99},{"version":"9a7914a6000dbd6feaea9bc51065664d0fef0b5c608b7f66a7b229213e4805ef","impliedFormat":99},{"version":"9ae87bd743e93b6384efbfa306bde1fa70b6ff27533983e1e1fe08a4ef7037b8","impliedFormat":99},{"version":"5f7c0a4aad7a3406db65d674a5de9e36e0d08773f638b0f49d70e441de7127c0","impliedFormat":99},{"version":"29062edaa0d16f06627831f95681877b49c576c0a439ccd1a2f2a8173774d6b2","impliedFormat":99},{"version":"49fcfda71ea42a9475b530479a547f93d4e88c2deb0c713845243f5c08af8d76","impliedFormat":99},{"version":"6d640d840f53fb5f1613829a7627096717b9b0d98356fb86bb771b6168299e2e","impliedFormat":99},{"version":"07603bb68d27ff41499e4ed871cde4f6b4bb519c389dcf25d7f0256dfaa56554","impliedFormat":99},{"version":"6bd4aa523d61e94da44cee0ee0f3b6c8d5f1a91ef0bd9e8a8cf14530b0a1a6df","impliedFormat":99},{"version":"6b6e2508f79513e01386273e63d0fc3617613d80a5aca950a2b0fc33d90ad0b4","impliedFormat":99},"d828ab0f602d93a10b7812a18a845578899dc686d51a2a0945b5c2987c49882c",{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"cacbb7829fdc44382199306cc9b516eb44df1b26bd984c2516b11933ac8049f8","impliedFormat":1},{"version":"99b6b07b5b54123e22e01e721a4d27eabecb7714060ec8ab60b79db5224cfcc0","impliedFormat":99},{"version":"b478cef88033c3b939a6b8a9076af57fc7030e7fd957557f82f2f57eddfc2b51","impliedFormat":99},{"version":"2fac70f99da22181acfda399eed248b47395a8eeb33c9c82d75ca966aee58912","impliedFormat":99},"1bd5d358829d2d2da1ec7359fd30587123aad6edfb3e7205da266fd46c64423d",{"version":"a03b097607908fed59d8c33333707b2a5303d685fcb68a4f3a818c0cf7b178bc","impliedFormat":99},"31220d00817ab61cc9b72c1515e61b69d861db406a3c4633f3d8e08415b5e7ac","ab367e84ebcf7b2ee7fbc21b612321fd90c7d68335e5a511a7a76bbd24a0f20e","2c8186c27605fd5bcac71c4d4b45e2797f3222951063bb292e74c7c26d1c25ca",{"version":"2627bcfcada5e295edaf6788ab21ded3a92cf2e080c20eb251adeb4225b6f507","signature":"d9ce94da61dab863e9b8a3ad0058e850cf1301c913c63206e05867e009ece4e3"},"e343c20cd40743fd49f3a6b199da3cc2d48d96d068a398073f2c6b7486029a21",{"version":"9971931daaf18158fc38266e838d56eb5d9d1f13360b1181bb4735a05f534c03","impliedFormat":99},{"version":"50cf7a23fc93928995caec8d7956206990f82113beeb6b3242dae8124edc3ca0","impliedFormat":99},{"version":"00573fee4b89c91d456f337a9c26d59a8b2046217f91143805b1695a32e84aa2","impliedFormat":99},{"version":"46676ef64c2429a44e2155538df101bae3dbe8dc22e84ea28cce99f98b24e71e","impliedFormat":99},{"version":"962f51218b3f753f9f16334ce7d48a42ddc7eb56df61447f2ddb8cfa55258d4f","impliedFormat":99},{"version":"0c5b705d31420477189618154d1b6a9bb62a34fa6055f56ade1a316f6adb6b3a","impliedFormat":99},{"version":"352031ac2e53031b69a09355e09ad7d95361edf32cc827cfe2417d80247a5a50","impliedFormat":99},{"version":"853b8bdb5da8c8e5d31e4d715a8057d8e96059d6774b13545c3616ed216b890c","impliedFormat":99},{"version":"babea45370fc008379519f0599f263a535ced908a0502ee7ec50df2985f71224","impliedFormat":99},{"version":"fb0c7e1cacee86d3d0da360b65a90ce3aed8dea071542add49fa4fad61611ad7","impliedFormat":99},{"version":"478f34f778d0c180d2932b7babff2ba565aba27707987956f02e2f889882d741","impliedFormat":99},{"version":"c363b57a3dfab561bfe884baacf8568eea085bd5e11ccf0992fac67537717d90","impliedFormat":99},{"version":"5192bb31561f1155bc36403bbcbdc4a93f910f6ceb8de80b66a24a5f77ed8a8c","impliedFormat":99},{"version":"084c09a35a9611e1777c02343c11ab8b1be48eb4895bbe6da90222979940b4a6","impliedFormat":99},{"version":"4b3049a2c849f0217ff4def308637931661461c329e4cf36aeb31db34c4c0c64","impliedFormat":99},{"version":"174b64363af0d3d9788584094f0f5a4fac30c869b536bb6bad9e7c3c9dce4c1d","impliedFormat":99},{"version":"d542fb814a8ceb7eb858ecd5a41434274c45a7d511b9d46feb36d83b437b08d5","impliedFormat":99},{"version":"998d9f1da9ec63fca4cc1acb3def64f03d6bd1df2da1519d9249c80cfe8fece6","impliedFormat":99},{"version":"b7d9ca4e3248f643fa86ff11872623fdc8ed2c6009836bec0e38b163b6faed0c","impliedFormat":99},{"version":"3514579e75f08ddf474adb8a4133dd4b2924f734c1b9784197ab53e2e7b129e0","impliedFormat":99},{"version":"d4f7a7a5f66b9bc6fbfd53fa08dcf8007ff752064df816da05edfa35abd2c97c","impliedFormat":99},{"version":"1f38ecf63dead74c85180bf18376dc6bc152522ef3aedf7b588cadbbd5877506","impliedFormat":99},{"version":"24af06c15fba5a7447d97bcacbcc46997c3b023e059c040740f1c6d477929142","impliedFormat":99},{"version":"facde2bec0f59cf92f4635ece51b2c3fa2d0a3bbb67458d24af61e7e6b8f003c","impliedFormat":99},{"version":"4669194e4ca5f7c160833bbb198f25681e629418a6326aba08cf0891821bfe8f","impliedFormat":99},{"version":"f919471289119d2e8f71aba81869b01f30f790e8322cf5aa7e7dee8c8dadd00a","impliedFormat":99},{"version":"3b9f5af0e636b312ec712d24f611225188627838967191bf434c547b87bde906","impliedFormat":99},{"version":"e9bc0db0144701fab1e98c4d595a293c7c840d209b389144142f0adbc36b5ec2","impliedFormat":99},{"version":"b1f00d7e185339b76f12179fa934088e28a92eb705f512fbe813107f0e2e2eb8","impliedFormat":99},"2575a9a1261d21b484024f60d8e55e5eddf9108a6914affcfc0f81719d19f54b",{"version":"acdad0e411f3c76f3cae32c4bff9fce6cdf01991ab328f33488ba0116849f1c9","impliedFormat":1},{"version":"61c26e0727cf55b8993932edb1bceb8171d85bbadcbc15e2f3646d81100d1ed6","impliedFormat":1},{"version":"0621a896e1bab69a4008f711f0b8adcd44475b9e8f20a464ffe9fd2a62b21bdb","impliedFormat":1},{"version":"395a5c29896a6000617765bd57936af0e04b40bfecac67fd88905415cce005be","impliedFormat":1},{"version":"d7e3d3cf5f4d2e864cb1b2bf31b0807637bca88d4c6b69dad64f5286f75ca202","impliedFormat":1},{"version":"4784b25f8d990f244aafe5e13ade782bfda32ddff7ae950ff915529ca9add3d9","impliedFormat":1},{"version":"2a6a5207b7151aa000018e416715d246a2e400327d24df05701682cc2d9246cc","impliedFormat":1},{"version":"a595d5aab631aad527e1dff441324b5e94f2435da0d5463f30f182abd65c7a56","impliedFormat":1},{"version":"04d60add28217f89c86e1ee9162edef183f115873399b67b4eddaf305ae6bd32","impliedFormat":1},{"version":"db9f332232ea68e6ce0c27f4edb5eff8f2337bba76b0c1c5eb8bbe235cdb904d","impliedFormat":1},{"version":"6a515c7525405f54b7ab339099707a2a813f8e33fe1e858de65f527fed680bec","impliedFormat":1},{"version":"ed74edd2ca200729a0436be86f2900eff5af5d0b015f0275ecb85775c061da69","impliedFormat":1},{"version":"c70d8114d374b02026ba5b52101e48a7f60efcf456e4185b0cac5627f376ca22","impliedFormat":1},{"version":"0f32632583ab398aec55af283b90efea87ba8c1fca274b5cc28038cad30baaff","impliedFormat":1},{"version":"440a313248ffe54351b8a1f27ade972d897d58d05d98d1473b331ef7bdec172c","impliedFormat":1},{"version":"558f6aa21d877c589eec8c739e3b9c702b583440fa4f59dcea944db1b7723dcf","impliedFormat":1},{"version":"3d025dda1ca06759de6c2f063a39d505cff4c031b0cb39b9bf3934292c44fa08","impliedFormat":1},{"version":"779055a8f4e93a6641032b37949533a22a7db070a8352e81d7748a559d105295","impliedFormat":1},{"version":"98a6dd7f8e69d41f9557f5da81fa15098681e78c81816cae9fc203fdf07a3647","impliedFormat":1},{"version":"588ee140be5141f61ac28c16ba8b9ee4cac57a1627b8da8e3f4569c067118a2b","impliedFormat":1},{"version":"b4c287a2cc8356156e9149a59abbb460035f009c25e196de469a252113a0d09a","impliedFormat":1},{"version":"0a9911844e8ca6e2f875fcf0987c765394e0cba32098b1003b2e8711e850bb5a","impliedFormat":1},{"version":"0102cdb718243d10947388396b9ed51c747b0f6c1dc44ff540e95804757176ce","impliedFormat":1},{"version":"bf959c7406a446ca5769298051a218add8e69ad9bb635c85d495ba52236155fb","impliedFormat":1},{"version":"74d908a20dfb0824d6cd1bee25d99d5c02e335644fab6765a01a0b89537fd9fa","impliedFormat":1},{"version":"9a281acb216d8ecf7cda640ec71262dfa81b3e60c14fc6795b2ada6b419e3b67","impliedFormat":1},{"version":"f44b30407a0aeea6fcf71bd40376ab2724c426dc0779505d4e13748ac364203e","impliedFormat":1},{"version":"49f1f20c19e36ba584ea537e65727013ce4b33c5007297f7934088d53c1d659e","impliedFormat":1},{"version":"2e43bfc9f73ed5f07c9ec6ce50a2da41bb191b43fe24e863643314fc97fb818e","impliedFormat":1},{"version":"041965dc6aa44d8a288a853c98905e05face225bc33972b440ce6d48b884efe0","impliedFormat":1},{"version":"7bc8e4d5a3f858a394e39e55d54383a0035e6468b58d034561c74fd40b37a908","impliedFormat":1},{"version":"5f0e480077c1859d6c7122a97da0b92edefb26a9f44091a2c332a2758f13bc22","impliedFormat":1},{"version":"3a12d4a591de5eba8233d8adfdbc34ad5f77f823dacc61e57e9d17e284fef95f","impliedFormat":1},{"version":"4f4852a2a3723cf30084f49fb6ae3fc6f2b623bdd761bc679dbb10bff1cc96a2","impliedFormat":1},{"version":"9d04e9e8e83d52c6975c7962191e7ecc7fbe9170838a7e81165fca5f3a9adcb4","impliedFormat":1},{"version":"48b7ed1a1d80c59767153cc8f2708ce434d05d46162fbbfa57f2c8696d1359b8","impliedFormat":1},{"version":"629ff7437b6bd27e85438947ffaf00265375eca11192f148bed719f8d42b2d34","impliedFormat":1},{"version":"891f96f68f986a143bcd6feb8038dbb4bc828547220ed149eb357ff0814d201a","impliedFormat":1},{"version":"e8d3642c213bd9288568ab3151cd506af3665528b5130bd33547be55fe206295","impliedFormat":1},{"version":"417c83ef2e6e01ca53096ccf97b46f3b665bd0d330cd98dd587d5af206a63a51","impliedFormat":1},{"version":"26f0686144360debfce7f941866e74a076ee15a3142bb359f25d571be8ed3c55","impliedFormat":1},{"version":"159c6eac1f513bf76f9353c7e0af396af9c59e4ea65f9f931b429f48fe09c9db","impliedFormat":1},{"version":"2b67efdb2edb18732aebf77f9ef6f22d2c6c01e582ce9ecf73cdec330ad20efc","impliedFormat":1},{"version":"a17ca40758b375c3e36c716d0116d11c27599b98e2af0f8acd710ba0c2ae3dcb","impliedFormat":1},{"version":"4436ed56b796e0735b9dbbf29ac87457467b83bdbdec582cdbb2c2bcfe44219d","impliedFormat":1},{"version":"45526614782a35f365aa7bd0b5dca2ced3ff513052d1f480e5fef1a657191e61","impliedFormat":1},{"version":"b97d4ba89e3df980d8c611e96cf94e6cae3169a04214214bf53fa6a0a014a28c","impliedFormat":1},{"version":"b921ba03e93363c081bec9daafafac2de9217f902fa9fc25e98f5dc5ae867e24","impliedFormat":1},{"version":"6791c7ed27074866c15debf2c069b80999556121ad8858bd1e4b2554912c5cce","impliedFormat":1},"99ad167a276e5991f822f545594b38bc6b67bf5864e6cfb28bb9f8c19b52e735",{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"c60093e32612d44af7042c3eb457c616aec3deee748a5a1eb1a6188e3d837f5c","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"0e535d710077db9c027151e74576c015127069938d5f324acd74b243debdf222","impliedFormat":1},{"version":"8afe21f62f7737a465a58a84031f9455ef9ee88928530f08e844703965819e87","impliedFormat":1},{"version":"c35f1861eac4ebd6019b45187ecc4c46cdc271d82bd889c8be7af505edc9bb7e","impliedFormat":1},"b72b2db353a7fe1a37298f0c499a413b7a3ed2db5c94793319f13ee93bc0c5d5","69651e2e097e5bccdb60828423a805e41a4fa0d6543903fcb8f97b7c85a82b64","e46824fdff6559b3c1e2fd4f6d947fda7dcaa713e4dcfa6f07a1c7f8ddc6d393","5f478d4fbc43413613936466ef5ed3ca3a373ccdec670fdf37ad9a205ea76cdb","c3085aa7c267e4a12c37d1330a7a4a29c38f8626db50456302ec5a79c215f656","151fdc0d7c2380037e8552e934314e2436e2aebad37420119e4871841af22bff","320a92ff58788896a6297c6aa8601223b5654e55647e088e930de28b86e02a45","9f518954ceef23a13676711a2af4d05c01a890e2954b0d37f71b8db6b6fa57a3"],"root":[475,493,495,[556,559],913,914,944,994,[1001,1008]],"options":{"allowJs":true,"composite":false,"declaration":true,"declarationMap":true,"esModuleInterop":true,"inlineSources":false,"jsx":1,"module":99,"noImplicitOverride":true,"noUnusedLocals":false,"noUnusedParameters":false,"skipLibCheck":true,"strict":true,"target":1,"verbatimModuleSyntax":true},"referencedMap":[[1008,1],[1006,2],[1007,3],[1005,4],[1003,5],[559,6],[1002,7],[1004,8],[913,9],[914,10],[492,11],[475,12],[493,13],[558,14],[557,15],[556,16],[944,17],[1001,18],[994,19],[495,20],[494,21],[419,21],[592,21],[476,21],[477,22],[921,23],[917,24],[924,25],[919,26],[920,21],[922,23],[918,26],[915,21],[923,26],[916,21],[937,27],[943,28],[934,29],[942,30],[935,27],[936,31],[927,29],[925,32],[941,33],[938,32],[940,29],[939,32],[933,32],[932,32],[926,29],[928,34],[930,29],[931,29],[929,29],[952,35],[951,36],[953,37],[972,38],[954,39],[950,40],[946,21],[971,41],[958,42],[957,43],[959,42],[960,44],[969,45],[948,21],[956,46],[945,21],[964,47],[961,48],[970,48],[962,49],[949,50],[967,51],[965,52],[966,53],[968,54],[947,39],[955,55],[999,56],[976,57],[1000,58],[978,59],[991,60],[977,61],[973,62],[993,63],[979,64],[984,65],[974,66],[992,67],[990,68],[986,69],[987,70],[988,71],[989,72],[980,73],[983,74],[982,75],[985,76],[975,77],[998,78],[981,79],[544,39],[543,39],[546,80],[547,81],[545,82],[963,83],[548,84],[499,85],[500,86],[497,85],[498,85],[496,21],[542,87],[524,88],[522,89],[523,90],[525,21],[516,91],[526,92],[503,93],[531,21],[527,94],[528,95],[529,21],[530,96],[532,97],[533,98],[511,99],[534,100],[506,101],[505,102],[510,103],[509,104],[520,105],[521,106],[502,90],[512,107],[515,108],[514,109],[517,21],[519,110],[518,21],[507,21],[537,21],[535,21],[536,21],[513,111],[501,21],[508,21],[538,102],[504,21],[541,112],[539,21],[540,113],[136,114],[137,114],[138,115],[97,116],[139,117],[140,118],[141,119],[92,21],[95,120],[93,21],[94,21],[142,121],[143,122],[144,123],[145,124],[146,125],[147,126],[148,126],[150,127],[149,128],[151,129],[152,130],[153,131],[135,132],[96,21],[154,133],[155,134],[156,135],[189,136],[157,137],[158,138],[159,139],[160,140],[161,141],[162,142],[163,143],[164,144],[165,145],[166,146],[167,146],[168,147],[169,21],[170,21],[171,148],[173,149],[172,150],[174,151],[175,152],[176,153],[177,154],[178,155],[179,156],[180,157],[181,158],[182,159],[183,160],[184,161],[185,162],[186,163],[187,164],[188,165],[193,166],[194,167],[192,30],[190,168],[191,169],[81,21],[83,170],[266,30],[82,21],[903,21],[898,171],[562,172],[896,173],[897,174],[560,21],[899,175],[659,176],[681,177],[577,178],[647,179],[656,180],[580,180],[581,181],[582,181],[655,182],[583,183],[631,184],[637,185],[632,186],[633,181],[634,184],[657,187],[579,188],[635,180],[636,186],[638,189],[639,189],[640,186],[641,184],[642,180],[643,181],[644,190],[645,191],[646,181],[668,192],[676,193],[654,194],[684,195],[648,196],[650,197],[651,194],[662,198],[670,199],[675,200],[672,201],[677,202],[665,203],[666,204],[673,205],[674,206],[680,207],[671,208],[649,175],[682,209],[578,175],[669,210],[667,211],[653,212],[652,194],[683,213],[658,214],[678,21],[679,215],[901,216],[561,175],[719,21],[736,217],[685,218],[710,219],[717,220],[686,220],[687,220],[688,221],[716,222],[689,223],[704,220],[690,224],[691,224],[692,220],[693,220],[694,221],[695,220],[718,225],[696,220],[697,220],[698,226],[699,220],[700,220],[701,226],[702,221],[703,220],[705,227],[706,226],[707,220],[708,221],[709,220],[731,228],[727,229],[715,230],[739,231],[711,232],[712,230],[728,233],[720,234],[729,235],[726,236],[724,237],[730,238],[723,239],[735,240],[725,241],[737,242],[732,243],[721,244],[714,245],[713,230],[738,246],[722,214],[733,21],[734,247],[564,248],[805,249],[740,250],[775,251],[784,252],[741,253],[742,253],[743,254],[744,253],[783,255],[745,256],[746,257],[747,258],[748,253],[785,259],[786,260],[749,253],[751,261],[752,252],[754,262],[755,263],[756,263],[757,254],[758,253],[759,253],[760,263],[761,254],[762,254],[763,263],[764,253],[765,252],[766,253],[767,254],[768,264],[753,265],[769,253],[770,254],[771,253],[772,253],[773,253],[774,253],[793,266],[800,267],[782,268],[810,269],[776,270],[778,271],[779,268],[788,272],[795,273],[799,274],[797,275],[801,276],[789,277],[790,204],[791,278],[798,279],[804,280],[796,281],[777,175],[806,282],[750,175],[794,283],[792,284],[781,285],[780,268],[807,286],[808,21],[809,287],[787,214],[802,21],[803,288],[906,289],[907,290],[909,291],[905,292],[573,293],[566,294],[663,175],[660,295],[664,296],[661,297],[858,298],[836,299],[842,300],[811,300],[812,300],[813,301],[841,302],[814,303],[829,300],[815,304],[816,304],[817,300],[818,300],[819,305],[820,300],[843,306],[821,300],[822,300],[823,307],[824,300],[825,300],[826,307],[827,301],[828,300],[830,308],[831,307],[832,300],[833,301],[834,300],[835,300],[855,309],[847,310],[861,311],[837,312],[838,313],[850,314],[844,315],[854,316],[846,317],[853,318],[852,319],[857,320],[845,321],[859,322],[856,323],[851,324],[840,325],[839,313],[860,326],[849,327],[848,328],[569,329],[571,330],[570,329],[572,329],[575,331],[574,332],[576,333],[567,334],[894,335],[862,336],[887,337],[891,338],[890,339],[863,340],[892,341],[883,342],[884,343],[885,343],[886,344],[871,345],[879,346],[889,347],[895,348],[864,349],[865,347],[867,350],[874,351],[878,352],[876,353],[880,354],[868,355],[872,356],[877,357],[893,358],[875,359],[873,360],[869,361],[888,362],[866,363],[882,364],[870,214],[881,365],[565,214],[563,366],[568,367],[900,21],[620,368],[602,369],[594,370],[587,371],[588,372],[599,373],[589,374],[584,21],[624,21],[626,21],[627,21],[625,374],[628,375],[596,376],[597,377],[595,21],[590,378],[591,21],[630,379],[629,380],[621,381],[598,382],[586,383],[585,21],[600,21],[601,21],[623,384],[618,385],[605,21],[619,386],[617,387],[610,388],[611,389],[613,390],[614,391],[612,21],[615,389],[616,390],[609,21],[608,21],[607,21],[606,392],[603,393],[622,21],[604,394],[593,395],[90,396],[422,397],[427,4],[429,398],[215,399],[370,400],[397,401],[226,21],[207,21],[213,21],[359,402],[294,403],[214,21],[360,404],[399,405],[400,406],[347,407],[356,408],[264,409],[364,410],[365,411],[363,412],[362,21],[361,413],[398,414],[216,415],[301,21],[302,416],[211,21],[227,417],[217,418],[239,417],[270,417],[200,417],[369,419],[379,21],[206,21],[325,420],[326,421],[320,31],[450,21],[328,21],[329,31],[321,422],[341,30],[455,423],[454,424],[449,21],[267,425],[402,21],[355,426],[354,21],[448,427],[322,30],[242,428],[240,429],[451,21],[453,430],[452,21],[241,431],[443,432],[446,433],[251,434],[250,435],[249,436],[458,30],[248,437],[289,21],[461,21],[996,438],[995,21],[464,21],[463,30],[465,439],[196,21],[366,440],[367,441],[368,442],[391,21],[205,443],[195,21],[198,444],[340,445],[339,446],[330,21],[331,21],[338,21],[333,21],[336,447],[332,21],[334,448],[337,449],[335,448],[212,21],[203,21],[204,417],[421,450],[430,451],[434,452],[373,453],[372,21],[285,21],[466,454],[382,455],[323,456],[324,457],[317,458],[307,21],[315,21],[316,459],[345,460],[308,461],[346,462],[343,463],[342,21],[344,21],[298,464],[374,465],[375,466],[309,467],[313,468],[305,469],[351,470],[381,471],[384,472],[287,473],[201,474],[380,475],[197,401],[403,21],[404,476],[415,477],[401,21],[414,478],[91,21],[389,479],[273,21],[303,480],[385,21],[202,21],[234,21],[413,481],[210,21],[276,482],[312,483],[371,484],[311,21],[412,21],[406,485],[407,486],[208,21],[409,487],[410,488],[392,21],[411,474],[232,489],[390,490],[416,491],[219,21],[222,21],[220,21],[224,21],[221,21],[223,21],[225,492],[218,21],[279,493],[278,21],[284,494],[280,495],[283,496],[282,496],[286,494],[281,495],[238,497],[268,498],[378,499],[468,21],[438,500],[440,501],[310,21],[439,502],[376,465],[467,503],[327,465],[209,21],[269,504],[235,505],[236,506],[237,507],[233,508],[350,508],[245,508],[271,509],[246,509],[229,510],[228,21],[277,511],[275,512],[274,513],[272,514],[377,515],[349,516],[348,517],[319,518],[358,519],[357,520],[353,521],[263,522],[265,523],[262,524],[230,525],[297,21],[426,21],[296,526],[352,21],[288,527],[306,440],[304,528],[290,529],[292,530],[462,21],[291,531],[293,531],[424,21],[423,21],[425,21],[460,21],[295,532],[260,30],[89,21],[243,533],[252,21],[300,534],[231,21],[432,30],[442,535],[259,30],[436,31],[258,536],[418,537],[257,535],[199,21],[444,538],[255,30],[256,30],[247,21],[299,21],[254,539],[253,540],[244,541],[314,145],[383,145],[408,21],[387,542],[386,21],[428,21],[261,30],[318,30],[420,543],[84,30],[87,544],[88,545],[85,30],[86,21],[405,546],[396,547],[395,21],[394,548],[393,21],[417,549],[431,550],[433,551],[435,552],[997,553],[437,554],[441,555],[474,556],[445,556],[473,557],[447,558],[456,559],[457,560],[459,561],[469,562],[472,443],[471,21],[470,563],[904,564],[388,565],[553,566],[554,567],[555,568],[550,569],[552,21],[549,570],[551,571],[79,21],[80,21],[13,21],[14,21],[16,21],[15,21],[2,21],[17,21],[18,21],[19,21],[20,21],[21,21],[22,21],[23,21],[24,21],[3,21],[25,21],[26,21],[4,21],[27,21],[31,21],[28,21],[29,21],[30,21],[32,21],[33,21],[34,21],[5,21],[35,21],[36,21],[37,21],[38,21],[6,21],[42,21],[39,21],[40,21],[41,21],[43,21],[7,21],[44,21],[49,21],[50,21],[45,21],[46,21],[47,21],[48,21],[8,21],[54,21],[51,21],[52,21],[53,21],[55,21],[9,21],[56,21],[57,21],[58,21],[60,21],[59,21],[61,21],[62,21],[10,21],[63,21],[64,21],[65,21],[11,21],[66,21],[67,21],[68,21],[69,21],[70,21],[1,21],[71,21],[72,21],[12,21],[76,21],[74,21],[78,21],[73,21],[77,21],[75,21],[113,572],[123,573],[112,572],[133,574],[104,575],[103,576],[132,563],[126,577],[131,578],[106,579],[120,580],[105,581],[129,582],[101,583],[100,563],[130,584],[102,585],[107,586],[108,21],[111,586],[98,21],[134,587],[124,588],[115,589],[116,590],[118,591],[114,592],[117,593],[127,563],[109,594],[110,595],[119,596],[99,564],[122,588],[121,586],[125,21],[128,597],[491,598],[482,599],[489,600],[484,21],[485,21],[483,601],[486,598],[478,21],[479,21],[490,602],[481,603],[487,21],[488,604],[480,605],[908,606],[912,607],[910,608],[902,609],[911,610]],"affectedFilesPendingEmit":[[1008,49],[1006,49],[1007,49],[1003,49],[559,49],[1002,49],[1004,49],[913,49],[914,49],[492,49],[493,49],[558,49],[557,49],[556,49],[944,49],[1001,49],[994,49],[495,49]],"version":"5.8.3"} \ No newline at end of file diff --git a/configs/config-eslint/package.json b/configs/config-eslint/package.json index cb2ec4f..d2a9891 100644 --- a/configs/config-eslint/package.json +++ b/configs/config-eslint/package.json @@ -9,16 +9,16 @@ "./react-internal": "./react-internal.js" }, "devDependencies": { - "@eslint/js": "^9.21.0", - "@next/eslint-plugin-next": "^15.2.1", - "eslint": "^9.21.0", - "eslint-config-prettier": "^10.0.2", + "@eslint/js": "^9.27.0", + "@next/eslint-plugin-next": "^15.3.2", + "eslint": "^9.27.0", + "eslint-config-prettier": "^10.1.5", "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-turbo": "^2.4.4", - "globals": "^16.0.0", - "typescript": "^5.8.2", - "typescript-eslint": "^8.26.0" + "eslint-plugin-turbo": "^2.5.3", + "globals": "^16.1.0", + "typescript": "^5.8.3", + "typescript-eslint": "^8.32.1" } } diff --git a/configs/config-typescript/base.json b/configs/config-typescript/base.json index ad34ef1..15d6c2b 100644 --- a/configs/config-typescript/base.json +++ b/configs/config-typescript/base.json @@ -5,6 +5,8 @@ "declaration": true, "declarationMap": true, "esModuleInterop": true, + "noImplicitOverride": true, + "verbatimModuleSyntax": true, "forceConsistentCasingInFileNames": true, "inlineSources": false, "isolatedModules": true, @@ -16,5 +18,7 @@ "skipLibCheck": true, "strict": true }, - "exclude": ["node_modules"] -} + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/configs/config-vitest/package.json b/configs/config-vitest/package.json index d777350..846bdc6 100644 --- a/configs/config-vitest/package.json +++ b/configs/config-vitest/package.json @@ -14,11 +14,11 @@ }, "devDependencies": { "@acme/config-typescript": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.9", + "@vitest/coverage-istanbul": "^3.1.3", "@vitest/ui": "3.0.9", - "glob": "^11.0.1", - "jsdom": "^26.0.0", + "glob": "^11.0.2", + "jsdom": "^26.1.0", "nyc": "^17.1.0", - "vitest": "^3.0.9" + "vitest": "^3.1.3" } } diff --git a/core/domain/README.md b/core/1-domain/README.md similarity index 100% rename from core/domain/README.md rename to core/1-domain/README.md diff --git a/core/application/eslint.config.mjs b/core/1-domain/eslint.config.mjs similarity index 100% rename from core/application/eslint.config.mjs rename to core/1-domain/eslint.config.mjs diff --git a/core/domain/package.json b/core/1-domain/package.json similarity index 69% rename from core/domain/package.json rename to core/1-domain/package.json index f880b9a..f59006c 100644 --- a/core/domain/package.json +++ b/core/1-domain/package.json @@ -10,12 +10,13 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/core/1-domain/src/entities/SystemMetadata.ts b/core/1-domain/src/entities/SystemMetadata.ts new file mode 100644 index 0000000..541a2db --- /dev/null +++ b/core/1-domain/src/entities/SystemMetadata.ts @@ -0,0 +1,6 @@ +export interface SystemMetadata { + createdAt: Date; + updatedAt: Date; +} + +export type SystemMetadataKeys = keyof SystemMetadata; diff --git a/core/1-domain/src/entities/User.ts b/core/1-domain/src/entities/User.ts new file mode 100644 index 0000000..fe8e8e4 --- /dev/null +++ b/core/1-domain/src/entities/User.ts @@ -0,0 +1,7 @@ +import type { SystemMetadata } from './SystemMetadata'; + +export interface User extends SystemMetadata { + id: string; + email: string; + name: string; +} diff --git a/core/1-domain/src/entities/index.ts b/core/1-domain/src/entities/index.ts new file mode 100644 index 0000000..527a01a --- /dev/null +++ b/core/1-domain/src/entities/index.ts @@ -0,0 +1,2 @@ +export * from './User'; +export * from './SystemMetadata'; diff --git a/core/domain/src/index.ts b/core/1-domain/src/index.ts similarity index 100% rename from core/domain/src/index.ts rename to core/1-domain/src/index.ts diff --git a/core/application/tsconfig.json b/core/1-domain/tsconfig.json similarity index 100% rename from core/application/tsconfig.json rename to core/1-domain/tsconfig.json diff --git a/core/application/vitest.config.ts b/core/1-domain/vitest.config.ts similarity index 100% rename from core/application/vitest.config.ts rename to core/1-domain/vitest.config.ts diff --git a/core/application/README.md b/core/2-application/README.md similarity index 100% rename from core/application/README.md rename to core/2-application/README.md diff --git a/core/di/eslint.config.mjs b/core/2-application/eslint.config.mjs similarity index 100% rename from core/di/eslint.config.mjs rename to core/2-application/eslint.config.mjs diff --git a/core/application/package.json b/core/2-application/package.json similarity index 69% rename from core/application/package.json rename to core/2-application/package.json index cd3a159..68679d5 100644 --- a/core/application/package.json +++ b/core/2-application/package.json @@ -10,15 +10,17 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { "@acme/domain": "workspace:*" }, "devDependencies": { - "@acme/mono": "workspace:*", + "type-fest": "^4.41.0", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/core/2-application/src/composed/.gitkeep b/core/2-application/src/composed/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/core/2-application/src/index.ts b/core/2-application/src/index.ts new file mode 100644 index 0000000..b18bf4c --- /dev/null +++ b/core/2-application/src/index.ts @@ -0,0 +1 @@ +export * from './users'; diff --git a/core/2-application/src/types.ts b/core/2-application/src/types.ts new file mode 100644 index 0000000..d01c95f --- /dev/null +++ b/core/2-application/src/types.ts @@ -0,0 +1,10 @@ +import type { SetRequired } from 'type-fest'; + +/** + * Make sure the type has at least 'id' field (required), + * while allowing other fields to remain optional. + * + * @example + * type UserWithId = WithId; + */ +export type WithId = SetRequired, 'id'>; diff --git a/core/2-application/src/users/IUserRepository.ts b/core/2-application/src/users/IUserRepository.ts new file mode 100644 index 0000000..ae227fe --- /dev/null +++ b/core/2-application/src/users/IUserRepository.ts @@ -0,0 +1,17 @@ +import type { UserUseCaseArgs as Args } from './UserUseCaseArgs'; + +export interface IUserRepository { + create(data: Args['create']['input']): Promise; + + getById(id: Args['getById']['input']['id']): Promise; + + update(input: Args['update']['input']): Promise; + + delete(id: Args['delete']['input']['id']): Promise; + + list(): Promise; + + searchBy(criteria: Args['searchBy']['input']): Promise; + + listWithPagination(params: Args['listWithPagination']['input']): Promise; +} diff --git a/core/2-application/src/users/UserUseCase.ts b/core/2-application/src/users/UserUseCase.ts new file mode 100644 index 0000000..276ee1f --- /dev/null +++ b/core/2-application/src/users/UserUseCase.ts @@ -0,0 +1,34 @@ +import type { IUserRepository } from './IUserRepository'; +import type { UserUseCaseArgs } from './UserUseCaseArgs'; + +export class UserUseCase { + constructor(private userRepo: IUserRepository) {} + + create(data: UserUseCaseArgs['create']['input']) { + return this.userRepo.create(data); + } + + getById(id: UserUseCaseArgs['getById']['input']['id']) { + return this.userRepo.getById(id); + } + + update(input: UserUseCaseArgs['update']['input']) { + return this.userRepo.update(input); + } + + delete(input: UserUseCaseArgs['delete']['input']) { + return this.userRepo.delete(input.id); + } + + list() { + return this.userRepo.list(); + } + + searchBy(criteria: UserUseCaseArgs['searchBy']['input']) { + return this.userRepo.searchBy(criteria); + } + + listWithPagination(params: UserUseCaseArgs['listWithPagination']['input']) { + return this.userRepo.listWithPagination(params); + } +} diff --git a/core/2-application/src/users/UserUseCaseArgs.ts b/core/2-application/src/users/UserUseCaseArgs.ts new file mode 100644 index 0000000..01e50ce --- /dev/null +++ b/core/2-application/src/users/UserUseCaseArgs.ts @@ -0,0 +1,34 @@ +import type { User } from '@acme/domain'; +import type { SystemMetadataKeys } from '@acme/domain'; +import type { WithId } from '../types'; + +export type UserWithId = WithId; + +export type UseCaseIO = { + input: I; + output: O; +}; + +export type UserUseCaseArgs = { + create: UseCaseIO, UserWithId>; + + getById: UseCaseIO<{ id: string }, UserWithId | null>; + + update: UseCaseIO<{ id: string; data: Partial> }, UserWithId | null>; + + delete: UseCaseIO<{ id: string }, boolean>; + + list: UseCaseIO; + + searchBy: UseCaseIO>, UserWithId[]>; + + listWithPagination: UseCaseIO< + { offset: number; limit: number }, + { + items: UserWithId[]; + offset: number; + limit: number; + hasNext: boolean; + } + >; +}; diff --git a/core/2-application/src/users/index.ts b/core/2-application/src/users/index.ts new file mode 100644 index 0000000..b1a525d --- /dev/null +++ b/core/2-application/src/users/index.ts @@ -0,0 +1,3 @@ +export * from './IUserRepository'; +export * from './UserUseCase'; +export * from './UserUseCaseArgs'; diff --git a/core/di/tsconfig.json b/core/2-application/tsconfig.json similarity index 100% rename from core/di/tsconfig.json rename to core/2-application/tsconfig.json diff --git a/core/di/vitest.config.ts b/core/2-application/vitest.config.ts similarity index 100% rename from core/di/vitest.config.ts rename to core/2-application/vitest.config.ts diff --git a/core/di/README.md b/core/3-interface-adapters/README.md similarity index 100% rename from core/di/README.md rename to core/3-interface-adapters/README.md diff --git a/core/domain/eslint.config.mjs b/core/3-interface-adapters/eslint.config.mjs similarity index 100% rename from core/domain/eslint.config.mjs rename to core/3-interface-adapters/eslint.config.mjs diff --git a/core/interface-adapters/package.json b/core/3-interface-adapters/package.json similarity index 60% rename from core/interface-adapters/package.json rename to core/3-interface-adapters/package.json index d96cedc..dfdb88b 100644 --- a/core/interface-adapters/package.json +++ b/core/3-interface-adapters/package.json @@ -10,16 +10,20 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { - "@acme/application": "workspace:*" + "@acme/shared": "workspace:*" }, - "devDependencies": { - "@acme/mono": "workspace:*", + "devDependencies": { + "@acme/application": "workspace:*", + "@acme/domain": "workspace:*", + "@acme/infrastructure": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", "@acme/config-vitest": "workspace:*", - "@vitest/coverage-istanbul": "^3.0.8" + "@acme/mono": "workspace:*", + "@vitest/coverage-istanbul": "^3.1.3" } } \ No newline at end of file diff --git a/core/3-interface-adapters/src/index.ts b/core/3-interface-adapters/src/index.ts new file mode 100644 index 0000000..b18bf4c --- /dev/null +++ b/core/3-interface-adapters/src/index.ts @@ -0,0 +1 @@ +export * from './users'; diff --git a/core/3-interface-adapters/src/users/UserController.ts b/core/3-interface-adapters/src/users/UserController.ts new file mode 100644 index 0000000..315b033 --- /dev/null +++ b/core/3-interface-adapters/src/users/UserController.ts @@ -0,0 +1,44 @@ +import { UserUseCase, type UserUseCaseArgs } from '@acme/application'; +import type { ILogger } from '@acme/shared'; + +export class UserController { + constructor( + private readonly useCase: UserUseCase, + private readonly logger: ILogger + ) {} + + async create(input: UserUseCaseArgs['create']['input']) { + this.logger.debug('UserController.create', { input }); + return this.useCase.create(input); + } + + async getById(id: string) { + this.logger.debug('UserController.getById', { id }); + return this.useCase.getById(id); + } + + async update(input: UserUseCaseArgs['update']['input']) { + this.logger.debug('UserController.update', { input }); + return this.useCase.update(input); + } + + async delete(id: string) { + this.logger.debug('UserController.delete', { id }); + return this.useCase.delete({ id }); + } + + async list() { + this.logger.debug('UserController.list'); + return this.useCase.list(); + } + + async searchBy(criteria: UserUseCaseArgs['searchBy']['input']) { + this.logger.debug('UserController.searchBy', { criteria }); + return this.useCase.searchBy(criteria); + } + + async listWithPagination(params: UserUseCaseArgs['listWithPagination']['input']) { + this.logger.debug('UserController.listWithPagination', { params }); + return this.useCase.listWithPagination(params); + } +} diff --git a/core/interface-adapters/src/controllers/index.ts b/core/3-interface-adapters/src/users/index.ts similarity index 100% rename from core/interface-adapters/src/controllers/index.ts rename to core/3-interface-adapters/src/users/index.ts diff --git a/core/domain/tsconfig.json b/core/3-interface-adapters/tsconfig.json similarity index 100% rename from core/domain/tsconfig.json rename to core/3-interface-adapters/tsconfig.json diff --git a/core/domain/vitest.config.ts b/core/3-interface-adapters/vitest.config.ts similarity index 100% rename from core/domain/vitest.config.ts rename to core/3-interface-adapters/vitest.config.ts diff --git a/core/infrastructure/README.md b/core/4-infrastructure/README.md similarity index 100% rename from core/infrastructure/README.md rename to core/4-infrastructure/README.md diff --git a/core/infrastructure/eslint.config.mjs b/core/4-infrastructure/eslint.config.mjs similarity index 100% rename from core/infrastructure/eslint.config.mjs rename to core/4-infrastructure/eslint.config.mjs diff --git a/core/infrastructure/package.json b/core/4-infrastructure/package.json similarity index 66% rename from core/infrastructure/package.json rename to core/4-infrastructure/package.json index 4eda29b..862c009 100644 --- a/core/infrastructure/package.json +++ b/core/4-infrastructure/package.json @@ -10,16 +10,18 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { "@acme/application": "workspace:*", - "@acme/domain": "workspace:*" + "@acme/domain": "workspace:*", + "mongoose": "^8.15.0" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/core/4-infrastructure/src/clients/MongooseClient.ts b/core/4-infrastructure/src/clients/MongooseClient.ts new file mode 100644 index 0000000..c459c7f --- /dev/null +++ b/core/4-infrastructure/src/clients/MongooseClient.ts @@ -0,0 +1,35 @@ +// src/infrastructure/database/MongooseClient.ts +import mongoose, { type ConnectOptions } from 'mongoose'; + +export class MongooseClient { + constructor( + private uri: string, + private options?: ConnectOptions + ) {} + + async connect(): Promise { + if (mongoose.connection.readyState >= 1) { + console.log('โœ… Already connected to MongoDB'); + return; + } + + try { + await mongoose.connect(this.uri, this.options); + console.log('โœ… Mongoose connected to', this.uri); + } catch (error) { + console.error('โŒ Mongoose connection error:', error); + throw error; + } + } + + async disconnect(): Promise { + if (mongoose.connection.readyState > 0) { + await mongoose.disconnect(); + console.log('๐Ÿ›‘ Mongoose disconnected'); + } + } + + getConnectionState(): number { + return mongoose.connection.readyState; + } +} diff --git a/core/4-infrastructure/src/clients/index.ts b/core/4-infrastructure/src/clients/index.ts new file mode 100644 index 0000000..30541dd --- /dev/null +++ b/core/4-infrastructure/src/clients/index.ts @@ -0,0 +1 @@ +export * from './MongooseClient'; diff --git a/core/4-infrastructure/src/index.ts b/core/4-infrastructure/src/index.ts new file mode 100644 index 0000000..f1267db --- /dev/null +++ b/core/4-infrastructure/src/index.ts @@ -0,0 +1,2 @@ +export * from './mongoose'; +export * from './clients'; diff --git a/core/4-infrastructure/src/mongoose/index.ts b/core/4-infrastructure/src/mongoose/index.ts new file mode 100644 index 0000000..b18bf4c --- /dev/null +++ b/core/4-infrastructure/src/mongoose/index.ts @@ -0,0 +1 @@ +export * from './users'; diff --git a/core/4-infrastructure/src/mongoose/users/MongooseUserModel.ts b/core/4-infrastructure/src/mongoose/users/MongooseUserModel.ts new file mode 100644 index 0000000..ee4cbf4 --- /dev/null +++ b/core/4-infrastructure/src/mongoose/users/MongooseUserModel.ts @@ -0,0 +1,15 @@ +import type { User } from '@acme/domain'; +import mongoose from 'mongoose'; + +const UserSchema = new mongoose.Schema>( + { + id: String, + email: String, + name: String, + }, + { + timestamps: true, + } +); + +export const MongooseUserModel = mongoose.model>('User', UserSchema); diff --git a/core/4-infrastructure/src/mongoose/users/MongooseUserRepository.ts b/core/4-infrastructure/src/mongoose/users/MongooseUserRepository.ts new file mode 100644 index 0000000..dfdc2e5 --- /dev/null +++ b/core/4-infrastructure/src/mongoose/users/MongooseUserRepository.ts @@ -0,0 +1,64 @@ +import type { IUserRepository } from '@acme/application'; +import type { UserUseCaseArgs as Args, UserWithId } from '@acme/application'; +import { MongooseUserModel } from './MongooseUserModel'; +import mongoose from 'mongoose'; + +export class MongooseUserRepository implements IUserRepository { + private toUserWithId(doc: Omit & { _id: mongoose.Types.ObjectId }): UserWithId { + return { + id: doc._id.toString(), + email: doc.email, + name: doc.name, + createdAt: doc.createdAt, + updatedAt: doc.updatedAt, + }; + } + + async create(data: Args['create']['input']) { + const doc = await MongooseUserModel.create(data); + return this.toUserWithId(doc); + } + + async getById(id: Args['getById']['input']['id']) { + const doc = await MongooseUserModel.findById(id).lean(); + return doc ? this.toUserWithId(doc) : null; + } + + async update(input: Args['update']['input']) { + const doc = await MongooseUserModel.findByIdAndUpdate(input.id, input.data, { new: true }).lean(); + + return doc ? this.toUserWithId(doc) : null; + } + + async delete(id: Args['delete']['input']['id']) { + const result = await MongooseUserModel.findByIdAndDelete(id); + return !!result; + } + + async list() { + const docs = await MongooseUserModel.find().lean(); + return docs.map(this.toUserWithId); + } + + async searchBy(criteria: Args['searchBy']['input']) { + const docs = await MongooseUserModel.find(criteria).lean(); + return docs.map(this.toUserWithId); + } + + async listWithPagination({ offset, limit }: Args['listWithPagination']['input']) { + const docs = await MongooseUserModel.find() + .skip(offset) + .limit(limit + 1) // โ† overfetch + .lean(); + + const hasNext = docs.length > limit; + const items = hasNext ? docs.slice(0, limit) : docs; + + return { + items: items.map(this.toUserWithId), + offset, + limit, + hasNext, + }; + } +} diff --git a/core/4-infrastructure/src/mongoose/users/index.ts b/core/4-infrastructure/src/mongoose/users/index.ts new file mode 100644 index 0000000..5d90054 --- /dev/null +++ b/core/4-infrastructure/src/mongoose/users/index.ts @@ -0,0 +1,2 @@ +export * from './MongooseUserModel'; +export * from './MongooseUserRepository'; diff --git a/core/infrastructure/tsconfig.json b/core/4-infrastructure/tsconfig.json similarity index 100% rename from core/infrastructure/tsconfig.json rename to core/4-infrastructure/tsconfig.json diff --git a/core/infrastructure/vitest.config.ts b/core/4-infrastructure/vitest.config.ts similarity index 100% rename from core/infrastructure/vitest.config.ts rename to core/4-infrastructure/vitest.config.ts diff --git a/core/application/src/index.ts b/core/application/src/index.ts deleted file mode 100644 index 04d4877..0000000 --- a/core/application/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './interfaces'; -export * from './use-cases'; diff --git a/core/application/src/interfaces/IUserRepository.ts b/core/application/src/interfaces/IUserRepository.ts deleted file mode 100644 index 0b38c2c..0000000 --- a/core/application/src/interfaces/IUserRepository.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { User } from '@acme/domain'; - -export interface IUserRepository { - create(user: User): Promise; - findById(id: string): Promise; -} diff --git a/core/application/src/interfaces/index.ts b/core/application/src/interfaces/index.ts deleted file mode 100644 index 124e149..0000000 --- a/core/application/src/interfaces/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './IUserRepository'; diff --git a/core/application/src/use-cases/UserUseCase.ts b/core/application/src/use-cases/UserUseCase.ts deleted file mode 100644 index 1e5cf0b..0000000 --- a/core/application/src/use-cases/UserUseCase.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { User } from '@acme/domain'; -import { IUserRepository } from '../interfaces/IUserRepository'; - -export class UserUseCase { - constructor(private userRepo: IUserRepository) {} - - async create(data: { id: string; name: string; email: string }) { - const user = new User(data.id, data.name, data.email); - await this.userRepo.create(user); - } - - async getById(id: string) { - return this.userRepo.findById(id); - } -} diff --git a/core/application/src/use-cases/index.ts b/core/application/src/use-cases/index.ts deleted file mode 100644 index 982b673..0000000 --- a/core/application/src/use-cases/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './UserUseCase'; diff --git a/core/di/src/container.ts b/core/di/src/container.ts deleted file mode 100644 index 2aa9879..0000000 --- a/core/di/src/container.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createContainer, createModule } from '@thaitype/ioctopus'; -import { registry } from './ServiceRegistry'; -import { UserRepository } from '@acme/infrastructure'; -import { UserUseCase } from '@acme/application'; -import { UserController } from '@acme/interface-adapters'; - -const appModule = createModule(registry); - -appModule.bind('IUserRepository').toClass(UserRepository); - -appModule.bind('UserUseCase').toClass(UserUseCase, ['IUserRepository']); - -appModule.bind('UserController').toClass(UserController, ['UserUseCase']); - -export const container = createContainer(registry); -container.load('app', appModule); - -export function getInjection(token: Key) { - return container.get(token); -} diff --git a/core/di/src/index.ts b/core/di/src/index.ts deleted file mode 100644 index 85ee15b..0000000 --- a/core/di/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './container'; diff --git a/core/domain/src/entities/User.ts b/core/domain/src/entities/User.ts deleted file mode 100644 index 6c36fc2..0000000 --- a/core/domain/src/entities/User.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class User { - constructor( - public id: string, - public name: string, - public email: string - ) {} -} diff --git a/core/domain/src/entities/index.ts b/core/domain/src/entities/index.ts deleted file mode 100644 index f6b9f36..0000000 --- a/core/domain/src/entities/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './User'; diff --git a/core/infrastructure/src/index.ts b/core/infrastructure/src/index.ts deleted file mode 100644 index c51b022..0000000 --- a/core/infrastructure/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './repositories'; diff --git a/core/infrastructure/src/repositories/UserRepository.ts b/core/infrastructure/src/repositories/UserRepository.ts deleted file mode 100644 index a5a16aa..0000000 --- a/core/infrastructure/src/repositories/UserRepository.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IUserRepository } from '@acme/application/interfaces/IUserRepository'; -import { User } from '@acme/domain'; - -export class UserRepository implements IUserRepository { - private users: Map = new Map(); - - async create(user: User): Promise { - this.users.set(user.id, user); - } - - async findById(id: string): Promise { - return this.users.get(id) ?? null; - } -} diff --git a/core/infrastructure/src/repositories/index.ts b/core/infrastructure/src/repositories/index.ts deleted file mode 100644 index 5301133..0000000 --- a/core/infrastructure/src/repositories/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './UserRepository'; diff --git a/core/interface-adapters/src/controllers/UserController.ts b/core/interface-adapters/src/controllers/UserController.ts deleted file mode 100644 index 8f9eb5c..0000000 --- a/core/interface-adapters/src/controllers/UserController.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { UserUseCase } from '@acme/application'; - -export class UserController { - constructor(private userUseCase: UserUseCase) {} - - async create(req: any) { - await this.userUseCase.create(req.body); - return { status: 'User created' }; - } - - async get(req: any) { - const user = await this.userUseCase.getById(req.params.id); - return user ?? { error: 'User not found' }; - } -} diff --git a/core/interface-adapters/src/index.ts b/core/interface-adapters/src/index.ts deleted file mode 100644 index a608394..0000000 --- a/core/interface-adapters/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './controllers'; diff --git a/core/interface-adapters/README.md b/di/README.md similarity index 100% rename from core/interface-adapters/README.md rename to di/README.md diff --git a/core/interface-adapters/eslint.config.mjs b/di/eslint.config.mjs similarity index 100% rename from core/interface-adapters/eslint.config.mjs rename to di/eslint.config.mjs diff --git a/core/di/package.json b/di/package.json similarity index 73% rename from core/di/package.json rename to di/package.json index 3d946d6..f0e9ec9 100644 --- a/core/di/package.json +++ b/di/package.json @@ -10,18 +10,20 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "dependencies": { - "@acme/domain": "workspace:*", + "@acme/shared": "workspace:*", "@acme/application": "workspace:*", + "@acme/domain": "workspace:*", "@acme/infrastructure": "workspace:*", "@acme/interface-adapters": "workspace:*" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/di/src/AppConfig.ts b/di/src/AppConfig.ts new file mode 100644 index 0000000..0ec13ed --- /dev/null +++ b/di/src/AppConfig.ts @@ -0,0 +1,8 @@ +import type { ConnectOptions } from 'mongoose'; + +export interface AppConfig { + mongo: { + uri: string; + options?: ConnectOptions; + }; +} diff --git a/di/src/AppContextBuilder.ts b/di/src/AppContextBuilder.ts new file mode 100644 index 0000000..96de120 --- /dev/null +++ b/di/src/AppContextBuilder.ts @@ -0,0 +1,54 @@ +import { createContainer, createModule } from '@thaitype/ioctopus'; +import { registry } from './ServiceRegistry'; + +import { MongooseClient, MongooseUserRepository } from '@acme/infrastructure'; +import { UserUseCase } from '@acme/application'; +import { UserController } from '@acme/interface-adapters'; + +import type { AppConfig } from './AppConfig'; +import { ConsoleLogger } from '@acme/shared'; + +export class AppContextBuilder { + private readonly container = createContainer(registry); + private mongo: MongooseClient; + + constructor(private config: AppConfig) { + this.mongo = new MongooseClient(config.mongo.uri, config.mongo.options); + } + + async init() { + this.buildModule(); + await this.mongo.connect(); + } + + async shutdown() { + await this.mongo.disconnect(); + } + + private buildModule() { + this.container.load('infrastructure', this.buildInfrastructureModule()); + this.container.load('app', this.buildApplicationModule()); + } + + private buildApplicationModule() { + const mod = createModule(registry); + // --- Application Layer --- + mod.bind('IUserRepository').toClass(MongooseUserRepository); + mod.bind('UserUseCase').toClass(UserUseCase, ['IUserRepository']); + mod.bind('UserController').toClass(UserController, ['UserUseCase', 'ILogger']); + return mod; + } + + private buildInfrastructureModule() { + const mod = createModule(registry); + // --- SharedControllerDeps --- + mod.bind('ILogger').toClass(ConsoleLogger); + // --- MongoDB --- + mod.bind('MongooseClient').toValue(this.mongo); + return mod; + } + + get(token: Key): (typeof registry.keyMap)[Key] { + return this.container.get(token); + } +} diff --git a/core/di/src/ServiceRegistry.ts b/di/src/ServiceRegistry.ts similarity index 52% rename from core/di/src/ServiceRegistry.ts rename to di/src/ServiceRegistry.ts index 3c56895..5291b60 100644 --- a/core/di/src/ServiceRegistry.ts +++ b/di/src/ServiceRegistry.ts @@ -1,9 +1,15 @@ import { createServiceRegistry } from '@thaitype/ioctopus'; -import { IUserRepository, UserUseCase } from '@acme/application'; +import { MongooseClient } from '@acme/infrastructure'; +import { type IUserRepository, UserUseCase } from '@acme/application'; import { UserController } from '@acme/interface-adapters'; +import type { ILogger } from '@acme/shared'; // prettier-ignore export const registry = createServiceRegistry() + .define('ILogger').mapTo() + // MongooseClient + .define('MongooseClient').mapTo() + // Application Level .define('IUserRepository').mapTo() .define('UserUseCase').mapTo() .define('UserController').mapTo(); diff --git a/di/src/index.ts b/di/src/index.ts new file mode 100644 index 0000000..e28ec0e --- /dev/null +++ b/di/src/index.ts @@ -0,0 +1 @@ +export * from './AppContextBuilder'; diff --git a/core/interface-adapters/tsconfig.json b/di/tsconfig.json similarity index 100% rename from core/interface-adapters/tsconfig.json rename to di/tsconfig.json diff --git a/core/interface-adapters/vitest.config.ts b/di/vitest.config.ts similarity index 100% rename from core/interface-adapters/vitest.config.ts rename to di/vitest.config.ts diff --git a/docker-compose.yml b/docker-compose.yml index 29e25db..d85422b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,16 @@ -version: '3.9' services: - db: - image: postgres:17-alpine + mongo: + # Arm64 Architecture + image: arm64v8/mongo:7 + # image: mongo:7 for x86_64 Architecture + ports: + - "27017:27017" environment: - POSTGRES_PASSWORD: postgres - POSTGRES_DB: repo_development + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example volumes: - - data:/var/lib/postgresql/data - ports: - - '5432:5432' + - mongo_data:/data/db + restart: unless-stopped volumes: - data: + mongo_data: \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..7af04a0 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,10 @@ +# News Source + +- Hacker News API +- Reddit API +- Twitter API +- Github Trending API + +## Interesting Newsletters + +- https://selfh.st/ -- For self-hosted enthusiasts \ No newline at end of file diff --git a/package.json b/package.json index f4e0f4d..27d6bb9 100644 --- a/package.json +++ b/package.json @@ -2,31 +2,40 @@ "name": "typescript-clean-architecture", "private": true, "scripts": { + "prepare": "husky && turbo run @acme/mono#build --output-logs=errors-only", "build": "turbo run build", - "dev": "turbo run dev", - "lint:check": "turbo lint:check check-types && npm run format", + "dev": "turbo run dev --filter=!./tools/template", + "lint:check": "turbo lint:check check-types && npm run format:check", "lint:fix": "turbo lint:fix && npm run format:fix", - "format": "prettier --check ./**/*.{ts,tsx,js}", - "format:fix": "prettier --write ./**/*.{ts,tsx,js}", + "check-types:watch": "turbo check-types:watch", + "format:check": "prettier --check \"./**/*.{ts,tsx}\"", + "format:fix": "prettier --write \"./**/*.{ts,tsx}\"", "test": "turbo run test", "test:watch": "turbo run test:watch", - "test:coverage-report": "turbo run view-report" + "test:coverage-report": "turbo run view-report", + "upgrade-deps": "npx taze -r --interactive", + "check-deps": "npx taze -r" }, "engines": { "node": ">=22" }, - "packageManager": "pnpm@10.5.2", + "packageManager": "pnpm@10.11.0", "dependencies": { - "@thaitype/ioctopus": "^2.1.1" + "@thaitype/ioctopus": "^2.1.1", + "tiny-glob": "^0.2.9" }, "devDependencies": { - "turbo": "^2.4.4", - "@vitest/coverage-istanbul": "^3.0.9", - "typescript": "^5.8.2", - "eslint": "^9.22.0", - "esbuild": "^0.25.1", + "@types/node": "^22.15.18", + "@vitest/coverage-istanbul": "^3.1.3", + "esbuild": "^0.25.4", + "eslint": "^9.27.0", + "husky": "^9.1.7", + "npm-run-all": "^4.1.5", "prettier": "^3.5.3", - "vitest": "^3.0.9" + "tsx": "^4.19.4", + "turbo": "^2.5.3", + "typescript": "^5.8.3", + "vitest": "^3.1.3" }, "prettier": { "trailingComma": "es5", @@ -37,4 +46,4 @@ "printWidth": 120, "arrowParens": "avoid" } -} \ No newline at end of file +} diff --git a/packages/database-drizzle/package.json b/packages/database-drizzle/package.json index c449559..30e5ec5 100644 --- a/packages/database-drizzle/package.json +++ b/packages/database-drizzle/package.json @@ -10,21 +10,22 @@ "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch", "db:studio": "drizzle-kit studio", "generate": "drizzle-kit generate" }, "dependencies": { - "dotenv": "^16.4.7", "@libsql/client": "^0.14.0", - "drizzle-orm": "^0.40.0", + "dotenv": "^16.5.0", + "drizzle-orm": "^0.40.1", "postgres": "^3.4.5" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", "@acme/config-vitest": "workspace:*", - "@types/node": "^20.11.24", - "drizzle-kit": "^0.30.5" + "@acme/mono": "workspace:*", + "@types/node": "^20.17.47", + "drizzle-kit": "^0.30.6" } } diff --git a/packages/database-drizzle/src/migrate.ts b/packages/database-drizzle/src/migrate.ts index c7d0abd..43f9833 100644 --- a/packages/database-drizzle/src/migrate.ts +++ b/packages/database-drizzle/src/migrate.ts @@ -1,6 +1,6 @@ import { drizzle } from 'drizzle-orm/postgres-js'; import { migrate as migrateSchema } from 'drizzle-orm/postgres-js/migrator'; -import { DbContext } from './database'; +import type { DbContext } from './database'; export interface MigrationOptions extends DbContext { migrationsFolder: string; diff --git a/packages/database-drizzle/src/seed.ts b/packages/database-drizzle/src/seed.ts index e7972a3..0f3df90 100644 --- a/packages/database-drizzle/src/seed.ts +++ b/packages/database-drizzle/src/seed.ts @@ -1,5 +1,5 @@ import { users } from './schema'; -import { DbContext } from './database'; +import type { DbContext } from './database'; /** * Execute seed the database diff --git a/packages/shared/package.json b/packages/shared/package.json index dbaad76..7d3a53f 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -10,12 +10,16 @@ "test:watch": "mono test:watch", "lint:check": "mono lint:check", "lint:fix": "mono lint:fix", - "check-types": "mono check-types" + "check-types": "mono check-types", + "check-types:watch": "mono check-types:watch" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" + }, + "dependencies": { + "ansis": "^4.0.0" } -} \ No newline at end of file +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 4dcc196..68905ce 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1 +1,2 @@ export * from './lib/shared'; +export * from './logger'; diff --git a/packages/shared/src/logger/ConsoleLogger.ts b/packages/shared/src/logger/ConsoleLogger.ts new file mode 100644 index 0000000..07f7d61 --- /dev/null +++ b/packages/shared/src/logger/ConsoleLogger.ts @@ -0,0 +1,76 @@ +import c from 'ansis'; +import type { ILogger, LogLevel } from './ILogger'; + +export const MARK_CHECK = c.green('โœ”'); +export const MARK_INFO = c.blue('โ„น'); +export const MARK_ERROR = c.red('โœ–'); +export const MARK_WARNING = c.yellow('!'); + +const LEVEL_ORDER: LogLevel[] = ['silent', 'error', 'warn', 'info', 'debug']; + +export class ConsoleLogger implements ILogger { + constructor(public level: LogLevel = 'debug') {} + + // Used by logWithLevel to check if the level should output + private shouldLog(target: LogLevel): boolean { + if (this.level === 'silent') return false; + return LEVEL_ORDER.indexOf(target) <= LEVEL_ORDER.indexOf(this.level); + } + + // Generic unformatted log (default info-level) + log(message: string, meta?: Record): void { + this.logWithLevel('info', message, meta); + } + + // Dynamic log level (no prefix) + logWithLevel(level: LogLevel, message: string, meta?: Record): void { + if (!this.shouldLog(level)) return; + + const out = this.formatRaw(message, meta); + switch (level) { + case 'error': + console.error(out); + break; + case 'warn': + console.warn(out); + break; + case 'info': + console.info(out); + break; + case 'debug': + console.debug(out); + break; + } + } + + info(message: string, meta?: Record): void { + if (!this.shouldLog('info')) return; + console.info(`${MARK_INFO} ${message}${this.metaStr(meta)}`); + } + + warn(message: string, meta?: Record): void { + if (!this.shouldLog('warn')) return; + console.warn(`${MARK_WARNING} ${message}${this.metaStr(meta)}`); + } + + error(message: string, meta?: Record): void { + if (!this.shouldLog('error')) return; + console.error(`${MARK_ERROR} ${message}${this.metaStr(meta)}`); + } + + debug(message: string, meta?: Record): void { + if (!this.shouldLog('debug')) return; + console.debug(c.gray(`[debug] ${message}${this.metaStr(meta, false)}`)); + } + + // Helper to format meta + private metaStr(meta?: Record, isDimmed = true): string { + const metaString = isDimmed ? c.dim(JSON.stringify(meta)) : JSON.stringify(meta); + return meta ? ` ${metaString}` : ''; + } + + // Raw (no mark/prefix) + private formatRaw(message: string, meta?: Record): string { + return `${message}${this.metaStr(meta)}`; + } +} diff --git a/packages/shared/src/logger/ILogger.ts b/packages/shared/src/logger/ILogger.ts new file mode 100644 index 0000000..2cf0c14 --- /dev/null +++ b/packages/shared/src/logger/ILogger.ts @@ -0,0 +1,17 @@ +export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug'; + +export interface ILogger { + level: LogLevel; + + /** Raw level-specific log (no prefix/format) */ + logWithLevel(level: LogLevel, message: string, meta?: Record): void; + + /** Shortcut for logWithLevel('info', ...) */ + log(message: string, meta?: Record): void; + + /** Formatted log with prefix (e.g., [info]) */ + info(message: string, meta?: Record): void; + warn(message: string, meta?: Record): void; + error(message: string, meta?: Record): void; + debug(message: string, meta?: Record): void; +} diff --git a/packages/shared/src/logger/InMemoryLogger.ts b/packages/shared/src/logger/InMemoryLogger.ts new file mode 100644 index 0000000..3b8ad82 --- /dev/null +++ b/packages/shared/src/logger/InMemoryLogger.ts @@ -0,0 +1,52 @@ +import type { ILogger, LogLevel } from './ILogger'; + +export interface LoggedEntry { + level: LogLevel; + message: string; + meta?: Record; +} + +export class MemoryLogger implements ILogger { + public readonly entries: LoggedEntry[] = []; + public level: LogLevel; + + constructor(level: LogLevel = 'debug') { + this.level = level; + } + + logWithLevel(level: LogLevel, message: string, meta?: Record): void { + this.entries.push({ level, message, meta }); + } + + log(message: string, meta?: Record): void { + this.logWithLevel('info', message, meta); + } + + info(message: string, meta?: Record): void { + this.logWithLevel('info', message, meta); + } + + warn(message: string, meta?: Record): void { + this.logWithLevel('warn', message, meta); + } + + error(message: string, meta?: Record): void { + this.logWithLevel('error', message, meta); + } + + debug(message: string, meta?: Record): void { + this.logWithLevel('debug', message, meta); + } + + clear() { + this.entries.length = 0; + } + + get logs(): LoggedEntry[] { + return [...this.entries]; + } + + findByLevel(level: LogLevel) { + return this.entries.filter(e => e.level === level); + } +} diff --git a/packages/shared/src/logger/NoopLogger.ts b/packages/shared/src/logger/NoopLogger.ts new file mode 100644 index 0000000..126f220 --- /dev/null +++ b/packages/shared/src/logger/NoopLogger.ts @@ -0,0 +1,13 @@ +import type { ILogger, LogLevel } from './ILogger'; + +export class NoopLogger implements ILogger { + level: LogLevel = 'silent'; + + logWithLevel(): void {} + log(): void {} + + info(): void {} + warn(): void {} + error(): void {} + debug(): void {} +} diff --git a/packages/shared/src/logger/index.ts b/packages/shared/src/logger/index.ts new file mode 100644 index 0000000..d69f5f4 --- /dev/null +++ b/packages/shared/src/logger/index.ts @@ -0,0 +1,4 @@ +export * from './ILogger'; +export * from './ConsoleLogger'; +export * from './NoopLogger'; +export * from './InMemoryLogger'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9d8e39..524722a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,34 +11,52 @@ importers: '@thaitype/ioctopus': specifier: ^2.1.1 version: 2.1.1 + tiny-glob: + specifier: ^0.2.9 + version: 0.2.9 devDependencies: + '@types/node': + specifier: ^22.15.18 + version: 22.15.18 '@vitest/coverage-istanbul': - specifier: ^3.0.9 - version: 3.0.9(vitest@3.0.9) + specifier: ^3.1.3 + version: 3.1.3(vitest@3.1.3) esbuild: - specifier: ^0.25.1 - version: 0.25.1 + specifier: ^0.25.4 + version: 0.25.4 eslint: - specifier: ^9.22.0 - version: 9.22.0 + specifier: ^9.27.0 + version: 9.27.0(jiti@2.4.2) + husky: + specifier: ^9.1.7 + version: 9.1.7 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 prettier: specifier: ^3.5.3 version: 3.5.3 + tsx: + specifier: ^4.19.4 + version: 4.19.4 turbo: - specifier: ^2.4.4 - version: 2.4.4 + specifier: ^2.5.3 + version: 2.5.3 typescript: - specifier: ^5.8.2 - version: 5.8.2 + specifier: ^5.8.3 + version: 5.8.3 vitest: - specifier: ^3.0.9 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) + specifier: ^3.1.3 + version: 3.1.3(@types/node@22.15.18)(@vitest/ui@3.0.9)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4) apps/cli: dependencies: '@acme/di': specifier: workspace:* - version: link:../../core/di + version: link:../../di + dotenv: + specifier: ^16.5.0 + version: 16.5.0 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -53,23 +71,47 @@ importers: specifier: workspace:* version: link:../../tools/mono '@types/node': - specifier: ^22.13.9 - version: 22.13.11 + specifier: ^22.15.18 + version: 22.15.18 apps/nextjs: dependencies: '@acme/database-drizzle': specifier: workspace:* version: link:../../packages/database-drizzle + '@t3-oss/env-nextjs': + specifier: ^0.12.0 + version: 0.12.0(typescript@5.8.3)(zod@3.24.4) + '@tanstack/react-query': + specifier: ^5.76.1 + version: 5.76.1(react@19.1.0) + '@trpc/client': + specifier: ^11.1.2 + version: 11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3) + '@trpc/react-query': + specifier: ^11.1.2 + version: 11.1.2(@tanstack/react-query@5.76.1(react@19.1.0))(@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@trpc/server': + specifier: ^11.1.2 + version: 11.1.2(typescript@5.8.3) next: - specifier: ^15.2.1 - version: 15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^15.3.2 + version: 15.3.2(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: - specifier: ^19.0.0 - version: 19.0.0 + specifier: ^19.1.0 + version: 19.1.0 react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + server-only: + specifier: ^0.0.1 + version: 0.0.1 + superjson: + specifier: ^2.2.2 + version: 2.2.2 + zod: + specifier: ^3.24.4 + version: 3.24.4 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -83,51 +125,60 @@ importers: '@acme/mono': specifier: workspace:* version: link:../../tools/mono + '@tailwindcss/postcss': + specifier: ^4.1.7 + version: 4.1.7 '@types/node': - specifier: ^22.13.9 - version: 22.13.11 + specifier: ^22.15.18 + version: 22.15.18 '@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) + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.11(prettier@3.5.3) + tailwindcss: + specifier: ^4.1.7 + version: 4.1.7 configs/config-eslint: devDependencies: '@eslint/js': - specifier: ^9.21.0 - version: 9.22.0 + specifier: ^9.27.0 + version: 9.27.0 '@next/eslint-plugin-next': - specifier: ^15.2.1 - version: 15.2.1 + specifier: ^15.3.2 + version: 15.3.2 eslint: - specifier: ^9.21.0 - version: 9.22.0 + specifier: ^9.27.0 + version: 9.27.0(jiti@2.4.2) eslint-config-prettier: - specifier: ^10.0.2 - version: 10.1.1(eslint@9.22.0) + specifier: ^10.1.5 + version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) 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) + specifier: ^7.37.5 + version: 7.37.5(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.22.0) + version: 5.2.0(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-turbo: - specifier: ^2.4.4 - version: 2.4.4(eslint@9.22.0)(turbo@2.4.4) + specifier: ^2.5.3 + version: 2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3) globals: - specifier: ^16.0.0 - version: 16.0.0 + specifier: ^16.1.0 + version: 16.1.0 typescript: - specifier: ^5.8.2 - version: 5.8.2 + specifier: ^5.8.3 + version: 5.8.3 typescript-eslint: - specifier: ^8.26.0 - version: 8.26.0(eslint@9.22.0)(typescript@5.8.2) + specifier: ^8.32.1 + version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) configs/config-typescript: {} @@ -137,29 +188,25 @@ importers: specifier: workspace:* version: link:../config-typescript '@vitest/coverage-istanbul': - specifier: ^3.0.9 - version: 3.0.9(vitest@3.0.9) + specifier: ^3.1.3 + version: 3.1.3(vitest@3.1.3) '@vitest/ui': specifier: 3.0.9 - version: 3.0.9(vitest@3.0.9) + version: 3.0.9(vitest@3.1.3) glob: - specifier: ^11.0.1 - version: 11.0.1 + specifier: ^11.0.2 + version: 11.0.2 jsdom: - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.1.0 + version: 26.1.0 nyc: specifier: ^17.1.0 version: 17.1.0 vitest: - specifier: ^3.0.9 - version: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) + specifier: ^3.1.3 + version: 3.1.3(@types/node@22.15.18)(@vitest/ui@3.0.9)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4) - core/application: - dependencies: - '@acme/domain': - specifier: workspace:* - version: link:../domain + core/1-domain: devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -174,20 +221,11 @@ importers: specifier: workspace:* version: link:../../tools/mono - core/di: + core/2-application: dependencies: - '@acme/application': - specifier: workspace:* - version: link:../application '@acme/domain': specifier: workspace:* - version: link:../domain - '@acme/infrastructure': - specifier: workspace:* - version: link:../infrastructure - '@acme/interface-adapters': - specifier: workspace:* - version: link:../interface-adapters + version: link:../1-domain devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -201,9 +239,19 @@ importers: '@acme/mono': specifier: workspace:* version: link:../../tools/mono + type-fest: + specifier: ^4.41.0 + version: 4.41.0 - core/domain: + core/3-interface-adapters: + dependencies: + '@acme/shared': + specifier: workspace:* + version: link:../../packages/shared devDependencies: + '@acme/application': + specifier: workspace:* + version: link:../2-application '@acme/config-eslint': specifier: workspace:* version: link:../../configs/config-eslint @@ -213,18 +261,30 @@ importers: '@acme/config-vitest': specifier: workspace:* version: link:../../configs/config-vitest + '@acme/domain': + specifier: workspace:* + version: link:../1-domain + '@acme/infrastructure': + specifier: workspace:* + version: link:../4-infrastructure '@acme/mono': specifier: workspace:* version: link:../../tools/mono + '@vitest/coverage-istanbul': + specifier: ^3.1.3 + version: 3.1.3(vitest@3.1.3) - core/infrastructure: + core/4-infrastructure: dependencies: '@acme/application': specifier: workspace:* - version: link:../application + version: link:../2-application '@acme/domain': specifier: workspace:* - version: link:../domain + version: link:../1-domain + mongoose: + specifier: ^8.15.0 + version: 8.15.0 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -239,27 +299,36 @@ importers: specifier: workspace:* version: link:../../tools/mono - core/interface-adapters: + di: dependencies: '@acme/application': specifier: workspace:* - version: link:../application + version: link:../core/2-application + '@acme/domain': + specifier: workspace:* + version: link:../core/1-domain + '@acme/infrastructure': + specifier: workspace:* + version: link:../core/4-infrastructure + '@acme/interface-adapters': + specifier: workspace:* + version: link:../core/3-interface-adapters + '@acme/shared': + specifier: workspace:* + version: link:../packages/shared devDependencies: '@acme/config-eslint': specifier: workspace:* - version: link:../../configs/config-eslint + version: link:../configs/config-eslint '@acme/config-typescript': specifier: workspace:* - version: link:../../configs/config-typescript + version: link:../configs/config-typescript '@acme/config-vitest': specifier: workspace:* - version: link:../../configs/config-vitest + version: link:../configs/config-vitest '@acme/mono': specifier: workspace:* - version: link:../../tools/mono - '@vitest/coverage-istanbul': - specifier: ^3.0.8 - version: 3.0.9(vitest@3.0.9) + version: link:../tools/mono packages/database-drizzle: dependencies: @@ -267,11 +336,11 @@ importers: specifier: ^0.14.0 version: 0.14.0 dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 drizzle-orm: - specifier: ^0.40.0 - version: 0.40.0(@libsql/client@0.14.0)(@prisma/client@6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2))(gel@2.0.1)(postgres@3.4.5)(prisma@6.4.1(typescript@5.8.2)) + specifier: ^0.40.1 + version: 0.40.1(@libsql/client@0.14.0)(gel@2.1.0)(postgres@3.4.5) postgres: specifier: ^3.4.5 version: 3.4.5 @@ -289,13 +358,17 @@ importers: specifier: workspace:* version: link:../../tools/mono '@types/node': - specifier: ^20.11.24 - version: 20.17.24 + specifier: ^20.17.47 + version: 20.17.47 drizzle-kit: - specifier: ^0.30.5 - version: 0.30.5 + specifier: ^0.30.6 + version: 0.30.6 packages/shared: + dependencies: + ansis: + specifier: ^4.0.0 + version: 4.0.0 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -316,8 +389,8 @@ importers: specifier: workspace:* version: link:../../packages/database-drizzle dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -334,9 +407,12 @@ importers: tools/mono: dependencies: + ansis: + specifier: ^4.0.0 + version: 4.0.0 execa: - specifier: ^9.5.2 - version: 9.5.2 + specifier: ^9.5.3 + version: 9.5.3 devDependencies: '@acme/config-eslint': specifier: workspace:* @@ -345,8 +421,8 @@ importers: specifier: workspace:* version: link:../../configs/config-typescript '@types/node': - specifier: ^22.13.9 - version: 22.13.11 + specifier: ^22.15.18 + version: 22.15.18 tools/template: devDependencies: @@ -365,89 +441,93 @@ importers: packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@asamuzakjp/css-color@3.1.1': - resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + '@asamuzakjp/css-color@3.1.7': + resolution: {integrity: sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.10': - resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.10': - resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + '@babel/helpers@7.27.1': + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.10': - resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} '@csstools/color-helpers@5.0.2': resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} engines: {node: '>=18'} - '@csstools/css-calc@2.1.2': - resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + '@csstools/css-calc@2.1.3': + resolution: {integrity: sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==} engines: {node: '>=18'} peerDependencies: '@csstools/css-parser-algorithms': ^3.0.4 '@csstools/css-tokenizer': ^3.0.3 - '@csstools/css-color-parser@3.0.8': - resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + '@csstools/css-color-parser@3.0.9': + resolution: {integrity: sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==} engines: {node: '>=18'} peerDependencies: '@csstools/css-parser-algorithms': ^3.0.4 @@ -466,8 +546,8 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -483,14 +563,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.23.1': - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -507,14 +581,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.23.1': - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -531,14 +599,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.23.1': - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -555,14 +617,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.23.1': - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -579,14 +635,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.23.1': - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -603,14 +653,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.23.1': - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -627,14 +671,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -651,14 +689,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -675,14 +707,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.23.1': - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -699,14 +725,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.23.1': - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -723,14 +743,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.23.1': - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -747,14 +761,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.23.1': - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -771,14 +779,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.23.1': - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -795,14 +797,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.23.1': - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -819,14 +815,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.23.1': - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -843,14 +833,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.23.1': - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -867,20 +851,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.23.1': - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -897,26 +875,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.23.1': - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -933,14 +899,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -957,14 +917,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.23.1': - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -981,14 +935,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.23.1': - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1005,14 +953,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.23.1': - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1029,20 +971,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.23.1': - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1051,32 +987,32 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.1.0': - resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.12.0': - resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.0': - resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.22.0': - resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} + '@eslint/js@9.27.0': + resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.7': - resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -1095,111 +1031,116 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + '@img/sharp-darwin-arm64@0.34.1': + resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-x64@0.34.1': + resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + '@img/sharp-linux-arm64@0.34.1': + resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm@0.34.1': + resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-s390x@0.34.1': + resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-x64@0.34.1': + resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + '@img/sharp-linuxmusl-arm64@0.34.1': + resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + '@img/sharp-linuxmusl-x64@0.34.1': + resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + '@img/sharp-wasm32@0.34.1': + resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-ia32@0.34.1': + resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + '@img/sharp-win32-x64@0.34.1': + resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1208,6 +1149,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1285,59 +1230,62 @@ packages: cpu: [x64] os: [win32] + '@mongodb-js/saslprep@1.2.2': + resolution: {integrity: sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==} + '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - '@next/env@15.2.1': - resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} + '@next/env@15.3.2': + resolution: {integrity: sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==} - '@next/eslint-plugin-next@15.2.1': - resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==} + '@next/eslint-plugin-next@15.3.2': + resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} - '@next/swc-darwin-arm64@15.2.1': - resolution: {integrity: sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ==} + '@next/swc-darwin-arm64@15.3.2': + resolution: {integrity: sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.1': - resolution: {integrity: sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ==} + '@next/swc-darwin-x64@15.3.2': + resolution: {integrity: sha512-ro/fdqaZWL6k1S/5CLv1I0DaZfDVJkWNaUU3un8Lg6m0YENWlDulmIWzV96Iou2wEYyEsZq51mwV8+XQXqMp3w==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.1': - resolution: {integrity: sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ==} + '@next/swc-linux-arm64-gnu@15.3.2': + resolution: {integrity: sha512-covwwtZYhlbRWK2HlYX9835qXum4xYZ3E2Mra1mdQ+0ICGoMiw1+nVAn4d9Bo7R3JqSmK1grMq/va+0cdh7bJA==} 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==} + '@next/swc-linux-arm64-musl@15.3.2': + resolution: {integrity: sha512-KQkMEillvlW5Qk5mtGA/3Yz0/tzpNlSw6/3/ttsV1lNtMuOHcGii3zVeXZyi4EJmmLDKYcTcByV2wVsOhDt/zg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.1': - resolution: {integrity: sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww==} + '@next/swc-linux-x64-gnu@15.3.2': + resolution: {integrity: sha512-uRBo6THWei0chz+Y5j37qzx+BtoDRFIkDzZjlpCItBRXyMPIg079eIkOCl3aqr2tkxL4HFyJ4GHDes7W8HuAUg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.1': - resolution: {integrity: sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg==} + '@next/swc-linux-x64-musl@15.3.2': + resolution: {integrity: sha512-+uxFlPuCNx/T9PdMClOqeE8USKzj8tVz37KflT3Kdbx/LOlZBRI2yxuIcmx1mPNK8DwSOMNCr4ureSet7eyC0w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.1': - resolution: {integrity: sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw==} + '@next/swc-win32-arm64-msvc@15.3.2': + resolution: {integrity: sha512-LLTKmaI5cfD8dVzh5Vt7+OMo+AIOClEdIU/TSKbXXT2iScUTSxOGoBhfuv+FU8R9MLmrkIL1e2fBMkEEjYAtPQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.1': - resolution: {integrity: sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g==} + '@next/swc-win32-x64-msvc@15.3.2': + resolution: {integrity: sha512-aW5B8wOPioJ4mBdMDXkt5f3j8pUr9W8AnlX0Df35uRWNT1Y6RIybxjnSUe+PhM+M1bwgyY8PHLmXZC6zT1o5tA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1354,135 +1302,113 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@petamoriken/float16@3.9.1': - resolution: {integrity: sha512-j+ejhYwY6PeB+v1kn7lZFACUIG97u90WxMuGosILFsl9d4Ovi0sjk0GlPfoEcx+FzvXZDAfioD+NGnnPamXgMA==} + '@petamoriken/float16@3.9.2': + resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - - '@prisma/client@6.4.1': - resolution: {integrity: sha512-A7Mwx44+GVZVexT5e2GF/WcKkEkNNKbgr059xpr5mn+oUm2ZW1svhe+0TRNBwCdzhfIZ+q23jEgsNPvKD9u+6g==} - engines: {node: '>=18.18'} - peerDependencies: - prisma: '*' - typescript: '>=5.1.0' - peerDependenciesMeta: - prisma: - optional: true - typescript: - optional: true - - '@prisma/debug@6.4.1': - resolution: {integrity: sha512-Q9xk6yjEGIThjSD8zZegxd5tBRNHYd13GOIG0nLsanbTXATiPXCLyvlYEfvbR2ft6dlRsziQXfQGxAgv7zcMUA==} - - '@prisma/engines-version@6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d': - resolution: {integrity: sha512-Xq54qw55vaCGrGgIJqyDwOq0TtjZPJEWsbQAHugk99hpDf2jcEeQhUcF+yzEsSqegBaDNLA4IC8Nn34sXmkiTQ==} - - '@prisma/engines@6.4.1': - resolution: {integrity: sha512-KldENzMHtKYwsOSLThghOIdXOBEsfDuGSrxAZjMnimBiDKd3AE4JQ+Kv+gBD/x77WoV9xIPf25GXMWffXZ17BA==} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@prisma/fetch-engine@6.4.1': - resolution: {integrity: sha512-uZ5hVeTmDspx7KcaRCNoXmcReOD+84nwlO2oFvQPRQh9xiFYnnUKDz7l9bLxp8t4+25CsaNlgrgilXKSQwrIGQ==} - - '@prisma/get-platform@6.4.1': - resolution: {integrity: sha512-gXqZaDI5scDkBF8oza7fOD3Q3QMD0e0rBynlzDDZdTWbWmzjuW58PRZtj+jkvKje2+ZigCWkH8SsWZAsH6q1Yw==} - - '@rollup/rollup-android-arm-eabi@4.35.0': - resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==} + '@rollup/rollup-android-arm-eabi@4.41.0': + resolution: {integrity: sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.35.0': - resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==} + '@rollup/rollup-android-arm64@4.41.0': + resolution: {integrity: sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.35.0': - resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==} + '@rollup/rollup-darwin-arm64@4.41.0': + resolution: {integrity: sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.35.0': - resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==} + '@rollup/rollup-darwin-x64@4.41.0': + resolution: {integrity: sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.35.0': - resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==} + '@rollup/rollup-freebsd-arm64@4.41.0': + resolution: {integrity: sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.35.0': - resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==} + '@rollup/rollup-freebsd-x64@4.41.0': + resolution: {integrity: sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.35.0': - resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + resolution: {integrity: sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.35.0': - resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==} + '@rollup/rollup-linux-arm-musleabihf@4.41.0': + resolution: {integrity: sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.35.0': - resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==} + '@rollup/rollup-linux-arm64-gnu@4.41.0': + resolution: {integrity: sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.35.0': - resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==} + '@rollup/rollup-linux-arm64-musl@4.41.0': + resolution: {integrity: sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.35.0': - resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==} + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': + resolution: {integrity: sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': - resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': + resolution: {integrity: sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.35.0': - resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==} + '@rollup/rollup-linux-riscv64-gnu@4.41.0': + resolution: {integrity: sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.35.0': - resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==} + '@rollup/rollup-linux-riscv64-musl@4.41.0': + resolution: {integrity: sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.41.0': + resolution: {integrity: sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.35.0': - resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==} + '@rollup/rollup-linux-x64-gnu@4.41.0': + resolution: {integrity: sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.35.0': - resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==} + '@rollup/rollup-linux-x64-musl@4.41.0': + resolution: {integrity: sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.35.0': - resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==} + '@rollup/rollup-win32-arm64-msvc@4.41.0': + resolution: {integrity: sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.35.0': - resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==} + '@rollup/rollup-win32-ia32-msvc@4.41.0': + resolution: {integrity: sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.35.0': - resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==} + '@rollup/rollup-win32-x64-msvc@4.41.0': + resolution: {integrity: sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==} cpu: [x64] os: [win32] @@ -1499,20 +1425,165 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@t3-oss/env-core@0.12.0': + resolution: {integrity: sha512-lOPj8d9nJJTt81mMuN9GMk8x5veOt7q9m11OSnCBJhwp1QrL/qR+M8Y467ULBSm9SunosryWNbmQQbgoiMgcdw==} + peerDependencies: + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true + + '@t3-oss/env-nextjs@0.12.0': + resolution: {integrity: sha512-rFnvYk1049RnNVUPvY8iQ55AuQh1Rr+qZzQBh3t++RttCGK4COpXGNxS4+45afuQq02lu+QAOy/5955aU8hRKw==} + peerDependencies: + typescript: '>=5.0.0' + valibot: ^1.0.0-beta.7 || ^1.0.0 + zod: ^3.24.0 + peerDependenciesMeta: + typescript: + optional: true + valibot: + optional: true + zod: + optional: true + + '@tailwindcss/node@4.1.7': + resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==} + + '@tailwindcss/oxide-android-arm64@4.1.7': + resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.7': + resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.7': + resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.7': + resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': + resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': + resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.7': + resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.7': + resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.7': + resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.7': + resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': + resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.7': + resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.7': + resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.7': + resolution: {integrity: sha512-88g3qmNZn7jDgrrcp3ZXEQfp9CVox7xjP1HN2TFKI03CltPVd/c61ydn5qJJL8FYunn0OqBaW5HNUga0kmPVvw==} + + '@tanstack/query-core@5.76.0': + resolution: {integrity: sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg==} + + '@tanstack/react-query@5.76.1': + resolution: {integrity: sha512-YxdLZVGN4QkT5YT1HKZQWiIlcgauIXEIsMOTSjvyD5wLYK8YVvKZUPAysMqossFJJfDpJW3pFn7WNZuPOqq+fw==} + peerDependencies: + react: ^18 || ^19 + '@thaitype/ioctopus@2.1.1': resolution: {integrity: sha512-Bpvl2sc9n50eKDxZ2Q2rJdRFYlQBhAkLX7igNBJjx9lPolM5nQVFcIQ2w+OAnuN1wD5GZaVeVt2Xumx42cvpDw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@trpc/client@11.1.2': + resolution: {integrity: sha512-RpifJOAv+ql9gF3oafa3dLCF01AzWu2DzejvehAPG2IlwHxopKoYXaImJ8zPwRkZokuWiKz5v65HjElmi8TlrQ==} + peerDependencies: + '@trpc/server': 11.1.2 + typescript: '>=5.7.2' + + '@trpc/react-query@11.1.2': + resolution: {integrity: sha512-Ws3oIaj0qqbVIUyfYd9uFBwqk7eRqsxaLhLKN7grskoBo8wkh/CUADcN6ZD+GGogC3Dsg9S4WhgU1jVgfc/ahg==} + peerDependencies: + '@tanstack/react-query': ^5.67.1 + '@trpc/client': 11.1.2 + '@trpc/server': 11.1.2 + react: '>=18.2.0' + react-dom: '>=18.2.0' + typescript: '>=5.7.2' + + '@trpc/server@11.1.2': + resolution: {integrity: sha512-Oi9zWHG0ZDkbDo4sYkduoV7q4sIe6UwjrRLC91vNMYQK+PVgpbTCmK1laRwewAGu0zaayqcGDosANjceOIC3GA==} + peerDependencies: + typescript: '>=5.7.2' + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@20.17.24': - resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} + '@types/node@20.17.47': + resolution: {integrity: sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ==} - '@types/node@22.13.11': - resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} + '@types/node@22.15.18': + resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} '@types/react-dom@19.0.4': resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} @@ -1522,66 +1593,72 @@ packages: '@types/react@19.0.10': resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==} - '@types/ws@8.18.0': - resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - '@typescript-eslint/eslint-plugin@8.26.0': - resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@typescript-eslint/eslint-plugin@8.32.1': + resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.26.0': - resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} + '@typescript-eslint/parser@8.32.1': + resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.26.0': - resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} + '@typescript-eslint/scope-manager@8.32.1': + resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.26.0': - resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} + '@typescript-eslint/type-utils@8.32.1': + resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.26.0': - resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} + '@typescript-eslint/types@8.32.1': + resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.26.0': - resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} + '@typescript-eslint/typescript-estree@8.32.1': + resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.26.0': - resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} + '@typescript-eslint/utils@8.32.1': + resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.26.0': - resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} + '@typescript-eslint/visitor-keys@8.32.1': + resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/coverage-istanbul@3.0.9': - resolution: {integrity: sha512-/TXh2qmOhclmVPjOnPTpIO4Xr6l2P5EwyXQygenwq4/ZQ/vPsrz+GCRZF9kBeQi6xrGcHv368Si9PGImWQawVg==} + '@vitest/coverage-istanbul@3.1.3': + resolution: {integrity: sha512-S6zpofFh7ykVM01KpCbsdPRKBG4SCP/ErvrakFBJEUhiN/nRgsuCsi68VSe8rWstz6V1cJ/Sa/PDttr6FRZuNg==} peerDependencies: - vitest: 3.0.9 + vitest: 3.1.3 - '@vitest/expect@3.0.9': - resolution: {integrity: sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==} + '@vitest/expect@3.1.3': + resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} - '@vitest/mocker@3.0.9': - resolution: {integrity: sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==} + '@vitest/mocker@3.1.3': + resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -1594,14 +1671,17 @@ packages: '@vitest/pretty-format@3.0.9': resolution: {integrity: sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==} - '@vitest/runner@3.0.9': - resolution: {integrity: sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==} + '@vitest/pretty-format@3.1.3': + resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} - '@vitest/snapshot@3.0.9': - resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} + '@vitest/runner@3.1.3': + resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} - '@vitest/spy@3.0.9': - resolution: {integrity: sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==} + '@vitest/snapshot@3.1.3': + resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + + '@vitest/spy@3.1.3': + resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} '@vitest/ui@3.0.9': resolution: {integrity: sha512-FpZD4aIv/qNpwkV3XbLV6xldWFHMgoNWAJEgg5GmpObmAOLAErpYjew9dDwXdYdKOS3iZRKdwI+P3JOJcYeUBg==} @@ -1611,6 +1691,9 @@ packages: '@vitest/utils@3.0.9': resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==} + '@vitest/utils@3.1.3': + resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1640,6 +1723,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1648,6 +1735,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@4.0.0: + resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==} + engines: {node: '>=14'} + append-transform@2.0.0: resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} engines: {node: '>=8'} @@ -1697,9 +1788,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1717,11 +1805,15 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bson@6.10.3: + resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} + engines: {node: '>=16.20.1'} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -1757,13 +1849,17 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - caniuse-lite@1.0.30001702: - resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} chai@5.2.0: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1772,6 +1868,10 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1782,10 +1882,16 @@ packages: cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + 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==} @@ -1796,10 +1902,6 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -1812,12 +1914,20 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - cssstyle@4.3.0: - resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + cssstyle@4.3.1: + resolution: {integrity: sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==} engines: {node: '>=18'} csstype@3.1.3: @@ -1843,8 +1953,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1878,16 +1988,12 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} doctrine@2.1.0: @@ -1898,16 +2004,16 @@ packages: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} - drizzle-kit@0.30.5: - resolution: {integrity: sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA==} + drizzle-kit@0.30.6: + resolution: {integrity: sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==} hasBin: true - drizzle-orm@0.40.0: - resolution: {integrity: sha512-7ptk/HQiMSrEZHnAsSlBESXWj52VwgMmyTEfoNmpNN2ZXpcz13LwHfXTIghsAEud7Z5UJhDOp8U07ujcqme7wg==} + drizzle-orm@0.40.1: + resolution: {integrity: sha512-aPNhtiJiPfm3qxz1czrnIDkfvkSdKGXYeZkpG55NPTVI186LmK2fBLMi4dsHpPHlJrZeQ92D322YFPHADBALew==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -2002,8 +2108,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.123: - resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + electron-to-chromium@1.5.155: + resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2011,14 +2117,21 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-abstract@1.23.9: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} @@ -2035,8 +2148,8 @@ packages: 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-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -2072,13 +2185,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} hasBin: true @@ -2086,12 +2194,16 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + eslint-config-prettier@10.1.5: + resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -2106,14 +2218,14 @@ packages: 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==} + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-turbo@2.4.4: - resolution: {integrity: sha512-myEnQTjr3FkI0j1Fu0Mqnv1z8n0JW5iFTOUNzHaEevjzl+1uzMSsFwks/x8i3rGmI3EYtC1BY8K2B2pS0Vfx6w==} + eslint-plugin-turbo@2.5.3: + resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -2130,8 +2242,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.22.0: - resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} + eslint@9.27.0: + resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2168,12 +2280,12 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@9.5.2: - resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + execa@9.5.3: + resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.2.0: - resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} fast-deep-equal@3.1.3: @@ -2196,8 +2308,8 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2254,10 +2366,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -2283,8 +2391,8 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gel@2.0.1: - resolution: {integrity: sha512-gfem3IGvqKqXwEq7XseBogyaRwGsQGuE7Cw/yQsjLGdgiyqX92G1xENPCE0ltunPGcsJIa6XBOTx/PK169mOqw==} + gel@2.1.0: + resolution: {integrity: sha512-HCeRqInCt6BjbMmeghJ6BKeYwOj7WJT5Db6IWWAA3IMUUa7or7zJfTUEkUWCxiOtoXnwnm96sFK9Fr47Yh2hOA==} engines: {node: '>= 18.0.0'} hasBin: true @@ -2331,8 +2439,8 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@11.0.1: - resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + glob@11.0.2: + resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} engines: {node: 20 || >=22} hasBin: true @@ -2348,14 +2456,20 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.0.0: - resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + globals@16.1.0: + resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -2370,6 +2484,10 @@ packages: 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'} @@ -2397,6 +2515,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -2412,10 +2533,15 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2424,6 +2550,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + engines: {node: '>= 4'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2451,6 +2581,9 @@ packages: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -2572,6 +2705,10 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2629,6 +2766,10 @@ packages: resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} engines: {node: 20 || >=22} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} @@ -2643,8 +2784,8 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@26.0.0: - resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} peerDependencies: canvas: ^3.0.0 @@ -2660,6 +2801,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2675,6 +2819,10 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2684,8 +2832,77 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -2710,8 +2927,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.0.2: - resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -2735,6 +2952,13 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2743,14 +2967,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -2766,6 +2982,57 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} + + mongodb@6.16.0: + resolution: {integrity: sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose@8.15.0: + resolution: {integrity: sha512-WFKsY1q12ScGabnZWUB9c/QzZmz/ESorrV27OembB7Gz6rrh9m3GA4Srsv1uvW1s9AHO5DeZ6DdUTyF9zyNERQ==} + engines: {node: '>=16.20.1'} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -2773,16 +3040,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.9: - resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@15.2.1: - resolution: {integrity: sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g==} + next@15.3.2: + resolution: {integrity: sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2802,9 +3069,13 @@ packages: sass: optional: true + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -2817,12 +3088,20 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - nwsapi@2.2.19: - resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} + nwsapi@2.2.20: + resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} nyc@17.1.0: resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} @@ -2845,8 +3124,8 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} object.fromentries@2.0.8: @@ -2903,12 +3182,16 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -2918,6 +3201,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2937,6 +3224,10 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -2955,6 +3246,15 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -2979,6 +3279,61 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier-plugin-tailwindcss@0.6.11: + resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} @@ -2988,16 +3343,6 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} - prisma@6.4.1: - resolution: {integrity: sha512-q2uJkgXnua/jj66mk6P9bX/zgYJFI/jn4Yp0aS6SPRrjH/n6VyOV7RDe1vHD0DX8Aanx4MvgmUPPoYnR6MJnPg==} - engines: {node: '>=18.18'} - hasBin: true - peerDependencies: - typescript: '>=5.1.0' - peerDependenciesMeta: - typescript: - optional: true - process-on-spawn@1.1.0: resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} engines: {node: '>=8'} @@ -3015,18 +3360,22 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.0.0: - resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: - react: ^19.0.0 + react: ^19.1.0 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -3057,6 +3406,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + 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==} hasBin: true @@ -3070,8 +3424,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.35.0: - resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} + rollup@4.41.0: + resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3100,18 +3454,25 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.25.0: - resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -3127,14 +3488,22 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + sharp@0.34.1: + resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -3159,6 +3528,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3187,18 +3559,33 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + spawn-wrap@2.0.0: resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} engines: {node: '>=8'} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@3.8.1: - resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} @@ -3216,6 +3603,10 @@ packages: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + string.prototype.repeat@1.0.0: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} @@ -3239,6 +3630,10 @@ packages: 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'} @@ -3264,6 +3659,14 @@ packages: babel-plugin-macros: optional: true + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3275,6 +3678,17 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tailwindcss@4.1.7: + resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -3283,14 +3697,17 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} tinypool@1.0.2: @@ -3305,11 +3722,11 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.85: - resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts@6.1.85: - resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true to-regex-range@5.0.1: @@ -3324,12 +3741,12 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@5.1.0: - resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -3337,43 +3754,43 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.1: - resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.4.4: - resolution: {integrity: sha512-5kPvRkLAfmWI0MH96D+/THnDMGXlFNmjeqNRj5grLKiry+M9pKj3pRuScddAXPdlxjO5Ptz06UNaOQrrYGTx1g==} + turbo-darwin-64@2.5.3: + resolution: {integrity: sha512-YSItEVBUIvAGPUDpAB9etEmSqZI3T6BHrkBkeSErvICXn3dfqXUfeLx35LfptLDEbrzFUdwYFNmt8QXOwe9yaw==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.4.4: - resolution: {integrity: sha512-/gtHPqbGQXDFhrmy+Q/MFW2HUTUlThJ97WLLSe4bxkDrKHecDYhAjbZ4rN3MM93RV9STQb3Tqy4pZBtsd4DfCw==} + turbo-darwin-arm64@2.5.3: + resolution: {integrity: sha512-5PefrwHd42UiZX7YA9m1LPW6x9YJBDErXmsegCkVp+GjmWrADfEOxpFrGQNonH3ZMj77WZB2PVE5Aw3gA+IOhg==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.4.4: - resolution: {integrity: sha512-SR0gri4k0bda56hw5u9VgDXLKb1Q+jrw4lM7WAhnNdXvVoep4d6LmnzgMHQQR12Wxl3KyWPbkz9d1whL6NTm2Q==} + turbo-linux-64@2.5.3: + resolution: {integrity: sha512-M9xigFgawn5ofTmRzvjjLj3Lqc05O8VHKuOlWNUlnHPUltFquyEeSkpQNkE/vpPdOR14AzxqHbhhxtfS4qvb1w==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.4.4: - resolution: {integrity: sha512-COXXwzRd3vslQIfJhXUklgEqlwq35uFUZ7hnN+AUyXx7hUOLIiD5NblL+ETrHnhY4TzWszrbwUMfe2BYWtaPQg==} + turbo-linux-arm64@2.5.3: + resolution: {integrity: sha512-auJRbYZ8SGJVqvzTikpg1bsRAsiI9Tk0/SDkA5Xgg0GdiHDH/BOzv1ZjDE2mjmlrO/obr19Dw+39OlMhwLffrw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.4.4: - resolution: {integrity: sha512-PV9rYNouGz4Ff3fd6sIfQy5L7HT9a4fcZoEv8PKRavU9O75G7PoDtm8scpHU10QnK0QQNLbE9qNxOAeRvF0fJg==} + turbo-windows-64@2.5.3: + resolution: {integrity: sha512-arLQYohuHtIEKkmQSCU9vtrKUg+/1TTstWB9VYRSsz+khvg81eX6LYHtXJfH/dK7Ho6ck+JaEh5G+QrE1jEmCQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.4.4: - resolution: {integrity: sha512-403sqp9t5sx6YGEC32IfZTVWkRAixOQomGYB8kEc6ZD+//LirSxzeCHCnM8EmSXw7l57U1G+Fb0kxgTcKPU/Lg==} + turbo-windows-arm64@2.5.3: + resolution: {integrity: sha512-3JPn66HAynJ0gtr6H+hjY4VHpu1RPKcEwGATvGUTmLmYSYBQieVlnGDRMMoYN066YfyPqnNGCfhYbXfH92Cm0g==} cpu: [arm64] os: [win32] - turbo@2.4.4: - resolution: {integrity: sha512-N9FDOVaY3yz0YCOhYIgOGYad7+m2ptvinXygw27WPLQvcZDl3+0Sa77KGVlLSiuPDChOUEnTKE9VJwLSi9BPGQ==} + turbo@2.5.3: + resolution: {integrity: sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA==} hasBin: true type-check@0.4.0: @@ -3384,6 +3801,10 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -3403,15 +3824,15 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript-eslint@8.26.0: - resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} + typescript-eslint@8.32.1: + resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -3422,8 +3843,8 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} @@ -3442,13 +3863,16 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - vite-node@3.0.9: - resolution: {integrity: sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite-node@3.1.3: + resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.2.2: - resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3487,16 +3911,16 @@ packages: yaml: optional: true - vitest@3.0.9: - resolution: {integrity: sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==} + vitest@3.1.3: + resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.9 - '@vitest/ui': 3.0.9 + '@vitest/browser': 3.1.3 + '@vitest/ui': 3.1.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -3554,10 +3978,14 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3595,8 +4023,8 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3620,6 +4048,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -3636,130 +4068,135 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + snapshots: + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@asamuzakjp/css-color@3.1.1': + '@asamuzakjp/css-color@3.1.7': dependencies: - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 lru-cache: 10.4.3 - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.2': {} - '@babel/core@7.26.10': + '@babel/core@7.27.1': 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 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.1 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.10': + '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.26.5': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.27.2 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.5 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.25.9': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': 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 + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.26.10': + '@babel/helpers@7.27.1': dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 - '@babel/parser@7.26.10': + '@babel/parser@7.27.2': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.1 - '@babel/template@7.26.9': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@babel/traverse@7.26.10': + '@babel/traverse@7.27.1': 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 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.10': + '@babel/types@7.27.1': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@csstools/color-helpers@5.0.2': {} - '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-calc@2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/css-color-parser@3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': dependencies: '@csstools/color-helpers': 5.0.2 - '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 @@ -3771,7 +4208,7 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@emnapi/runtime@1.3.1': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true @@ -3789,10 +4226,7 @@ snapshots: '@esbuild/aix-ppc64@0.19.12': optional: true - '@esbuild/aix-ppc64@0.23.1': - optional: true - - '@esbuild/aix-ppc64@0.25.1': + '@esbuild/aix-ppc64@0.25.4': optional: true '@esbuild/android-arm64@0.18.20': @@ -3801,10 +4235,7 @@ snapshots: '@esbuild/android-arm64@0.19.12': optional: true - '@esbuild/android-arm64@0.23.1': - optional: true - - '@esbuild/android-arm64@0.25.1': + '@esbuild/android-arm64@0.25.4': optional: true '@esbuild/android-arm@0.18.20': @@ -3813,10 +4244,7 @@ snapshots: '@esbuild/android-arm@0.19.12': optional: true - '@esbuild/android-arm@0.23.1': - optional: true - - '@esbuild/android-arm@0.25.1': + '@esbuild/android-arm@0.25.4': optional: true '@esbuild/android-x64@0.18.20': @@ -3825,10 +4253,7 @@ snapshots: '@esbuild/android-x64@0.19.12': optional: true - '@esbuild/android-x64@0.23.1': - optional: true - - '@esbuild/android-x64@0.25.1': + '@esbuild/android-x64@0.25.4': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -3837,10 +4262,7 @@ snapshots: '@esbuild/darwin-arm64@0.19.12': optional: true - '@esbuild/darwin-arm64@0.23.1': - optional: true - - '@esbuild/darwin-arm64@0.25.1': + '@esbuild/darwin-arm64@0.25.4': optional: true '@esbuild/darwin-x64@0.18.20': @@ -3849,10 +4271,7 @@ snapshots: '@esbuild/darwin-x64@0.19.12': optional: true - '@esbuild/darwin-x64@0.23.1': - optional: true - - '@esbuild/darwin-x64@0.25.1': + '@esbuild/darwin-x64@0.25.4': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -3861,10 +4280,7 @@ snapshots: '@esbuild/freebsd-arm64@0.19.12': optional: true - '@esbuild/freebsd-arm64@0.23.1': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': + '@esbuild/freebsd-arm64@0.25.4': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -3873,10 +4289,7 @@ snapshots: '@esbuild/freebsd-x64@0.19.12': optional: true - '@esbuild/freebsd-x64@0.23.1': - optional: true - - '@esbuild/freebsd-x64@0.25.1': + '@esbuild/freebsd-x64@0.25.4': optional: true '@esbuild/linux-arm64@0.18.20': @@ -3885,10 +4298,7 @@ snapshots: '@esbuild/linux-arm64@0.19.12': optional: true - '@esbuild/linux-arm64@0.23.1': - optional: true - - '@esbuild/linux-arm64@0.25.1': + '@esbuild/linux-arm64@0.25.4': optional: true '@esbuild/linux-arm@0.18.20': @@ -3897,10 +4307,7 @@ snapshots: '@esbuild/linux-arm@0.19.12': optional: true - '@esbuild/linux-arm@0.23.1': - optional: true - - '@esbuild/linux-arm@0.25.1': + '@esbuild/linux-arm@0.25.4': optional: true '@esbuild/linux-ia32@0.18.20': @@ -3909,10 +4316,7 @@ snapshots: '@esbuild/linux-ia32@0.19.12': optional: true - '@esbuild/linux-ia32@0.23.1': - optional: true - - '@esbuild/linux-ia32@0.25.1': + '@esbuild/linux-ia32@0.25.4': optional: true '@esbuild/linux-loong64@0.18.20': @@ -3921,10 +4325,7 @@ snapshots: '@esbuild/linux-loong64@0.19.12': optional: true - '@esbuild/linux-loong64@0.23.1': - optional: true - - '@esbuild/linux-loong64@0.25.1': + '@esbuild/linux-loong64@0.25.4': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -3933,10 +4334,7 @@ snapshots: '@esbuild/linux-mips64el@0.19.12': optional: true - '@esbuild/linux-mips64el@0.23.1': - optional: true - - '@esbuild/linux-mips64el@0.25.1': + '@esbuild/linux-mips64el@0.25.4': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -3945,10 +4343,7 @@ snapshots: '@esbuild/linux-ppc64@0.19.12': optional: true - '@esbuild/linux-ppc64@0.23.1': - optional: true - - '@esbuild/linux-ppc64@0.25.1': + '@esbuild/linux-ppc64@0.25.4': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -3957,10 +4352,7 @@ snapshots: '@esbuild/linux-riscv64@0.19.12': optional: true - '@esbuild/linux-riscv64@0.23.1': - optional: true - - '@esbuild/linux-riscv64@0.25.1': + '@esbuild/linux-riscv64@0.25.4': optional: true '@esbuild/linux-s390x@0.18.20': @@ -3969,10 +4361,7 @@ snapshots: '@esbuild/linux-s390x@0.19.12': optional: true - '@esbuild/linux-s390x@0.23.1': - optional: true - - '@esbuild/linux-s390x@0.25.1': + '@esbuild/linux-s390x@0.25.4': optional: true '@esbuild/linux-x64@0.18.20': @@ -3981,31 +4370,22 @@ snapshots: '@esbuild/linux-x64@0.19.12': optional: true - '@esbuild/linux-x64@0.23.1': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.1': + '@esbuild/linux-x64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.19.12': + '@esbuild/netbsd-arm64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.23.1': + '@esbuild/netbsd-x64@0.18.20': optional: true - '@esbuild/netbsd-x64@0.25.1': + '@esbuild/netbsd-x64@0.19.12': optional: true - '@esbuild/openbsd-arm64@0.23.1': + '@esbuild/netbsd-x64@0.25.4': optional: true - '@esbuild/openbsd-arm64@0.25.1': + '@esbuild/openbsd-arm64@0.25.4': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -4014,10 +4394,7 @@ snapshots: '@esbuild/openbsd-x64@0.19.12': optional: true - '@esbuild/openbsd-x64@0.23.1': - optional: true - - '@esbuild/openbsd-x64@0.25.1': + '@esbuild/openbsd-x64@0.25.4': optional: true '@esbuild/sunos-x64@0.18.20': @@ -4026,10 +4403,7 @@ snapshots: '@esbuild/sunos-x64@0.19.12': optional: true - '@esbuild/sunos-x64@0.23.1': - optional: true - - '@esbuild/sunos-x64@0.25.1': + '@esbuild/sunos-x64@0.25.4': optional: true '@esbuild/win32-arm64@0.18.20': @@ -4038,10 +4412,7 @@ snapshots: '@esbuild/win32-arm64@0.19.12': optional: true - '@esbuild/win32-arm64@0.23.1': - optional: true - - '@esbuild/win32-arm64@0.25.1': + '@esbuild/win32-arm64@0.25.4': optional: true '@esbuild/win32-ia32@0.18.20': @@ -4050,10 +4421,7 @@ snapshots: '@esbuild/win32-ia32@0.19.12': optional: true - '@esbuild/win32-ia32@0.23.1': - optional: true - - '@esbuild/win32-ia32@0.25.1': + '@esbuild/win32-ia32@0.25.4': optional: true '@esbuild/win32-x64@0.18.20': @@ -4062,37 +4430,34 @@ snapshots: '@esbuild/win32-x64@0.19.12': optional: true - '@esbuild/win32-x64@0.23.1': - optional: true - - '@esbuild/win32-x64@0.25.1': + '@esbuild/win32-x64@0.25.4': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))': dependencies: - eslint: 9.22.0 + eslint: 9.27.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.2': + '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.1.0': {} + '@eslint/config-helpers@0.2.2': {} - '@eslint/core@0.12.0': + '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.0': + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -4103,13 +4468,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.22.0': {} + '@eslint/js@9.27.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.7': + '@eslint/plugin-kit@0.3.1': dependencies: - '@eslint/core': 0.12.0 + '@eslint/core': 0.14.0 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -4123,81 +4488,84 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} - '@img/sharp-darwin-arm64@0.33.5': + '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-darwin-x64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-linux-arm64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-linux-arm@1.1.0': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-ppc64@1.1.0': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-s390x@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-x64@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.33.5': + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.33.5': + '@img/sharp-linux-arm@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-s390x@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linuxmusl-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.33.5': + '@img/sharp-wasm32@0.34.1': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.3 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-ia32@0.34.1': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-win32-x64@0.34.1': optional: true '@isaacs/cliui@8.0.2': @@ -4209,6 +4577,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -4271,8 +4643,8 @@ snapshots: '@libsql/isomorphic-ws@0.1.5': dependencies: - '@types/ws': 8.18.0 - ws: 8.18.1 + '@types/ws': 8.18.1 + ws: 8.18.2 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4292,36 +4664,40 @@ snapshots: '@libsql/win32-x64-msvc@0.4.7': optional: true + '@mongodb-js/saslprep@1.2.2': + dependencies: + sparse-bitfield: 3.0.3 + '@neon-rs/load@0.0.4': {} - '@next/env@15.2.1': {} + '@next/env@15.3.2': {} - '@next/eslint-plugin-next@15.2.1': + '@next/eslint-plugin-next@15.3.2': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.1': + '@next/swc-darwin-arm64@15.3.2': optional: true - '@next/swc-darwin-x64@15.2.1': + '@next/swc-darwin-x64@15.3.2': optional: true - '@next/swc-linux-arm64-gnu@15.2.1': + '@next/swc-linux-arm64-gnu@15.3.2': optional: true - '@next/swc-linux-arm64-musl@15.2.1': + '@next/swc-linux-arm64-musl@15.3.2': optional: true - '@next/swc-linux-x64-gnu@15.2.1': + '@next/swc-linux-x64-gnu@15.3.2': optional: true - '@next/swc-linux-x64-musl@15.2.1': + '@next/swc-linux-x64-musl@15.3.2': optional: true - '@next/swc-win32-arm64-msvc@15.2.1': + '@next/swc-win32-arm64-msvc@15.3.2': optional: true - '@next/swc-win32-x64-msvc@15.2.1': + '@next/swc-win32-x64-msvc@15.3.2': optional: true '@nodelib/fs.scandir@2.1.5': @@ -4336,125 +4712,205 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@petamoriken/float16@3.9.1': {} + '@petamoriken/float16@3.9.2': {} '@pkgjs/parseargs@0.11.0': optional: true - '@polka/url@1.0.0-next.28': {} + '@polka/url@1.0.0-next.29': {} - '@prisma/client@6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2)': - optionalDependencies: - prisma: 6.4.1(typescript@5.8.2) - typescript: 5.8.2 + '@rollup/rollup-android-arm-eabi@4.41.0': optional: true - '@prisma/debug@6.4.1': + '@rollup/rollup-android-arm64@4.41.0': optional: true - '@prisma/engines-version@6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d': + '@rollup/rollup-darwin-arm64@4.41.0': optional: true - '@prisma/engines@6.4.1': - dependencies: - '@prisma/debug': 6.4.1 - '@prisma/engines-version': 6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d - '@prisma/fetch-engine': 6.4.1 - '@prisma/get-platform': 6.4.1 + '@rollup/rollup-darwin-x64@4.41.0': optional: true - '@prisma/fetch-engine@6.4.1': - dependencies: - '@prisma/debug': 6.4.1 - '@prisma/engines-version': 6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d - '@prisma/get-platform': 6.4.1 + '@rollup/rollup-freebsd-arm64@4.41.0': optional: true - '@prisma/get-platform@6.4.1': - dependencies: - '@prisma/debug': 6.4.1 + '@rollup/rollup-freebsd-x64@4.41.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.41.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.41.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.41.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': optional: true - '@rollup/rollup-android-arm-eabi@4.35.0': + '@rollup/rollup-linux-riscv64-gnu@4.41.0': optional: true - '@rollup/rollup-android-arm64@4.35.0': + '@rollup/rollup-linux-riscv64-musl@4.41.0': optional: true - '@rollup/rollup-darwin-arm64@4.35.0': + '@rollup/rollup-linux-s390x-gnu@4.41.0': optional: true - '@rollup/rollup-darwin-x64@4.35.0': + '@rollup/rollup-linux-x64-gnu@4.41.0': optional: true - '@rollup/rollup-freebsd-arm64@4.35.0': + '@rollup/rollup-linux-x64-musl@4.41.0': optional: true - '@rollup/rollup-freebsd-x64@4.35.0': + '@rollup/rollup-win32-arm64-msvc@4.41.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.35.0': + '@rollup/rollup-win32-ia32-msvc@4.41.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.35.0': + '@rollup/rollup-win32-x64-msvc@4.41.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.35.0': + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@t3-oss/env-core@0.12.0(typescript@5.8.3)(zod@3.24.4)': + optionalDependencies: + typescript: 5.8.3 + zod: 3.24.4 + + '@t3-oss/env-nextjs@0.12.0(typescript@5.8.3)(zod@3.24.4)': + dependencies: + '@t3-oss/env-core': 0.12.0(typescript@5.8.3)(zod@3.24.4) + optionalDependencies: + typescript: 5.8.3 + zod: 3.24.4 + + '@tailwindcss/node@4.1.7': + dependencies: + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.7 + + '@tailwindcss/oxide-android-arm64@4.1.7': optional: true - '@rollup/rollup-linux-arm64-musl@4.35.0': + '@tailwindcss/oxide-darwin-arm64@4.1.7': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.35.0': + '@tailwindcss/oxide-darwin-x64@4.1.7': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': + '@tailwindcss/oxide-freebsd-x64@4.1.7': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.35.0': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': optional: true - '@rollup/rollup-linux-s390x-gnu@4.35.0': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': optional: true - '@rollup/rollup-linux-x64-gnu@4.35.0': + '@tailwindcss/oxide-linux-arm64-musl@4.1.7': optional: true - '@rollup/rollup-linux-x64-musl@4.35.0': + '@tailwindcss/oxide-linux-x64-gnu@4.1.7': optional: true - '@rollup/rollup-win32-arm64-msvc@4.35.0': + '@tailwindcss/oxide-linux-x64-musl@4.1.7': optional: true - '@rollup/rollup-win32-ia32-msvc@4.35.0': + '@tailwindcss/oxide-wasm32-wasi@4.1.7': optional: true - '@rollup/rollup-win32-x64-msvc@4.35.0': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': optional: true - '@sec-ant/readable-stream@0.4.1': {} + '@tailwindcss/oxide-win32-x64-msvc@4.1.7': + optional: true - '@sindresorhus/merge-streams@4.0.0': {} + '@tailwindcss/oxide@4.1.7': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.7 + '@tailwindcss/oxide-darwin-arm64': 4.1.7 + '@tailwindcss/oxide-darwin-x64': 4.1.7 + '@tailwindcss/oxide-freebsd-x64': 4.1.7 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.7 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.7 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.7 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.7 + '@tailwindcss/oxide-linux-x64-musl': 4.1.7 + '@tailwindcss/oxide-wasm32-wasi': 4.1.7 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.7 + + '@tailwindcss/postcss@4.1.7': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.7 + '@tailwindcss/oxide': 4.1.7 + postcss: 8.5.3 + tailwindcss: 4.1.7 - '@swc/counter@0.1.3': {} + '@tanstack/query-core@5.76.0': {} - '@swc/helpers@0.5.15': + '@tanstack/react-query@5.76.1(react@19.1.0)': dependencies: - tslib: 2.8.1 + '@tanstack/query-core': 5.76.0 + react: 19.1.0 '@thaitype/ioctopus@2.1.1': {} - '@types/estree@1.0.6': {} + '@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3)': + dependencies: + '@trpc/server': 11.1.2(typescript@5.8.3) + typescript: 5.8.3 + + '@trpc/react-query@11.1.2(@tanstack/react-query@5.76.1(react@19.1.0))(@trpc/client@11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + dependencies: + '@tanstack/react-query': 5.76.1(react@19.1.0) + '@trpc/client': 11.1.2(@trpc/server@11.1.2(typescript@5.8.3))(typescript@5.8.3) + '@trpc/server': 11.1.2(typescript@5.8.3) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + typescript: 5.8.3 + + '@trpc/server@11.1.2(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@types/estree@1.0.7': {} '@types/json-schema@7.0.15': {} - '@types/node@20.17.24': + '@types/node@20.17.47': dependencies: undici-types: 6.19.8 - '@types/node@22.13.11': + '@types/node@22.15.18': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 '@types/react-dom@19.0.4(@types/react@19.0.10)': dependencies: @@ -4464,91 +4920,97 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/ws@8.18.0': + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@types/ws@8.18.1': dependencies: - '@types/node': 22.13.11 + '@types/node': 20.17.47 - '@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)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/type-utils': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.0 - eslint: 9.22.0 + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + eslint: 9.27.0(jiti@2.4.2) graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.4 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.8.2) - typescript: 5.8.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.0(eslint@9.22.0)(typescript@5.8.2)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.0 - debug: 4.4.0 - eslint: 9.22.0 - typescript: 5.8.2 + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.26.0': + '@typescript-eslint/scope-manager@8.32.1': dependencies: - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@8.26.0(eslint@9.22.0)(typescript@5.8.2)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - debug: 4.4.0 - eslint: 9.22.0 - ts-api-utils: 2.0.1(typescript@5.8.2) - typescript: 5.8.2 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.27.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.26.0': {} + '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.2)': + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/visitor-keys': 8.26.0 - debug: 4.4.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.8.2) - typescript: 5.8.2 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.0(eslint@9.22.0)(typescript@5.8.2)': + '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) - eslint: 9.22.0 - typescript: 5.8.2 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.26.0': + '@typescript-eslint/visitor-keys@8.32.1': dependencies: - '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.0 - '@vitest/coverage-istanbul@3.0.9(vitest@3.0.9)': + '@vitest/coverage-istanbul@3.1.3(vitest@3.1.3)': dependencies: '@istanbuljs/schema': 0.1.3 - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 @@ -4557,54 +5019,58 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) + vitest: 3.1.3(@types/node@22.15.18)(@vitest/ui@3.0.9)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4) transitivePeerDependencies: - supports-color - '@vitest/expect@3.0.9': + '@vitest/expect@3.1.3': dependencies: - '@vitest/spy': 3.0.9 - '@vitest/utils': 3.0.9 + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.9(vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4))': dependencies: - '@vitest/spy': 3.0.9 + '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4) '@vitest/pretty-format@3.0.9': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.9': + '@vitest/pretty-format@3.1.3': dependencies: - '@vitest/utils': 3.0.9 + tinyrainbow: 2.0.0 + + '@vitest/runner@3.1.3': + dependencies: + '@vitest/utils': 3.1.3 pathe: 2.0.3 - '@vitest/snapshot@3.0.9': + '@vitest/snapshot@3.1.3': dependencies: - '@vitest/pretty-format': 3.0.9 + '@vitest/pretty-format': 3.1.3 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.0.9': + '@vitest/spy@3.1.3': dependencies: tinyspy: 3.0.2 - '@vitest/ui@3.0.9(vitest@3.0.9)': + '@vitest/ui@3.0.9(vitest@3.1.3)': dependencies: '@vitest/utils': 3.0.9 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.1 - tinyglobby: 0.2.12 + tinyglobby: 0.2.13 tinyrainbow: 2.0.0 - vitest: 3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1) + vitest: 3.1.3(@types/node@22.15.18)(@vitest/ui@3.0.9)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4) '@vitest/utils@3.0.9': dependencies: @@ -4612,6 +5078,12 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 + '@vitest/utils@3.1.3': + dependencies: + '@vitest/pretty-format': 3.1.3 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -4636,12 +5108,18 @@ snapshots: ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 ansi-styles@6.2.1: {} + ansis@4.0.0: {} + append-transform@2.0.0: dependencies: default-require-extensions: 3.0.1 @@ -4713,8 +5191,6 @@ snapshots: async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -4734,12 +5210,14 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001702 - electron-to-chromium: 1.5.123 + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.155 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.5) + + bson@6.10.3: {} buffer-from@1.1.2: {} @@ -4777,7 +5255,7 @@ snapshots: camelcase@5.3.1: {} - caniuse-lite@1.0.30001702: {} + caniuse-lite@1.0.30001718: {} chai@5.2.0: dependencies: @@ -4787,6 +5265,12 @@ snapshots: loupe: 3.1.3 pathval: 2.0.0 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -4794,6 +5278,8 @@ snapshots: check-error@2.1.1: {} + chownr@3.0.0: {} + clean-stack@2.2.0: {} client-only@0.0.1: {} @@ -4804,10 +5290,16 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + 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: @@ -4822,10 +5314,6 @@ snapshots: color-string: 1.9.1 optional: true - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - commondir@1.0.1: {} concat-map@0.0.1: {} @@ -4834,15 +5322,27 @@ snapshots: convert-source-map@2.0.0: {} + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - cssstyle@4.3.0: + cssstyle@4.3.1: dependencies: - '@asamuzakjp/css-color': 3.1.1 + '@asamuzakjp/css-color': 3.1.7 rrweb-cssom: 0.8.0 csstype@3.1.3: {} @@ -4872,7 +5372,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 @@ -4900,12 +5400,9 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - detect-libc@2.0.2: {} - detect-libc@2.0.3: - optional: true + detect-libc@2.0.4: {} doctrine@2.1.0: dependencies: @@ -4913,25 +5410,23 @@ snapshots: dotenv@16.0.3: {} - dotenv@16.4.7: {} + dotenv@16.5.0: {} - drizzle-kit@0.30.5: + drizzle-kit@0.30.6: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) - gel: 2.0.1 + gel: 2.1.0 transitivePeerDependencies: - supports-color - drizzle-orm@0.40.0(@libsql/client@0.14.0)(@prisma/client@6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2))(gel@2.0.1)(postgres@3.4.5)(prisma@6.4.1(typescript@5.8.2)): + drizzle-orm@0.40.1(@libsql/client@0.14.0)(gel@2.1.0)(postgres@3.4.5): optionalDependencies: '@libsql/client': 0.14.0 - '@prisma/client': 6.4.1(prisma@6.4.1(typescript@5.8.2))(typescript@5.8.2) - gel: 2.0.1 + gel: 2.1.0 postgres: 3.4.5 - prisma: 6.4.1(typescript@5.8.2) dunder-proto@1.0.1: dependencies: @@ -4941,16 +5436,25 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.123: {} + electron-to-chromium@1.5.155: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - entities@4.5.0: {} + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@6.0.0: {} env-paths@3.0.0: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + es-abstract@1.23.9: dependencies: array-buffer-byte-length: 1.0.2 @@ -5003,7 +5507,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} @@ -5028,7 +5532,7 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: dependencies: @@ -5055,19 +5559,11 @@ snapshots: esbuild-register@3.6.0(esbuild@0.19.12): dependencies: - debug: 4.4.0 + debug: 4.4.1 esbuild: 0.19.12 transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.25.1): - dependencies: - debug: 4.4.0 - esbuild: 0.25.1 - transitivePeerDependencies: - - supports-color - optional: true - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -5119,77 +5615,51 @@ snapshots: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - esbuild@0.23.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 - optional: true - - esbuild@0.25.1: + esbuild@0.25.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.1(eslint@9.22.0): + eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)): dependencies: - eslint: 9.22.0 + eslint: 9.27.0(jiti@2.4.2) eslint-plugin-only-warn@1.1.0: {} - eslint-plugin-react-hooks@5.2.0(eslint@9.22.0): + eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)): dependencies: - eslint: 9.22.0 + eslint: 9.27.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.22.0): + eslint-plugin-react@7.37.5(eslint@9.27.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -5197,12 +5667,12 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.22.0 + eslint: 9.27.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -5211,11 +5681,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.4.4(eslint@9.22.0)(turbo@2.4.4): + eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3): dependencies: dotenv: 16.0.3 - eslint: 9.22.0 - turbo: 2.4.4 + eslint: 9.27.0(jiti@2.4.2) + turbo: 2.5.3 eslint-scope@8.3.0: dependencies: @@ -5226,25 +5696,25 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.22.0: + eslint@9.27.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/config-helpers': 0.1.0 - '@eslint/core': 0.12.0 - '@eslint/eslintrc': 3.3.0 - '@eslint/js': 9.22.0 - '@eslint/plugin-kit': 0.2.7 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.27.0 + '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.6 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -5263,6 +5733,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -5286,17 +5758,17 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 esutils@2.0.3: {} - execa@9.5.2: + execa@9.5.3: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 figures: 6.1.0 get-stream: 9.0.1 - human-signals: 8.0.0 + human-signals: 8.0.1 is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 6.0.0 @@ -5305,7 +5777,7 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - expect-type@1.2.0: {} + expect-type@1.2.1: {} fast-deep-equal@3.1.3: {} @@ -5333,7 +5805,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.3(picomatch@4.0.2): + fdir@6.4.4(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -5393,13 +5865,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - 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 - formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -5424,12 +5889,12 @@ snapshots: functions-have-names@1.2.3: {} - gel@2.0.1: + gel@2.1.0: dependencies: - '@petamoriken/float16': 3.9.1 - debug: 4.4.0 + '@petamoriken/float16': 3.9.2 + debug: 4.4.1 env-paths: 3.0.0 - semver: 7.7.1 + semver: 7.7.2 shell-quote: 1.8.2 which: 4.0.0 transitivePeerDependencies: @@ -5491,7 +5956,7 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.1: + glob@11.0.2: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.0 @@ -5513,13 +5978,17 @@ snapshots: globals@14.0.0: {} - globals@16.0.0: {} + globals@16.1.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 + globalyzer@0.1.0: {} + + globrex@0.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -5528,6 +5997,8 @@ snapshots: has-bigints@1.1.0: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -5553,6 +6024,8 @@ snapshots: dependencies: function-bind: 1.1.2 + hosted-git-info@2.8.9: {} + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -5562,18 +6035,20 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color - human-signals@8.0.0: {} + human-signals@8.0.1: {} + + husky@9.1.7: {} iconv-lite@0.6.3: dependencies: @@ -5581,6 +6056,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.4: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -5609,6 +6086,8 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + is-arrayish@0.2.1: {} + is-arrayish@0.3.2: optional: true @@ -5708,7 +6187,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-typedarray@1.0.0: {} @@ -5725,6 +6204,8 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + is-what@4.1.16: {} + is-windows@1.0.2: {} isarray@2.0.5: {} @@ -5741,11 +6222,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.10 - '@babel/parser': 7.26.10 + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -5766,7 +6247,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -5775,7 +6256,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -5804,6 +6285,8 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 + jiti@2.4.2: {} + js-base64@3.7.7: {} js-tokens@4.0.0: {} @@ -5817,18 +6300,17 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@26.0.0: + jsdom@26.1.0: dependencies: - cssstyle: 4.3.0 + cssstyle: 4.3.1 data-urls: 5.0.0 decimal.js: 10.5.0 - form-data: 4.0.2 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.19 - parse5: 7.2.1 + nwsapi: 2.2.20 + parse5: 7.3.0 rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -5838,7 +6320,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.18.1 + ws: 8.18.2 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -5849,6 +6331,8 @@ snapshots: json-buffer@3.0.1: {} + json-parse-better-errors@1.0.2: {} + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -5862,6 +6346,8 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + kareem@2.6.3: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -5884,6 +6370,58 @@ snapshots: '@libsql/linux-x64-musl': 0.4.7 '@libsql/win32-x64-msvc': 0.4.7 + lightningcss-darwin-arm64@1.30.1: + optional: true + + lightningcss-darwin-x64@1.30.1: + optional: true + + lightningcss-freebsd-x64@1.30.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true + + lightningcss-linux-arm64-gnu@1.30.1: + optional: true + + lightningcss-linux-arm64-musl@1.30.1: + optional: true + + lightningcss-linux-x64-gnu@1.30.1: + optional: true + + lightningcss-linux-x64-musl@1.30.1: + optional: true + + lightningcss-win32-arm64-msvc@1.30.1: + optional: true + + lightningcss-win32-x64-msvc@1.30.1: + optional: true + + lightningcss@1.30.1: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -5904,7 +6442,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.0.2: {} + lru-cache@11.1.0: {} lru-cache@5.1.1: dependencies: @@ -5916,8 +6454,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 source-map-js: 1.2.1 make-dir@3.1.0: @@ -5926,10 +6464,14 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 math-intrinsics@1.1.0: {} + memory-pager@1.5.0: {} + + memorystream@0.3.1: {} + merge2@1.4.1: {} micromatch@4.0.8: @@ -5937,12 +6479,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 @@ -5957,39 +6493,85 @@ snapshots: minipass@7.1.2: {} + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@3.0.1: {} + + mongodb-connection-string-url@3.0.2: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 14.2.0 + + mongodb@6.16.0: + dependencies: + '@mongodb-js/saslprep': 1.2.2 + bson: 6.10.3 + mongodb-connection-string-url: 3.0.2 + + mongoose@8.15.0: + dependencies: + bson: 6.10.3 + kareem: 2.6.3 + mongodb: 6.16.0 + mpath: 0.9.0 + mquery: 5.0.0 + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + mpath@0.9.0: {} + + mquery@5.0.0: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + mrmime@2.0.1: {} ms@2.1.3: {} - nanoid@3.3.9: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} - next@15.2.1(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.3.2(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.2.1 + '@next/env': 15.3.2 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001702 + caniuse-lite: 1.0.30001718 postcss: 8.4.31 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.1)(react@19.1.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 + '@next/swc-darwin-arm64': 15.3.2 + '@next/swc-darwin-x64': 15.3.2 + '@next/swc-linux-arm64-gnu': 15.3.2 + '@next/swc-linux-arm64-musl': 15.3.2 + '@next/swc-linux-x64-gnu': 15.3.2 + '@next/swc-linux-x64-musl': 15.3.2 + '@next/swc-win32-arm64-msvc': 15.3.2 + '@next/swc-win32-x64-msvc': 15.3.2 + sharp: 0.34.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + nice-try@1.0.5: {} + node-domexception@1.0.0: {} node-fetch@3.3.2: @@ -6004,12 +6586,31 @@ snapshots: node-releases@2.0.19: {} + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.10 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + npm-run-all@4.1.5: + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.6 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.2 + string.prototype.padend: 3.1.6 + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 unicorn-magic: 0.3.0 - nwsapi@2.2.19: {} + nwsapi@2.2.20: {} nyc@17.1.0: dependencies: @@ -6058,9 +6659,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -6132,16 +6734,23 @@ snapshots: dependencies: callsites: 3.1.0 + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + parse-ms@4.0.0: {} - parse5@7.2.1: + parse5@7.3.0: dependencies: - entities: 4.5.0 + entities: 6.0.0 path-exists@4.0.0: {} path-is-absolute@1.0.1: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -6155,9 +6764,13 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.0.2 + lru-cache: 11.1.0 minipass: 7.1.2 + path-type@3.0.0: + dependencies: + pify: 3.0.0 + pathe@2.0.3: {} pathval@2.0.0: {} @@ -6168,6 +6781,10 @@ snapshots: picomatch@4.0.2: {} + pidtree@0.3.1: {} + + pify@3.0.0: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -6176,13 +6793,13 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 postcss@8.5.3: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -6190,24 +6807,16 @@ snapshots: prelude-ls@1.2.1: {} + prettier-plugin-tailwindcss@0.6.11(prettier@3.5.3): + dependencies: + prettier: 3.5.3 + prettier@3.5.3: {} pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 - prisma@6.4.1(typescript@5.8.2): - dependencies: - '@prisma/engines': 6.4.1 - esbuild: 0.25.1 - esbuild-register: 3.6.0(esbuild@0.25.1) - optionalDependencies: - fsevents: 2.3.3 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - optional: true - process-on-spawn@1.1.0: dependencies: fromentries: 1.3.2 @@ -6224,14 +6833,20 @@ snapshots: queue-microtask@1.2.3: {} - react-dom@19.0.0(react@19.0.0): + react-dom@19.1.0(react@19.1.0): dependencies: - react: 19.0.0 - scheduler: 0.25.0 + react: 19.1.0 + scheduler: 0.26.0 react-is@16.13.1: {} - react@19.0.0: {} + react@19.1.0: {} + + read-pkg@3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 reflect.getprototypeof@1.0.10: dependencies: @@ -6267,6 +6882,12 @@ snapshots: resolve-pkg-maps@1.0.0: {} + 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: dependencies: is-core-module: 2.16.1 @@ -6279,29 +6900,30 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.35.0: + rollup@4.41.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.35.0 - '@rollup/rollup-android-arm64': 4.35.0 - '@rollup/rollup-darwin-arm64': 4.35.0 - '@rollup/rollup-darwin-x64': 4.35.0 - '@rollup/rollup-freebsd-arm64': 4.35.0 - '@rollup/rollup-freebsd-x64': 4.35.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.35.0 - '@rollup/rollup-linux-arm-musleabihf': 4.35.0 - '@rollup/rollup-linux-arm64-gnu': 4.35.0 - '@rollup/rollup-linux-arm64-musl': 4.35.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.35.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0 - '@rollup/rollup-linux-riscv64-gnu': 4.35.0 - '@rollup/rollup-linux-s390x-gnu': 4.35.0 - '@rollup/rollup-linux-x64-gnu': 4.35.0 - '@rollup/rollup-linux-x64-musl': 4.35.0 - '@rollup/rollup-win32-arm64-msvc': 4.35.0 - '@rollup/rollup-win32-ia32-msvc': 4.35.0 - '@rollup/rollup-win32-x64-msvc': 4.35.0 + '@rollup/rollup-android-arm-eabi': 4.41.0 + '@rollup/rollup-android-arm64': 4.41.0 + '@rollup/rollup-darwin-arm64': 4.41.0 + '@rollup/rollup-darwin-x64': 4.41.0 + '@rollup/rollup-freebsd-arm64': 4.41.0 + '@rollup/rollup-freebsd-x64': 4.41.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.41.0 + '@rollup/rollup-linux-arm-musleabihf': 4.41.0 + '@rollup/rollup-linux-arm64-gnu': 4.41.0 + '@rollup/rollup-linux-arm64-musl': 4.41.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.41.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-gnu': 4.41.0 + '@rollup/rollup-linux-riscv64-musl': 4.41.0 + '@rollup/rollup-linux-s390x-gnu': 4.41.0 + '@rollup/rollup-linux-x64-gnu': 4.41.0 + '@rollup/rollup-linux-x64-musl': 4.41.0 + '@rollup/rollup-win32-arm64-msvc': 4.41.0 + '@rollup/rollup-win32-ia32-msvc': 4.41.0 + '@rollup/rollup-win32-x64-msvc': 4.41.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -6335,11 +6957,15 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.25.0: {} + scheduler@0.26.0: {} + + semver@5.7.2: {} semver@6.3.1: {} - semver@7.7.1: {} + semver@7.7.2: {} + + server-only@0.0.1: {} set-blocking@2.0.0: {} @@ -6365,37 +6991,44 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - sharp@0.33.5: + sharp@0.34.1: dependencies: color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 + detect-libc: 2.0.4 + semver: 7.7.2 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 + '@img/sharp-darwin-arm64': 0.34.1 + '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.1 + '@img/sharp-linux-arm64': 0.34.1 + '@img/sharp-linux-s390x': 0.34.1 + '@img/sharp-linux-x64': 0.34.1 + '@img/sharp-linuxmusl-arm64': 0.34.1 + '@img/sharp-linuxmusl-x64': 0.34.1 + '@img/sharp-wasm32': 0.34.1 + '@img/sharp-win32-ia32': 0.34.1 + '@img/sharp-win32-x64': 0.34.1 + optional: true + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 + shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} shell-quote@1.8.2: {} @@ -6428,6 +7061,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + sift@17.1.3: {} + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -6441,7 +7076,7 @@ snapshots: sirv@3.0.1: dependencies: - '@polka/url': 1.0.0-next.28 + '@polka/url': 1.0.0-next.29 mrmime: 2.0.1 totalist: 3.0.1 @@ -6454,6 +7089,10 @@ snapshots: source-map@0.6.1: {} + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + spawn-wrap@2.0.0: dependencies: foreground-child: 2.0.0 @@ -6463,11 +7102,25 @@ snapshots: signal-exit: 3.0.7 which: 2.0.2 + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} - std-env@3.8.1: {} + std-env@3.9.0: {} streamsearch@1.1.0: {} @@ -6499,6 +7152,13 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.1.0 + string.prototype.padend@3.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 @@ -6535,18 +7195,28 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + strip-bom@4.0.0: {} strip-final-newline@4.0.0: {} strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0): + styled-jsx@5.1.6(@babel/core@7.27.1)(react@19.1.0): dependencies: client-only: 0.0.1 - react: 19.0.0 + react: 19.1.0 optionalDependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 + + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 supports-color@7.2.0: dependencies: @@ -6556,6 +7226,19 @@ snapshots: symbol-tree@3.2.4: {} + tailwindcss@4.1.7: {} + + tapable@2.2.1: {} + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -6568,13 +7251,18 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + tinybench@2.9.0: {} tinyexec@0.3.2: {} - tinyglobby@0.2.12: + tinyglobby@0.2.13: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.0.2: {} @@ -6583,11 +7271,11 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.85: {} + tldts-core@6.1.86: {} - tldts@6.1.85: + tldts@6.1.86: dependencies: - tldts-core: 6.1.85 + tldts-core: 6.1.86 to-regex-range@5.0.1: dependencies: @@ -6597,52 +7285,51 @@ snapshots: tough-cookie@5.1.2: dependencies: - tldts: 6.1.85 + tldts: 6.1.86 - tr46@5.1.0: + tr46@5.1.1: dependencies: punycode: 2.3.1 - ts-api-utils@2.0.1(typescript@5.8.2): + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - typescript: 5.8.2 + typescript: 5.8.3 tslib@2.8.1: {} - tsx@4.19.1: + tsx@4.19.4: dependencies: - esbuild: 0.23.1 + esbuild: 0.25.4 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 - optional: true - turbo-darwin-64@2.4.4: + turbo-darwin-64@2.5.3: optional: true - turbo-darwin-arm64@2.4.4: + turbo-darwin-arm64@2.5.3: optional: true - turbo-linux-64@2.4.4: + turbo-linux-64@2.5.3: optional: true - turbo-linux-arm64@2.4.4: + turbo-linux-arm64@2.5.3: optional: true - turbo-windows-64@2.4.4: + turbo-windows-64@2.5.3: optional: true - turbo-windows-arm64@2.4.4: + turbo-windows-arm64@2.5.3: optional: true - turbo@2.4.4: + turbo@2.5.3: optionalDependencies: - turbo-darwin-64: 2.4.4 - turbo-darwin-arm64: 2.4.4 - turbo-linux-64: 2.4.4 - turbo-linux-arm64: 2.4.4 - turbo-windows-64: 2.4.4 - turbo-windows-arm64: 2.4.4 + turbo-darwin-64: 2.5.3 + turbo-darwin-arm64: 2.5.3 + turbo-linux-64: 2.5.3 + turbo-linux-arm64: 2.5.3 + turbo-windows-64: 2.5.3 + turbo-windows-arm64: 2.5.3 type-check@0.4.0: dependencies: @@ -6650,6 +7337,8 @@ snapshots: type-fest@0.8.1: {} + type-fest@4.41.0: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -6687,17 +7376,17 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript-eslint@8.26.0(eslint@9.22.0)(typescript@5.8.2): + typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@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) - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0)(typescript@5.8.2) - eslint: 9.22.0 - typescript: 5.8.2 + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.27.0(jiti@2.4.2) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - typescript@5.8.2: {} + typescript@5.8.3: {} unbox-primitive@1.1.0: dependencies: @@ -6708,13 +7397,13 @@ snapshots: undici-types@6.19.8: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} unicorn-magic@0.3.0: {} - update-browserslist-db@1.1.3(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -6724,13 +7413,18 @@ snapshots: uuid@8.3.2: {} - vite-node@3.0.9(@types/node@22.13.11)(tsx@4.19.1): + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4): dependencies: cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 + debug: 4.4.1 + es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4) transitivePeerDependencies: - '@types/node' - jiti @@ -6745,42 +7439,48 @@ snapshots: - tsx - yaml - vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1): + vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4): dependencies: - esbuild: 0.25.1 + esbuild: 0.25.4 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 postcss: 8.5.3 - rollup: 4.35.0 + rollup: 4.41.0 + tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.13.11 + '@types/node': 22.15.18 fsevents: 2.3.3 - tsx: 4.19.1 - - vitest@3.0.9(@types/node@22.13.11)(@vitest/ui@3.0.9)(jsdom@26.0.0)(tsx@4.19.1): - dependencies: - '@vitest/expect': 3.0.9 - '@vitest/mocker': 3.0.9(vite@6.2.2(@types/node@22.13.11)(tsx@4.19.1)) - '@vitest/pretty-format': 3.0.9 - '@vitest/runner': 3.0.9 - '@vitest/snapshot': 3.0.9 - '@vitest/spy': 3.0.9 - '@vitest/utils': 3.0.9 + jiti: 2.4.2 + lightningcss: 1.30.1 + tsx: 4.19.4 + + vitest@3.1.3(@types/node@22.15.18)(@vitest/ui@3.0.9)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4): + dependencies: + '@vitest/expect': 3.1.3 + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)) + '@vitest/pretty-format': 3.1.3 + '@vitest/runner': 3.1.3 + '@vitest/snapshot': 3.1.3 + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.0 + debug: 4.4.1 + expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 - std-env: 3.8.1 + std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 + tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.2(@types/node@22.13.11)(tsx@4.19.1) - vite-node: 3.0.9(@types/node@22.13.11)(tsx@4.19.1) + vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4) + vite-node: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.13.11 - '@vitest/ui': 3.0.9(vitest@3.0.9) - jsdom: 26.0.0 + '@types/node': 22.15.18 + '@vitest/ui': 3.0.9(vitest@3.1.3) + jsdom: 26.1.0 transitivePeerDependencies: - jiti - less @@ -6811,7 +7511,7 @@ snapshots: whatwg-url@14.2.0: dependencies: - tr46: 5.1.0 + tr46: 5.1.1 webidl-conversions: 7.0.0 which-boxed-primitive@1.1.1: @@ -6836,7 +7536,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -6847,15 +7547,20 @@ snapshots: which-module@2.0.1: {} - which-typed-array@1.1.18: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.4 for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -6898,7 +7603,7 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - ws@8.18.1: {} + ws@8.18.2: {} xml-name-validator@5.0.0: {} @@ -6908,6 +7613,8 @@ snapshots: yallist@3.1.1: {} + yallist@5.0.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -6930,3 +7637,5 @@ snapshots: yocto-queue@0.1.0: {} yoctocolors@2.1.1: {} + + zod@3.24.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bc63c81..98397b6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: + - "di" - "apps/*" - "core/*" - "packages/*" diff --git a/tools/db/package.json b/tools/db/package.json index 1e5314e..ee6462c 100644 --- a/tools/db/package.json +++ b/tools/db/package.json @@ -13,13 +13,13 @@ "check-types": "mono check-types" }, "dependencies": { - "dotenv": "^16.4.7", - "@acme/database-drizzle": "workspace:*" + "@acme/database-drizzle": "workspace:*", + "dotenv": "^16.5.0" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/tools/mono/package.json b/tools/mono/package.json index 1a5b5d3..497dab4 100644 --- a/tools/mono/package.json +++ b/tools/mono/package.json @@ -15,11 +15,12 @@ "check-types": "tsc --noEmit" }, "dependencies": { - "execa": "^9.5.2" + "ansis": "^4.0.0", + "execa": "^9.5.3" }, "devDependencies": { "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@types/node": "^22.13.9" + "@types/node": "^22.15.18" } -} \ No newline at end of file +} diff --git a/tools/mono/src/cli.ts b/tools/mono/src/cli.ts index e5da508..d0dac2a 100644 --- a/tools/mono/src/cli.ts +++ b/tools/mono/src/cli.ts @@ -9,6 +9,7 @@ const scripts: MonoScripts = { 'build': 'esbuild ./src/index.ts --bundle --minify --platform=node --outfile=dist/index.js', 'dev': 'tsx watch ./src/index.ts', 'start': 'tsx ./src/index.ts', + 'check-types:watch': 'tsc --noEmit --watch', 'check-types': 'tsc --noEmit', }; diff --git a/tools/mono/src/libs.ts b/tools/mono/src/libs.ts index a4c03cf..b8ece2d 100644 --- a/tools/mono/src/libs.ts +++ b/tools/mono/src/libs.ts @@ -1,4 +1,5 @@ import { execa } from 'execa'; +import c from 'ansis'; import { fileURLToPath } from 'node:url'; import path from 'node:path'; @@ -27,8 +28,10 @@ export async function runCommand( const subprocess = execa({ env: { FORCE_COLOR: 'true' }, stdout: 'pipe', ...execaOptions })`${[...commands]}`; subprocess.stdout.pipe(process.stdout); subprocess.stderr.pipe(process.stderr); - await subprocess.catch(error => { - console.error(error); + await subprocess.catch((error: unknown) => { + // Do nothing, we just want to catch the error + // and exit the process with a non-zero code + // Due to subprocess pipe the via stdout and stderr process.exit(1); }); } diff --git a/tools/template/package.json b/tools/template/package.json index cf71994..56f5b6c 100644 --- a/tools/template/package.json +++ b/tools/template/package.json @@ -16,9 +16,9 @@ "check-types": "mono check-types" }, "devDependencies": { - "@acme/mono": "workspace:*", "@acme/config-eslint": "workspace:*", "@acme/config-typescript": "workspace:*", - "@acme/config-vitest": "workspace:*" + "@acme/config-vitest": "workspace:*", + "@acme/mono": "workspace:*" } -} \ No newline at end of file +} diff --git a/turbo.json b/turbo.json index 676608e..adaf6fa 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,5 @@ { "$schema": "https://turbo.build/schema.json", - "ui": "tui", "tasks": { "build": { "dependsOn": ["^build"], @@ -45,6 +44,10 @@ "check-types": { "dependsOn": ["build-tools", "^check-types"] }, + "check-types:watch": { + "cache": false, + "persistent": true + }, "build-tools": { "dependsOn": ["@acme/config-vitest#build" , "@acme/mono#build"] },