diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 1e19f66b..758102ac 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -20,7 +20,7 @@ jobs:
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: 📥 Install pnpm
run: npm install -g pnpm
@@ -44,7 +44,7 @@ jobs:
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: 📥 Install pnpm
run: npm install -g pnpm
@@ -68,7 +68,7 @@ jobs:
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
- node-version: 18
+ node-version: 20
- name: 📥 Install pnpm
run: npm install -g pnpm
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 00000000..eaff8c8f
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,5 @@
+{
+ "recommendations": [
+ "pavittarx.moleculer-snippets"
+ ]
+}
diff --git a/README.md b/README.md
index c36528f5..3fb41c53 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# Welcome to moleculer-typescript-template 👋
-
-
+
+
[](https://twitter.com/jellydn)
> My Moleculer-based microservices project
@@ -18,7 +18,7 @@
## Prerequisites
-- node >= 18.17.x
+- node >= 20.0.0
## Init new project
@@ -36,6 +36,10 @@ npx degit jellydn/moleculer-typescript-template [PROJECT-NAME]
- ✨ [moleculer-zod-validator](https://github.com/TheAppleFreak/moleculer-zod-validator) - A validator for the Moleculer microservice framework to allow the use of [Zod](https://zod.dev/).
- 🔏 [asteasolutions/zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi#defining-schemas) - A library that generates OpenAPI (Swagger) docs from Zod schemas.
- 🪄 [hey-api/openapi-ts](https://github.com/hey-api/openapi-ts) - Turn your OpenAPI specification into a beautiful TypeScript client.
+- 🔐 **Enhanced Validation** - Shared validation utilities with Zod schemas for consistent parameter validation across all services.
+- 📝 **Comprehensive Documentation** - Auto-generated Swagger documentation with complete error handling (200, 422, 500 responses).
+- 🎯 **Type Safety** - Strong TypeScript typing throughout the application with proper service interfaces.
+- 📊 **Structured Responses** - Consistent JSON response format with `success`, `message`, and `data` fields.
## Install
@@ -51,7 +55,7 @@ cp .env.example .env
pnpm dev
```
-After starting, open the http://localhost:3000/ URL in your browser.
+After starting, open the URL in your browser.
On the welcome page you can test the generated services via API Gateway and check the nodes & services.

@@ -72,6 +76,17 @@ In the terminal, try the following commands:
This project uses [hygen](http://www.hygen.io/) to generate code templates, saving you time and ensuring consistency across your codebase.
+## Code Generation
+
+All generated templates include modern best practices:
+
+- ✅ **Automatic validation** with shared `validateParams` utility
+- ✅ **Complete Swagger documentation** with error responses
+- ✅ **Strong TypeScript typing** with proper service interfaces
+- ✅ **Structured JSON responses** with consistent format
+- ✅ **Validation hooks** for all actions
+- ✅ **Comprehensive logging** throughout the application
+
### Adding a New Service
To add a new service to your project, use the following command:
@@ -80,6 +95,14 @@ To add a new service to your project, use the following command:
pnpm generate:service [service-name]
```
+This generates a basic service with:
+
+- Two sample actions (`hello` and `welcome`)
+- Validation hooks with `validateParams` integration
+- Complete Swagger documentation
+- Strong TypeScript typing
+- Structured error handling
+
### Adding a New Action to a Service
To add a new action to an existing service, use the following command:
@@ -88,6 +111,13 @@ To add a new action to an existing service, use the following command:
pnpm generate:action [action-name] --service [service-name]
```
+Generated actions include:
+
+- Parameter validation with Zod schemas
+- Complete Swagger documentation with error codes
+- Structured JSON response format
+- TypeScript interfaces for parameters and responses
+
### Generating CRUD Services
To generate a service with Create, Read, Update, and Delete (CRUD) operations, use the following command:
@@ -96,6 +126,150 @@ To generate a service with Create, Read, Update, and Delete (CRUD) operations, u
pnpm generate:crud [service-name]
```
+This creates a complete CRUD service with:
+
+- **5 actions**: `create`, `list`, `view`, `update`, `delete`
+- **Pagination support** in list actions
+- **Validation hooks** in all actions
+- **Complete Swagger documentation** for all endpoints
+- **Structured responses** with success/error handling
+- **Authentication** and **authorization** ready
+
+### Generating Data Transfer Objects (DTOs)
+
+To generate Zod schemas with OpenAPI documentation, use:
+
+```sh
+pnpm generate:dto [dto-name]
+```
+
+This generates:
+
+- **Zod schemas** with OpenAPI annotations
+- **Automatic YAML generation** for Swagger integration
+- **Type-safe validation** for request/response data
+- **Reusable schemas** across services
+
+## Enhanced Template Features
+
+### 🔐 Automatic Parameter Validation
+
+All generated actions include automatic parameter validation using Zod schemas:
+
+```typescript
+// Generated validation hook in every action
+hooks: {
+ before(ctx) {
+ this.logger.info('Validating parameters for [action] action');
+ validateParams(ctx, yourSchema); // Automatically included
+ },
+}
+```
+
+### 📖 Complete Swagger Documentation
+
+Every generated action includes comprehensive Swagger documentation:
+
+- **Request/Response schemas** with examples
+- **Error response codes** (422 for validation, 500 for server errors)
+- **Parameter descriptions** and constraints
+- **Security requirements** for protected endpoints
+
+### 🎯 Type-Safe Development
+
+All templates generate strongly-typed TypeScript code:
+
+- **Service interfaces** with proper method signatures
+- **Context typing** for action parameters
+- **Response type definitions** for consistent returns
+- **Generic repository interfaces** for data access
+
+### 📊 Structured JSON Responses
+
+Consistent response format across all services:
+
+```json
+{
+ "success": true,
+ "message": "Operation completed successfully",
+ "data": {},
+ "pagination": {
+ "page": 1,
+ "limit": 10,
+ "total": 0
+ }
+}
+```
+
+## Architecture & Patterns
+
+This template implements several architectural patterns and best practices:
+
+### Shared Validation Utilities
+
+All services use a shared validation utility (`services/common/validation.utils.ts`) that provides:
+
+- **Consistent validation** across all services
+- **Zod schema integration** with Moleculer context
+- **Automatic error handling** with structured error responses
+- **TypeScript type safety** for validation parameters
+
+```typescript
+// Usage in any service action
+hooks: {
+ before(ctx) {
+ validateParams(ctx, yourZodSchema);
+ },
+}
+```
+
+### Structured Response Format
+
+All actions return a consistent JSON structure:
+
+```typescript
+// Success Response
+{
+ "success": true,
+ "message": "Operation completed successfully",
+ "data": { /* your data here */ }
+}
+
+// Error Response
+{
+ "error": "Parameters validation error!",
+ "code": "VALIDATION_ERROR"
+}
+```
+
+### Repository Pattern
+
+The template includes an example repository pattern implementation for data access:
+
+- **Interface-based design** for easy testing and swapping implementations
+- **Type-safe operations** with TypeScript
+- **Separation of concerns** between business logic and data access
+
+### Service Organization
+
+Services are organized with a clear structure:
+
+```text
+services/
+├── common/ # Shared utilities and interfaces
+│ ├── index.ts
+│ ├── validation.utils.ts
+│ └── repository.interface.ts
+├── dtos/ # Data Transfer Objects with Zod schemas
+│ ├── [name].dto.ts
+│ └── [name]-dto.swagger.yaml
+└── [service]/ # Individual service folders
+ ├── [service].service.ts
+ ├── [service].repository.ts
+ └── actions/ # Action implementations
+ └── [action].action.ts
+```
+
## API Documentation
This template also reads your [JSDoc-annotated](https://github.com/Surnet/swagger-jsdoc/blob/v6/docs/README.md) source code and generates an OpenAPI (Swagger) specification.
@@ -106,7 +280,7 @@ Run the following command to generate the Swagger documentation:
pnpm generate:swagger
```
-Open the http://localhost:3000/docs URL in your browser, you will see the Swagger UI as
+Open the URL in your browser, you will see the Swagger UI as

@@ -149,8 +323,8 @@ We use GitHub Actions for continuous integration and deployment. Anything that g
## Useful links
-- Moleculer website: https://moleculer.services/
-- Moleculer Documentation: https://moleculer.services/docs/0.14/
+- Moleculer website:
+- Moleculer Documentation:
## NPM scripts
@@ -162,6 +336,15 @@ We use GitHub Actions for continuous integration and deployment. Anything that g
- `pnpm dc:up`: Start the stack with Docker Compose
- `pnpm dc:down`: Stop the stack with Docker Compose
+### Code Generation Scripts
+
+- `pnpm generate:service [name]`: Generate a new basic service with validation and documentation
+- `pnpm generate:crud [name]`: Generate a complete CRUD service with all operations
+- `pnpm generate:action [name] --service [service]`: Add a new action to an existing service
+- `pnpm generate:dto [name]`: Generate Zod schemas with OpenAPI documentation
+- `pnpm generate:swagger`: Generate OpenAPI documentation from JSDoc comments
+- `pnpm generate:sdk`: Generate TypeScript client from OpenAPI specification
+
## Pre-commit hooks
This template uses [Pre-commit](https://pre-commit.com/) to run checks before you commit your code. This ensures that your code is formatted correctly and passes all tests before you push it to your repository.
@@ -180,7 +363,7 @@ pre-commit run --all-files
👤 **Dung Huynh**
-- Website: https://productsway.com/
+- Website:
- Twitter: [@jellydn](https://twitter.com/jellydn)
- Github: [@jellydn](https://github.com/jellydn)
diff --git a/_templates/action/new/hello.ejs.t b/_templates/action/new/hello.ejs.t
index 4dcf4ce5..06f2507d 100644
--- a/_templates/action/new/hello.ejs.t
+++ b/_templates/action/new/hello.ejs.t
@@ -2,14 +2,17 @@
to: services/<%= service %>/actions/<%= name %>.action.ts
---
import type { Context, ServiceActionsSchema } from "moleculer";
+import { validateParams } from "../../common";
/**
* The <%= name %> action.
*
* @swagger
- * /welcome:
+ * /api/<%= service %>/<%= name %>:
* get:
* summary: Returns a greeting and calculates the age in days.
+ * tags:
+ * - <%= service %>
* parameters:
* - in: query
* name: name
@@ -27,20 +30,43 @@ import type { Context, ServiceActionsSchema } from "moleculer";
* 200:
* description: A greeting message and the age in days.
* content:
- * text/plain:
+ * application/json:
* schema:
- * type: string
- * example: "Hello John, you are 10950 days old!"
+ * type: object
+ * properties:
+ * message:
+ * type: string
+ * example: "Hello John, you are 10950 days old!"
+ * success:
+ * type: boolean
+ * example: true
+ * 422:
+ * description: Validation error
+ * content:
+ * application/json:
+ * schema:
+ * type: object
+ * properties:
+ * error:
+ * type: string
+ * example: Parameters validation error!
*/
const <%= name %>Action: ServiceActionsSchema = {
rest: {
method: "GET",
- path: "/welcome",
+ path: "/<%= name %>",
},
params: {
name: "string",
age: "number",
},
+ hooks: {
+ before(ctx) {
+ this.logger.info('Validating parameters for <%= name %> action');
+ // Add your validation schema here
+ // validateParams(ctx, your<%= h.capitalize(name) %>Schema);
+ },
+ },
handler: <%= name %>Handler,
};
@@ -52,11 +78,14 @@ function <%= name %>Handler(
name: string;
age: number;
}>,
-): string {
+): { message: string; success: boolean } {
// Calculate the age in days
const ageInDays = ctx.params.age * 365;
- return `Hello ${ctx.params.name}, you are ${ageInDays} days old!`;
+ return {
+ message: `Hello ${ctx.params.name}, you are ${ageInDays} days old!`,
+ success: true,
+ };
}
export default <%= name %>Action;
diff --git a/_templates/dto/new/hello.ejs.t b/_templates/dto/new/hello.ejs.t
new file mode 100644
index 00000000..76c42ff4
--- /dev/null
+++ b/_templates/dto/new/hello.ejs.t
@@ -0,0 +1,80 @@
+---
+to: services/dtos/<%= name %>.dto.ts
+---
+import {
+ extendZodWithOpenApi,
+ OpenApiGeneratorV3,
+} from "@asteasolutions/zod-to-openapi";
+import { writeFileSync } from "node:fs";
+import { resolve } from "node:path";
+import yaml from "yaml";
+import { z } from "zod";
+
+extendZodWithOpenApi(z);
+
+// Define your <%= name %> schema here
+const <%= name %>RawSchema = {
+ name: z.string().min(1).max(100).openapi({
+ description: "<%= h.capitalize(name) %> name",
+ example: "Sample <%= name %>",
+ }),
+ description: z.string().min(1).max(500).openapi({
+ description: "<%= h.capitalize(name) %> description",
+ example: "This is a sample <%= name %>",
+ }),
+};
+
+// Write to same folder with the DTO file
+const outputDirectory = __dirname;
+
+export const <%= h.capitalize(name) %>Schema = z.object(<%= name %>RawSchema).openapi("<%= name %>DTO", {
+ description: "<%= h.capitalize(name) %> DTO",
+});
+
+export const <%= h.capitalize(name) %>ResponseSchema = z.object({
+ success: z.boolean().openapi({
+ description: "Operation success status",
+ example: true,
+ }),
+ message: z.string().openapi({
+ description: "Response message",
+ example: "<%= h.capitalize(name) %> operation completed successfully",
+ }),
+ data: <%= h.capitalize(name) %>Schema.optional().openapi({
+ description: "<%= h.capitalize(name) %> data",
+ }),
+}).openapi("<%= name %>ResponseDTO", {
+ description: "<%= h.capitalize(name) %> response DTO",
+});
+
+export const ErrorResponseSchema = z.object({
+ error: z.string().openapi({
+ description: "Error message",
+ example: "Parameters validation error!",
+ }),
+ code: z.string().optional().openapi({
+ description: "Error code",
+ example: "VALIDATION_ERROR",
+ }),
+}).openapi("errorResponseDTO", {
+ description: "Error response DTO",
+});
+
+const generator = new OpenApiGeneratorV3([
+ <%= h.capitalize(name) %>Schema,
+ <%= h.capitalize(name) %>ResponseSchema,
+ ErrorResponseSchema,
+]);
+const components = generator.generateComponents();
+
+// Write to YAML file
+try {
+ writeFileSync(
+ resolve(outputDirectory, "<%= name %>-dto.swagger.yaml"),
+ yaml.stringify(components)
+ );
+ console.log("✅ Successfully generated <%= name %>-dto.swagger.yaml");
+} catch (error) {
+ console.error("❌ Error writing <%= name %>-dto.swagger.yaml:", error);
+ throw error;
+}
diff --git a/_templates/service/crud/create.ejs.t b/_templates/service/crud/create.ejs.t
index 802a8def..19ac8446 100644
--- a/_templates/service/crud/create.ejs.t
+++ b/_templates/service/crud/create.ejs.t
@@ -3,6 +3,7 @@ to: services/<%= name %>/actions/create<%= h.capitalize(name) %>.action.ts
---
import type { Context, ServiceActionsSchema } from 'moleculer';
+import { validateParams } from '../../common';
/**
* Handler for the create action.
@@ -13,13 +14,14 @@ function createHandler(
}>,
) {
return {
- message: 'Created successfully',
+ success: true,
+ message: '<%= h.capitalize(name) %> created successfully',
data: ctx.params,
};
}
/**
- * The create project action.
+ * The create <%= name %> action.
*
* @swagger
* /api/<%= name %>:
@@ -38,13 +40,38 @@ function createHandler(
* properties:
* name:
* type: string
- * description: The name to greet.
- * age:
- * type: number
- * description: The age of the person to calculate the days.
+ * description: The name of the <%= name %>.
+ * description:
+ * type: string
+ * description: Description of the <%= name %>.
* responses:
- * 200:
+ * 201:
* description: <%= name %> created successfully.
+ * content:
+ * application/json:
+ * schema:
+ * type: object
+ * properties:
+ * success:
+ * type: boolean
+ * example: true
+ * message:
+ * type: string
+ * example: <%= h.capitalize(name) %> created successfully
+ * data:
+ * type: object
+ * 422:
+ * description: Validation error
+ * content:
+ * application/json:
+ * schema:
+ * type: object
+ * properties:
+ * error:
+ * type: string
+ * example: Parameters validation error!
+ * 500:
+ * description: Internal server error
*/
const create<%= h.capitalize(name) %>Action: ServiceActionsSchema = {
rest: {
@@ -56,6 +83,13 @@ const create<%= h.capitalize(name) %>Action: ServiceActionsSchema = {
params: {
<%= name %>: { type: "object" }
},
+ hooks: {
+ before(ctx) {
+ this.logger.info('Validating parameters for create<%= h.capitalize(name) %> action');
+ // Add your validation schema here
+ // validateParams(ctx, your<%= h.capitalize(name) %>Schema);
+ },
+ },
handler: createHandler,
};
diff --git a/_templates/service/crud/list.ejs.t b/_templates/service/crud/list.ejs.t
index 13129d93..1c4cbca7 100644
--- a/_templates/service/crud/list.ejs.t
+++ b/_templates/service/crud/list.ejs.t
@@ -2,13 +2,47 @@
to: services/<%= name %>/actions/list<%= h.capitalize(name) %>.action.ts
---
-import type { ServiceActionsSchema } from 'moleculer';
+import type { Context, ServiceActionsSchema } from 'moleculer';
+import { z } from 'zod';
+import { validateParams } from '../../common';
+
+/**
+ * List parameters validation schema
+ */
+const listParamsSchema = z.object({
+ page: z.string().optional().default('1').transform((val) => {
+ const parsed = parseInt(val, 10);
+ if (isNaN(parsed) || parsed < 1) {
+ throw new Error('Page must be a positive integer');
+ }
+ return parsed;
+ }),
+ limit: z.string().optional().default('10').transform((val) => {
+ const parsed = parseInt(val, 10);
+ if (isNaN(parsed) || parsed < 1 || parsed > 100) {
+ throw new Error('Limit must be a positive integer between 1 and 100');
+ }
+ return parsed;
+ }),
+});
/**
* Handler for the list action.
*/
-function listHandler() {
- return [];
+function listHandler(
+ ctx: Context>
+) {
+ const { page, limit } = ctx.params;
+
+ return {
+ success: true,
+ data: [],
+ pagination: {
+ page,
+ limit,
+ total: 0,
+ },
+ };
}
/**
@@ -27,13 +61,38 @@ function listHandler() {
* name: page
* schema:
* type: string
+ * description: Page number for pagination
* - in: query
* name: limit
* schema:
* type: string
+ * description: Number of items per page
* responses:
* 200:
* description: The <%= name %> list.
+ * content:
+ * application/json:
+ * schema:
+ * type: object
+ * properties:
+ * success:
+ * type: boolean
+ * example: true
+ * data:
+ * type: array
+ * items:
+ * type: object
+ * pagination:
+ * type: object
+ * properties:
+ * page:
+ * type: number
+ * limit:
+ * type: number
+ * total:
+ * type: number
+ * 422:
+ * description: Validation error
*/
const list<%= h.capitalize(name) %>Action: ServiceActionsSchema = {
rest: {
@@ -42,9 +101,11 @@ const list<%= h.capitalize(name) %>Action: ServiceActionsSchema = {
},
auth: true,
permissions: [],
- params: {
- page: 'string',
- limit: 'string',
+ hooks: {
+ before(ctx) {
+ this.logger.info('Validating parameters for list<%= h.capitalize(name) %> action');
+ validateParams(ctx, listParamsSchema);
+ },
},
handler: listHandler,
};
diff --git a/_templates/service/crud/service.ejs.t b/_templates/service/crud/service.ejs.t
index f26e1d89..8b639f9c 100644
--- a/_templates/service/crud/service.ejs.t
+++ b/_templates/service/crud/service.ejs.t
@@ -1,7 +1,7 @@
---
to: services/<%= name %>/<%= name %>.service.ts
---
-import type { ServiceSchema } from "moleculer";
+import type { Service, ServiceSchema } from "moleculer";
import createAction from "./actions/create<%= h.capitalize(name) %>.action";
import editAction from "./actions/update<%= h.capitalize(name) %>.action";
@@ -13,6 +13,12 @@ type ServiceSettings = {
defaultName: string;
};
+type ServiceMethods = {
+ uppercase(str: string): string;
+};
+
+type ServiceThis = Service & ServiceMethods;
+
/**
* Define common components for the <%= name %> service.
*
@@ -24,7 +30,7 @@ type ServiceSettings = {
* scheme: bearer
* bearerFormat: JWT
*/
-const <%= name %>Service: ServiceSchema = {
+const <%= name %>Service: ServiceSchema = {
name: "<%= name %>",
/**
@@ -81,14 +87,14 @@ const <%= name %>Service: ServiceSchema = {
/**
* Service started lifecycle event handler
*/
- started() {
+ async started() {
this.logger.info(`The ${this.name} service started.`);
},
/**
* Service stopped lifecycle event handler
*/
- stopped() {
+ async stopped() {
this.logger.info(`The ${this.name} service stopped.`);
},
};
diff --git a/_templates/service/new/hello.ejs.t b/_templates/service/new/hello.ejs.t
index b93524e1..96f1ca47 100644
--- a/_templates/service/new/hello.ejs.t
+++ b/_templates/service/new/hello.ejs.t
@@ -2,6 +2,9 @@
to: services/<%= name %>.service.ts
---
import type { Context, Service, ServiceSchema } from "moleculer";
+import { ZodParams } from "moleculer-zod-validator";
+
+import { validateParams } from "./common";
export type ActionHelloParams = {
name: string;
@@ -38,8 +41,20 @@ const <%= name %>Service: ServiceSchema = {
actions: {
/**
* Say a 'Hello' action.
- *
- * @returns
+ * @swagger
+ * /api/<%= name %>/hello:
+ * get:
+ * description: Returns a greeting message
+ * tags:
+ * - <%= name %>
+ * responses:
+ * 200:
+ * description: Hello message
+ * content:
+ * text/plain:
+ * schema:
+ * type: string
+ * example: Hello Moleculer
*/
hello: {
rest: {
@@ -53,18 +68,50 @@ const <%= name %>Service: ServiceSchema = {
/**
* Welcome, a username
- *
- * @param {String} name - User name
+ * @swagger
+ * /api/<%= name %>/welcome/{name}:
+ * get:
+ * description: Returns a welcome message for a user
+ * tags:
+ * - <%= name %>
+ * parameters:
+ * - in: path
+ * name: name
+ * required: true
+ * schema:
+ * type: string
+ * description: User name
+ * responses:
+ * 200:
+ * description: Welcome message
+ * content:
+ * text/plain:
+ * schema:
+ * type: string
+ * example: Welcome, John
+ * 422:
+ * description: Validation error
*/
welcome: {
rest: "GET /welcome/:name",
params: {
name: "string",
},
+ hooks: {
+ before(ctx) {
+ this.logger.info("Validating parameters for welcome action");
+ // Add your validation schema here if needed
+ // validateParams(ctx, yourSchema);
+ },
+ },
handler(
this: ServiceThis,
ctx: Context,
): string {
+ this.logger.info(
+ "welcome action called with parameters: %o",
+ ctx.params
+ );
return `Welcome, ${ctx.params.name}`;
},
},
diff --git a/deta.json b/deta.json
deleted file mode 100644
index 6d4cc364..00000000
--- a/deta.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "moleculer-typescript-template",
- "description": "My Moleculer-based microservices project",
- "runtime": "nodejs14.x",
- "env": []
-}
diff --git a/package.json b/package.json
index 64cc4ada..ed4398c4 100644
--- a/package.json
+++ b/package.json
@@ -2,14 +2,18 @@
"name": "moleculer-typescript-template",
"version": "0.3.0",
"description": "My Moleculer-based microservices project",
- "keywords": ["microservices", "moleculer", "moleculer typescript template"],
+ "keywords": [
+ "microservices",
+ "moleculer",
+ "moleculer typescript template"
+ ],
"license": "MIT",
"author": "Huynh Duc Dung",
"scripts": {
"dev": "run-p -l dev:*",
"dev:api": "npx tsx watch ./server.ts | npx pino-pretty",
"logdy": "npx tsx watch ./server.ts | logdy --no-analytics --port 4567",
- "dev:swagger": "wait-on -c ./wait-on.config.cjs -l && npm run generate:swagger",
+ "dev:swagger": "wait-on -c ./wait-on.config.cjs -l && pnpm generate:swagger",
"start": "npx tsx ./server.ts",
"cli": "NODE_OPTIONS='--import tsx' moleculer-connect --env --config moleculer.config.ts --transporter NATS",
"ci": "biome ci .",
@@ -26,15 +30,16 @@
"dc:logs": "docker compose logs -f",
"dc:down": "docker compose down",
"generate:service": "hygen service new --name",
+ "generate:dto": "hygen dto new --name",
"generate:crud": "hygen service crud --name",
"generate:action": "hygen action new --name",
"generate:swagger": "npx tsx cli.ts",
"generate:sdk": "openapi-ts",
- "typecheck": "npm run generate:sdk && tsc -b"
+ "typecheck": "pnpm generate:sdk && tsc -b"
},
"dependencies": {
- "@asteasolutions/zod-to-openapi": "7.3.0",
- "dotenv": "16.5.0",
+ "@asteasolutions/zod-to-openapi": "7.3.4",
+ "dotenv": "17.0.0",
"helmet": "8.1.0",
"lodash.defaultsdeep": "4.6.1",
"moleculer": "0.14.35",
@@ -42,47 +47,51 @@
"moleculer-zod-validator": "3.3.1",
"nats": "2.29.3",
"openapi-types": "12.1.3",
- "pino": "9.6.0",
+ "pino": "9.7.0",
"swagger-jsdoc": "6.2.8",
- "yaml": "2.7.1",
- "zod": "3.24.3"
+ "yaml": "2.8.0",
+ "zod": "3.25.67"
},
"devDependencies": {
- "@biomejs/biome": "1.9.4",
+ "@biomejs/biome": "2.0.6",
"@flydotio/dockerfile": "0.7.10",
- "@hey-api/openapi-ts": "0.66.6",
- "@types/express": "5.0.1",
- "@types/jest": "29.5.14",
- "@types/lodash": "4.17.16",
- "@types/node": "22.15.2",
+ "@hey-api/openapi-ts": "0.77.0",
+ "@types/express": "5.0.3",
+ "@types/jest": "30.0.0",
+ "@types/lodash": "4.17.19",
+ "@types/node": "24.0.6",
"@types/swagger-jsdoc": "6.0.4",
"@types/ws": "8.18.1",
- "@vitest/ui": "3.1.2",
+ "@vitest/coverage-v8": "3.2.4",
+ "@vitest/ui": "3.2.4",
"c8": "10.1.3",
"cleye": "1.3.4",
"express": "5.1.0",
"graphql": "16.11.0",
- "graphql-ws": "6.0.4",
+ "graphql-ws": "6.0.5",
"hygen": "6.2.11",
"moleculer-connect": "0.2.2",
"moleculer-io": "2.2.0",
"moleculer-repl": "0.7.4",
- "npm-run-all2": "7.0.2",
+ "npm-run-all2": "8.0.4",
"pino-pretty": "13.0.0",
- "sort-package-json": "3.0.0",
- "tsup": "8.4.0",
- "tsx": "4.19.3",
+ "sort-package-json": "3.3.1",
+ "tsup": "8.5.0",
+ "tsx": "4.20.3",
"typescript": "5.8.3",
- "vite": "6.3.3",
- "vitest": "3.1.2",
+ "vite": "7.0.0",
+ "vitest": "3.2.4",
"wait-on": "8.0.3",
- "ws": "8.18.1"
+ "ws": "8.18.2"
},
"packageManager": "pnpm@10.9.0",
"engines": {
- "node": ">= 18.17.x"
+ "node": ">= 20.0.0"
},
"pnpm": {
- "onlyBuiltDependencies": ["esbuild"]
+ "onlyBuiltDependencies": [
+ "es5-ext",
+ "esbuild"
+ ]
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8ce3e665..3e442f38 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,11 +9,11 @@ importers:
.:
dependencies:
'@asteasolutions/zod-to-openapi':
- specifier: 7.3.0
- version: 7.3.0(zod@3.24.3)
+ specifier: 7.3.4
+ version: 7.3.4(zod@3.25.67)
dotenv:
- specifier: 16.5.0
- version: 16.5.0
+ specifier: 17.0.0
+ version: 17.0.0
helmet:
specifier: 8.1.0
version: 8.1.0
@@ -22,13 +22,13 @@ importers:
version: 4.6.1
moleculer:
specifier: 0.14.35
- version: 0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)
+ version: 0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)
moleculer-web:
specifier: 0.10.8
- version: 0.10.8(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0))
+ version: 0.10.8(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0))
moleculer-zod-validator:
specifier: 3.3.1
- version: 3.3.1(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0))(zod@3.24.3)
+ version: 3.3.1(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0))(zod@3.25.67)
nats:
specifier: 2.29.3
version: 2.29.3
@@ -36,48 +36,51 @@ importers:
specifier: 12.1.3
version: 12.1.3
pino:
- specifier: 9.6.0
- version: 9.6.0
+ specifier: 9.7.0
+ version: 9.7.0
swagger-jsdoc:
specifier: 6.2.8
version: 6.2.8(openapi-types@12.1.3)
yaml:
- specifier: 2.7.1
- version: 2.7.1
+ specifier: 2.8.0
+ version: 2.8.0
zod:
- specifier: 3.24.3
- version: 3.24.3
+ specifier: 3.25.67
+ version: 3.25.67
devDependencies:
'@biomejs/biome':
- specifier: 1.9.4
- version: 1.9.4
+ specifier: 2.0.6
+ version: 2.0.6
'@flydotio/dockerfile':
specifier: 0.7.10
- version: 0.7.10(@types/node@22.15.2)
+ version: 0.7.10(@types/node@24.0.6)
'@hey-api/openapi-ts':
- specifier: 0.66.6
- version: 0.66.6(typescript@5.8.3)
+ specifier: 0.77.0
+ version: 0.77.0(magicast@0.3.5)(typescript@5.8.3)
'@types/express':
- specifier: 5.0.1
- version: 5.0.1
+ specifier: 5.0.3
+ version: 5.0.3
'@types/jest':
- specifier: 29.5.14
- version: 29.5.14
+ specifier: 30.0.0
+ version: 30.0.0
'@types/lodash':
- specifier: 4.17.16
- version: 4.17.16
+ specifier: 4.17.19
+ version: 4.17.19
'@types/node':
- specifier: 22.15.2
- version: 22.15.2
+ specifier: 24.0.6
+ version: 24.0.6
'@types/swagger-jsdoc':
specifier: 6.0.4
version: 6.0.4
'@types/ws':
specifier: 8.18.1
version: 8.18.1
+ '@vitest/coverage-v8':
+ specifier: 3.2.4
+ version: 3.2.4(vitest@3.2.4)
'@vitest/ui':
- specifier: 3.1.2
- version: 3.1.2(vitest@3.1.2)
+ specifier: 3.2.4
+ version: 3.2.4(vitest@3.2.4)
c8:
specifier: 10.1.3
version: 10.1.3
@@ -91,53 +94,57 @@ importers:
specifier: 16.11.0
version: 16.11.0
graphql-ws:
- specifier: 6.0.4
- version: 6.0.4(graphql@16.11.0)(ws@8.18.1)
+ specifier: 6.0.5
+ version: 6.0.5(graphql@16.11.0)(ws@8.18.2)
hygen:
specifier: 6.2.11
version: 6.2.11
moleculer-connect:
specifier: 0.2.2
- version: 0.2.2(debug@4.4.0)(moleculer-repl@0.7.4)
+ version: 0.2.2(debug@4.4.1)(moleculer-repl@0.7.4)
moleculer-io:
specifier: 2.2.0
- version: 2.2.0(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0))
+ version: 2.2.0(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0))
moleculer-repl:
specifier: 0.7.4
version: 0.7.4
npm-run-all2:
- specifier: 7.0.2
- version: 7.0.2
+ specifier: 8.0.4
+ version: 8.0.4
pino-pretty:
specifier: 13.0.0
version: 13.0.0
sort-package-json:
- specifier: 3.0.0
- version: 3.0.0
+ specifier: 3.3.1
+ version: 3.3.1
tsup:
- specifier: 8.4.0
- version: 8.4.0(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.7.1)
+ specifier: 8.5.0
+ version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0)
tsx:
- specifier: 4.19.3
- version: 4.19.3
+ specifier: 4.20.3
+ version: 4.20.3
typescript:
specifier: 5.8.3
version: 5.8.3
vite:
- specifier: 6.3.3
- version: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ specifier: 7.0.0
+ version: 7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
vitest:
- specifier: 3.1.2
- version: 3.1.2(@types/node@22.15.2)(@vitest/ui@3.1.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ specifier: 3.2.4
+ version: 3.2.4(@types/node@24.0.6)(@vitest/ui@3.2.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
wait-on:
specifier: 8.0.3
- version: 8.0.3(debug@4.4.0)
+ version: 8.0.3(debug@4.4.1)
ws:
- specifier: 8.18.1
- version: 8.18.1
+ specifier: 8.18.2
+ version: 8.18.2
packages:
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
'@apidevtools/json-schema-ref-parser@9.1.2':
resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==}
@@ -153,222 +160,235 @@ packages:
peerDependencies:
openapi-types: '>=7'
- '@asteasolutions/zod-to-openapi@7.3.0':
- resolution: {integrity: sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==}
+ '@asteasolutions/zod-to-openapi@7.3.4':
+ resolution: {integrity: sha512-/2rThQ5zPi9OzVwes6U7lK1+Yvug0iXu25olp7S0XsYmOqnyMfxH7gdSQjn/+DSOHRg7wnotwGJSyL+fBKdnEA==}
peerDependencies:
zod: ^3.20.2
- '@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/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.0':
+ resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.28.0':
+ resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
- '@biomejs/biome@1.9.4':
- resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==}
+ '@biomejs/biome@2.0.6':
+ resolution: {integrity: sha512-RRP+9cdh5qwe2t0gORwXaa27oTOiQRQvrFf49x2PA1tnpsyU7FIHX4ZOFMtBC4QNtyWsN7Dqkf5EDbg4X+9iqA==}
engines: {node: '>=14.21.3'}
hasBin: true
- '@biomejs/cli-darwin-arm64@1.9.4':
- resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==}
+ '@biomejs/cli-darwin-arm64@2.0.6':
+ resolution: {integrity: sha512-AzdiNNjNzsE6LfqWyBvcL29uWoIuZUkndu+wwlXW13EKcBHbbKjNQEZIJKYDc6IL+p7bmWGx3v9ZtcRyIoIz5A==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
- '@biomejs/cli-darwin-x64@1.9.4':
- resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==}
+ '@biomejs/cli-darwin-x64@2.0.6':
+ resolution: {integrity: sha512-wJjjP4E7bO4WJmiQaLnsdXMa516dbtC6542qeRkyJg0MqMXP0fvs4gdsHhZ7p9XWTAmGIjZHFKXdsjBvKGIJJQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
- '@biomejs/cli-linux-arm64-musl@1.9.4':
- resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==}
+ '@biomejs/cli-linux-arm64-musl@2.0.6':
+ resolution: {integrity: sha512-CVPEMlin3bW49sBqLBg2x016Pws7eUXA27XYDFlEtponD0luYjg2zQaMJ2nOqlkKG9fqzzkamdYxHdMDc2gZFw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- '@biomejs/cli-linux-arm64@1.9.4':
- resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==}
+ '@biomejs/cli-linux-arm64@2.0.6':
+ resolution: {integrity: sha512-ZSVf6TYo5rNMUHIW1tww+rs/krol7U5A1Is/yzWyHVZguuB0lBnIodqyFuwCNqG9aJGyk7xIMS8HG0qGUPz0SA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- '@biomejs/cli-linux-x64-musl@1.9.4':
- resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==}
+ '@biomejs/cli-linux-x64-musl@2.0.6':
+ resolution: {integrity: sha512-mKHE/e954hR/hSnAcJSjkf4xGqZc/53Kh39HVW1EgO5iFi0JutTN07TSjEMg616julRtfSNJi0KNyxvc30Y4rQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- '@biomejs/cli-linux-x64@1.9.4':
- resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==}
+ '@biomejs/cli-linux-x64@2.0.6':
+ resolution: {integrity: sha512-geM1MkHTV1Kh2Cs/Xzot9BOF3WBacihw6bkEmxkz4nSga8B9/hWy5BDiOG3gHDGIBa8WxT0nzsJs2f/hPqQIQw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- '@biomejs/cli-win32-arm64@1.9.4':
- resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==}
+ '@biomejs/cli-win32-arm64@2.0.6':
+ resolution: {integrity: sha512-290V4oSFoKaprKE1zkYVsDfAdn0An5DowZ+GIABgjoq1ndhvNxkJcpxPsiYtT7slbVe3xmlT0ncdfOsN7KruzA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
- '@biomejs/cli-win32-x64@1.9.4':
- resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==}
+ '@biomejs/cli-win32-x64@2.0.6':
+ resolution: {integrity: sha512-bfM1Bce0d69Ao7pjTjUS+AWSZ02+5UHdiAP85Th8e9yV5xzw6JrHXbL5YWlcEKQ84FIZMdDc7ncuti1wd2sdbw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
- '@esbuild/aix-ppc64@0.25.1':
- resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
+ '@esbuild/aix-ppc64@0.25.5':
+ resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.1':
- resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
+ '@esbuild/android-arm64@0.25.5':
+ resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.1':
- resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
+ '@esbuild/android-arm@0.25.5':
+ resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.1':
- resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
+ '@esbuild/android-x64@0.25.5':
+ resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.1':
- resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
+ '@esbuild/darwin-arm64@0.25.5':
+ resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.1':
- resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
+ '@esbuild/darwin-x64@0.25.5':
+ resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.1':
- resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
+ '@esbuild/freebsd-arm64@0.25.5':
+ resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.1':
- resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
+ '@esbuild/freebsd-x64@0.25.5':
+ resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.1':
- resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
+ '@esbuild/linux-arm64@0.25.5':
+ resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.1':
- resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
+ '@esbuild/linux-arm@0.25.5':
+ resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.1':
- resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
+ '@esbuild/linux-ia32@0.25.5':
+ resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.1':
- resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
+ '@esbuild/linux-loong64@0.25.5':
+ resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.1':
- resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
+ '@esbuild/linux-mips64el@0.25.5':
+ resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.1':
- resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
+ '@esbuild/linux-ppc64@0.25.5':
+ resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.1':
- resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
+ '@esbuild/linux-riscv64@0.25.5':
+ resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.1':
- resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
+ '@esbuild/linux-s390x@0.25.5':
+ resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.1':
- resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
+ '@esbuild/linux-x64@0.25.5':
+ resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
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.5':
+ resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.1':
- resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
+ '@esbuild/netbsd-x64@0.25.5':
+ resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.1':
- resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
+ '@esbuild/openbsd-arm64@0.25.5':
+ resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.1':
- resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
+ '@esbuild/openbsd-x64@0.25.5':
+ resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.25.1':
- resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
+ '@esbuild/sunos-x64@0.25.5':
+ resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.1':
- resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
+ '@esbuild/win32-arm64@0.25.5':
+ resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.1':
- resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
+ '@esbuild/win32-ia32@0.25.5':
+ resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.1':
- resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
+ '@esbuild/win32-x64@0.25.5':
+ resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -388,19 +408,19 @@ packages:
'@hapi/topo@5.1.0':
resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
- '@hey-api/json-schema-ref-parser@1.0.5':
- resolution: {integrity: sha512-bWUV9ICwvU5I3YKVZqWIUXFC2SIXznUi/u+LqurJx6ILiyImfZD5+g/lj3w4EiyXxmjqyaxptzUz/1IgK3vVtw==}
+ '@hey-api/json-schema-ref-parser@1.0.6':
+ resolution: {integrity: sha512-yktiFZoWPtEW8QKS65eqKwA5MTKp88CyiL8q72WynrBs/73SAaxlSWlA2zW/DZlywZ5hX1OYzrCC0wFdvO9c2w==}
engines: {node: '>= 16'}
- '@hey-api/openapi-ts@0.66.6':
- resolution: {integrity: sha512-EmZHVqfHuGNoyBDPcL+3vGHLb/qEbjIix3dnQ/CzfZQ+xm4vnOecpR7JaaaR9u2W8Ldeyqnk7NwmEqOBgkgG4Q==}
+ '@hey-api/openapi-ts@0.77.0':
+ resolution: {integrity: sha512-HAJbd8QfxeBPZ788Ghiw7bzzzTKxW+wW+34foleEztyZJnRV20barvevu8YAK1BtyiIGIpEtAfoqO8KUj4VuBw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=22.10.0}
hasBin: true
peerDependencies:
typescript: ^5.5.3
- '@inquirer/checkbox@4.1.3':
- resolution: {integrity: sha512-KU1MGwf24iABJjGESxhyj+/rlQYSRoCfcuHDEHXfZ1DENmbuSRfyrUb+LLjHoee5TNOFKwaFxDXc5/zRwJUPMQ==}
+ '@inquirer/checkbox@4.1.8':
+ resolution: {integrity: sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -408,8 +428,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/confirm@5.1.7':
- resolution: {integrity: sha512-Xrfbrw9eSiHb+GsesO8TQIeHSMTP0xyvTCeeYevgZ4sKW+iz9w/47bgfG9b0niQm+xaLY2EWPBINUPldLwvYiw==}
+ '@inquirer/confirm@5.1.12':
+ resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -417,8 +437,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@10.1.8':
- resolution: {integrity: sha512-HpAqR8y715zPpM9e/9Q+N88bnGwqqL8ePgZ0SMv/s3673JLMv3bIkoivGmjPqXlEgisUksSXibweQccUwEx4qQ==}
+ '@inquirer/core@10.1.13':
+ resolution: {integrity: sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -426,8 +446,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/editor@4.2.8':
- resolution: {integrity: sha512-UkGKbMFlQw5k4ZLjDwEi5z8NIVlP/3DAlLHta0o0pSsdpPThNmPtUL8mvGCHUaQtR+QrxR9yRYNWgKMsHkfIUA==}
+ '@inquirer/editor@4.2.13':
+ resolution: {integrity: sha512-WbicD9SUQt/K8O5Vyk9iC2ojq5RHoCLK6itpp2fHsWe44VxxcA9z3GTWlvjSTGmMQpZr+lbVmrxdHcumJoLbMA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -435,8 +455,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/expand@4.0.10':
- resolution: {integrity: sha512-leyBouGJ77ggv51Jb/OJmLGGnU2HYc13MZ2iiPNLwe2VgFgZPVqsrRWSa1RAHKyazjOyvSNKLD1B2K7A/iWi1g==}
+ '@inquirer/expand@4.0.15':
+ resolution: {integrity: sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -444,12 +464,12 @@ packages:
'@types/node':
optional: true
- '@inquirer/figures@1.0.11':
- resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==}
+ '@inquirer/figures@1.0.12':
+ resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==}
engines: {node: '>=18'}
- '@inquirer/input@4.1.7':
- resolution: {integrity: sha512-rCQAipJNA14UTH84df/z4jDJ9LZ54H6zzuCAi7WZ0qVqx3CSqLjfXAMd5cpISIxbiHVJCPRB81gZksq6CZsqDg==}
+ '@inquirer/input@4.1.12':
+ resolution: {integrity: sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -457,8 +477,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/number@3.0.10':
- resolution: {integrity: sha512-GLsdnxzNefjCJUmWyjaAuNklHgDpCTL4RMllAVhVvAzBwRW9g38eZ5tWgzo1lirtSDTpsh593hqXVhxvdrjfwA==}
+ '@inquirer/number@3.0.15':
+ resolution: {integrity: sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -466,8 +486,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/password@4.0.10':
- resolution: {integrity: sha512-JC538ujqeYKkFqLoWZ0ILBteIUO2yajBMVEUZSxjl9x6fiEQtM+I5Rca7M2D8edMDbyHLnXifGH1hJZdh8V5rA==}
+ '@inquirer/password@4.0.15':
+ resolution: {integrity: sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -475,8 +495,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/prompts@7.3.3':
- resolution: {integrity: sha512-QS1AQgJ113iE/nmym03yKZKHvGjVWwkGZT3B1yKrrMG0bJKQg1jUkntFP8aPd2FUQzu/nga7QU2eDpzIP5it0Q==}
+ '@inquirer/prompts@7.5.3':
+ resolution: {integrity: sha512-8YL0WiV7J86hVAxrh3fE5mDCzcTDe1670unmJRz6ArDgN+DBK1a0+rbnNWp4DUB5rPMwqD5ZP6YHl9KK1mbZRg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -484,8 +504,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/rawlist@4.0.10':
- resolution: {integrity: sha512-vOQbQkmhaCsF2bUmjoyRSZJBz77UnIF/F3ZS2LMgwbgyaG2WgwKHh0WKNj0APDB72WDbZijhW5nObQbk+TnbcA==}
+ '@inquirer/rawlist@4.1.3':
+ resolution: {integrity: sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -493,8 +513,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/search@3.0.10':
- resolution: {integrity: sha512-EAVKAz6P1LajZOdoL+R+XC3HJYSU261fbJzO4fCkJJ7UPFcm+nP+gzC+DDZWsb2WK9PQvKsnaKiNKsY8B6dBWQ==}
+ '@inquirer/search@3.0.15':
+ resolution: {integrity: sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -502,8 +522,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/select@4.0.10':
- resolution: {integrity: sha512-Tg8S9nESnCfISu5tCZSuXpXq0wHuDVimj7xyHstABgR34zcJnLdq/VbjB2mdZvNAMAehYBnNzSjxB06UE8LLAA==}
+ '@inquirer/select@4.2.3':
+ resolution: {integrity: sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -511,8 +531,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/type@3.0.5':
- resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==}
+ '@inquirer/type@3.0.7':
+ resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -528,17 +548,29 @@ packages:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- '@jest/expect-utils@29.7.0':
- resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/diff-sequences@30.0.1':
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/expect-utils@30.0.3':
+ resolution: {integrity: sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/get-type@30.0.1':
+ resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/pattern@30.0.1':
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/schemas@30.0.1':
+ resolution: {integrity: sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- '@jest/types@29.6.3':
- resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/types@30.0.1':
+ resolution: {integrity: sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
@@ -565,101 +597,106 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@polka/url@1.0.0-next.28':
- resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- '@rollup/rollup-android-arm-eabi@4.35.0':
- resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==}
+ '@rollup/rollup-android-arm-eabi@4.44.1':
+ resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.35.0':
- resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==}
+ '@rollup/rollup-android-arm64@4.44.1':
+ resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==}
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.44.1':
+ resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==}
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.44.1':
+ resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.35.0':
- resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==}
+ '@rollup/rollup-freebsd-arm64@4.44.1':
+ resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.35.0':
- resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==}
+ '@rollup/rollup-freebsd-x64@4.44.1':
+ resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.35.0':
- resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
+ resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.35.0':
- resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==}
+ '@rollup/rollup-linux-arm-musleabihf@4.44.1':
+ resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==}
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.44.1':
+ resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==}
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.44.1':
+ resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==}
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.44.1':
+ resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==}
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.44.1':
+ resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.35.0':
- resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==}
+ '@rollup/rollup-linux-riscv64-gnu@4.44.1':
+ resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==}
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.44.1':
+ resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.44.1':
+ resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.35.0':
- resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==}
+ '@rollup/rollup-linux-x64-gnu@4.44.1':
+ resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.35.0':
- resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==}
+ '@rollup/rollup-linux-x64-musl@4.44.1':
+ resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==}
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.44.1':
+ resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.35.0':
- resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==}
+ '@rollup/rollup-win32-ia32-msvc@4.44.1':
+ resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.35.0':
- resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==}
+ '@rollup/rollup-win32-x64-msvc@4.44.1':
+ resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==}
cpu: [x64]
os: [win32]
@@ -672,32 +709,38 @@ packages:
'@sideway/pinpoint@2.0.0':
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ '@sinclair/typebox@0.34.37':
+ resolution: {integrity: sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==}
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
- '@types/body-parser@1.19.5':
- resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/chai@5.2.2':
+ resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
'@types/connect@3.4.38':
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
- '@types/cors@2.8.17':
- resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
+ '@types/cors@2.8.19':
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/express-serve-static-core@5.0.6':
resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==}
- '@types/express@5.0.1':
- resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==}
+ '@types/express@5.0.3':
+ resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==}
- '@types/http-errors@2.0.4':
- resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -708,14 +751,14 @@ packages:
'@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- '@types/jest@29.5.14':
- resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
+ '@types/jest@30.0.0':
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/lodash@4.17.16':
- resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==}
+ '@types/lodash@4.17.19':
+ resolution: {integrity: sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==}
'@types/mime@1.3.5':
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
@@ -723,20 +766,20 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- '@types/node@22.15.2':
- resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==}
+ '@types/node@24.0.6':
+ resolution: {integrity: sha512-ZOyn+gOs749xU7ovp+Ibj0g1o3dFRqsfPnT22C2t5JzcRvgsEDpGawPbCISGKLudJk9Y0wiu9sYd6kUh0pc9TA==}
- '@types/qs@6.9.18':
- resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
'@types/range-parser@1.2.7':
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
- '@types/send@0.17.4':
- resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
+ '@types/send@0.17.5':
+ resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
- '@types/serve-static@1.15.7':
- resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
+ '@types/serve-static@1.15.8':
+ resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==}
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
@@ -753,39 +796,48 @@ packages:
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
- '@vitest/expect@3.1.2':
- resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==}
+ '@vitest/coverage-v8@3.2.4':
+ resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
+ peerDependencies:
+ '@vitest/browser': 3.2.4
+ vitest: 3.2.4
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
+
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
- '@vitest/mocker@3.1.2':
- resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==}
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
peerDependencies:
msw: ^2.4.9
- vite: ^5.0.0 || ^6.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
- '@vitest/pretty-format@3.1.2':
- resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==}
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
- '@vitest/runner@3.1.2':
- resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==}
+ '@vitest/runner@3.2.4':
+ resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
- '@vitest/snapshot@3.1.2':
- resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==}
+ '@vitest/snapshot@3.2.4':
+ resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
- '@vitest/spy@3.1.2':
- resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==}
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
- '@vitest/ui@3.1.2':
- resolution: {integrity: sha512-+YPgKiLpFEyBVJNHDkRcSDcLrrnr20lyU4HQoI9Jtq1MdvoX8usql9h38mQw82MBU1Zo5BPC6sw+sXZ6NS18CQ==}
+ '@vitest/ui@3.2.4':
+ resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==}
peerDependencies:
- vitest: 3.1.2
+ vitest: 3.2.4
- '@vitest/utils@3.1.2':
- resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==}
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
@@ -799,8 +851,8 @@ packages:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
- acorn@8.14.1:
- resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -856,6 +908,9 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
+ ast-v8-to-istanbul@0.3.3:
+ resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==}
+
astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
@@ -870,8 +925,8 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
- axios@1.8.2:
- resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==}
+ axios@1.10.0:
+ resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -894,11 +949,11 @@ packages:
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
engines: {node: '>=18'}
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -910,6 +965,10 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
bundle-require@5.1.0:
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -994,8 +1053,8 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
- ci-info@3.9.0:
- resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ ci-info@4.2.0:
+ resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==}
engines: {node: '>=8'}
citty@0.1.6:
@@ -1043,6 +1102,10 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -1072,8 +1135,8 @@ packages:
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- consola@3.4.0:
- resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
constant-case@2.0.0:
@@ -1133,8 +1196,8 @@ packages:
supports-color:
optional: true
- 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: '*'
@@ -1146,9 +1209,21 @@ packages:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
+ default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+
+ default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
+
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
@@ -1165,8 +1240,8 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
- destr@2.0.3:
- resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
@@ -1180,10 +1255,6 @@ packages:
resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- diff-sequences@29.6.3:
- resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
diff@7.0.0:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
engines: {node: '>=0.3.1'}
@@ -1199,6 +1270,10 @@ packages:
resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
engines: {node: '>=12'}
+ dotenv@17.0.0:
+ resolution: {integrity: sha512-A0BJ5lrpJVSfnMMXjmeO0xUnoxqsBHWCoqqTnGwGYVdnctqXXUEhJOO7LxmgxJon9tEZFGpe0xPRX0h2v3AANQ==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -1228,8 +1303,8 @@ packages:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
- end-of-stream@1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
engine.io-parser@5.2.3:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
@@ -1251,8 +1326,8 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
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==}
@@ -1285,8 +1360,8 @@ packages:
es6-weak-map@0.1.4:
resolution: {integrity: sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==}
- esbuild@0.25.1:
- resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
+ esbuild@0.25.5:
+ resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
engines: {node: '>=18'}
hasBin: true
@@ -1347,9 +1422,9 @@ packages:
resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
engines: {node: '>=12.0.0'}
- expect@29.7.0:
- resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ expect@30.0.3:
+ resolution: {integrity: sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
express@5.1.0:
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
@@ -1378,19 +1453,11 @@ packages:
fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
- fastest-validator@1.19.0:
- resolution: {integrity: sha512-wUfJBrXmccVz4kARAiWTkuqsC6EFeqbNxwfysCDk+maExBPP8KxyBwaWtayrWjKIaBIbaz+rqI2kel6ecayxcg==}
+ fastest-validator@1.19.1:
+ resolution: {integrity: sha512-eXiPCYOsuS5OWI+OVH9whu4LDGqO4cE7jUnZyQ8jV3rXfmC0OghQACOtYjTDxsVnblzvXIHGuizjFg0csiLE6g==}
- fdir@6.4.3:
- resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- fdir@6.4.4:
- resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
+ fdir@6.4.6:
+ resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
@@ -1415,6 +1482,9 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ fix-dts-default-cjs-exports@1.0.1:
+ resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
+
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@@ -1431,8 +1501,8 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
- form-data@4.0.2:
- resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
+ form-data@4.0.3:
+ resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
engines: {node: '>= 6'}
forwarded@0.2.0:
@@ -1481,23 +1551,19 @@ packages:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
- get-stdin@9.0.0:
- resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==}
- engines: {node: '>=12'}
-
get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- get-tsconfig@4.10.0:
- resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
+ get-tsconfig@4.10.1:
+ resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
giget@1.2.5:
resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==}
hasBin: true
- git-hooks-list@3.2.0:
- resolution: {integrity: sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==}
+ git-hooks-list@4.1.1:
+ resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
@@ -1518,17 +1584,20 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphql-ws@6.0.4:
- resolution: {integrity: sha512-8b4OZtNOvv8+NZva8HXamrc0y1jluYC0+13gdh7198FKjVzXyTvVc95DCwGzaKEfn3YuWZxUqjJlHe3qKM/F2g==}
+ graphql-ws@6.0.5:
+ resolution: {integrity: sha512-HzYw057ch0hx2gZjkbgk1pur4kAtgljlWRP+Gccudqm3BRrTpExjWCQ9OHdIsq47Y6lHL++1lTvuQHhgRRcevw==}
engines: {node: '>=20'}
peerDependencies:
'@fastify/websocket': ^10 || ^11
+ crossws: ~0.3
graphql: ^15.10.1 || ^16
uWebSockets.js: ^20
ws: ^8
peerDependenciesMeta:
'@fastify/websocket':
optional: true
+ crossws:
+ optional: true
uWebSockets.js:
optional: true
ws:
@@ -1614,8 +1683,8 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- inquirer@12.4.3:
- resolution: {integrity: sha512-p9+jcDKhFHKTunvpffCk7I9eKt8+NPNWO8hMSSoLPv5vahP5Vhr78qWzDtA+6FBWQtFTuLFUWmxTyhC6G2Xz/Q==}
+ inquirer@12.6.3:
+ resolution: {integrity: sha512-eX9beYAjr1MqYsIjx1vAheXsRk1jbZRvHLcBu5nA9wX0rXR1IfCZLnVLp4Ym4mrhqmh7AuANwcdtgQ291fZDfQ==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -1631,10 +1700,20 @@ packages:
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
engines: {node: '>= 10'}
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -1664,6 +1743,10 @@ packages:
is-upper-case@1.1.2:
resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==}
+ is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -1682,6 +1765,10 @@ packages:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
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'}
@@ -1694,25 +1781,29 @@ packages:
engines: {node: '>=10'}
hasBin: true
- jest-diff@29.7.0:
- resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-diff@30.0.3:
+ resolution: {integrity: sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-matcher-utils@30.0.3:
+ resolution: {integrity: sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-get-type@29.6.3:
- resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-message-util@30.0.2:
+ resolution: {integrity: sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-matcher-utils@29.7.0:
- resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-mock@30.0.2:
+ resolution: {integrity: sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-message-util@29.7.0:
- resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-regex-util@30.0.1:
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
- jest-util@29.7.0:
- resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-util@30.0.2:
+ resolution: {integrity: sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jiti@2.4.2:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
@@ -1728,6 +1819,9 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
@@ -1796,8 +1890,8 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
- loupe@3.1.3:
- resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
+ loupe@3.1.4:
+ resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
lower-case-first@1.0.2:
resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==}
@@ -1818,6 +1912,9 @@ packages:
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@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
@@ -2038,8 +2135,8 @@ packages:
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
- 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
@@ -2087,9 +2184,9 @@ packages:
resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
engines: {node: ^18.17.0 || >=20.5.0}
- npm-run-all2@7.0.2:
- resolution: {integrity: sha512-7tXR+r9hzRNOPNTvXegM+QzCuMjzUIIq66VDunL6j60O4RrExx32XUhlrS7UK4VcdGw5/Wxzb3kfNcFix9JKDA==}
- engines: {node: ^18.17.0 || >=20.5.0, npm: '>= 9'}
+ npm-run-all2@8.0.4:
+ resolution: {integrity: sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==}
+ engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'}
hasBin: true
npm-run-path@4.0.1:
@@ -2127,11 +2224,15 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ open@10.1.2:
+ resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==}
+ engines: {node: '>=18'}
+
openapi-types@12.1.3:
resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
- openapi3-ts@4.4.0:
- resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==}
+ openapi3-ts@4.5.0:
+ resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
@@ -2194,8 +2295,8 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathval@2.0.0:
- resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
engines: {node: '>= 14.16'}
perfect-debounce@1.0.0:
@@ -2237,12 +2338,12 @@ packages:
resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==}
hasBin: true
- pino@9.6.0:
- resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==}
+ pino@9.7.0:
+ resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==}
hasBin: true
- pirates@4.0.6:
- resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
pkg-types@1.3.1:
@@ -2266,23 +2367,23 @@ packages:
yaml:
optional: true
- postcss@8.5.3:
- resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
pretty-bytes@5.6.0:
resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
engines: {node: '>=6'}
- pretty-format@29.7.0:
- resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ pretty-format@30.0.2:
+ resolution: {integrity: sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
process-warning@3.0.0:
resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
- process-warning@4.0.1:
- resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+ process-warning@5.0.0:
+ resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
@@ -2295,8 +2396,8 @@ packages:
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
- pump@3.0.2:
- resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
+ pump@3.0.3:
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
@@ -2378,8 +2479,8 @@ packages:
resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
hasBin: true
- rollup@4.35.0:
- resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==}
+ rollup@4.44.1:
+ resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -2387,6 +2488,10 @@ packages:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
+ run-applescript@7.0.0:
+ resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+ engines: {node: '>=18'}
+
run-async@3.0.0:
resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
engines: {node: '>=0.12.0'}
@@ -2407,8 +2512,8 @@ packages:
secure-json-parse@2.7.0:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
- 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
@@ -2442,8 +2547,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shell-quote@1.8.2:
- resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
side-channel-list@1.0.0:
@@ -2507,8 +2612,9 @@ packages:
sort-object-keys@1.1.3:
resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==}
- sort-package-json@3.0.0:
- resolution: {integrity: sha512-vfZWx4DnFNB8R9Vg4Dnx21s20auNzWH15ZaCBfADAiyrCwemRmhWstTgvLjMek1DW3+MHcNaqkp86giCF24rMA==}
+ sort-package-json@3.3.1:
+ resolution: {integrity: sha512-awjhQR2Iy5UN3NuguAK5+RezcEuUg9Ra4O8y2Aj+DlJa7MywyHaipAPf9bu4qqFj0hsYHHoT9sS3aV7Ucu728g==}
+ engines: {node: '>=20'}
hasBin: true
source-map-js@1.2.1:
@@ -2541,6 +2647,10 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
std-env@3.9.0:
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
@@ -2575,6 +2685,9 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strip-literal@3.0.0:
+ resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -2645,24 +2758,20 @@ packages:
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.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
- tinyglobby@0.2.13:
- resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
- engines: {node: '>=12.0.0'}
-
- tinypool@1.0.2:
- resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
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==}
+ tinyspy@4.0.3:
+ resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
engines: {node: '>=14.0.0'}
title-case@2.1.1:
@@ -2700,8 +2809,8 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tsup@8.4.0:
- resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==}
+ tsup@8.5.0:
+ resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -2719,8 +2828,8 @@ packages:
typescript:
optional: true
- tsx@4.19.3:
- resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==}
+ tsx@4.20.3:
+ resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -2753,16 +2862,16 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
uglify-js@3.19.3:
resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
engines: {node: '>=0.8.0'}
hasBin: true
- undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ undici-types@7.8.0:
+ resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
@@ -2785,32 +2894,32 @@ packages:
resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
engines: {node: '>=10.12.0'}
- validator@13.12.0:
- resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==}
+ validator@13.15.15:
+ resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
engines: {node: '>= 0.10'}
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
- vite-node@3.1.2:
- resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==}
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
- vite@6.3.3:
- resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ vite@7.0.0:
+ resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@types/node': ^20.19.0 || >=22.12.0
jiti: '>=1.21.0'
- less: '*'
+ less: ^4.0.0
lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
@@ -2838,16 +2947,16 @@ packages:
yaml:
optional: true
- vitest@3.1.2:
- resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==}
+ vitest@3.2.4:
+ resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
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.1.2
- '@vitest/ui': 3.1.2
+ '@vitest/browser': 3.2.4
+ '@vitest/ui': 3.2.4
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -2931,8 +3040,8 @@ packages:
utf-8-validate:
optional: true
- 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
@@ -2954,9 +3063,9 @@ packages:
resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==}
engines: {node: '>= 6'}
- yaml@2.7.1:
- resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==}
- engines: {node: '>= 14'}
+ yaml@2.8.0:
+ resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@21.1.1:
@@ -2980,11 +3089,16 @@ packages:
engines: {node: '>=8.0.0'}
hasBin: true
- zod@3.24.3:
- resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==}
+ zod@3.25.67:
+ resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}
snapshots:
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
'@apidevtools/json-schema-ref-parser@9.1.2':
dependencies:
'@jsdevtools/ono': 7.1.3
@@ -3006,142 +3120,153 @@ snapshots:
openapi-types: 12.1.3
z-schema: 5.0.5
- '@asteasolutions/zod-to-openapi@7.3.0(zod@3.24.3)':
+ '@asteasolutions/zod-to-openapi@7.3.4(zod@3.25.67)':
dependencies:
- openapi3-ts: 4.4.0
- zod: 3.24.3
+ openapi3-ts: 4.5.0
+ zod: 3.25.67
- '@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/helper-validator-identifier@7.25.9': {}
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/parser@7.28.0':
+ dependencies:
+ '@babel/types': 7.28.0
+
+ '@babel/types@7.28.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
'@bcoe/v8-coverage@1.0.2': {}
- '@biomejs/biome@1.9.4':
+ '@biomejs/biome@2.0.6':
optionalDependencies:
- '@biomejs/cli-darwin-arm64': 1.9.4
- '@biomejs/cli-darwin-x64': 1.9.4
- '@biomejs/cli-linux-arm64': 1.9.4
- '@biomejs/cli-linux-arm64-musl': 1.9.4
- '@biomejs/cli-linux-x64': 1.9.4
- '@biomejs/cli-linux-x64-musl': 1.9.4
- '@biomejs/cli-win32-arm64': 1.9.4
- '@biomejs/cli-win32-x64': 1.9.4
-
- '@biomejs/cli-darwin-arm64@1.9.4':
+ '@biomejs/cli-darwin-arm64': 2.0.6
+ '@biomejs/cli-darwin-x64': 2.0.6
+ '@biomejs/cli-linux-arm64': 2.0.6
+ '@biomejs/cli-linux-arm64-musl': 2.0.6
+ '@biomejs/cli-linux-x64': 2.0.6
+ '@biomejs/cli-linux-x64-musl': 2.0.6
+ '@biomejs/cli-win32-arm64': 2.0.6
+ '@biomejs/cli-win32-x64': 2.0.6
+
+ '@biomejs/cli-darwin-arm64@2.0.6':
optional: true
- '@biomejs/cli-darwin-x64@1.9.4':
+ '@biomejs/cli-darwin-x64@2.0.6':
optional: true
- '@biomejs/cli-linux-arm64-musl@1.9.4':
+ '@biomejs/cli-linux-arm64-musl@2.0.6':
optional: true
- '@biomejs/cli-linux-arm64@1.9.4':
+ '@biomejs/cli-linux-arm64@2.0.6':
optional: true
- '@biomejs/cli-linux-x64-musl@1.9.4':
+ '@biomejs/cli-linux-x64-musl@2.0.6':
optional: true
- '@biomejs/cli-linux-x64@1.9.4':
+ '@biomejs/cli-linux-x64@2.0.6':
optional: true
- '@biomejs/cli-win32-arm64@1.9.4':
+ '@biomejs/cli-win32-arm64@2.0.6':
optional: true
- '@biomejs/cli-win32-x64@1.9.4':
+ '@biomejs/cli-win32-x64@2.0.6':
optional: true
- '@esbuild/aix-ppc64@0.25.1':
+ '@esbuild/aix-ppc64@0.25.5':
optional: true
- '@esbuild/android-arm64@0.25.1':
+ '@esbuild/android-arm64@0.25.5':
optional: true
- '@esbuild/android-arm@0.25.1':
+ '@esbuild/android-arm@0.25.5':
optional: true
- '@esbuild/android-x64@0.25.1':
+ '@esbuild/android-x64@0.25.5':
optional: true
- '@esbuild/darwin-arm64@0.25.1':
+ '@esbuild/darwin-arm64@0.25.5':
optional: true
- '@esbuild/darwin-x64@0.25.1':
+ '@esbuild/darwin-x64@0.25.5':
optional: true
- '@esbuild/freebsd-arm64@0.25.1':
+ '@esbuild/freebsd-arm64@0.25.5':
optional: true
- '@esbuild/freebsd-x64@0.25.1':
+ '@esbuild/freebsd-x64@0.25.5':
optional: true
- '@esbuild/linux-arm64@0.25.1':
+ '@esbuild/linux-arm64@0.25.5':
optional: true
- '@esbuild/linux-arm@0.25.1':
+ '@esbuild/linux-arm@0.25.5':
optional: true
- '@esbuild/linux-ia32@0.25.1':
+ '@esbuild/linux-ia32@0.25.5':
optional: true
- '@esbuild/linux-loong64@0.25.1':
+ '@esbuild/linux-loong64@0.25.5':
optional: true
- '@esbuild/linux-mips64el@0.25.1':
+ '@esbuild/linux-mips64el@0.25.5':
optional: true
- '@esbuild/linux-ppc64@0.25.1':
+ '@esbuild/linux-ppc64@0.25.5':
optional: true
- '@esbuild/linux-riscv64@0.25.1':
+ '@esbuild/linux-riscv64@0.25.5':
optional: true
- '@esbuild/linux-s390x@0.25.1':
+ '@esbuild/linux-s390x@0.25.5':
optional: true
- '@esbuild/linux-x64@0.25.1':
+ '@esbuild/linux-x64@0.25.5':
optional: true
- '@esbuild/netbsd-arm64@0.25.1':
+ '@esbuild/netbsd-arm64@0.25.5':
optional: true
- '@esbuild/netbsd-x64@0.25.1':
+ '@esbuild/netbsd-x64@0.25.5':
optional: true
- '@esbuild/openbsd-arm64@0.25.1':
+ '@esbuild/openbsd-arm64@0.25.5':
optional: true
- '@esbuild/openbsd-x64@0.25.1':
+ '@esbuild/openbsd-x64@0.25.5':
optional: true
- '@esbuild/sunos-x64@0.25.1':
+ '@esbuild/sunos-x64@0.25.5':
optional: true
- '@esbuild/win32-arm64@0.25.1':
+ '@esbuild/win32-arm64@0.25.5':
optional: true
- '@esbuild/win32-ia32@0.25.1':
+ '@esbuild/win32-ia32@0.25.5':
optional: true
- '@esbuild/win32-x64@0.25.1':
+ '@esbuild/win32-x64@0.25.5':
optional: true
'@fastify/busboy@1.2.1':
dependencies:
text-decoding: 1.0.0
- '@flydotio/dockerfile@0.7.10(@types/node@22.15.2)':
+ '@flydotio/dockerfile@0.7.10(@types/node@24.0.6)':
dependencies:
chalk: 5.4.1
diff: 7.0.0
ejs: 3.1.10
- inquirer: 12.4.3(@types/node@22.15.2)
- shell-quote: 1.8.2
+ inquirer: 12.6.3(@types/node@24.0.6)
+ shell-quote: 1.8.3
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
@@ -3152,44 +3277,47 @@ snapshots:
dependencies:
'@hapi/hoek': 9.3.0
- '@hey-api/json-schema-ref-parser@1.0.5':
+ '@hey-api/json-schema-ref-parser@1.0.6':
dependencies:
'@jsdevtools/ono': 7.1.3
'@types/json-schema': 7.0.15
js-yaml: 4.1.0
lodash: 4.17.21
- '@hey-api/openapi-ts@0.66.6(typescript@5.8.3)':
+ '@hey-api/openapi-ts@0.77.0(magicast@0.3.5)(typescript@5.8.3)':
dependencies:
- '@hey-api/json-schema-ref-parser': 1.0.5
- c12: 2.0.1
+ '@hey-api/json-schema-ref-parser': 1.0.6
+ ansi-colors: 4.1.3
+ c12: 2.0.1(magicast@0.3.5)
+ color-support: 1.1.3
commander: 13.0.0
handlebars: 4.7.8
+ open: 10.1.2
typescript: 5.8.3
transitivePeerDependencies:
- magicast
- '@inquirer/checkbox@4.1.3(@types/node@22.15.2)':
+ '@inquirer/checkbox@4.1.8(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/figures': 1.0.11
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/figures': 1.0.12
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/confirm@5.1.7(@types/node@22.15.2)':
+ '@inquirer/confirm@5.1.12(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/core@10.1.8(@types/node@22.15.2)':
+ '@inquirer/core@10.1.13(@types/node@24.0.6)':
dependencies:
- '@inquirer/figures': 1.0.11
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/figures': 1.0.12
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
ansi-escapes: 4.3.2
cli-width: 4.1.0
mute-stream: 2.0.0
@@ -3197,93 +3325,93 @@ snapshots:
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/editor@4.2.8(@types/node@22.15.2)':
+ '@inquirer/editor@4.2.13(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
external-editor: 3.1.0
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/expand@4.0.10(@types/node@22.15.2)':
+ '@inquirer/expand@4.0.15(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/figures@1.0.11': {}
+ '@inquirer/figures@1.0.12': {}
- '@inquirer/input@4.1.7(@types/node@22.15.2)':
+ '@inquirer/input@4.1.12(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/number@3.0.10(@types/node@22.15.2)':
+ '@inquirer/number@3.0.15(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/password@4.0.10(@types/node@22.15.2)':
+ '@inquirer/password@4.0.15(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
ansi-escapes: 4.3.2
optionalDependencies:
- '@types/node': 22.15.2
-
- '@inquirer/prompts@7.3.3(@types/node@22.15.2)':
- dependencies:
- '@inquirer/checkbox': 4.1.3(@types/node@22.15.2)
- '@inquirer/confirm': 5.1.7(@types/node@22.15.2)
- '@inquirer/editor': 4.2.8(@types/node@22.15.2)
- '@inquirer/expand': 4.0.10(@types/node@22.15.2)
- '@inquirer/input': 4.1.7(@types/node@22.15.2)
- '@inquirer/number': 3.0.10(@types/node@22.15.2)
- '@inquirer/password': 4.0.10(@types/node@22.15.2)
- '@inquirer/rawlist': 4.0.10(@types/node@22.15.2)
- '@inquirer/search': 3.0.10(@types/node@22.15.2)
- '@inquirer/select': 4.0.10(@types/node@22.15.2)
+ '@types/node': 24.0.6
+
+ '@inquirer/prompts@7.5.3(@types/node@24.0.6)':
+ dependencies:
+ '@inquirer/checkbox': 4.1.8(@types/node@24.0.6)
+ '@inquirer/confirm': 5.1.12(@types/node@24.0.6)
+ '@inquirer/editor': 4.2.13(@types/node@24.0.6)
+ '@inquirer/expand': 4.0.15(@types/node@24.0.6)
+ '@inquirer/input': 4.1.12(@types/node@24.0.6)
+ '@inquirer/number': 3.0.15(@types/node@24.0.6)
+ '@inquirer/password': 4.0.15(@types/node@24.0.6)
+ '@inquirer/rawlist': 4.1.3(@types/node@24.0.6)
+ '@inquirer/search': 3.0.15(@types/node@24.0.6)
+ '@inquirer/select': 4.2.3(@types/node@24.0.6)
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/rawlist@4.0.10(@types/node@22.15.2)':
+ '@inquirer/rawlist@4.1.3(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/search@3.0.10(@types/node@22.15.2)':
+ '@inquirer/search@3.0.15(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/figures': 1.0.11
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/figures': 1.0.12
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/select@4.0.10(@types/node@22.15.2)':
+ '@inquirer/select@4.2.3(@types/node@24.0.6)':
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/figures': 1.0.11
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/figures': 1.0.12
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@inquirer/type@3.0.5(@types/node@22.15.2)':
+ '@inquirer/type@3.0.7(@types/node@24.0.6)':
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
'@isaacs/cliui@8.0.2':
dependencies:
@@ -3296,20 +3424,30 @@ snapshots:
'@istanbuljs/schema@0.1.3': {}
- '@jest/expect-utils@29.7.0':
+ '@jest/diff-sequences@30.0.1': {}
+
+ '@jest/expect-utils@30.0.3':
+ dependencies:
+ '@jest/get-type': 30.0.1
+
+ '@jest/get-type@30.0.1': {}
+
+ '@jest/pattern@30.0.1':
dependencies:
- jest-get-type: 29.6.3
+ '@types/node': 24.0.6
+ jest-regex-util: 30.0.1
- '@jest/schemas@29.6.3':
+ '@jest/schemas@30.0.1':
dependencies:
- '@sinclair/typebox': 0.27.8
+ '@sinclair/typebox': 0.34.37
- '@jest/types@29.6.3':
+ '@jest/types@30.0.1':
dependencies:
- '@jest/schemas': 29.6.3
+ '@jest/pattern': 30.0.1
+ '@jest/schemas': 30.0.1
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
'@types/yargs': 17.0.33
chalk: 4.1.2
@@ -3335,63 +3473,66 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@polka/url@1.0.0-next.28': {}
+ '@polka/url@1.0.0-next.29': {}
- '@rollup/rollup-android-arm-eabi@4.35.0':
+ '@rollup/rollup-android-arm-eabi@4.44.1':
optional: true
- '@rollup/rollup-android-arm64@4.35.0':
+ '@rollup/rollup-android-arm64@4.44.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.35.0':
+ '@rollup/rollup-darwin-arm64@4.44.1':
optional: true
- '@rollup/rollup-darwin-x64@4.35.0':
+ '@rollup/rollup-darwin-x64@4.44.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.35.0':
+ '@rollup/rollup-freebsd-arm64@4.44.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.35.0':
+ '@rollup/rollup-freebsd-x64@4.44.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.35.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.35.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.44.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.35.0':
+ '@rollup/rollup-linux-arm64-gnu@4.44.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.35.0':
+ '@rollup/rollup-linux-arm64-musl@4.44.1':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.35.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.44.1':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.35.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.35.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.44.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.35.0':
+ '@rollup/rollup-linux-riscv64-musl@4.44.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.35.0':
+ '@rollup/rollup-linux-s390x-gnu@4.44.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.35.0':
+ '@rollup/rollup-linux-x64-gnu@4.44.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.35.0':
+ '@rollup/rollup-linux-x64-musl@4.44.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.35.0':
+ '@rollup/rollup-win32-arm64-msvc@4.44.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.35.0':
+ '@rollup/rollup-win32-ia32-msvc@4.44.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.44.1':
optional: true
'@sideway/address@4.1.5':
@@ -3402,39 +3543,45 @@ snapshots:
'@sideway/pinpoint@2.0.0': {}
- '@sinclair/typebox@0.27.8': {}
+ '@sinclair/typebox@0.34.37': {}
'@socket.io/component-emitter@3.1.2': {}
- '@types/body-parser@1.19.5':
+ '@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
+
+ '@types/chai@5.2.2':
+ dependencies:
+ '@types/deep-eql': 4.0.2
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@types/cors@2.8.17':
+ '@types/cors@2.8.19':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@types/estree@1.0.6': {}
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.8': {}
'@types/express-serve-static-core@5.0.6':
dependencies:
- '@types/node': 22.15.2
- '@types/qs': 6.9.18
+ '@types/node': 24.0.6
+ '@types/qs': 6.14.0
'@types/range-parser': 1.2.7
- '@types/send': 0.17.4
+ '@types/send': 0.17.5
- '@types/express@5.0.1':
+ '@types/express@5.0.3':
dependencies:
- '@types/body-parser': 1.19.5
+ '@types/body-parser': 1.19.6
'@types/express-serve-static-core': 5.0.6
- '@types/serve-static': 1.15.7
+ '@types/serve-static': 1.15.8
- '@types/http-errors@2.0.4': {}
+ '@types/http-errors@2.0.5': {}
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -3446,37 +3593,37 @@ snapshots:
dependencies:
'@types/istanbul-lib-report': 3.0.3
- '@types/jest@29.5.14':
+ '@types/jest@30.0.0':
dependencies:
- expect: 29.7.0
- pretty-format: 29.7.0
+ expect: 30.0.3
+ pretty-format: 30.0.2
'@types/json-schema@7.0.15': {}
- '@types/lodash@4.17.16': {}
+ '@types/lodash@4.17.19': {}
'@types/mime@1.3.5': {}
'@types/node@17.0.45': {}
- '@types/node@22.15.2':
+ '@types/node@24.0.6':
dependencies:
- undici-types: 6.21.0
+ undici-types: 7.8.0
- '@types/qs@6.9.18': {}
+ '@types/qs@6.14.0': {}
'@types/range-parser@1.2.7': {}
- '@types/send@0.17.4':
+ '@types/send@0.17.5':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
- '@types/serve-static@1.15.7':
+ '@types/serve-static@1.15.8':
dependencies:
- '@types/http-errors': 2.0.4
- '@types/node': 22.15.2
- '@types/send': 0.17.4
+ '@types/http-errors': 2.0.5
+ '@types/node': 24.0.6
+ '@types/send': 0.17.5
'@types/stack-utils@2.0.3': {}
@@ -3484,7 +3631,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
'@types/yargs-parser@21.0.3': {}
@@ -3492,55 +3639,76 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
- '@vitest/expect@3.1.2':
+ '@vitest/coverage-v8@3.2.4(vitest@3.2.4)':
dependencies:
- '@vitest/spy': 3.1.2
- '@vitest/utils': 3.1.2
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 1.0.2
+ ast-v8-to-istanbul: 0.3.3
+ debug: 4.4.1
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.1.7
+ magic-string: 0.30.17
+ magicast: 0.3.5
+ std-env: 3.9.0
+ test-exclude: 7.0.1
+ tinyrainbow: 2.0.0
+ vitest: 3.2.4(@types/node@24.0.6)(@vitest/ui@3.2.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.2
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
chai: 5.2.0
tinyrainbow: 2.0.0
- '@vitest/mocker@3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1))':
+ '@vitest/mocker@3.2.4(vite@7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))':
dependencies:
- '@vitest/spy': 3.1.2
+ '@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
- vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ vite: 7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
- '@vitest/pretty-format@3.1.2':
+ '@vitest/pretty-format@3.2.4':
dependencies:
tinyrainbow: 2.0.0
- '@vitest/runner@3.1.2':
+ '@vitest/runner@3.2.4':
dependencies:
- '@vitest/utils': 3.1.2
+ '@vitest/utils': 3.2.4
pathe: 2.0.3
+ strip-literal: 3.0.0
- '@vitest/snapshot@3.1.2':
+ '@vitest/snapshot@3.2.4':
dependencies:
- '@vitest/pretty-format': 3.1.2
+ '@vitest/pretty-format': 3.2.4
magic-string: 0.30.17
pathe: 2.0.3
- '@vitest/spy@3.1.2':
+ '@vitest/spy@3.2.4':
dependencies:
- tinyspy: 3.0.2
+ tinyspy: 4.0.3
- '@vitest/ui@3.1.2(vitest@3.1.2)':
+ '@vitest/ui@3.2.4(vitest@3.2.4)':
dependencies:
- '@vitest/utils': 3.1.2
+ '@vitest/utils': 3.2.4
fflate: 0.8.2
flatted: 3.3.3
pathe: 2.0.3
sirv: 3.0.1
- tinyglobby: 0.2.13
+ tinyglobby: 0.2.14
tinyrainbow: 2.0.0
- vitest: 3.1.2(@types/node@22.15.2)(@vitest/ui@3.1.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ vitest: 3.2.4(@types/node@24.0.6)(@vitest/ui@3.2.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
- '@vitest/utils@3.1.2':
+ '@vitest/utils@3.2.4':
dependencies:
- '@vitest/pretty-format': 3.1.2
- loupe: 3.1.3
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.1.4
tinyrainbow: 2.0.0
abort-controller@3.0.0:
@@ -3557,7 +3725,7 @@ snapshots:
mime-types: 3.0.1
negotiator: 1.0.0
- acorn@8.14.1: {}
+ acorn@8.15.0: {}
ajv@8.17.1:
dependencies:
@@ -3605,6 +3773,12 @@ snapshots:
assertion-error@2.0.1: {}
+ ast-v8-to-istanbul@0.3.3:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ estree-walker: 3.0.3
+ js-tokens: 9.0.1
+
astral-regex@2.0.0: {}
async@3.2.6: {}
@@ -3613,10 +3787,10 @@ snapshots:
atomic-sleep@1.0.0: {}
- axios@1.8.2(debug@4.4.0):
+ axios@1.10.0(debug@4.4.1):
dependencies:
- follow-redirects: 1.15.9(debug@4.4.0)
- form-data: 4.0.2
+ follow-redirects: 1.15.9(debug@4.4.1)
+ form-data: 4.0.3
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
@@ -3654,7 +3828,7 @@ snapshots:
dependencies:
bytes: 3.1.2
content-type: 1.0.5
- debug: 4.4.0
+ debug: 4.4.1
http-errors: 2.0.0
iconv-lite: 0.6.3
on-finished: 2.4.1
@@ -3664,12 +3838,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- brace-expansion@1.1.11:
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -3687,14 +3861,18 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- bundle-require@5.1.0(esbuild@0.25.1):
+ bundle-name@4.1.0:
dependencies:
- esbuild: 0.25.1
+ run-applescript: 7.0.0
+
+ bundle-require@5.1.0(esbuild@0.25.5):
+ dependencies:
+ esbuild: 0.25.5
load-tsconfig: 0.2.5
bytes@3.1.2: {}
- c12@2.0.1:
+ c12@2.0.1(magicast@0.3.5):
dependencies:
chokidar: 4.0.3
confbox: 0.1.8
@@ -3708,6 +3886,8 @@ snapshots:
perfect-debounce: 1.0.0
pkg-types: 1.3.1
rc9: 2.1.2
+ optionalDependencies:
+ magicast: 0.3.5
c8@10.1.3:
dependencies:
@@ -3749,8 +3929,8 @@ snapshots:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
- loupe: 3.1.3
- pathval: 2.0.0
+ loupe: 3.1.4
+ pathval: 2.0.1
chalk@2.4.2:
dependencies:
@@ -3796,11 +3976,11 @@ snapshots:
chownr@2.0.0: {}
- ci-info@3.9.0: {}
+ ci-info@4.2.0: {}
citty@0.1.6:
dependencies:
- consola: 3.4.0
+ consola: 3.4.2
cleye@1.3.4:
dependencies:
@@ -3846,6 +4026,8 @@ snapshots:
color-name@1.1.4: {}
+ color-support@1.1.3: {}
+
colorette@2.0.20: {}
combined-stream@1.0.8:
@@ -3864,7 +4046,7 @@ snapshots:
confbox@0.1.8: {}
- consola@3.4.0: {}
+ consola@3.4.2: {}
constant-case@2.0.0:
dependencies:
@@ -3913,16 +4095,25 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.4.0:
+ debug@4.4.1:
dependencies:
ms: 2.1.3
deep-eql@5.0.2: {}
+ default-browser-id@5.0.0: {}
+
+ default-browser@5.2.1:
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
+
defaults@1.0.4:
dependencies:
clone: 1.0.4
+ define-lazy-prop@3.0.0: {}
+
defu@6.1.4: {}
degit@2.8.4: {}
@@ -3931,7 +4122,7 @@ snapshots:
depd@2.0.0: {}
- destr@2.0.3: {}
+ destr@2.0.5: {}
destroy@1.2.0: {}
@@ -3939,8 +4130,6 @@ snapshots:
detect-newline@4.0.1: {}
- diff-sequences@29.6.3: {}
-
diff@7.0.0: {}
doctrine@3.0.0:
@@ -3953,6 +4142,8 @@ snapshots:
dotenv@16.5.0: {}
+ dotenv@17.0.0: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -3975,7 +4166,7 @@ snapshots:
encodeurl@2.0.0: {}
- end-of-stream@1.4.4:
+ end-of-stream@1.4.5:
dependencies:
once: 1.4.0
@@ -3983,8 +4174,8 @@ snapshots:
engine.io@6.6.4:
dependencies:
- '@types/cors': 2.8.17
- '@types/node': 22.15.2
+ '@types/cors': 2.8.19
+ '@types/node': 24.0.6
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@@ -4006,7 +4197,7 @@ snapshots:
es-errors@1.3.0: {}
- es-module-lexer@1.6.0: {}
+ es-module-lexer@1.7.0: {}
es-object-atoms@1.1.1:
dependencies:
@@ -4057,33 +4248,33 @@ snapshots:
es6-iterator: 0.1.3
es6-symbol: 2.0.1
- esbuild@0.25.1:
+ esbuild@0.25.5:
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.5
+ '@esbuild/android-arm': 0.25.5
+ '@esbuild/android-arm64': 0.25.5
+ '@esbuild/android-x64': 0.25.5
+ '@esbuild/darwin-arm64': 0.25.5
+ '@esbuild/darwin-x64': 0.25.5
+ '@esbuild/freebsd-arm64': 0.25.5
+ '@esbuild/freebsd-x64': 0.25.5
+ '@esbuild/linux-arm': 0.25.5
+ '@esbuild/linux-arm64': 0.25.5
+ '@esbuild/linux-ia32': 0.25.5
+ '@esbuild/linux-loong64': 0.25.5
+ '@esbuild/linux-mips64el': 0.25.5
+ '@esbuild/linux-ppc64': 0.25.5
+ '@esbuild/linux-riscv64': 0.25.5
+ '@esbuild/linux-s390x': 0.25.5
+ '@esbuild/linux-x64': 0.25.5
+ '@esbuild/netbsd-arm64': 0.25.5
+ '@esbuild/netbsd-x64': 0.25.5
+ '@esbuild/openbsd-arm64': 0.25.5
+ '@esbuild/openbsd-x64': 0.25.5
+ '@esbuild/sunos-x64': 0.25.5
+ '@esbuild/win32-arm64': 0.25.5
+ '@esbuild/win32-ia32': 0.25.5
+ '@esbuild/win32-x64': 0.25.5
escalade@3.2.0: {}
@@ -4104,7 +4295,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
esutils@2.0.3: {}
@@ -4135,13 +4326,14 @@ snapshots:
expect-type@1.2.1: {}
- expect@29.7.0:
+ expect@30.0.3:
dependencies:
- '@jest/expect-utils': 29.7.0
- jest-get-type: 29.6.3
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
+ '@jest/expect-utils': 30.0.3
+ '@jest/get-type': 30.0.1
+ jest-matcher-utils: 30.0.3
+ jest-message-util: 30.0.2
+ jest-mock: 30.0.2
+ jest-util: 30.0.2
express@5.1.0:
dependencies:
@@ -4151,7 +4343,7 @@ snapshots:
content-type: 1.0.5
cookie: 0.7.2
cookie-signature: 1.2.2
- debug: 4.4.0
+ debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -4169,7 +4361,7 @@ snapshots:
router: 2.2.0
send: 1.2.0
serve-static: 2.2.0
- statuses: 2.0.1
+ statuses: 2.0.2
type-is: 2.0.1
vary: 1.1.2
transitivePeerDependencies:
@@ -4195,13 +4387,9 @@ snapshots:
fast-uri@3.0.6: {}
- fastest-validator@1.19.0: {}
-
- fdir@6.4.3(picomatch@4.0.2):
- optionalDependencies:
- picomatch: 4.0.2
+ fastest-validator@1.19.1: {}
- fdir@6.4.4(picomatch@4.0.2):
+ fdir@6.4.6(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
@@ -4217,12 +4405,12 @@ snapshots:
finalhandler@2.1.0:
dependencies:
- debug: 4.4.0
+ debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
on-finished: 2.4.1
parseurl: 1.3.3
- statuses: 2.0.1
+ statuses: 2.0.2
transitivePeerDependencies:
- supports-color
@@ -4231,22 +4419,29 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ fix-dts-default-cjs-exports@1.0.1:
+ dependencies:
+ magic-string: 0.30.17
+ mlly: 1.7.4
+ rollup: 4.44.1
+
flatted@3.3.3: {}
- follow-redirects@1.15.9(debug@4.4.0):
+ follow-redirects@1.15.9(debug@4.4.1):
optionalDependencies:
- debug: 4.4.0
+ debug: 4.4.1
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
- form-data@4.0.2:
+ form-data@4.0.3:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
mime-types: 2.1.35
forwarded@0.2.0: {}
@@ -4296,25 +4491,23 @@ snapshots:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
- get-stdin@9.0.0: {}
-
get-stream@6.0.1: {}
- get-tsconfig@4.10.0:
+ get-tsconfig@4.10.1:
dependencies:
resolve-pkg-maps: 1.0.0
giget@1.2.5:
dependencies:
citty: 0.1.6
- consola: 3.4.0
+ consola: 3.4.2
defu: 6.1.4
node-fetch-native: 1.6.6
nypm: 0.5.4
pathe: 2.0.3
tar: 6.2.1
- git-hooks-list@3.2.0: {}
+ git-hooks-list@4.1.1: {}
glob@10.4.5:
dependencies:
@@ -4347,11 +4540,11 @@ snapshots:
graceful-fs@4.2.11: {}
- graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1):
+ graphql-ws@6.0.5(graphql@16.11.0)(ws@8.18.2):
dependencies:
graphql: 16.11.0
optionalDependencies:
- ws: 8.18.1
+ ws: 8.18.2
graphql@16.11.0: {}
@@ -4404,7 +4597,7 @@ snapshots:
'@types/node': 17.0.45
chalk: 4.1.2
change-case: 3.1.0
- debug: 4.4.0
+ debug: 4.4.1
degit: 2.8.4
ejs: 3.1.10
enquirer: 2.4.1
@@ -4441,24 +4634,30 @@ snapshots:
inherits@2.0.4: {}
- inquirer@12.4.3(@types/node@22.15.2):
+ inquirer@12.6.3(@types/node@24.0.6):
dependencies:
- '@inquirer/core': 10.1.8(@types/node@22.15.2)
- '@inquirer/prompts': 7.3.3(@types/node@22.15.2)
- '@inquirer/type': 3.0.5(@types/node@22.15.2)
+ '@inquirer/core': 10.1.13(@types/node@24.0.6)
+ '@inquirer/prompts': 7.5.3(@types/node@24.0.6)
+ '@inquirer/type': 3.0.7(@types/node@24.0.6)
ansi-escapes: 4.3.2
mute-stream: 2.0.0
run-async: 3.0.0
rxjs: 7.8.2
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
ipaddr.js@1.9.1: {}
ipaddr.js@2.2.0: {}
+ is-docker@3.0.0: {}
+
is-fullwidth-code-point@3.0.0: {}
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
is-interactive@1.0.0: {}
is-lower-case@1.1.3:
@@ -4479,6 +4678,10 @@ snapshots:
dependencies:
upper-case: 1.1.3
+ is-wsl@3.1.0:
+ dependencies:
+ is-inside-container: 1.0.0
+
isexe@2.0.0: {}
isexe@3.1.1: {}
@@ -4493,6 +4696,14 @@ snapshots:
make-dir: 4.0.0
supports-color: 7.2.0
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ debug: 4.4.1
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
+
istanbul-reports@3.1.7:
dependencies:
html-escaper: 2.0.2
@@ -4511,42 +4722,48 @@ snapshots:
filelist: 1.0.4
minimatch: 3.1.2
- jest-diff@29.7.0:
+ jest-diff@30.0.3:
dependencies:
+ '@jest/diff-sequences': 30.0.1
+ '@jest/get-type': 30.0.1
chalk: 4.1.2
- diff-sequences: 29.6.3
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
-
- jest-get-type@29.6.3: {}
+ pretty-format: 30.0.2
- jest-matcher-utils@29.7.0:
+ jest-matcher-utils@30.0.3:
dependencies:
+ '@jest/get-type': 30.0.1
chalk: 4.1.2
- jest-diff: 29.7.0
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
+ jest-diff: 30.0.3
+ pretty-format: 30.0.2
- jest-message-util@29.7.0:
+ jest-message-util@30.0.2:
dependencies:
- '@babel/code-frame': 7.26.2
- '@jest/types': 29.6.3
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 30.0.1
'@types/stack-utils': 2.0.3
chalk: 4.1.2
graceful-fs: 4.2.11
micromatch: 4.0.8
- pretty-format: 29.7.0
+ pretty-format: 30.0.2
slash: 3.0.0
stack-utils: 2.0.6
- jest-util@29.7.0:
+ jest-mock@30.0.2:
dependencies:
- '@jest/types': 29.6.3
- '@types/node': 22.15.2
+ '@jest/types': 30.0.1
+ '@types/node': 24.0.6
+ jest-util: 30.0.2
+
+ jest-regex-util@30.0.1: {}
+
+ jest-util@30.0.2:
+ dependencies:
+ '@jest/types': 30.0.1
+ '@types/node': 24.0.6
chalk: 4.1.2
- ci-info: 3.9.0
+ ci-info: 4.2.0
graceful-fs: 4.2.11
- picomatch: 2.3.1
+ picomatch: 4.0.2
jiti@2.4.2: {}
@@ -4562,6 +4779,8 @@ snapshots:
js-tokens@4.0.0: {}
+ js-tokens@9.0.1: {}
+
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
@@ -4614,7 +4833,7 @@ snapshots:
chalk: 4.1.2
is-unicode-supported: 0.1.0
- loupe@3.1.3: {}
+ loupe@3.1.4: {}
lower-case-first@1.0.2:
dependencies:
@@ -4636,9 +4855,15 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ magicast@0.3.5:
+ dependencies:
+ '@babel/parser': 7.28.0
+ '@babel/types': 7.28.0
+ source-map-js: 1.2.1
+
make-dir@4.0.0:
dependencies:
- semver: 7.7.1
+ semver: 7.7.2
math-intrinsics@1.1.0: {}
@@ -4685,15 +4910,15 @@ snapshots:
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@5.1.6:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimatch@9.0.5:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minimist@1.2.8: {}
@@ -4714,16 +4939,16 @@ snapshots:
mlly@1.7.4:
dependencies:
- acorn: 8.14.1
+ acorn: 8.15.0
pathe: 2.0.3
pkg-types: 1.3.1
- ufo: 1.5.4
+ ufo: 1.6.1
- moleculer-connect@0.2.2(debug@4.4.0)(moleculer-repl@0.7.4):
+ moleculer-connect@0.2.2(debug@4.4.1)(moleculer-repl@0.7.4):
dependencies:
glob: 10.4.5
lodash: 4.17.21
- moleculer: 0.14.35(debug@4.4.0)(nats@2.29.3)(pino@8.21.0)
+ moleculer: 0.14.35(debug@4.4.1)(nats@2.29.3)(pino@8.21.0)
moleculer-repl: 0.7.4
nats: 2.29.3
pino: 8.21.0
@@ -4752,11 +4977,11 @@ snapshots:
- thrift
- winston
- moleculer-io@2.2.0(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)):
+ moleculer-io@2.2.0(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)):
dependencies:
kleur: 4.1.5
lodash: 4.17.21
- moleculer: 0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)
+ moleculer: 0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)
socket.io: 4.8.1
transitivePeerDependencies:
- bufferutil
@@ -4777,7 +5002,7 @@ snapshots:
tiny-human-time: 1.2.0
yargs-parser: 21.1.1
- moleculer-web@0.10.8(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)):
+ moleculer-web@0.10.8(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)):
dependencies:
'@fastify/busboy': 1.2.1
body-parser: 1.20.3
@@ -4787,23 +5012,23 @@ snapshots:
isstream: 0.1.2
kleur: 4.1.5
lodash: 4.17.21
- moleculer: 0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)
+ moleculer: 0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)
path-to-regexp: 3.3.0
qs: 6.14.0
serve-static: 1.16.2
transitivePeerDependencies:
- supports-color
- moleculer-zod-validator@3.3.1(moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0))(zod@3.24.3):
+ moleculer-zod-validator@3.3.1(moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0))(zod@3.25.67):
dependencies:
- moleculer: 0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0)
- zod: 3.24.3
+ moleculer: 0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0)
+ zod: 3.25.67
- moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@8.21.0):
+ moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@8.21.0):
dependencies:
args: 5.0.3
eventemitter2: 6.4.9
- fastest-validator: 1.19.0
+ fastest-validator: 1.19.1
glob: 7.2.3
ipaddr.js: 2.2.0
kleur: 4.1.5
@@ -4812,17 +5037,17 @@ snapshots:
node-fetch: 2.7.0
recursive-watch: 1.1.4
optionalDependencies:
- debug: 4.4.0
+ debug: 4.4.1
nats: 2.29.3
pino: 8.21.0
transitivePeerDependencies:
- encoding
- moleculer@0.14.35(debug@4.4.0)(nats@2.29.3)(pino@9.6.0):
+ moleculer@0.14.35(debug@4.4.1)(nats@2.29.3)(pino@9.7.0):
dependencies:
args: 5.0.3
eventemitter2: 6.4.9
- fastest-validator: 1.19.0
+ fastest-validator: 1.19.1
glob: 7.2.3
ipaddr.js: 2.2.0
kleur: 4.1.5
@@ -4831,9 +5056,9 @@ snapshots:
node-fetch: 2.7.0
recursive-watch: 1.1.4
optionalDependencies:
- debug: 4.4.0
+ debug: 4.4.1
nats: 2.29.3
- pino: 9.6.0
+ pino: 9.7.0
transitivePeerDependencies:
- encoding
@@ -4853,7 +5078,7 @@ snapshots:
object-assign: 4.1.1
thenify-all: 1.6.0
- nanoid@3.3.9: {}
+ nanoid@3.3.11: {}
nats@2.29.3:
dependencies:
@@ -4885,15 +5110,15 @@ snapshots:
npm-normalize-package-bin@4.0.0: {}
- npm-run-all2@7.0.2:
+ npm-run-all2@8.0.4:
dependencies:
ansi-styles: 6.2.1
cross-spawn: 7.0.6
memorystream: 0.3.1
- minimatch: 9.0.5
+ picomatch: 4.0.2
pidtree: 0.6.0
read-package-json-fast: 4.0.0
- shell-quote: 1.8.2
+ shell-quote: 1.8.3
which: 5.0.0
npm-run-path@4.0.1:
@@ -4903,11 +5128,11 @@ snapshots:
nypm@0.5.4:
dependencies:
citty: 0.1.6
- consola: 3.4.0
+ consola: 3.4.2
pathe: 2.0.3
pkg-types: 1.3.1
tinyexec: 0.3.2
- ufo: 1.5.4
+ ufo: 1.6.1
object-assign@4.1.1: {}
@@ -4929,11 +5154,18 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ open@10.1.2:
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 3.1.0
+
openapi-types@12.1.3: {}
- openapi3-ts@4.4.0:
+ openapi3-ts@4.5.0:
dependencies:
- yaml: 2.7.1
+ yaml: 2.8.0
ora@5.4.1:
dependencies:
@@ -4993,7 +5225,7 @@ snapshots:
pathe@2.0.3: {}
- pathval@2.0.0: {}
+ pathval@2.0.1: {}
perfect-debounce@1.0.0: {}
@@ -5025,7 +5257,7 @@ snapshots:
minimist: 1.2.8
on-exit-leak-free: 2.1.2
pino-abstract-transport: 2.0.0
- pump: 3.0.2
+ pump: 3.0.3
secure-json-parse: 2.7.0
sonic-boom: 4.2.0
strip-json-comments: 3.1.1
@@ -5048,21 +5280,21 @@ snapshots:
sonic-boom: 3.8.1
thread-stream: 2.7.0
- pino@9.6.0:
+ pino@9.7.0:
dependencies:
atomic-sleep: 1.0.0
fast-redact: 3.5.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 2.0.0
pino-std-serializers: 7.0.0
- process-warning: 4.0.1
+ process-warning: 5.0.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
safe-stable-stringify: 2.5.0
sonic-boom: 4.2.0
thread-stream: 3.1.0
- pirates@4.0.6: {}
+ pirates@4.0.7: {}
pkg-types@1.3.1:
dependencies:
@@ -5070,32 +5302,32 @@ snapshots:
mlly: 1.7.4
pathe: 2.0.3
- postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.3)(yaml@2.7.1):
+ postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0):
dependencies:
lilconfig: 3.1.3
optionalDependencies:
jiti: 2.4.2
- postcss: 8.5.3
- tsx: 4.19.3
- yaml: 2.7.1
+ postcss: 8.5.6
+ tsx: 4.20.3
+ yaml: 2.8.0
- postcss@8.5.3:
+ postcss@8.5.6:
dependencies:
- nanoid: 3.3.9
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
pretty-bytes@5.6.0: {}
- pretty-format@29.7.0:
+ pretty-format@30.0.2:
dependencies:
- '@jest/schemas': 29.6.3
+ '@jest/schemas': 30.0.1
ansi-styles: 5.2.0
react-is: 18.3.1
process-warning@3.0.0: {}
- process-warning@4.0.1: {}
+ process-warning@5.0.0: {}
process@0.11.10: {}
@@ -5106,9 +5338,9 @@ snapshots:
proxy-from-env@1.1.0: {}
- pump@3.0.2:
+ pump@3.0.3:
dependencies:
- end-of-stream: 1.4.4
+ end-of-stream: 1.4.5
once: 1.4.0
punycode@2.3.1: {}
@@ -5142,7 +5374,7 @@ snapshots:
rc9@2.1.2:
dependencies:
defu: 6.1.4
- destr: 2.0.3
+ destr: 2.0.5
react-is@18.3.1: {}
@@ -5190,34 +5422,35 @@ snapshots:
dependencies:
glob: 10.4.5
- rollup@4.35.0:
+ rollup@4.44.1:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
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.44.1
+ '@rollup/rollup-android-arm64': 4.44.1
+ '@rollup/rollup-darwin-arm64': 4.44.1
+ '@rollup/rollup-darwin-x64': 4.44.1
+ '@rollup/rollup-freebsd-arm64': 4.44.1
+ '@rollup/rollup-freebsd-x64': 4.44.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.44.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.44.1
+ '@rollup/rollup-linux-arm64-gnu': 4.44.1
+ '@rollup/rollup-linux-arm64-musl': 4.44.1
+ '@rollup/rollup-linux-loongarch64-gnu': 4.44.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.44.1
+ '@rollup/rollup-linux-riscv64-musl': 4.44.1
+ '@rollup/rollup-linux-s390x-gnu': 4.44.1
+ '@rollup/rollup-linux-x64-gnu': 4.44.1
+ '@rollup/rollup-linux-x64-musl': 4.44.1
+ '@rollup/rollup-win32-arm64-msvc': 4.44.1
+ '@rollup/rollup-win32-ia32-msvc': 4.44.1
+ '@rollup/rollup-win32-x64-msvc': 4.44.1
fsevents: 2.3.3
router@2.2.0:
dependencies:
- debug: 4.4.0
+ debug: 4.4.1
depd: 2.0.0
is-promise: 4.0.0
parseurl: 1.3.3
@@ -5225,6 +5458,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ run-applescript@7.0.0: {}
+
run-async@3.0.0: {}
rxjs@7.8.2:
@@ -5239,7 +5474,7 @@ snapshots:
secure-json-parse@2.7.0: {}
- semver@7.7.1: {}
+ semver@7.7.2: {}
send@0.19.0:
dependencies:
@@ -5261,7 +5496,7 @@ snapshots:
send@1.2.0:
dependencies:
- debug: 4.4.0
+ debug: 4.4.1
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -5271,7 +5506,7 @@ snapshots:
ms: 2.1.3
on-finished: 2.4.1
range-parser: 1.2.1
- statuses: 2.0.1
+ statuses: 2.0.2
transitivePeerDependencies:
- supports-color
@@ -5306,7 +5541,7 @@ snapshots:
shebang-regex@3.0.0: {}
- shell-quote@1.8.2: {}
+ shell-quote@1.8.3: {}
side-channel-list@1.0.0:
dependencies:
@@ -5344,7 +5579,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
@@ -5400,16 +5635,15 @@ snapshots:
sort-object-keys@1.1.3: {}
- sort-package-json@3.0.0:
+ sort-package-json@3.3.1:
dependencies:
detect-indent: 7.0.1
detect-newline: 4.0.1
- get-stdin: 9.0.0
- git-hooks-list: 3.2.0
+ git-hooks-list: 4.1.1
is-plain-obj: 4.1.0
- semver: 7.7.1
+ semver: 7.7.2
sort-object-keys: 1.1.3
- tinyglobby: 0.2.12
+ tinyglobby: 0.2.14
source-map-js@1.2.1: {}
@@ -5431,6 +5665,8 @@ snapshots:
statuses@2.0.1: {}
+ statuses@2.0.2: {}
+
std-env@3.9.0: {}
string-argv@0.3.2: {}
@@ -5463,6 +5699,10 @@ snapshots:
strip-json-comments@3.1.1: {}
+ strip-literal@3.0.0:
+ dependencies:
+ js-tokens: 9.0.1
+
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.8
@@ -5470,7 +5710,7 @@ snapshots:
glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
- pirates: 4.0.6
+ pirates: 4.0.7
ts-interface-checker: 0.1.13
supports-color@5.5.0:
@@ -5557,21 +5797,16 @@ snapshots:
tinyexec@0.3.2: {}
- tinyglobby@0.2.12:
+ tinyglobby@0.2.14:
dependencies:
- fdir: 6.4.3(picomatch@4.0.2)
+ fdir: 6.4.6(picomatch@4.0.2)
picomatch: 4.0.2
- tinyglobby@0.2.13:
- dependencies:
- fdir: 6.4.4(picomatch@4.0.2)
- picomatch: 4.0.2
-
- tinypool@1.0.2: {}
+ tinypool@1.1.1: {}
tinyrainbow@2.0.0: {}
- tinyspy@3.0.2: {}
+ tinyspy@4.0.3: {}
title-case@2.1.1:
dependencies:
@@ -5602,26 +5837,27 @@ snapshots:
tslib@2.8.1: {}
- tsup@8.4.0(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.3)(yaml@2.7.1):
+ tsup@8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0):
dependencies:
- bundle-require: 5.1.0(esbuild@0.25.1)
+ bundle-require: 5.1.0(esbuild@0.25.5)
cac: 6.7.14
chokidar: 4.0.3
- consola: 3.4.0
- debug: 4.4.0
- esbuild: 0.25.1
+ consola: 3.4.2
+ debug: 4.4.1
+ esbuild: 0.25.5
+ fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
- postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.3)(yaml@2.7.1)
+ postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0)
resolve-from: 5.0.0
- rollup: 4.35.0
+ rollup: 4.44.1
source-map: 0.8.0-beta.0
sucrase: 3.35.0
tinyexec: 0.3.2
- tinyglobby: 0.2.12
+ tinyglobby: 0.2.14
tree-kill: 1.2.2
optionalDependencies:
- postcss: 8.5.3
+ postcss: 8.5.6
typescript: 5.8.3
transitivePeerDependencies:
- jiti
@@ -5629,10 +5865,10 @@ snapshots:
- tsx
- yaml
- tsx@4.19.3:
+ tsx@4.20.3:
dependencies:
- esbuild: 0.25.1
- get-tsconfig: 4.10.0
+ esbuild: 0.25.5
+ get-tsconfig: 4.10.1
optionalDependencies:
fsevents: 2.3.3
@@ -5659,12 +5895,12 @@ snapshots:
typescript@5.8.3: {}
- ufo@1.5.4: {}
+ ufo@1.6.1: {}
uglify-js@3.19.3:
optional: true
- undici-types@6.21.0: {}
+ undici-types@7.8.0: {}
universalify@2.0.1: {}
@@ -5684,17 +5920,17 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
- validator@13.12.0: {}
+ validator@13.15.15: {}
vary@1.1.2: {}
- vite-node@3.1.2(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1):
+ vite-node@3.2.4(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
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.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ vite: 7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -5709,47 +5945,49 @@ snapshots:
- tsx
- yaml
- vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1):
+ vite@7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
dependencies:
- esbuild: 0.25.1
- fdir: 6.4.4(picomatch@4.0.2)
+ esbuild: 0.25.5
+ fdir: 6.4.6(picomatch@4.0.2)
picomatch: 4.0.2
- postcss: 8.5.3
- rollup: 4.35.0
- tinyglobby: 0.2.13
+ postcss: 8.5.6
+ rollup: 4.44.1
+ tinyglobby: 0.2.14
optionalDependencies:
- '@types/node': 22.15.2
+ '@types/node': 24.0.6
fsevents: 2.3.3
jiti: 2.4.2
- tsx: 4.19.3
- yaml: 2.7.1
-
- vitest@3.1.2(@types/node@22.15.2)(@vitest/ui@3.1.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1):
- dependencies:
- '@vitest/expect': 3.1.2
- '@vitest/mocker': 3.1.2(vite@6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1))
- '@vitest/pretty-format': 3.1.2
- '@vitest/runner': 3.1.2
- '@vitest/snapshot': 3.1.2
- '@vitest/spy': 3.1.2
- '@vitest/utils': 3.1.2
+ tsx: 4.20.3
+ yaml: 2.8.0
+
+ vitest@3.2.4(@types/node@24.0.6)(@vitest/ui@3.2.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
+ dependencies:
+ '@types/chai': 5.2.2
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))
+ '@vitest/pretty-format': 3.2.4
+ '@vitest/runner': 3.2.4
+ '@vitest/snapshot': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
chai: 5.2.0
- debug: 4.4.0
+ debug: 4.4.1
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
+ picomatch: 4.0.2
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
- tinyglobby: 0.2.13
- tinypool: 1.0.2
+ tinyglobby: 0.2.14
+ tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 6.3.3(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
- vite-node: 3.1.2(@types/node@22.15.2)(jiti@2.4.2)(tsx@4.19.3)(yaml@2.7.1)
+ vite: 7.0.0(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+ vite-node: 3.2.4(@types/node@24.0.6)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 22.15.2
- '@vitest/ui': 3.1.2(vitest@3.1.2)
+ '@types/node': 24.0.6
+ '@vitest/ui': 3.2.4(vitest@3.2.4)
transitivePeerDependencies:
- jiti
- less
@@ -5764,9 +6002,9 @@ snapshots:
- tsx
- yaml
- wait-on@8.0.3(debug@4.4.0):
+ wait-on@8.0.3(debug@4.4.1):
dependencies:
- axios: 1.8.2(debug@4.4.0)
+ axios: 1.10.0(debug@4.4.1)
joi: 17.13.3
lodash: 4.17.21
minimist: 1.2.8
@@ -5830,7 +6068,7 @@ snapshots:
ws@8.17.1: {}
- ws@8.18.1: {}
+ ws@8.18.2: {}
y18n@5.0.8: {}
@@ -5838,7 +6076,7 @@ snapshots:
yaml@2.0.0-1: {}
- yaml@2.7.1: {}
+ yaml@2.8.0: {}
yargs-parser@21.1.1: {}
@@ -5860,8 +6098,8 @@ snapshots:
dependencies:
lodash.get: 4.4.2
lodash.isequal: 4.5.0
- validator: 13.12.0
+ validator: 13.15.15
optionalDependencies:
commander: 9.5.0
- zod@3.24.3: {}
+ zod@3.25.67: {}
diff --git a/public/docs/open-api.json b/public/docs/open-api.json
index 578b5bda..f241011c 100644
--- a/public/docs/open-api.json
+++ b/public/docs/open-api.json
@@ -15,7 +15,9 @@
"/api/greeter/hello": {
"get": {
"description": "Returns the Hello Moleculer",
- "tags": ["greeter"],
+ "tags": [
+ "greeter"
+ ],
"responses": {
"200": {
"description": "Hello Moleculer",
@@ -34,7 +36,9 @@
"/api/greeter/welcome": {
"get": {
"description": "Returns Welcome, a username",
- "tags": ["greeter"],
+ "tags": [
+ "greeter"
+ ],
"parameters": [
{
"$ref": "#/components/parameters/username",
@@ -61,7 +65,9 @@
"/api/product/cart": {
"post": {
"description": "Add a product to the cart",
- "tags": ["product"],
+ "tags": [
+ "product"
+ ],
"requestBody": {
"required": true,
"content": {
@@ -88,13 +94,100 @@
}
}
}
+ },
+ "/api/product": {
+ "post": {
+ "description": "Create a new product",
+ "tags": [
+ "product"
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/addCartDTO"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Product created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateProductResponseSchemaDTO"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDTO"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDTO"
+ }
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "description": "Get all products",
+ "tags": [
+ "product"
+ ],
+ "responses": {
+ "200": {
+ "description": "List of products",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ProductSchemaDTO"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
},
"components": {
"schemas": {
"welcomeResponseDTO": {
"type": "string",
- "example": "Welcome, dunghd"
+ "example": "Welcome, Alex"
+ },
+ "welcomeDTO": {
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string",
+ "minLength": 4,
+ "maxLength": 25,
+ "description": "User name",
+ "example": "John Doe"
+ }
+ },
+ "required": [
+ "username"
+ ],
+ "description": "Welcome DTO"
},
"addCartDTO": {
"type": "object",
@@ -130,10 +223,17 @@
"type": "string"
}
},
- "required": ["city", "zip", "country"]
+ "required": [
+ "city",
+ "zip",
+ "country"
+ ]
}
},
- "required": ["name", "qty"],
+ "required": [
+ "name",
+ "qty"
+ ],
"description": "Add cart DTO"
},
"addCartResponseDTO": {
@@ -150,8 +250,137 @@
"example": "Product added to cart"
}
},
- "required": ["success", "message"],
+ "required": [
+ "success",
+ "message"
+ ],
"description": "Add cart response DTO"
+ },
+ "CreateProductResponseSchemaDTO": {
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "description": "Success flag",
+ "example": true
+ },
+ "message": {
+ "type": "string",
+ "description": "Message",
+ "example": "Product created successfully"
+ },
+ "product": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "ID of the created product",
+ "example": "12345"
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the product",
+ "example": "Iphone"
+ },
+ "qty": {
+ "type": "number",
+ "description": "Quantity of the product",
+ "example": 1
+ },
+ "price": {
+ "type": "number",
+ "description": "Price of the product",
+ "example": 1000
+ },
+ "billing": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "city": {
+ "type": "string",
+ "description": "City of the billing address",
+ "example": "New York"
+ },
+ "zip": {
+ "type": "number",
+ "description": "ZIP code of the billing address",
+ "example": 10001
+ },
+ "country": {
+ "type": "string",
+ "description": "Country of the billing address",
+ "example": "USA"
+ }
+ },
+ "required": [
+ "city",
+ "zip",
+ "country"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "qty"
+ ]
+ }
+ },
+ "required": [
+ "success",
+ "message",
+ "product"
+ ],
+ "description": "Create product response DTO"
+ },
+ "ProductSchemaDTO": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the product",
+ "example": "Iphone"
+ },
+ "qty": {
+ "type": "number",
+ "description": "Quantity of the product",
+ "example": 1
+ },
+ "price": {
+ "type": "number",
+ "description": "Price of the product",
+ "example": 1000
+ },
+ "billing": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "city": {
+ "type": "string"
+ },
+ "zip": {
+ "type": "number"
+ },
+ "country": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "city",
+ "zip",
+ "country"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "qty"
+ ],
+ "description": "Product schema"
}
},
"parameters": {
@@ -169,4 +398,4 @@
}
},
"tags": []
-}
+}
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index 6e9c91ab..d715b667 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,4 +1,4 @@
-
+
@@ -111,9 +111,7 @@
font-weight: 300;
font-size: 1.25em;
border-bottom: 2px solid transparent;
- transition:
- color 0.1s linear,
- border-bottom 0.1s linear;
+ transition: color 0.1s linear, border-bottom 0.1s linear;
}
nav ul li.active {
@@ -695,7 +693,7 @@
},
fields: {
- welcomeName: "dunghd",
+ welcomeName: "devalexanderdaza",
name: "iPhone",
quantity: 1,
},
@@ -712,7 +710,7 @@
computed: {
filteredServices() {
return this.services.filter(
- (svc) => !svc.name.startsWith("$"),
+ (svc) => !svc.name.startsWith("$")
);
},
},
@@ -748,7 +746,7 @@
getActionParams(action, maxLen) {
if (action.action && action.action.params) {
const s = Object.keys(action.action.params).join(
- ", ",
+ ", "
);
return s.length > maxLen
? s.substr(0, maxLen) + "…"
@@ -859,14 +857,14 @@
.then((res) => {
this.services = res;
res.sort((a, b) =>
- a.name.localeCompare(b.name),
+ a.name.localeCompare(b.name)
);
res.forEach((svc) => svc.nodes.sort());
})
.then(() => this.req("/api/~node/actions", null))
.then((res) => {
res.sort((a, b) =>
- a.name.localeCompare(b.name),
+ a.name.localeCompare(b.name)
);
const actions = res.reduce((a, b) => {
a[b.name] = b;
diff --git a/services/common/index.ts b/services/common/index.ts
new file mode 100644
index 00000000..692476e3
--- /dev/null
+++ b/services/common/index.ts
@@ -0,0 +1 @@
+export * from "./validation.utils";
diff --git a/services/common/validation.utils.ts b/services/common/validation.utils.ts
new file mode 100644
index 00000000..1b701888
--- /dev/null
+++ b/services/common/validation.utils.ts
@@ -0,0 +1,31 @@
+import { type Context, Errors, type GenericObject } from "moleculer";
+import { z } from "zod";
+
+import { logger } from "../../logger";
+
+/**
+ * Validates request parameters using a Zod schema
+ * @param ctx - Moleculer context containing the parameters to validate
+ * @param schema - Zod schema object to validate against
+ * @throws {Errors.ValidationError} When validation fails
+ */
+export const validateParams = (
+ ctx: Context, GenericObject>,
+ schema: T
+): void => {
+ const compiled = z.object(schema).strict();
+ try {
+ const parsedParams = compiled.parse(ctx.params);
+ logger.info("Validated parameters: %o", parsedParams);
+ } catch (err) {
+ if (err instanceof z.ZodError) {
+ throw new Errors.ValidationError(
+ "Parameters validation error!",
+ "VALIDATION_ERROR",
+ err.issues
+ );
+ }
+
+ throw err;
+ }
+};
diff --git a/services/dtos/greeter-dto.swagger.yaml b/services/dtos/greeter-dto.swagger.yaml
new file mode 100644
index 00000000..24e190ae
--- /dev/null
+++ b/services/dtos/greeter-dto.swagger.yaml
@@ -0,0 +1,18 @@
+components:
+ schemas:
+ welcomeDTO:
+ type: object
+ properties:
+ username:
+ type: string
+ minLength: 4
+ maxLength: 25
+ description: User name
+ example: John Doe
+ required:
+ - username
+ description: Welcome DTO
+ welcomeResponseDTO:
+ type: string
+ example: Welcome, Alex
+ parameters: {}
diff --git a/services/dtos/greeter.dto.ts b/services/dtos/greeter.dto.ts
new file mode 100644
index 00000000..4f49b42f
--- /dev/null
+++ b/services/dtos/greeter.dto.ts
@@ -0,0 +1,40 @@
+import {
+ extendZodWithOpenApi,
+ OpenApiGeneratorV3,
+} from "@asteasolutions/zod-to-openapi";
+import { writeFileSync } from "node:fs";
+import { resolve } from "node:path";
+import yaml from "yaml";
+import { z } from "zod";
+
+extendZodWithOpenApi(z);
+
+export const welcomeSchema = {
+ username: z.string().min(4).max(25).openapi({
+ description: "User name",
+ example: "John Doe",
+ }),
+};
+
+// Write to same folder with the DTO file
+const outputDirectory = __dirname;
+
+export const WelcomeSchema = z.object(welcomeSchema).openapi("welcomeDTO", {
+ description: "Welcome DTO",
+});
+
+export const WelcomeResponseSchema = z.string().openapi("welcomeResponseDTO", {
+ example: "Welcome, Alex",
+});
+
+const generator = new OpenApiGeneratorV3([
+ WelcomeSchema,
+ WelcomeResponseSchema,
+]);
+const components = generator.generateComponents();
+
+// Write to YAML file
+writeFileSync(
+ resolve(outputDirectory, "greeter-dto.swagger.yaml"),
+ yaml.stringify(components)
+);
diff --git a/services/dtos/index.ts b/services/dtos/index.ts
new file mode 100644
index 00000000..ed24c311
--- /dev/null
+++ b/services/dtos/index.ts
@@ -0,0 +1,2 @@
+export * from "./greeter.dto";
+export * from "./product.dto";
diff --git a/services/dtos/product-dto.swagger.yaml b/services/dtos/product-dto.swagger.yaml
index caa0af4a..9edb9e57 100644
--- a/services/dtos/product-dto.swagger.yaml
+++ b/services/dtos/product-dto.swagger.yaml
@@ -49,4 +49,98 @@ components:
- success
- message
description: Add cart response DTO
+ CreateProductResponseSchemaDTO:
+ type: object
+ properties:
+ success:
+ type: boolean
+ description: Success flag
+ example: true
+ message:
+ type: string
+ description: Message
+ example: Product created successfully
+ product:
+ type: object
+ properties:
+ id:
+ type: string
+ description: ID of the created product
+ example: "12345"
+ name:
+ type: string
+ description: Name of the product
+ example: Iphone
+ qty:
+ type: number
+ description: Quantity of the product
+ example: 1
+ price:
+ type: number
+ description: Price of the product
+ example: 1000
+ billing:
+ type: object
+ properties:
+ address:
+ type: string
+ city:
+ type: string
+ description: City of the billing address
+ example: New York
+ zip:
+ type: number
+ description: ZIP code of the billing address
+ example: 10001
+ country:
+ type: string
+ description: Country of the billing address
+ example: USA
+ required:
+ - city
+ - zip
+ - country
+ required:
+ - id
+ - name
+ - qty
+ required:
+ - success
+ - message
+ - product
+ description: Create product response DTO
+ ProductSchemaDTO:
+ type: object
+ properties:
+ name:
+ type: string
+ description: Name of the product
+ example: Iphone
+ qty:
+ type: number
+ description: Quantity of the product
+ example: 1
+ price:
+ type: number
+ description: Price of the product
+ example: 1000
+ billing:
+ type: object
+ properties:
+ address:
+ type: string
+ city:
+ type: string
+ zip:
+ type: number
+ country:
+ type: string
+ required:
+ - city
+ - zip
+ - country
+ required:
+ - name
+ - qty
+ description: Product schema
parameters: {}
diff --git a/services/dtos/product.dto.ts b/services/dtos/product.dto.ts
index f2f2a2f2..f70b23cb 100644
--- a/services/dtos/product.dto.ts
+++ b/services/dtos/product.dto.ts
@@ -1,6 +1,9 @@
+import {
+ OpenApiGeneratorV3,
+ extendZodWithOpenApi,
+} from "@asteasolutions/zod-to-openapi";
import { writeFileSync } from "node:fs";
import { resolve } from "node:path";
-import { OpenApiGeneratorV3, extendZodWithOpenApi } from "@asteasolutions/zod-to-openapi";
import yaml from "yaml";
import { z } from "zod";
@@ -8,41 +11,134 @@ import { z } from "zod";
extendZodWithOpenApi(z);
export const addCartSchema = {
- name: z.string().openapi({ description: "Name of the product", example: "Iphone" }),
- qty: z.number().openapi({
- description: "Quantity of the product",
- example: 1,
- }),
- price: z.number().optional().openapi({
- description: "Price of the product",
- example: 1000,
- }),
- billing: z
- .object({
- address: z.string().optional(),
- city: z.string(),
- zip: z.number(),
- country: z.string(),
- })
- .optional(),
+ name: z
+ .string()
+ .openapi({ description: "Name of the product", example: "Iphone" }),
+ qty: z.number().openapi({
+ description: "Quantity of the product",
+ example: 1,
+ }),
+ price: z.number().optional().openapi({
+ description: "Price of the product",
+ example: 1000,
+ }),
+ billing: z
+ .object({
+ address: z.string().optional(),
+ city: z.string(),
+ zip: z.number(),
+ country: z.string(),
+ })
+ .optional(),
};
// Write to same folder with the DTO file
const outputDirectory = __dirname;
const Schema = z.object(addCartSchema).openapi("addCartDTO", {
- description: "Add cart DTO",
+ description: "Add cart DTO",
});
const ResponseSchema = z
- .object({
- success: z.boolean().openapi({ description: "Success flag", example: true }),
- message: z.string().openapi({ description: "Message", example: "Product added to cart" }),
- })
- .openapi("addCartResponseDTO", {
- description: "Add cart response DTO",
- });
-const generator = new OpenApiGeneratorV3([Schema, ResponseSchema]);
+ .object({
+ success: z
+ .boolean()
+ .openapi({ description: "Success flag", example: true }),
+ message: z.string().openapi({
+ description: "Message",
+ example: "Product added to cart",
+ }),
+ })
+ .openapi("addCartResponseDTO", {
+ description: "Add cart response DTO",
+ });
+
+const CreateProductResponseSchemaDTO = z
+ .object({
+ success: z.boolean().openapi({
+ description: "Success flag",
+ example: true,
+ }),
+ message: z.string().openapi({
+ description: "Message",
+ example: "Product created successfully",
+ }),
+ product: z.object({
+ id: z.string().openapi({
+ description: "ID of the created product",
+ example: "12345",
+ }),
+ name: z.string().openapi({
+ description: "Name of the product",
+ example: "Iphone",
+ }),
+ qty: z.number().openapi({
+ description: "Quantity of the product",
+ example: 1,
+ }),
+ price: z.number().optional().openapi({
+ description: "Price of the product",
+ example: 1000,
+ }),
+ billing: z
+ .object({
+ address: z.string().optional(),
+ city: z.string().openapi({
+ description: "City of the billing address",
+ example: "New York",
+ }),
+ zip: z.number().openapi({
+ description: "ZIP code of the billing address",
+ example: 10001,
+ }),
+ country: z.string().openapi({
+ description: "Country of the billing address",
+ example: "USA",
+ }),
+ })
+ .optional(),
+ }),
+ })
+ .openapi("CreateProductResponseSchemaDTO", {
+ description: "Create product response DTO",
+ });
+
+const ProductSchema = z
+ .object({
+ name: z.string().openapi({
+ description: "Name of the product",
+ example: "Iphone",
+ }),
+ qty: z.number().openapi({
+ description: "Quantity of the product",
+ example: 1,
+ }),
+ price: z.number().optional().openapi({
+ description: "Price of the product",
+ example: 1000,
+ }),
+ billing: z
+ .object({
+ address: z.string().optional(),
+ city: z.string(),
+ zip: z.number(),
+ country: z.string(),
+ })
+ .optional(),
+ })
+ .openapi("ProductSchemaDTO", {
+ description: "Product schema",
+ });
+
+const generator = new OpenApiGeneratorV3([
+ Schema,
+ ResponseSchema,
+ CreateProductResponseSchemaDTO,
+ ProductSchema,
+]);
const components = generator.generateComponents();
// Write to YAML file
-writeFileSync(resolve(outputDirectory, "product-dto.swagger.yaml"), yaml.stringify(components));
+writeFileSync(
+ resolve(outputDirectory, "product-dto.swagger.yaml"),
+ yaml.stringify(components)
+);
diff --git a/services/greeter.service.ts b/services/greeter.service.ts
index a5211820..0089ec47 100644
--- a/services/greeter.service.ts
+++ b/services/greeter.service.ts
@@ -1,21 +1,27 @@
-import type { Context, Service, ServiceSchema } from "moleculer";
+import { type Context, type Service, type ServiceSchema } from "moleculer";
+import { ZodParams } from "moleculer-zod-validator";
+import { logger } from "../logger";
+import { validateParams } from "./common";
+import { welcomeSchema } from "./dtos";
type GreeterSettings = {
- defaultName: string;
+ defaultName: string;
};
type GreeterMethods = {
- /**
- * Say a 'Hello' to a user.
- * @example
- * sayHello("John Doe");
- * // Hello John Doe
- **/
- sayHello(name: string): string;
+ /**
+ * Say a 'Hello' to a user.
+ * @example
+ * sayHello("John Doe");
+ * // Hello John Doe
+ **/
+ sayHello(name: string): string;
};
type GreeterThis = Service & GreeterMethods;
+const getterValidator = new ZodParams(welcomeSchema);
+
/**
* @swagger
* components:
@@ -35,126 +41,142 @@ type GreeterThis = Service & GreeterMethods;
* maxLength: 25
*/
const greeterService: ServiceSchema = {
- name: "greeter",
+ name: "greeter",
- /**
- * Settings
- */
- settings: {
- defaultName: "Moleculer",
- },
+ /**
+ * Settings
+ */
+ settings: {
+ defaultName: "Moleculer",
+ },
- /**
- * Dependencies
- */
- dependencies: [],
+ /**
+ * Dependencies
+ */
+ dependencies: [],
- /**
- * Actions
- */
- actions: {
- /**
- * @swagger
- * /api/greeter/hello:
- * get:
- * description: Returns the Hello Moleculer
- * tags:
- * - greeter
- * responses:
- * 200:
- * description: Hello Moleculer
- * content:
- * text/plain:
- * schema:
- * type: string
- * example: Hello Moleculer
- */
- hello: {
- rest: {
- method: "GET",
- path: "/hello",
- },
- async handler(this: GreeterThis) {
- return this.sayHello(this.settings.defaultName);
- },
- },
+ /**
+ * Actions
+ */
+ actions: {
+ /**
+ * @swagger
+ * /api/greeter/hello:
+ * get:
+ * description: Returns the Hello Moleculer
+ * tags:
+ * - greeter
+ * responses:
+ * 200:
+ * description: Hello Moleculer
+ * content:
+ * text/plain:
+ * schema:
+ * type: string
+ * example: Hello Moleculer
+ */
+ hello: {
+ rest: {
+ method: "GET",
+ path: "/hello",
+ },
+ /**
+ * @returns Hello Moleculer
+ */
+ async handler(this: GreeterThis) {
+ return this.sayHello(this.settings.defaultName);
+ },
+ },
- /**
- * Welcome, a username
- *
- * @param name - User name
- * @swagger
- * /api/greeter/welcome:
- * get:
- * description: Returns Welcome, a username
- * tags:
- * - greeter
- * parameters:
- * - $ref: '#/components/parameters/username'
- * in: query
- * responses:
- * 200:
- * description: Welcome, a username
- * content:
- * text/plain:
- * schema:
- * $ref: '#/components/schemas/welcomeResponseDTO'
- * 422:
- * description: Invalid username
- */
- welcome: {
- rest: "/welcome",
- params: {
- username: { type: "string", min: 6, max: 25 },
- },
- /**
- * @param ctx - Request context
- * @returns Welcome, a username
- */
- async handler(
- ctx: Context<{
- username: string;
- }>,
- ) {
- return `Welcome, ${ctx.params.username}`;
- },
- },
- },
+ /**
+ * Welcome, a username
+ *
+ * @param name - User name
+ * @swagger
+ * /api/greeter/welcome:
+ * get:
+ * description: Returns Welcome, a username
+ * tags:
+ * - greeter
+ * parameters:
+ * - $ref: '#/components/parameters/username'
+ * in: query
+ * responses:
+ * 200:
+ * description: Welcome, a username
+ * content:
+ * text/plain:
+ * schema:
+ * $ref: '#/components/schemas/welcomeResponseDTO'
+ * 422:
+ * description: Invalid username
+ */
+ welcome: {
+ rest: "/welcome",
+ params: {
+ username: { type: "string", min: 6, max: 25 },
+ },
+ hooks: {
+ before: [
+ (ctx: Context) => {
+ logger.info("Validating parameters for welcome action");
+ validateParams(ctx, welcomeSchema);
+ },
+ ],
+ },
+ /**
+ * @param ctx - Request context
+ * @returns Welcome, a username
+ */
+ async handler(
+ this: GreeterThis,
+ ctx: Context
+ ) {
+ this.logger.info(
+ "welcome action called with parameters: %o",
+ ctx.params
+ );
+ // Validate parameters
+ const { username } = ctx.params;
+ return `Welcome, ${username}`;
+ },
+ },
+ },
- /**
- * Events
- */
- events: {},
+ /**
+ * Events
+ */
+ events: {},
- /**
- * Methods
- */
- methods: {
- sayHello(name: string) {
- return `Hello ${name}`;
- },
- },
+ /**
+ * Methods
+ */
+ methods: {
+ sayHello(name: string) {
+ return `Hello ${name}`;
+ },
+ },
- /**
- * Service created lifecycle event handler
- */
- created() {
- this.logger.info("[greeter] The service was created");
- },
+ /**
+ * Service created lifecycle event handler
+ */
+ created() {
+ this.logger.info("[greeter] The service was created");
+ },
- /**
- * Service started lifecycle event handler
- */
- async started() {
- this.logger.info("[greeter] The service was started");
- },
+ /**
+ * Service started lifecycle event handler
+ */
+ async started() {
+ this.logger.info("[greeter] The service was started");
+ },
- /**
- * Service stopped lifecycle event handler
- */
- async stopped() {
- this.logger.info("[greeter] The service was stopped");
- },
+ /**
+ * Service stopped lifecycle event handler
+ */
+ async stopped() {
+ this.logger.info("[greeter] The service was stopped");
+ },
};
export default greeterService;
diff --git a/services/interfaces/index.ts b/services/interfaces/index.ts
new file mode 100644
index 00000000..fa66b99c
--- /dev/null
+++ b/services/interfaces/index.ts
@@ -0,0 +1 @@
+export * from "./repository.interface";
diff --git a/services/interfaces/repository.interface.ts b/services/interfaces/repository.interface.ts
new file mode 100644
index 00000000..b17882e5
--- /dev/null
+++ b/services/interfaces/repository.interface.ts
@@ -0,0 +1,19 @@
+/**
+ * Interface for a generic repository
+ * @template T - The type of the entity the repository manages
+ */
+export interface IRepository {
+ findById(id: string): Promise;
+ findAll(): Promise;
+ create(data: Omit): Promise;
+ update(id: string, data: Partial): Promise;
+ delete(id: string): Promise;
+ count(): Promise;
+ exists(id: string): Promise;
+ findByField(field: keyof T, value: any): Promise;
+ findAllByField(field: keyof T, value: any): Promise;
+ findOneAndUpdate(filter: Partial, update: Partial): Promise;
+ findOneAndDelete(filter: Partial): Promise;
+ findOneAndReplace(filter: Partial, replacement: T): Promise;
+ aggregate(pipeline: any[]): Promise;
+}
diff --git a/services/product.service.ts b/services/product.service.ts
deleted file mode 100644
index f3867518..00000000
--- a/services/product.service.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-import {
- type Context,
- Errors,
- type GenericObject,
- type Service,
- type ServiceSchema,
-} from "moleculer";
-import { ZodParams } from "moleculer-zod-validator";
-import { z } from "zod";
-
-import { logger } from "../logger";
-import { addCartSchema } from "./dtos/product.dto";
-
-type ServiceSettings = Record;
-
-type ServiceMethods = Record;
-
-type ServiceThis = Service & ServiceMethods;
-
-const orderItemValidator = new ZodParams(addCartSchema);
-
-// TODO: Move this to a shared utility
-const validateParams = (
- ctx: Context, GenericObject>,
- schema: typeof addCartSchema,
-) => {
- const compiled = z.object(schema).strict();
- try {
- const parsedParams = compiled.parse(ctx.params);
- logger.info("Validated parameters: %o", parsedParams);
- } catch (err) {
- if (err instanceof z.ZodError)
- throw new Errors.ValidationError(
- "Parameters validation error!",
- "VALIDATION_ERROR",
- err.issues,
- );
-
- throw err;
- }
-};
-
-const productService: ServiceSchema = {
- name: "product",
-
- /**
- * Settings
- */
- settings: {},
-
- /**
- * Dependencies
- */
- dependencies: [],
-
- /**
- * Actions
- */
- actions: {
- /**
- * Add a product to the cart
- * @swagger
- * /api/product/cart:
- * post:
- * description: Add a product to the cart
- * tags:
- * - product
- * requestBody:
- * required: true
- * content:
- * application/json:
- * schema:
- * $ref: '#/components/schemas/addCartDTO'
- * responses:
- * 200:
- * description: Product added to cart
- * content:
- * application/json:
- * schema:
- * $ref: '#/components/schemas/addCartResponseDTO'
- * 422:
- * description: Validation error
- */
- addToCart: {
- rest: {
- method: "POST",
- path: "/cart",
- },
- hooks: {
- before(ctx) {
- this.logger.info("Validating parameters for addToCart action");
- validateParams(ctx, addCartSchema);
- },
- },
- handler(this: ServiceThis, ctx: Context) {
- this.logger.info("addToCart action called with parameters: %o", ctx.params);
- const { name, qty, billing } = ctx.params;
- return {
- success: true,
- message: `You added ${qty} ${name} to your cart`,
- billing,
- };
- },
- },
- },
-
- /**
- * Events
- */
- events: {},
-
- /**
- * Methods
- */
- methods: {},
-
- /**
- * Service created lifecycle event handler
- */
- created() {
- this.logger.info(`The ${this.name} service created.`);
- },
-
- /**
- * Service started lifecycle event handler
- */
- async started() {
- this.logger.info(`The ${this.name} service started.`);
- },
-
- /**
- * Service stopped lifecycle event handler
- */
- async stopped() {
- this.logger.info(`The ${this.name} service stopped.`);
- },
-};
-
-export default productService;
diff --git a/services/product/product.repository.ts b/services/product/product.repository.ts
new file mode 100644
index 00000000..35b5c28b
--- /dev/null
+++ b/services/product/product.repository.ts
@@ -0,0 +1,154 @@
+import { randomUUID } from "node:crypto";
+import { IRepository } from "../interfaces";
+
+// Product interface definition
+export interface Product {
+ id: string;
+ name: string;
+ qty: number;
+}
+
+export class InMemoryProductRepository implements IRepository {
+ public async update(
+ id: string,
+ data: Partial
+ ): Promise {
+ const existingProduct = this.products.get(id);
+ if (!existingProduct) {
+ return null;
+ }
+ const updatedProduct: Product = { ...existingProduct, ...data, id };
+ this.products.set(id, updatedProduct);
+ return updatedProduct;
+ }
+
+ public async delete(id: string): Promise {
+ return this.products.delete(id);
+ }
+
+ public async count(): Promise {
+ return this.products.size;
+ }
+
+ public async exists(id: string): Promise {
+ return this.products.has(id);
+ }
+
+ public async findByField(
+ field: keyof Product,
+ value: any
+ ): Promise {
+ for (const product of this.products.values()) {
+ if (product[field] === value) {
+ return product;
+ }
+ }
+ return null;
+ }
+
+ public async findAllByField(
+ field: keyof Product,
+ value: any
+ ): Promise {
+ const results: Product[] = [];
+ for (const product of this.products.values()) {
+ if (product[field] === value) {
+ results.push(product);
+ }
+ }
+ return results;
+ }
+
+ public async findOneAndUpdate(
+ filter: Partial,
+ update: Partial
+ ): Promise {
+ for (const [id, product] of this.products.entries()) {
+ if (this.matchesFilter(product, filter)) {
+ const updatedProduct: Product = { ...product, ...update };
+ this.products.set(id, updatedProduct);
+ return updatedProduct;
+ }
+ }
+ return null;
+ }
+
+ public async findOneAndDelete(
+ filter: Partial
+ ): Promise {
+ for (const [id, product] of this.products.entries()) {
+ if (this.matchesFilter(product, filter)) {
+ this.products.delete(id);
+ return product;
+ }
+ }
+ return null;
+ }
+
+ public async findOneAndReplace(
+ filter: Partial,
+ replacement: Product
+ ): Promise {
+ for (const [id, product] of this.products.entries()) {
+ if (this.matchesFilter(product, filter)) {
+ this.products.set(id, replacement);
+ return replacement;
+ }
+ }
+ return null;
+ }
+
+ public async aggregate(pipeline: any[]): Promise {
+ let results = Array.from(this.products.values());
+
+ for (const stage of pipeline) {
+ if (stage.$match) {
+ results = results.filter((product) =>
+ this.matchesFilter(product, stage.$match)
+ );
+ }
+ if (stage.$sort) {
+ const sortField = Object.keys(stage.$sort)[0] as keyof Product;
+ const sortOrder = stage.$sort[sortField];
+ results.sort((a, b) => {
+ if (a[sortField] < b[sortField])
+ return sortOrder === 1 ? -1 : 1;
+ if (a[sortField] > b[sortField])
+ return sortOrder === 1 ? 1 : -1;
+ return 0;
+ });
+ }
+ if (stage.$limit) {
+ results = results.slice(0, stage.$limit);
+ }
+ }
+
+ return results;
+ }
+
+ private matchesFilter(product: Product, filter: Partial): boolean {
+ for (const [key, value] of Object.entries(filter)) {
+ if (product[key as keyof Product] !== value) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private products: Map = new Map();
+
+ public async findById(id: string): Promise {
+ return this.products.get(id) || null;
+ }
+
+ public async findAll(): Promise {
+ return Array.from(this.products.values());
+ }
+
+ public async create(data: Omit): Promise {
+ const id = randomUUID();
+ const newProduct: Product = { id, ...data };
+ this.products.set(id, newProduct);
+ return newProduct;
+ }
+}
diff --git a/services/product/product.service.ts b/services/product/product.service.ts
new file mode 100644
index 00000000..2d0a82f7
--- /dev/null
+++ b/services/product/product.service.ts
@@ -0,0 +1,211 @@
+import type { Context, Service, ServiceSchema } from "moleculer";
+import { ZodParams } from "moleculer-zod-validator";
+
+import { validateParams } from "../common";
+import { addCartSchema } from "../dtos";
+import { InMemoryProductRepository } from "./product.repository";
+
+type ServiceSettings = Record;
+
+type ServiceMethods = Record;
+
+type ServiceThis = Service &
+ ServiceMethods & { repository: InMemoryProductRepository };
+
+const orderItemValidator = new ZodParams(addCartSchema);
+
+const productService: ServiceSchema = {
+ name: "product",
+
+ /**
+ * Settings
+ */
+ settings: {},
+
+ /**
+ * Dependencies
+ */
+ dependencies: [],
+
+ /**
+ * Actions
+ */
+ actions: {
+ /**
+ * Add a product to the cart
+ * @swagger
+ * /api/product/cart:
+ * post:
+ * description: Add a product to the cart
+ * tags:
+ * - product
+ * requestBody:
+ * required: true
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/addCartDTO'
+ * responses:
+ * 200:
+ * description: Product added to cart
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/addCartResponseDTO'
+ * 422:
+ * description: Validation error
+ */
+ addToCart: {
+ rest: {
+ method: "POST",
+ path: "/cart",
+ },
+ hooks: {
+ before(ctx) {
+ this.logger.info(
+ "Validating parameters for addToCart action"
+ );
+ validateParams(ctx, addCartSchema);
+ },
+ },
+ handler(
+ this: ServiceThis,
+ ctx: Context
+ ) {
+ this.logger.info(
+ "addToCart action called with parameters: %o",
+ ctx.params
+ );
+ const { name, qty, billing } = ctx.params;
+ return {
+ success: true,
+ message: `You added ${qty} ${name} to your cart`,
+ billing,
+ };
+ },
+ },
+ /**
+ * Create a new product
+ * @swagger
+ * /api/product:
+ * post:
+ * description: Create a new product
+ * tags:
+ * - product
+ * requestBody:
+ * required: true
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/addCartDTO'
+ * responses:
+ * 201:
+ * description: Product created successfully
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/CreateProductResponseSchemaDTO'
+ * 422:
+ * description: Validation error
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/errorResponseDTO'
+ * 500:
+ * description: Internal server error
+ * content:
+ * application/json:
+ * schema:
+ * $ref: '#/components/schemas/errorResponseDTO'
+ */
+ create: {
+ // Example of a new action
+ rest: "POST /",
+ hooks: {
+ before(ctx) {
+ this.logger.info("Validating parameters for create action");
+ validateParams(ctx, addCartSchema);
+ },
+ },
+ async handler(
+ this: ServiceThis,
+ ctx: Context
+ ) {
+ const newProduct = await this.repository.create(ctx.params);
+ return {
+ success: true,
+ message: "Product created successfully",
+ product: newProduct,
+ };
+ },
+ },
+ /**
+ * Get all products
+ * @swagger
+ * /api/product:
+ * get:
+ * description: Get all products
+ * tags:
+ * - product
+ * responses:
+ * 200:
+ * description: List of products
+ * content:
+ * application/json:
+ * schema:
+ * type: array
+ * items:
+ * $ref: '#/components/schemas/ProductSchemaDTO'
+ */
+ getAll: {
+ rest: "GET /",
+ async handler(this: ServiceThis) {
+ const products = await this.repository.findAll();
+ return products;
+ },
+ },
+ },
+
+ /**
+ * Events
+ */
+ events: {},
+
+ /**
+ * Methods
+ */
+ methods: {},
+
+ /**
+ * Service created lifecycle event handler
+ */
+ created() {
+ try {
+ this.repository = new InMemoryProductRepository();
+ this.logger.info("Product repository initialized.");
+ this.logger.info(`The ${this.name} service created.`);
+ } catch (error) {
+ this.logger.error(
+ "Failed to initialize product repository:",
+ error
+ );
+ throw error;
+ }
+ },
+
+ /**
+ * Service started lifecycle event handler
+ */
+ async started() {
+ this.logger.info(`The ${this.name} service started.`);
+ },
+
+ /**
+ * Service stopped lifecycle event handler
+ */
+ async stopped() {
+ this.logger.info(`The ${this.name} service stopped.`);
+ },
+};
+
+export default productService;
diff --git a/test/unit/services/product.spec.ts b/test/unit/services/product.spec.ts
index 576b7b99..849f5835 100644
--- a/test/unit/services/product.spec.ts
+++ b/test/unit/services/product.spec.ts
@@ -1,40 +1,40 @@
import { Errors, ServiceBroker, type ServiceSchema } from "moleculer";
import { ZodValidator } from "moleculer-zod-validator";
-import TestService from "../../../services/product.service";
+import TestService from "../../../services/product/product.service";
// eslint-disable-next-line @typescript-eslint/naming-convention
const { ValidationError } = Errors;
describe("Test 'product' service", () => {
- const broker = new ServiceBroker({
- logger: false,
- validator: new ZodValidator(),
- });
- broker.createService(TestService as unknown as ServiceSchema);
+ const broker = new ServiceBroker({
+ logger: false,
+ validator: new ZodValidator(),
+ });
+ broker.createService(TestService as unknown as ServiceSchema);
- beforeAll(async () => broker.start());
- afterAll(async () => broker.stop());
+ beforeAll(async () => broker.start());
+ afterAll(async () => broker.stop());
- describe("Test 'product.addToCart' action", () => {
- it("should return success message", async () => {
- const response = await broker.call("product.addToCart", {
- name: "iPhone",
- qty: 1,
- });
- expect(response).toEqual({
- success: true,
- message: "You added 1 iPhone to your cart",
- });
- });
+ describe("Test 'product.addToCart' action", () => {
+ it("should return success message", async () => {
+ const response = await broker.call("product.addToCart", {
+ name: "iPhone",
+ qty: 1,
+ });
+ expect(response).toEqual({
+ success: true,
+ message: "You added 1 iPhone to your cart",
+ });
+ });
- it("should reject an ValidationError", async () => {
- expect.assertions(1);
- try {
- await broker.call("product.addToCart");
- } catch (error: unknown) {
- expect(error).toBeInstanceOf(ValidationError);
- }
- });
- });
+ it("should reject an ValidationError", async () => {
+ expect.assertions(1);
+ try {
+ await broker.call("product.addToCart");
+ } catch (error: unknown) {
+ expect(error).toBeInstanceOf(ValidationError);
+ }
+ });
+ });
});