From 369ffafd0e99e6a53402c7703ab6b59ef627fcd7 Mon Sep 17 00:00:00 2001 From: paulwer Date: Mon, 4 Nov 2024 14:17:35 +0100 Subject: [PATCH 01/23] feat: add class-validator support --- packages/framework/package.json | 26 ++- .../framework/src/client.validation.test.ts | 179 ++++++++++++++++++ packages/framework/src/types/schema.types.ts | 19 +- packages/framework/src/types/step.types.ts | 9 +- .../src/validators/base.validator.ts | 6 + .../validators/class-validator.validator.ts | 139 ++++++++++++++ .../src/validators/validator.test.ts | 58 +++++- .../framework/src/validators/zod.validator.ts | 3 +- 8 files changed, 424 insertions(+), 15 deletions(-) create mode 100644 packages/framework/src/validators/class-validator.validator.ts diff --git a/packages/framework/package.json b/packages/framework/package.json index 37845e8fc46..7cd8962a9e5 100644 --- a/packages/framework/package.json +++ b/packages/framework/package.json @@ -25,7 +25,7 @@ "next", "nuxt", "remix", - "sveltekit", + "sveltekit", "README.md" ], "scripts": { @@ -170,9 +170,13 @@ "@sveltejs/kit": ">=1.27.3", "@vercel/node": ">=2.15.9", "aws-lambda": ">=1.0.7", + "class-transformer": ">=0.5.1", + "class-validator": ">=0.14.0", + "class-validator-jsonschema": ">=5.0.0", "express": ">=4.19.2", "h3": ">=1.8.1", "next": ">=12.0.0", + "reflect-metadata": ">=0.2.2", "zod": ">=3.0.0", "zod-to-json-schema": ">=3.0.0" }, @@ -201,6 +205,18 @@ "next": { "optional": true }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + }, + "class-validator-jsonschema": { + "optional": true + }, + "reflect-metadata": { + "optional": true + }, "zod": { "optional": true }, @@ -219,11 +235,15 @@ "@types/sanitize-html": "2.11.0", "@vercel/node": "^2.15.9", "aws-lambda": "^1.0.7", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "class-validator-jsonschema": "^5.0.1", "express": "^4.19.2", "h3": "^1.11.1", "madge": "^8.0.0", "next": "^13.5.4", "prettier": "^3.2.5", + "reflect-metadata": "^0.2.2", "ts-node": "^10.9.2", "tsup": "^8.0.2", "tsx": "4.16.2", @@ -244,6 +264,8 @@ "sanitize-html": "^2.13.0" }, "nx": { - "tags": ["package:public"] + "tags": [ + "package:public" + ] } } diff --git a/packages/framework/src/client.validation.test.ts b/packages/framework/src/client.validation.test.ts index 141e1234a62..d88d628e8ef 100644 --- a/packages/framework/src/client.validation.test.ts +++ b/packages/framework/src/client.validation.test.ts @@ -1,6 +1,7 @@ /* eslint-disable no-param-reassign */ import { expect, it, describe, beforeEach } from 'vitest'; import { z } from 'zod'; +import { IsNumber, IsOptional, IsString } from 'class-validator'; import { Client } from './client'; import { workflow } from './resources/workflow'; import { ExecutionStateControlsInvalidError } from './errors'; @@ -187,6 +188,184 @@ describe('validation', () => { }); }); + describe('class-validator', () => { + class ClassValidatorSchema { + @IsString() + @IsOptional() + foo?: string; + @IsNumber() + @IsOptional() + baz?: number; + } + + it('should infer types in the step controls', async () => { + workflow('class-validator-validation', async ({ step }) => { + await step.email( + 'class-validator-validation', + async (controls) => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + controls.foo = 123; + // @ts-expect-error - Type 'string' is not assignable to type 'number'. + controls.baz = '123'; + + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + controlSchema: ClassValidatorSchema, + skip: (controls) => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + controls.foo = 123; + // @ts-expect-error - Type 'string' is not assignable to type 'number'. + controls.baz = '123'; + + return true; + }, + providers: { + sendgrid: async ({ controls, outputs }) => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + controls.foo = 123; + // @ts-expect-error - Type 'string' is not assignable to type 'number'. + controls.baz = '123'; + + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + outputs.body = 123; + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + outputs.subject = 123; + + return { + ipPoolName: 'test', + }; + }, + }, + } + ); + }); + }); + + it('should infer types in the workflow payload', async () => { + workflow( + 'class-validator-validation', + async ({ step, payload }) => { + await step.email('class-validator-validation', async () => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + payload.foo = 123; + // @ts-expect-error - Type 'string' is not assignable to type 'number'. + payload.baz = '123'; + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }, + { + payloadSchema: ClassValidatorSchema, + } + ); + }); + + it('should infer types in the workflow controls', async () => { + workflow( + 'class-validator-validation', + async ({ step, controls }) => { + await step.email('class-validator-validation', async () => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + controls.foo = 123; + // @ts-expect-error - Type 'string' is not assignable to type 'number'. + controls.baz = '123'; + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }, + { + controlSchema: ClassValidatorSchema, + } + ); + }); + + it('should transform a class-validator schema to a json schema during discovery', async () => { + client.addWorkflows([ + workflow('class-validator-validation', async ({ step }) => { + await step.email( + 'class-validator-validation', + async () => ({ + subject: 'Test subject', + body: 'Test body', + }), + { + controlSchema: ClassValidatorSchema, + } + ); + }), + ]); + + const discoverResult = client.discover(); + const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; + + expect(stepControlSchema).to.deep.include({ + additionalProperties: false, + properties: { + foo: { + type: 'string', + }, + baz: { + type: 'number', + }, + }, + required: ['foo', 'baz'], + type: 'object', + }); + }); + + it('should throw an error if a property is missing', async () => { + client.addWorkflows([ + workflow('class-validator-validation', async ({ step }) => { + await step.email( + 'test-email', + async () => ({ + subject: 'Test subject', + body: 'Test body', + }), + { + controlSchema: ClassValidatorSchema, + } + ); + }), + ]); + + try { + await client.executeWorkflow({ + action: PostActionEnum.EXECUTE, + workflowId: 'class-validator-validation', + controls: { + foo: '341', + }, + payload: {}, + stepId: 'test-email', + state: [], + subscriber: {}, + }); + } catch (error) { + expect(error).to.be.instanceOf(ExecutionStateControlsInvalidError); + expect((error as ExecutionStateControlsInvalidError).message).to.equal( + 'Workflow with id: `class-validator-validation` has an invalid state. Step with id: `test-email` has invalid `controls`. Please provide the correct step controls.' + ); + expect((error as ExecutionStateControlsInvalidError).data).to.deep.equal([ + { + message: 'Required', + path: '/baz', + }, + ]); + } + }); + }); + describe('json-schema', () => { const jsonSchema = { type: 'object', diff --git a/packages/framework/src/types/schema.types.ts b/packages/framework/src/types/schema.types.ts index 2aa817aa8a0..c75e60a7237 100644 --- a/packages/framework/src/types/schema.types.ts +++ b/packages/framework/src/types/schema.types.ts @@ -3,6 +3,9 @@ import zod from 'zod'; export type JsonSchema = JSONSchema; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type ClassType = new (...args: any[]) => T; + /** * A schema used to validate a JSON object. * @@ -10,7 +13,7 @@ export type JsonSchema = JSONSchema; * - JSONSchema * - ZodSchema */ -export type Schema = JsonSchema | zod.ZodSchema; +export type Schema = JsonSchema | zod.ZodSchema | ClassType; /** * Infer the type of a Schema for unvalidated data. @@ -36,8 +39,11 @@ export type FromSchemaUnvalidated = : // ZodSchema T extends zod.ZodSchema ? zod.input - : // All schema types exhausted. - never; + : // ClassValidatorSchema + T extends ClassType + ? U + : // All schema types exhausted. + never; /** * Infer the type of a Schema for validated data. @@ -63,5 +69,8 @@ export type FromSchema = : // ZodSchema T extends zod.ZodSchema ? zod.infer - : // All schema types exhausted. - never; + : // ClassValidatorSchema + T extends ClassType + ? U + : // All schema types exhausted. + never; diff --git a/packages/framework/src/types/step.types.ts b/packages/framework/src/types/step.types.ts index 9bbb423285a..e6f073ee57f 100644 --- a/packages/framework/src/types/step.types.ts +++ b/packages/framework/src/types/step.types.ts @@ -64,7 +64,8 @@ export type ActionStep< /** * The controls for the step. */ - T_Controls extends Record = FromSchema, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T_Controls extends Record = FromSchema, >( /** * The name of the step. This is used to identify the step in the workflow. @@ -94,7 +95,8 @@ export type CustomStep = < /** * The controls for the step. */ - T_Controls extends Record = FromSchema, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T_Controls extends Record = FromSchema, /* * These intermediary types are needed to capture the types in a single type instance * to stop Typescript from erroring with: @@ -153,7 +155,8 @@ export type ChannelStep< /** * The controls for the step. */ - T_Controls extends Record = FromSchema, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T_Controls extends Record = FromSchema, >( /** * The name of the step. This is used to identify the step in the workflow. diff --git a/packages/framework/src/validators/base.validator.ts b/packages/framework/src/validators/base.validator.ts index 4ac5e959e60..50d5e23f9cc 100644 --- a/packages/framework/src/validators/base.validator.ts +++ b/packages/framework/src/validators/base.validator.ts @@ -2,8 +2,10 @@ import type { FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../t import type { ValidateResult } from '../types/validator.types'; import { JsonSchemaValidator } from './json-schema.validator'; import { ZodValidator } from './zod.validator'; +import { ClassValidatorValidator } from './class-validator.validator'; const zodValidator = new ZodValidator(); +const classValidatorValidator = new ClassValidatorValidator(); const jsonSchemaValidator = new JsonSchemaValidator(); export const validateData = async < @@ -16,6 +18,8 @@ export const validateData = async < ): Promise> => { if (zodValidator.canHandle(schema)) { return zodValidator.validate(data, schema); + } else if (classValidatorValidator.canHandle(schema)) { + return classValidatorValidator.validate(data, schema); } else if (jsonSchemaValidator.canHandle(schema)) { return jsonSchemaValidator.validate(data, schema); } @@ -26,6 +30,8 @@ export const validateData = async < export const transformSchema = (schema: Schema): JsonSchema => { if (zodValidator.canHandle(schema)) { return zodValidator.transformToJsonSchema(schema); + } else if (classValidatorValidator.canHandle(schema)) { + return classValidatorValidator.transformToJsonSchema(schema); } else if (jsonSchemaValidator.canHandle(schema)) { return jsonSchemaValidator.transformToJsonSchema(schema); } diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts new file mode 100644 index 00000000000..19c85a49208 --- /dev/null +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -0,0 +1,139 @@ +import { ValidationError } from 'class-validator'; +import type { ClassType, FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../types/schema.types'; +import type { ValidateResult, Validator } from '../types/validator.types'; + +// Function to recursively add `additionalProperties: false` to the schema +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function replaceSchemaRefs(schema: any, schemas: any): JsonSchema { + if (schema && typeof schema === 'object' && schema?.$ref) { + // eslint-disable-next-line no-param-reassign + schema = schemas[schema.$ref.split('/').at(-1)]; + } + + if (schema && typeof schema === 'object') + for (const key in schema) { + if (schema.hasOwnProperty(key)) { + // eslint-disable-next-line no-param-reassign + schema[key] = replaceSchemaRefs(schema[key], schemas); + } + } + + return schema; +} +// Function to recursively add `additionalProperties: false` to the schema +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function addAdditionalPropertiesFalse(schema: any): JsonSchema { + if (schema && typeof schema === 'object' && schema?.type === 'object') { + // eslint-disable-next-line no-param-reassign + schema.additionalProperties = false; + } + + if (schema.properties) { + for (const key in schema.properties) { + if (schema.properties.hasOwnProperty(key)) { + addAdditionalPropertiesFalse(schema.properties[key]); + } + } + } + + return schema; +} +function formatErrors(errors: ValidationError[], parentPath = ''): { path: string; message: string }[] { + return errors.flatMap((err) => { + const currentPath = `${parentPath}/${err.property}`.replace(/\/+/g, '/'); + + if (err.children && err.children.length > 0) { + // Recursively format the children + return formatErrors(err.children, currentPath); + } else { + // Base case: no children, return the formatted error + return { + path: currentPath, + message: Object.values(err.constraints || {}).join(', '), + }; + } + }); +} + +export class ClassValidatorValidator implements Validator { + canHandle(schema: Schema): schema is ClassType { + return typeof (schema as ClassType) === 'function'; + } + + async validate< + T_Schema extends ClassType = ClassType, + T_Unvalidated = FromSchemaUnvalidated, + T_Validated = FromSchema, + >(data: T_Unvalidated, schema: T_Schema): Promise> { + try { + // eslint-disable-next-line global-require + require('reflect-metadata') as typeof import('reflect-metadata'); + // eslint-disable-next-line global-require + const { plainToInstance, instanceToPlain } = require('class-transformer') as typeof import('class-transformer'); + // eslint-disable-next-line global-require + const { validate } = require('class-validator') as typeof import('class-validator'); + + // Convert plain data to an instance of the schema class + const instance = plainToInstance(schema, data); + + // Validate the instance + const errors = await validate(instance as object, { whitelist: true }); + + // if undefined, then something went wrong + if (!instance && !!data) throw new Error('Failed to convert data to an instance of the schema class'); + + if (errors.length === 0) { + return { success: true, data: instanceToPlain(instance) as T_Validated }; + } else { + return { + success: false, + errors: formatErrors(errors), + }; + } + } catch (error) { + if ((error as Error)?.message?.includes('Cannot find module')) { + throw new Error( + 'Tried to use a class-validator schema in @novu/framework without `class-validator`, `class-transformer` or `reflect-metadata` installed. ' + + 'Please install it by running `npm install class-validator class-transformer reflect-metadata`.' + ); + } + throw error; + } + } + + transformToJsonSchema(schema: ClassType): JsonSchema { + try { + // eslint-disable-next-line global-require + const { defaultMetadataStorage } = require('class-transformer/cjs/storage'); + // eslint-disable-next-line global-require + const { getMetadataStorage } = require('class-validator') as typeof import('class-validator'); + // eslint-disable-next-line global-require, prettier/prettier + const { targetConstructorToSchema, validationMetadatasToSchemas } = + require('class-validator-jsonschema') as typeof import('class-validator-jsonschema'); + + const schemas = validationMetadatasToSchemas({ + classValidatorMetadataStorage: getMetadataStorage(), + classTransformerMetadataStorage: defaultMetadataStorage, + }); + + return addAdditionalPropertiesFalse( + replaceSchemaRefs( + targetConstructorToSchema(schema, { + classValidatorMetadataStorage: getMetadataStorage(), + classTransformerMetadataStorage: defaultMetadataStorage, + }), + schemas + ) + ); + } catch (error) { + if ((error as Error)?.message?.includes('Cannot find module')) { + // eslint-disable-next-line no-console + console.error( + 'Tried to use a class-validator schema in @novu/framework without `class-validator-jsonschema` installed. ' + + 'Please install it by running `npm install class-validator-jsonschema`.' + ); + } + throw error; + } + } +} diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index 62ae56876e7..95fd6bce491 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -1,9 +1,37 @@ import { describe, it, expect } from 'vitest'; import { ZodSchema, z } from 'zod'; +import { IsNumber, IsOptional, IsString, ValidateNested } from 'class-validator'; +import { Type } from 'class-transformer'; import { validateData, transformSchema } from './base.validator'; -import { JsonSchema, Schema } from '../types/schema.types'; +import { ClassType, JsonSchema, Schema } from '../types/schema.types'; +import 'reflect-metadata'; -const schemas = ['zod', 'json'] as const; +const schemas = ['zod', 'class', 'json'] as const; + +// Definitions of class-validator schemas +class SimpleStringSchema { + @IsString() + @IsOptional() + name?: string; +} +class NestedChildrenSchema { + @IsNumber() + age!: number; +} +class NestedSchema { + @IsString() + name!: string; + + @ValidateNested() + @Type(() => NestedChildrenSchema) + nested!: NestedChildrenSchema; +} +class SimpleStringAndNumberSchema { + @IsString() + name!: string; + @IsNumber() + age!: number; +} describe('validators', () => { describe('validateData', () => { @@ -11,6 +39,7 @@ describe('validators', () => { title: string; schemas: { zod: ZodSchema | null; + class: ClassType | null; json: JsonSchema; }; payload: Record; @@ -19,6 +48,7 @@ describe('validators', () => { data?: Record; errors?: { zod: { message: string; path: string }[] | null; + class: { message: string; path: string }[] | null; json: { message: string; path: string }[]; }; }; @@ -28,6 +58,7 @@ describe('validators', () => { title: 'should successfully validate data', schemas: { zod: z.object({ name: z.string() }), + class: SimpleStringSchema, json: { type: 'object', properties: { name: { type: 'string' } } } as const, }, payload: { name: 'John' }, @@ -40,6 +71,7 @@ describe('validators', () => { title: 'should remove additional properties and successfully validate', schemas: { zod: z.object({ name: z.string() }), + class: SimpleStringSchema, json: { type: 'object', properties: { name: { type: 'string' } }, additionalProperties: false } as const, }, payload: { name: 'John', age: 30 }, @@ -52,6 +84,7 @@ describe('validators', () => { title: 'should return errors when given invalid types', schemas: { zod: z.object({ name: z.string() }), + class: SimpleStringSchema, json: { type: 'object', properties: { name: { type: 'string' } } } as const, }, payload: { name: 123 }, @@ -60,6 +93,7 @@ describe('validators', () => { errors: { // TODO: error normalization json: [{ message: 'must be string', path: '/name' }], + class: [{ message: 'name must be a string', path: '/name' }], zod: [{ message: 'Expected string, received number', path: '/name' }], }, }, @@ -68,6 +102,7 @@ describe('validators', () => { title: 'should validate nested properties successfully', schemas: { zod: z.object({ name: z.string(), nested: z.object({ age: z.number() }) }), + class: NestedSchema, json: { type: 'object', properties: { @@ -86,6 +121,7 @@ describe('validators', () => { title: 'should return errors for invalid nested properties', schemas: { zod: z.object({ name: z.string(), nested: z.object({ age: z.number() }) }), + class: NestedSchema, json: { type: 'object', properties: { @@ -99,6 +135,7 @@ describe('validators', () => { success: false, errors: { zod: [{ message: 'Expected number, received string', path: '/nested/age' }], + class: [{ message: 'age must be a number conforming to the specified constraints', path: '/nested/age' }], json: [{ message: 'must be number', path: '/nested/age' }], }, }, @@ -107,6 +144,7 @@ describe('validators', () => { title: 'should successfully validate a polymorphic oneOf schema', schemas: { zod: null, // Zod has no support for `oneOf` + class: null, // ClassValidator has no support for `oneOf` json: { oneOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -129,6 +167,7 @@ describe('validators', () => { title: 'should return errors for invalid polymorphic oneOf schema', schemas: { zod: null, // Zod has no support for `oneOf` + class: null, // ClassValidator has no support for `oneOf` json: { oneOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -146,6 +185,7 @@ describe('validators', () => { errors: { json: [{ message: 'must match exactly one schema in oneOf', path: '' }], zod: null, // Zod has no support for `oneOf` + class: null, // ClassValidator has no support for `oneOf` }, }, }, @@ -153,6 +193,7 @@ describe('validators', () => { title: 'should successfully validate a polymorphic allOf schema', schemas: { zod: null, // Zod has no support for `oneOf` + class: null, // ClassValidator has no support for `oneOf` json: { allOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -179,6 +220,7 @@ describe('validators', () => { title: 'should return errors for invalid polymorphic `allOf` schema', schemas: { zod: null, // Zod has no support for `allOf` + class: null, // ClassValidator has no support for `allOf` json: { allOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -195,6 +237,7 @@ describe('validators', () => { errors: { json: [{ message: "must have required property 'numberType'", path: '' }], zod: null, // Zod has no support for `allOf` + class: null, // ClassValidator has no support for `allOf` }, }, }, @@ -206,6 +249,7 @@ describe('validators', () => { z.object({ type: z.literal('numberType'), numVal: z.number() }), z.object({ type: z.literal('booleanType'), boolVal: z.boolean() }), ]), + class: null, // ClassValidator has no support for `anyOf` json: { anyOf: [ { @@ -243,6 +287,7 @@ describe('validators', () => { z.object({ type: z.literal('numberType'), numVal: z.number() }), z.object({ type: z.literal('booleanType'), boolVal: z.boolean() }), ]), + class: null, // ClassValidator has no support for `anyOf` json: { anyOf: [ { @@ -285,6 +330,7 @@ describe('validators', () => { * * @see https://ajv.js.org/json-schema.html#discriminator */ + class: null, // ClassValidator has no support for `anyOf` json: [ { message: "must have required property 'stringVal'", @@ -338,6 +384,7 @@ describe('validators', () => { title: string; schemas: { zod: ZodSchema | null; + class: ClassType | null; json: JsonSchema; }; result: JsonSchema; @@ -347,6 +394,7 @@ describe('validators', () => { title: 'should transform a simple object schema', schemas: { zod: z.object({ name: z.string(), age: z.number() }), + class: SimpleStringAndNumberSchema, json: { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' } }, @@ -365,6 +413,7 @@ describe('validators', () => { title: 'should transform a nested object schema', schemas: { zod: z.object({ name: z.string(), nested: z.object({ age: z.number() }) }), + class: NestedSchema, json: { type: 'object', properties: { @@ -399,6 +448,7 @@ describe('validators', () => { title: 'should transform a polymorphic `oneOf` schema', schemas: { zod: null, // Zod has no support for `oneOf` + class: null, // ClassValidator has no support for `oneOf` json: { oneOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -419,6 +469,7 @@ describe('validators', () => { title: 'should transform a polymorphic `allOf` schema', schemas: { zod: null, // Zod has no support for `anyOf` + class: null, // ClassValidator has no support for `anyOf` json: { allOf: [ { type: 'object', properties: { stringType: { type: 'string' } }, required: ['stringType'] }, @@ -447,6 +498,7 @@ describe('validators', () => { ]) ), }), + class: null, // ClassValidator has no support for `anyOf` json: { type: 'object', properties: { @@ -522,7 +574,7 @@ describe('validators', () => { .forEach((testCase) => { it(testCase.title, () => { const result = transformSchema(testCase.schemas[schema] as Schema); - expect(result).deep.contain(testCase.result); + expect(result).deep.contain(testCase.result, JSON.stringify(result)); }); }); }); diff --git a/packages/framework/src/validators/zod.validator.ts b/packages/framework/src/validators/zod.validator.ts index e6eb413a372..7dec9b6d6b2 100644 --- a/packages/framework/src/validators/zod.validator.ts +++ b/packages/framework/src/validators/zod.validator.ts @@ -32,8 +32,7 @@ export class ZodValidator implements Validator { // eslint-disable-next-line global-require const { zodToJsonSchema } = require('zod-to-json-schema') as typeof import('zod-to-json-schema'); - // @ts-expect-error - zod-to-json-schema is not using JSONSchema7 - return zodToJsonSchema(schema); + return zodToJsonSchema(schema) as JsonSchema; } catch (error) { if ((error as Error)?.message?.includes('Cannot find module')) { // eslint-disable-next-line no-console From c2c0512f69669c2826c3150f1ce5a606526e5458 Mon Sep 17 00:00:00 2001 From: Paul Werner <52678724+paulwer@users.noreply.github.com> Date: Fri, 8 Nov 2024 08:48:15 +0100 Subject: [PATCH 02/23] Update packages/framework/src/validators/class-validator.validator.ts Co-authored-by: Richard Fontein <32132657+rifont@users.noreply.github.com> --- .../src/validators/class-validator.validator.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index 19c85a49208..b09c2461424 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -66,12 +66,9 @@ export class ClassValidatorValidator implements Validator { T_Validated = FromSchema, >(data: T_Unvalidated, schema: T_Schema): Promise> { try { - // eslint-disable-next-line global-require - require('reflect-metadata') as typeof import('reflect-metadata'); - // eslint-disable-next-line global-require - const { plainToInstance, instanceToPlain } = require('class-transformer') as typeof import('class-transformer'); - // eslint-disable-next-line global-require - const { validate } = require('class-validator') as typeof import('class-validator'); + await import('reflect-metadata'); + const { plainToInstance, instanceToPlain } = await import('class-transformer'); + const { validate } = await import('class-validator'); // Convert plain data to an instance of the schema class const instance = plainToInstance(schema, data); From f343a9dc20af3f34595c8d95b13e9117a12e7e12 Mon Sep 17 00:00:00 2001 From: Paul Werner <52678724+paulwer@users.noreply.github.com> Date: Fri, 8 Nov 2024 08:22:52 +0000 Subject: [PATCH 03/23] fixes --- .../src/validators/class-validator.validator.ts | 9 +++------ packages/framework/src/validators/validator.test.ts | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index b09c2461424..c2beebbbb55 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -98,15 +98,12 @@ export class ClassValidatorValidator implements Validator { } } - transformToJsonSchema(schema: ClassType): JsonSchema { + async transformToJsonSchema(schema: ClassType): Promise { try { // eslint-disable-next-line global-require const { defaultMetadataStorage } = require('class-transformer/cjs/storage'); - // eslint-disable-next-line global-require - const { getMetadataStorage } = require('class-validator') as typeof import('class-validator'); - // eslint-disable-next-line global-require, prettier/prettier - const { targetConstructorToSchema, validationMetadatasToSchemas } = - require('class-validator-jsonschema') as typeof import('class-validator-jsonschema'); + const { getMetadataStorage } = await import('class-validator'); + const { targetConstructorToSchema, validationMetadatasToSchemas } = await import('class-validator-jsonschema'); const schemas = validationMetadatasToSchemas({ classValidatorMetadataStorage: getMetadataStorage(), diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index 370a2c489e0..4b5e141452f 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -572,7 +572,7 @@ describe('validators', () => { testCases .filter((testCase) => testCase.schemas[schema] !== null) .forEach((testCase) => { - it(testCase.title, () => { + it(testCase.title, async () => { const result = await transformSchema(testCase.schemas[schema] as Schema); expect(result).deep.contain(testCase.result, JSON.stringify(result)); }); From 8662b2b311902b8413d71b153b29eee0abbc9b70 Mon Sep 17 00:00:00 2001 From: Paul Werner <52678724+paulwer@users.noreply.github.com> Date: Fri, 8 Nov 2024 09:00:16 +0000 Subject: [PATCH 04/23] workaround for classValidator defaultStorage --- .../validators/class-validator.validator.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index c2beebbbb55..a9ab53dbed9 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -100,8 +100,23 @@ export class ClassValidatorValidator implements Validator { async transformToJsonSchema(schema: ClassType): Promise { try { - // eslint-disable-next-line global-require - const { defaultMetadataStorage } = require('class-transformer/cjs/storage'); + // @ts-ignore + const { defaultMetadataStorage: defaultMetadataStorageCjs } = await import('class-transformer/cjs/storage'); + // @ts-ignore + const { defaultMetadataStorage: defaultMetadataStorageEsm2015 } = await import( + // @ts-ignore + 'class-transformer/esm2015/storage' + ); + // @ts-ignore + const { defaultMetadataStorage: defaultMetadataStorageEsm5 } = await import('class-transformer/esm5/storage'); + // @ts-ignore + const defaultMetadataStorage = defaultMetadataStorageCjs._typeMetadatas.size + ? defaultMetadataStorageCjs + : defaultMetadataStorageEsm2015._typeMetadatas.size + ? defaultMetadataStorageEsm2015 + : defaultMetadataStorageEsm5._typeMetadatas.size + ? defaultMetadataStorageEsm5 + : undefined; const { getMetadataStorage } = await import('class-validator'); const { targetConstructorToSchema, validationMetadatasToSchemas } = await import('class-validator-jsonschema'); From df9128ede96984d809b1ecc17bd66b76d82a2097 Mon Sep 17 00:00:00 2001 From: Paul Werner <52678724+paulwer@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:00:53 +0100 Subject: [PATCH 05/23] Update packages/framework/src/validators/class-validator.validator.ts Co-authored-by: Richard Fontein <32132657+rifont@users.noreply.github.com> --- packages/framework/src/validators/class-validator.validator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index c2beebbbb55..3953def3097 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -57,7 +57,7 @@ function formatErrors(errors: ValidationError[], parentPath = ''): { path: strin export class ClassValidatorValidator implements Validator { canHandle(schema: Schema): schema is ClassType { - return typeof (schema as ClassType) === 'function'; + return typeof schema === 'function' && schema.prototype !== undefined && schema.prototype.constructor === schema; } async validate< From 86bd4f9ee872332c863d8be5be69459ab63b5fe9 Mon Sep 17 00:00:00 2001 From: Paul Werner <52678724+paulwer@users.noreply.github.com> Date: Fri, 8 Nov 2024 13:45:06 +0000 Subject: [PATCH 06/23] fixes --- .../framework/src/validators/class-validator.validator.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index a9ab53dbed9..579b05e9b8d 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -100,7 +100,10 @@ export class ClassValidatorValidator implements Validator { async transformToJsonSchema(schema: ClassType): Promise { try { - // @ts-ignore + /* + * TODO: replace with direct import, when metadataStorage is exported by default: https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 + * @ts-ignore + */ const { defaultMetadataStorage: defaultMetadataStorageCjs } = await import('class-transformer/cjs/storage'); // @ts-ignore const { defaultMetadataStorage: defaultMetadataStorageEsm2015 } = await import( From f74470a4ad118ff7cedfca84d522224c767684e8 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:27:24 +0100 Subject: [PATCH 07/23] refactor(types): replace any with unknown in T_Controls --- packages/framework/src/types/step.types.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/types/step.types.ts b/packages/framework/src/types/step.types.ts index e6f073ee57f..9bbb423285a 100644 --- a/packages/framework/src/types/step.types.ts +++ b/packages/framework/src/types/step.types.ts @@ -64,8 +64,7 @@ export type ActionStep< /** * The controls for the step. */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - T_Controls extends Record = FromSchema, + T_Controls extends Record = FromSchema, >( /** * The name of the step. This is used to identify the step in the workflow. @@ -95,8 +94,7 @@ export type CustomStep = < /** * The controls for the step. */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - T_Controls extends Record = FromSchema, + T_Controls extends Record = FromSchema, /* * These intermediary types are needed to capture the types in a single type instance * to stop Typescript from erroring with: @@ -155,8 +153,7 @@ export type ChannelStep< /** * The controls for the step. */ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - T_Controls extends Record = FromSchema, + T_Controls extends Record = FromSchema, >( /** * The name of the step. This is used to identify the step in the workflow. From e7f3ef85ff56b65092f80ab6dc01feea3f3560cf Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:27:56 +0100 Subject: [PATCH 08/23] Update packages/framework/src/validators/class-validator.validator.ts --- packages/framework/src/validators/class-validator.validator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index c26cc9cb282..9b88a97a1f5 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -102,7 +102,7 @@ export class ClassValidatorValidator implements Validator { try { /* * TODO: replace with direct import, when metadataStorage is exported by default: https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 - * @ts-ignore + * @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module */ const { defaultMetadataStorage: defaultMetadataStorageCjs } = await import('class-transformer/cjs/storage'); // @ts-ignore From c5daec5a2747e1924b964deec4dddd010b0fcba4 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:33:38 +0100 Subject: [PATCH 09/23] refactor(validator): simplify metadata storage import --- .../validators/class-validator.validator.ts | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index 9b88a97a1f5..c8d9546d341 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -102,24 +102,9 @@ export class ClassValidatorValidator implements Validator { try { /* * TODO: replace with direct import, when metadataStorage is exported by default: https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 - * @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module */ - const { defaultMetadataStorage: defaultMetadataStorageCjs } = await import('class-transformer/cjs/storage'); - // @ts-ignore - const { defaultMetadataStorage: defaultMetadataStorageEsm2015 } = await import( - // @ts-ignore - 'class-transformer/esm2015/storage' - ); - // @ts-ignore - const { defaultMetadataStorage: defaultMetadataStorageEsm5 } = await import('class-transformer/esm5/storage'); - // @ts-ignore - const defaultMetadataStorage = defaultMetadataStorageCjs._typeMetadatas.size - ? defaultMetadataStorageCjs - : defaultMetadataStorageEsm2015._typeMetadatas.size - ? defaultMetadataStorageEsm2015 - : defaultMetadataStorageEsm5._typeMetadatas.size - ? defaultMetadataStorageEsm5 - : undefined; + // @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module + const { defaultMetadataStorage } = await import('class-transformer/cjs/storage'); const { getMetadataStorage } = await import('class-validator'); const { targetConstructorToSchema, validationMetadatasToSchemas } = await import('class-validator-jsonschema'); From 255115c90ccf37afb6ec350757732ecec0cce225 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:34:18 +0100 Subject: [PATCH 10/23] docs(validator): update TODO comment with @see link --- packages/framework/src/validators/class-validator.validator.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index c8d9546d341..af36a43292b 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -101,7 +101,8 @@ export class ClassValidatorValidator implements Validator { async transformToJsonSchema(schema: ClassType): Promise { try { /* - * TODO: replace with direct import, when metadataStorage is exported by default: https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 + * TODO: replace with direct import, when defaultMetadataStorage is exported by default + * @see https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 */ // @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module const { defaultMetadataStorage } = await import('class-transformer/cjs/storage'); From 68e5c9cf2d81724c0378817198b2f493e8d05cb9 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:42:35 +0100 Subject: [PATCH 11/23] test(validation): update tests for validation changes --- packages/framework/src/client.validation.test.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/client.validation.test.ts b/packages/framework/src/client.validation.test.ts index 17635629764..0860ba294f7 100644 --- a/packages/framework/src/client.validation.test.ts +++ b/packages/framework/src/client.validation.test.ts @@ -191,8 +191,7 @@ describe('validation', () => { describe('class-validator', () => { class ClassValidatorSchema { @IsString() - @IsOptional() - foo?: string; + foo!: string; @IsNumber() @IsOptional() baz?: number; @@ -290,7 +289,7 @@ describe('validation', () => { }); it('should transform a class-validator schema to a json schema during discovery', async () => { - client.addWorkflows([ + await client.addWorkflows([ workflow('class-validator-validation', async ({ step }) => { await step.email( 'class-validator-validation', @@ -308,7 +307,7 @@ describe('validation', () => { const discoverResult = client.discover(); const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; - expect(stepControlSchema).to.deep.include({ + expect(stepControlSchema).to.deep.equal({ additionalProperties: false, properties: { foo: { @@ -318,13 +317,13 @@ describe('validation', () => { type: 'number', }, }, - required: ['foo', 'baz'], + required: ['foo'], type: 'object', }); }); it('should throw an error if a property is missing', async () => { - client.addWorkflows([ + await client.addWorkflows([ workflow('class-validator-validation', async ({ step }) => { await step.email( 'test-email', From ecec05d46d353d3aea0a995eb36a717dd13ef710 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:54:17 +0100 Subject: [PATCH 12/23] refactor(types): update class type inference logic --- packages/framework/src/types/schema.types.ts | 26 ++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/framework/src/types/schema.types.ts b/packages/framework/src/types/schema.types.ts index c75e60a7237..75556f112d4 100644 --- a/packages/framework/src/types/schema.types.ts +++ b/packages/framework/src/types/schema.types.ts @@ -1,19 +1,31 @@ import type { JSONSchema, FromSchema as JsonSchemaInfer } from 'json-schema-to-ts'; import zod from 'zod'; +import { Prettify } from './util.types'; +/** + * A JSON schema. + */ export type JsonSchema = JSONSchema; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type ClassType = new (...args: any[]) => T; +/** + * A class type. + */ +export type ClassType = new (...args: unknown[]) => T; + +/** + * Extract the properties of a class type. + */ +export type ClassPropsInfer = T extends ClassType ? Prettify : never; /** * A schema used to validate a JSON object. * * Supported schemas: * - JSONSchema + * - ClassValidatorSchema * - ZodSchema */ -export type Schema = JsonSchema | zod.ZodSchema | ClassType; +export type Schema = JsonSchema | zod.ZodType | ClassType; /** * Infer the type of a Schema for unvalidated data. @@ -40,8 +52,8 @@ export type FromSchemaUnvalidated = T extends zod.ZodSchema ? zod.input : // ClassValidatorSchema - T extends ClassType - ? U + T extends ClassType + ? ClassPropsInfer : // All schema types exhausted. never; @@ -70,7 +82,7 @@ export type FromSchema = T extends zod.ZodSchema ? zod.infer : // ClassValidatorSchema - T extends ClassType - ? U + T extends ClassType + ? ClassPropsInfer : // All schema types exhausted. never; From 836bde369f709b2f54135ec11ac6738e86f8a708 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:55:55 +0100 Subject: [PATCH 13/23] test: remove JSON stringify from test assertion --- packages/framework/src/validators/validator.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index 4b5e141452f..a99b4602438 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -574,7 +574,7 @@ describe('validators', () => { .forEach((testCase) => { it(testCase.title, async () => { const result = await transformSchema(testCase.schemas[schema] as Schema); - expect(result).deep.contain(testCase.result, JSON.stringify(result)); + expect(result).deep.contain(testCase.result); }); }); }); From f3decf0cc18b0b5264e9bc41d27d22d1cd58d0a1 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 18:09:47 +0100 Subject: [PATCH 14/23] docs(schema.types): update ClassType type description --- packages/framework/src/types/schema.types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/types/schema.types.ts b/packages/framework/src/types/schema.types.ts index 75556f112d4..6d6f3d2edf9 100644 --- a/packages/framework/src/types/schema.types.ts +++ b/packages/framework/src/types/schema.types.ts @@ -8,7 +8,7 @@ import { Prettify } from './util.types'; export type JsonSchema = JSONSchema; /** - * A class type. + * A type that represents a class. */ export type ClassType = new (...args: unknown[]) => T; From ed7c857fc5fc0979b3ce9eba946c956aee140b66 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 18:11:43 +0100 Subject: [PATCH 15/23] refactor(class-validator): improve type checking logic --- .../framework/src/validators/class-validator.validator.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index af36a43292b..7252e47ea45 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -57,7 +57,11 @@ function formatErrors(errors: ValidationError[], parentPath = ''): { path: strin export class ClassValidatorValidator implements Validator { canHandle(schema: Schema): schema is ClassType { - return typeof schema === 'function' && schema.prototype !== undefined && schema.prototype.constructor === schema; + return ( + typeof (schema as ClassType) === 'function' && + (schema as ClassType).prototype !== undefined && + (schema as ClassType).prototype.constructor === schema + ); } async validate< From 322d118ee522d7b3a6843e0c00c4da627da31283 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 19:13:35 +0100 Subject: [PATCH 16/23] test(validator): extract class-validator fixtures --- .../fixures/class-validator.fixtures.ts | 30 ++++++++++++++++++ .../src/validators/validator.test.ts | 31 ++----------------- 2 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 packages/framework/src/validators/fixures/class-validator.fixtures.ts diff --git a/packages/framework/src/validators/fixures/class-validator.fixtures.ts b/packages/framework/src/validators/fixures/class-validator.fixtures.ts new file mode 100644 index 00000000000..6f158ddc4c7 --- /dev/null +++ b/packages/framework/src/validators/fixures/class-validator.fixtures.ts @@ -0,0 +1,30 @@ +import 'reflect-metadata'; +import { IsNumber, IsOptional, IsString, ValidateNested } from 'class-validator'; +import { Type } from 'class-transformer'; + +export class SimpleStringSchema { + @IsString() + @IsOptional() + name?: string; +} + +class NestedChildrenSchema { + @IsNumber() + age!: number; +} + +export class NestedSchema { + @IsString() + name!: string; + + @ValidateNested() + @Type(() => NestedChildrenSchema) + nested!: NestedChildrenSchema; +} + +export class SimpleStringAndNumberSchema { + @IsString() + name!: string; + @IsNumber() + age!: number; +} diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index a99b4602438..72e3648b264 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -1,38 +1,11 @@ import { describe, it, expect } from 'vitest'; import { ZodSchema, z } from 'zod'; -import { IsNumber, IsOptional, IsString, ValidateNested } from 'class-validator'; -import { Type } from 'class-transformer'; import { validateData, transformSchema } from './base.validator'; import { ClassType, JsonSchema, Schema } from '../types/schema.types'; -import 'reflect-metadata'; +import { SimpleStringSchema, NestedSchema, SimpleStringAndNumberSchema } from './fixures/class-validator.fixtures'; const schemas = ['zod', 'class', 'json'] as const; -// Definitions of class-validator schemas -class SimpleStringSchema { - @IsString() - @IsOptional() - name?: string; -} -class NestedChildrenSchema { - @IsNumber() - age!: number; -} -class NestedSchema { - @IsString() - name!: string; - - @ValidateNested() - @Type(() => NestedChildrenSchema) - nested!: NestedChildrenSchema; -} -class SimpleStringAndNumberSchema { - @IsString() - name!: string; - @IsNumber() - age!: number; -} - describe('validators', () => { describe('validateData', () => { type ValidateDataTestCase = { @@ -316,6 +289,7 @@ describe('validators', () => { success: false, errors: { zod: [{ message: 'Expected number, received string', path: '/numVal' }], + class: null, // ClassValidator has no support for `anyOf` /* * TODO: use discriminator to get the correct error message. * @@ -330,7 +304,6 @@ describe('validators', () => { * * @see https://ajv.js.org/json-schema.html#discriminator */ - class: null, // ClassValidator has no support for `anyOf` json: [ { message: "must have required property 'stringVal'", From b432668551c87981af017658aa3701970b24bdbb Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Fri, 8 Nov 2024 21:51:33 +0100 Subject: [PATCH 17/23] refactor: Remove IsOptional from name property --- .../src/validators/fixures/class-validator.fixtures.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/validators/fixures/class-validator.fixtures.ts b/packages/framework/src/validators/fixures/class-validator.fixtures.ts index 6f158ddc4c7..073b6ef5113 100644 --- a/packages/framework/src/validators/fixures/class-validator.fixtures.ts +++ b/packages/framework/src/validators/fixures/class-validator.fixtures.ts @@ -1,11 +1,10 @@ import 'reflect-metadata'; -import { IsNumber, IsOptional, IsString, ValidateNested } from 'class-validator'; +import { IsNumber, IsString, ValidateNested } from 'class-validator'; import { Type } from 'class-transformer'; export class SimpleStringSchema { @IsString() - @IsOptional() - name?: string; + name!: string; } class NestedChildrenSchema { From ff1577e219f099ea8fa383f449c18adcd714d0a0 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:56:40 +0100 Subject: [PATCH 18/23] fix(framework): Add dependency check import utilities --- packages/framework/src/client.test.ts | 2 + packages/framework/src/client.ts | 2 +- .../framework/src/client.validation.test.ts | 565 +------ .../src/constants/error.constants.ts | 1 + packages/framework/src/errors/base.errors.ts | 2 +- .../framework/src/errors/import.errors.ts | 16 + .../workflow/discover-action-step-factory.ts | 4 +- .../workflow/discover-channel-step-factory.ts | 14 +- .../workflow/discover-custom-step-factory.ts | 13 +- .../resources/workflow/discover-providers.ts | 9 +- .../workflow/workflow.resource.test-d.ts | 281 ++++ .../resources/workflow/workflow.resource.ts | 2 +- packages/framework/src/types/import.types.ts | 34 + packages/framework/src/types/schema.types.ts | 88 - .../schema.types/base.schema.types.test-d.ts | 77 + .../types/schema.types/base.schema.types.ts | 55 + .../schema.types/class.schema.types.test-d.ts | 42 + .../types/schema.types/class.schema.types.ts | 44 + .../framework/src/types/schema.types/index.ts | 4 + .../schema.types/json.schema.types.test-d.ts | 42 + .../types/schema.types/json.schema.types.ts | 36 + .../schema.types/zod.schema.types.test-d.ts | 39 + .../types/schema.types/zod.schema.types.ts | 42 + packages/framework/src/types/util.types.ts | 5 + .../framework/src/types/validator.types.ts | 12 +- .../framework/src/utils/import.utils.test.ts | 59 + packages/framework/src/utils/import.utils.ts | 37 + .../src/validators/base.validator.ts | 51 +- .../validators/class-validator.validator.ts | 170 +- .../src/validators/json-schema.validator.ts | 29 +- .../src/validators/validator.test.ts | 10 +- .../framework/src/validators/zod.validator.ts | 56 +- pnpm-lock.yaml | 1480 ++++++++--------- 33 files changed, 1814 insertions(+), 1509 deletions(-) create mode 100644 packages/framework/src/errors/import.errors.ts create mode 100644 packages/framework/src/resources/workflow/workflow.resource.test-d.ts create mode 100644 packages/framework/src/types/import.types.ts delete mode 100644 packages/framework/src/types/schema.types.ts create mode 100644 packages/framework/src/types/schema.types/base.schema.types.test-d.ts create mode 100644 packages/framework/src/types/schema.types/base.schema.types.ts create mode 100644 packages/framework/src/types/schema.types/class.schema.types.test-d.ts create mode 100644 packages/framework/src/types/schema.types/class.schema.types.ts create mode 100644 packages/framework/src/types/schema.types/index.ts create mode 100644 packages/framework/src/types/schema.types/json.schema.types.test-d.ts create mode 100644 packages/framework/src/types/schema.types/json.schema.types.ts create mode 100644 packages/framework/src/types/schema.types/zod.schema.types.test-d.ts create mode 100644 packages/framework/src/types/schema.types/zod.schema.types.ts create mode 100644 packages/framework/src/utils/import.utils.test.ts create mode 100644 packages/framework/src/utils/import.utils.ts diff --git a/packages/framework/src/client.test.ts b/packages/framework/src/client.test.ts index a80064e2359..b91915df1e4 100644 --- a/packages/framework/src/client.test.ts +++ b/packages/framework/src/client.test.ts @@ -313,6 +313,8 @@ describe('Novu Client', () => { if (stepChat === undefined) throw new Error('stepEmail is undefined'); expect(stepChat.type).toBe('chat'); expect(stepChat.code).toContain(`body: "Test Body"`); + console.log(stepChat.providers); + // await new Promise((resolve) => setTimeout(resolve, 1000)); expect(stepChat.providers[0].code).toContain(`type: "plain_text"`); expect(stepChat.providers[0].code).toContain(`text: "Pretty Header"`); }); diff --git a/packages/framework/src/client.ts b/packages/framework/src/client.ts index 3a5db6c9ece..83c423c24d8 100644 --- a/packages/framework/src/client.ts +++ b/packages/framework/src/client.ts @@ -195,7 +195,7 @@ export class Client { throw new Error(`Invalid component: '${component}'`); } } else { - return result.data; + return result.data as T; } } diff --git a/packages/framework/src/client.validation.test.ts b/packages/framework/src/client.validation.test.ts index 0860ba294f7..7326ed80de6 100644 --- a/packages/framework/src/client.validation.test.ts +++ b/packages/framework/src/client.validation.test.ts @@ -1,7 +1,4 @@ -/* eslint-disable no-param-reassign */ import { expect, it, describe, beforeEach } from 'vitest'; -import { z } from 'zod'; -import { IsNumber, IsOptional, IsString } from 'class-validator'; import { Client } from './client'; import { workflow } from './resources/workflow'; import { ExecutionStateControlsInvalidError } from './errors'; @@ -14,533 +11,77 @@ describe('validation', () => { client = new Client({ secretKey: 'some-secret-key' }); }); - describe('zod', () => { - const zodSchema = z.object({ - foo: z.string(), - baz: z.number(), - }); - - it('should infer types in the step controls', async () => { - workflow('zod-validation', async ({ step }) => { + const jsonSchema = { + type: 'object', + properties: { + foo: { type: 'string' }, + baz: { type: 'number' }, + }, + required: ['foo', 'baz'], + additionalProperties: false, + } as const; + + it('should transform a JSON schema to a valid schema during discovery', async () => { + await client.addWorkflows([ + workflow('json-schema-validation', async ({ step }) => { await step.email( - 'zod-validation', - async (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }, + 'json-schema-validation', + async () => ({ + subject: 'Test subject', + body: 'Test body', + }), { - controlSchema: zodSchema, - skip: (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return true; - }, - providers: { - sendgrid: async ({ controls, outputs }) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.body = 123; - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.subject = 123; - - return { - ipPoolName: 'test', - }; - }, - }, + controlSchema: jsonSchema, } ); - }); - }); - - it('should infer types in the workflow payload', async () => { - workflow( - 'zod-validation', - async ({ step, payload }) => { - await step.email('zod-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - payload.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - payload.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); - }, - { - payloadSchema: zodSchema, - } - ); - }); - - it('should infer types in the workflow controls', async () => { - workflow( - 'zod-validation', - async ({ step, controls }) => { - await step.email('zod-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); - }, - { - controlSchema: zodSchema, - } - ); - }); - - it('should transform a zod schema to a json schema during discovery', async () => { - await client.addWorkflows([ - workflow('zod-validation', async ({ step }) => { - await step.email( - 'zod-validation', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: zodSchema, - } - ); - }), - ]); - - const discoverResult = client.discover(); - const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; + }), + ]); - expect(stepControlSchema).to.deep.include({ - additionalProperties: false, - properties: { - foo: { - type: 'string', - }, - baz: { - type: 'number', - }, - }, - required: ['foo', 'baz'], - type: 'object', - }); - }); - - it('should throw an error if a property is missing', async () => { - await client.addWorkflows([ - workflow('zod-validation', async ({ step }) => { - await step.email( - 'test-email', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: zodSchema, - } - ); - }), - ]); + const discoverResult = client.discover(); + const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; - try { - await client.executeWorkflow({ - action: PostActionEnum.EXECUTE, - workflowId: 'zod-validation', - controls: { - foo: '341', - }, - payload: {}, - stepId: 'test-email', - state: [], - subscriber: {}, - }); - } catch (error) { - expect(error).to.be.instanceOf(ExecutionStateControlsInvalidError); - expect((error as ExecutionStateControlsInvalidError).message).to.equal( - 'Workflow with id: `zod-validation` has an invalid state. Step with id: `test-email` has invalid `controls`. Please provide the correct step controls.' - ); - expect((error as ExecutionStateControlsInvalidError).data).to.deep.equal([ - { - message: 'Required', - path: '/baz', - }, - ]); - } - }); + expect(stepControlSchema).to.deep.include(jsonSchema); }); - describe('class-validator', () => { - class ClassValidatorSchema { - @IsString() - foo!: string; - @IsNumber() - @IsOptional() - baz?: number; - } - - it('should infer types in the step controls', async () => { - workflow('class-validator-validation', async ({ step }) => { - await step.email( - 'class-validator-validation', - async (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }, - { - controlSchema: ClassValidatorSchema, - skip: (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return true; - }, - providers: { - sendgrid: async ({ controls, outputs }) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.body = 123; - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.subject = 123; - - return { - ipPoolName: 'test', - }; - }, - }, - } - ); - }); - }); - - it('should infer types in the workflow payload', async () => { - workflow( - 'class-validator-validation', - async ({ step, payload }) => { - await step.email('class-validator-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - payload.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - payload.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); - }, - { - payloadSchema: ClassValidatorSchema, - } - ); - }); - - it('should infer types in the workflow controls', async () => { - workflow( - 'class-validator-validation', - async ({ step, controls }) => { - await step.email('class-validator-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); - }, - { - controlSchema: ClassValidatorSchema, - } - ); - }); - - it('should transform a class-validator schema to a json schema during discovery', async () => { - await client.addWorkflows([ - workflow('class-validator-validation', async ({ step }) => { - await step.email( - 'class-validator-validation', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: ClassValidatorSchema, - } - ); - }), - ]); - - const discoverResult = client.discover(); - const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; - - expect(stepControlSchema).to.deep.equal({ - additionalProperties: false, - properties: { - foo: { - type: 'string', - }, - baz: { - type: 'number', - }, - }, - required: ['foo'], - type: 'object', - }); - }); - - it('should throw an error if a property is missing', async () => { - await client.addWorkflows([ - workflow('class-validator-validation', async ({ step }) => { - await step.email( - 'test-email', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: ClassValidatorSchema, - } - ); - }), - ]); - - try { - await client.executeWorkflow({ - action: PostActionEnum.EXECUTE, - workflowId: 'class-validator-validation', - controls: { - foo: '341', - }, - payload: {}, - stepId: 'test-email', - state: [], - subscriber: {}, - }); - } catch (error) { - expect(error).to.be.instanceOf(ExecutionStateControlsInvalidError); - expect((error as ExecutionStateControlsInvalidError).message).to.equal( - 'Workflow with id: `class-validator-validation` has an invalid state. Step with id: `test-email` has invalid `controls`. Please provide the correct step controls.' - ); - expect((error as ExecutionStateControlsInvalidError).data).to.deep.equal([ - { - message: 'Required', - path: '/baz', - }, - ]); - } - }); - }); - - describe('json-schema', () => { - const jsonSchema = { - type: 'object', - properties: { - foo: { type: 'string' }, - baz: { type: 'number' }, - }, - required: ['foo', 'baz'], - additionalProperties: false, - } as const; - - it('should infer types in the step controls', async () => { + it('should throw an error if a property is missing', async () => { + await client.addWorkflows([ workflow('json-schema-validation', async ({ step }) => { await step.email( - 'json-schema-validation', - async (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }, + 'test-email', + async () => ({ + subject: 'Test subject', + body: 'Test body', + }), { controlSchema: jsonSchema, - skip: (controls) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return true; - }, - providers: { - sendgrid: async ({ controls, outputs }) => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.body = 123; - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - outputs.subject = 123; - - return { - ipPoolName: 'test', - }; - }, - }, } ); - }); - }); - - it('should infer types in the workflow payload', async () => { - workflow( - 'json-schema-validation', - async ({ step, payload }) => { - await step.email('json-schema-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - payload.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - payload.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); + }), + ]); + + try { + await client.executeWorkflow({ + action: PostActionEnum.EXECUTE, + workflowId: 'json-schema-validation', + controls: { + foo: '341', }, - { - payloadSchema: jsonSchema, - } + payload: {}, + stepId: 'test-email', + state: [], + subscriber: {}, + }); + } catch (error) { + expect(error).to.be.instanceOf(ExecutionStateControlsInvalidError); + expect((error as ExecutionStateControlsInvalidError).message).to.equal( + 'Workflow with id: `json-schema-validation` has an invalid state. Step with id: `test-email` has invalid `controls`. Please provide the correct step controls.' ); - }); - - it('should infer types in the workflow controls', async () => { - workflow( - 'json-schema-validation', - async ({ step, controls }) => { - await step.email('json-schema-validation', async () => { - // @ts-expect-error - Type 'number' is not assignable to type 'string'. - controls.foo = 123; - // @ts-expect-error - Type 'string' is not assignable to type 'number'. - controls.baz = '123'; - - return { - subject: 'Test subject', - body: 'Test body', - }; - }); - }, + expect((error as ExecutionStateControlsInvalidError).data).to.deep.equal([ { - controlSchema: jsonSchema, - } - ); - }); - - it('should transform a JSON schema to a valid schema during discovery', async () => { - await client.addWorkflows([ - workflow('json-schema-validation', async ({ step }) => { - await step.email( - 'json-schema-validation', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: jsonSchema, - } - ); - }), - ]); - - const discoverResult = client.discover(); - const stepControlSchema = discoverResult.workflows[0].steps[0].controls.schema; - - expect(stepControlSchema).to.deep.include({ - additionalProperties: false, - properties: { - foo: { - type: 'string', - }, - baz: { - type: 'number', - }, + message: "must have required property 'baz'", + path: '', }, - required: ['foo', 'baz'], - type: 'object', - }); - }); - - it('should throw an error if a property is missing', async () => { - await client.addWorkflows([ - workflow('json-schema-validation', async ({ step }) => { - await step.email( - 'test-email', - async () => ({ - subject: 'Test subject', - body: 'Test body', - }), - { - controlSchema: jsonSchema, - } - ); - }), ]); - - try { - await client.executeWorkflow({ - action: PostActionEnum.EXECUTE, - workflowId: 'json-schema-validation', - controls: { - foo: '341', - }, - payload: {}, - stepId: 'test-email', - state: [], - subscriber: {}, - }); - } catch (error) { - expect(error).to.be.instanceOf(ExecutionStateControlsInvalidError); - expect((error as ExecutionStateControlsInvalidError).message).to.equal( - 'Workflow with id: `json-schema-validation` has an invalid state. Step with id: `test-email` has invalid `controls`. Please provide the correct step controls.' - ); - expect((error as ExecutionStateControlsInvalidError).data).to.deep.equal([ - { - message: "must have required property 'baz'", - path: '', - }, - ]); - } - }); + } }); }); diff --git a/packages/framework/src/constants/error.constants.ts b/packages/framework/src/constants/error.constants.ts index 03a6dc826db..7c86a63c4e3 100644 --- a/packages/framework/src/constants/error.constants.ts +++ b/packages/framework/src/constants/error.constants.ts @@ -11,6 +11,7 @@ export enum ErrorCodeEnum { EXECUTION_STATE_RESULT_INVALID_ERROR = 'ExecutionStateResultInvalidError', INVALID_ACTION_ERROR = 'InvalidActionError', METHOD_NOT_ALLOWED_ERROR = 'MethodNotAllowedError', + MISSING_DEPENDENCY_ERROR = 'MissingDependencyError', MISSING_SECRET_KEY_ERROR = 'MissingSecretKeyError', PROVIDER_EXECUTION_FAILED_ERROR = 'ProviderExecutionFailedError', PROVIDER_NOT_FOUND_ERROR = 'ProviderNotFoundError', diff --git a/packages/framework/src/errors/base.errors.ts b/packages/framework/src/errors/base.errors.ts index 9f0cb581833..d4318ded1e2 100644 --- a/packages/framework/src/errors/base.errors.ts +++ b/packages/framework/src/errors/base.errors.ts @@ -67,7 +67,7 @@ export abstract class ServerError extends FrameworkError { stack: cause.stack ?? message, }; } else { - super(`${message}: ${JSON.stringify(cause, null, 2)}`); + super(`${message}${cause ? `: ${JSON.stringify(cause, null, 2)}` : ''}`); this.data = { stack: message, }; diff --git a/packages/framework/src/errors/import.errors.ts b/packages/framework/src/errors/import.errors.ts new file mode 100644 index 00000000000..9b03553bddb --- /dev/null +++ b/packages/framework/src/errors/import.errors.ts @@ -0,0 +1,16 @@ +import { ErrorCodeEnum, HttpStatusEnum } from '../constants'; +import { ServerError } from './base.errors'; + +export class MissingDependencyError extends ServerError { + statusCode = HttpStatusEnum.INTERNAL_SERVER_ERROR; + code = ErrorCodeEnum.MISSING_DEPENDENCY_ERROR; + + constructor(usageReason: string, missingDependencies: string[]) { + const pronoun = missingDependencies.length === 1 ? 'it' : 'them'; + super( + `Tried to use a ${usageReason} in @novu/framework without ${missingDependencies.join( + ', ' + )} installed. Please install ${pronoun} by running \`npm install ${missingDependencies.join(' ')}\`.` + ); + } +} diff --git a/packages/framework/src/resources/workflow/discover-action-step-factory.ts b/packages/framework/src/resources/workflow/discover-action-step-factory.ts index 8b7d7d4fcca..1bf676d8614 100644 --- a/packages/framework/src/resources/workflow/discover-action-step-factory.ts +++ b/packages/framework/src/resources/workflow/discover-action-step-factory.ts @@ -1,6 +1,6 @@ import { ActionStepEnum } from '../../constants'; import { emptySchema } from '../../schemas'; -import type { Awaitable, DiscoverWorkflowOutput, Schema, ActionStep } from '../../types'; +import type { Awaitable, DiscoverWorkflowOutput, Schema, ActionStep, StepOptions, FromSchema } from '../../types'; import { transformSchema } from '../../validators'; import { discoverStep } from './discover-step'; @@ -32,7 +32,7 @@ export async function discoverActionStepFactory( }, resolve: resolve as (controls: Record) => Awaitable>, code: resolve.toString(), - options, + options: options as StepOptions, FromSchema>, providers: [], }); diff --git a/packages/framework/src/resources/workflow/discover-channel-step-factory.ts b/packages/framework/src/resources/workflow/discover-channel-step-factory.ts index 6b3fb0e5656..ecabdf530c3 100644 --- a/packages/framework/src/resources/workflow/discover-channel-step-factory.ts +++ b/packages/framework/src/resources/workflow/discover-channel-step-factory.ts @@ -1,6 +1,14 @@ import { ChannelStepEnum } from '../../constants'; import { emptySchema } from '../../schemas'; -import type { Awaitable, DiscoverStepOutput, DiscoverWorkflowOutput, Schema, ChannelStep } from '../../types'; +import type { + Awaitable, + DiscoverStepOutput, + DiscoverWorkflowOutput, + Schema, + ChannelStep, + StepOptions, + FromSchema, +} from '../../types'; import { transformSchema } from '../../validators'; import { discoverProviders } from './discover-providers'; import { discoverStep } from './discover-step'; @@ -32,14 +40,14 @@ export async function discoverChannelStepFactory( }, resolve: resolve as (controls: Record) => Awaitable>, code: resolve.toString(), - options, + options: options as StepOptions, FromSchema>, providers: [], }; await discoverStep(targetWorkflow, stepId, step); if (Object.keys(options.providers || {}).length > 0) { - discoverProviders(step, type as ChannelStepEnum, options.providers || {}); + await discoverProviders(step, type as ChannelStepEnum, options.providers || {}); } return { diff --git a/packages/framework/src/resources/workflow/discover-custom-step-factory.ts b/packages/framework/src/resources/workflow/discover-custom-step-factory.ts index 66a6d5ebf36..ebad260e5f2 100644 --- a/packages/framework/src/resources/workflow/discover-custom-step-factory.ts +++ b/packages/framework/src/resources/workflow/discover-custom-step-factory.ts @@ -1,5 +1,14 @@ import { emptySchema } from '../../schemas'; -import type { Awaitable, CustomStep, DiscoverWorkflowOutput, StepType, StepOutput } from '../../types'; +import type { + Awaitable, + CustomStep, + DiscoverWorkflowOutput, + StepType, + StepOutput, + StepOptions, + FromSchema, + Schema, +} from '../../types'; import { transformSchema } from '../../validators'; import { discoverStep } from './discover-step'; @@ -28,7 +37,7 @@ export async function discoverCustomStepFactory( }, resolve: resolve as (controls: Record) => Awaitable>, code: resolve.toString(), - options, + options: options as StepOptions, FromSchema>, providers: [], }); diff --git a/packages/framework/src/resources/workflow/discover-providers.ts b/packages/framework/src/resources/workflow/discover-providers.ts index 672c0766474..9329a08ce05 100644 --- a/packages/framework/src/resources/workflow/discover-providers.ts +++ b/packages/framework/src/resources/workflow/discover-providers.ts @@ -20,12 +20,13 @@ export async function discoverProviders( ): Promise { const channelSchemas = providerSchemas[channelType]; - Object.entries(providers).forEach(async ([type, resolve]) => { + const providerPromises = Object.entries(providers).map(async ([type, resolve]) => { // eslint-disable-next-line multiline-comment-style // TODO: fix the typing for `type` to use the keyof providerSchema[channelType] // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type const schemas = channelSchemas[type]; - step.providers.push({ + + return { type, code: resolve.toString(), resolve, @@ -33,6 +34,8 @@ export async function discoverProviders( schema: await transformSchema(schemas.output), unknownSchema: schemas.output, }, - }); + }; }); + + step.providers.push(...(await Promise.all(providerPromises))); } diff --git a/packages/framework/src/resources/workflow/workflow.resource.test-d.ts b/packages/framework/src/resources/workflow/workflow.resource.test-d.ts new file mode 100644 index 00000000000..e2a635019c2 --- /dev/null +++ b/packages/framework/src/resources/workflow/workflow.resource.test-d.ts @@ -0,0 +1,281 @@ +import { describe, expectTypeOf } from 'vitest'; +import { workflow } from '.'; +import { Subscriber } from '../../types'; + +describe('workflow function types', () => { + describe('event types', () => { + it('should have the expected subscriber type', () => { + workflow('without-schema', async ({ subscriber }) => { + expectTypeOf(subscriber).toEqualTypeOf(); + }); + }); + + it('should have the expected step functions', () => { + workflow('without-schema', async ({ step }) => { + expectTypeOf(step).toMatchTypeOf<{ + email: unknown; + sms: unknown; + push: unknown; + chat: unknown; + inApp: unknown; + digest: unknown; + delay: unknown; + custom: unknown; + }>(); + }); + }); + }); + + describe('without schema', () => { + it('should infer an unknown record type in the step function step controls', async () => { + workflow('without-schema', async ({ step }) => { + await step.email('without-schema', async (controls) => { + expectTypeOf(controls).toEqualTypeOf>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }); + }); + + it('should infer an unknown record type in the skip function step controls', async () => { + workflow('without-schema', async ({ step }) => { + await step.email( + 'without-schema', + async (controls) => { + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + skip: (controls) => { + expectTypeOf(controls).toEqualTypeOf>(); + + return true; + }, + } + ); + }); + }); + + it('should infer an unknown record type in the provider function step controls', async () => { + workflow('without-schema', async ({ step }) => { + await step.email( + 'without-schema', + async (controls) => { + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + providers: { + sendgrid: async ({ controls }) => { + expectTypeOf(controls).toEqualTypeOf>(); + + return { + ipPoolName: 'test', + }; + }, + }, + } + ); + }); + }); + + it('should infer an unknown record type in the workflow event payload', async () => { + workflow('without-schema', async ({ step, payload }) => { + await step.email('without-schema', async () => { + expectTypeOf(payload).toEqualTypeOf>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }); + }); + + it('should infer an unknown record type in the workflow event controls', async () => { + workflow('without-schema', async ({ step, controls }) => { + await step.email('without-schema', async () => { + expectTypeOf(controls).toEqualTypeOf>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }); + }); + + it('should infer an unknown record type in the custom step results', async () => { + workflow('without-schema', async ({ step }) => { + const result = await step.custom('without-schema', async () => { + return { + foo: 'bar', + }; + }); + + expectTypeOf(result).toMatchTypeOf>(); + }); + }); + }); + + describe('json-schema', () => { + const jsonSchema = { + type: 'object', + properties: { + foo: { type: 'string' }, + baz: { type: 'number' }, + }, + required: ['foo'], + additionalProperties: false, + } as const; + + it('should infer correct types in the step function step controls', async () => { + workflow('json-schema', async ({ step }) => { + await step.email( + 'json-schema', + async (controls) => { + expectTypeOf(controls).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + controlSchema: jsonSchema, + } + ); + }); + + it('should infer correct types in the skip function step controls', async () => { + workflow('json-schema', async ({ step }) => { + await step.email( + 'json-schema', + async (controls) => { + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + controlSchema: jsonSchema, + skip: (controls) => { + expectTypeOf(controls).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return true; + }, + } + ); + }); + }); + + it('should infer correct types in the provider function step controls', async () => { + workflow('json-schema', async ({ step }) => { + await step.email( + 'json-schema', + async (controls) => { + return { + subject: 'Test subject', + body: 'Test body', + }; + }, + { + controlSchema: jsonSchema, + providers: { + sendgrid: async ({ controls }) => { + expectTypeOf(controls).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return { + ipPoolName: 'test', + }; + }, + }, + } + ); + }); + }); + + it('should infer correct types in the workflow event payload', async () => { + workflow( + 'json-schema-validation', + async ({ step, payload }) => { + await step.email('json-schema-validation', async () => { + expectTypeOf(payload).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }, + { + payloadSchema: jsonSchema, + } + ); + }); + + it('should infer correct types in the workflow event controls', async () => { + workflow( + 'json-schema-validation', + async ({ step, controls }) => { + await step.email('json-schema-validation', async () => { + expectTypeOf(controls).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }, + { + controlSchema: jsonSchema, + } + ); + }); + + it('should infer correct types in the workflow event controls', async () => { + workflow( + 'json-schema-validation', + async ({ step, controls }) => { + await step.email('json-schema-validation', async () => { + expectTypeOf(controls).toEqualTypeOf<{ foo: string; baz?: number }>(); + + return { + subject: 'Test subject', + body: 'Test body', + }; + }); + }, + { + controlSchema: jsonSchema, + } + ); + }); + + it('should infer an unknown record type in the custom step results', async () => { + workflow('without-schema', async ({ step }) => { + const result = await step.custom( + 'without-schema', + async () => { + return { + foo: 'bar', + }; + }, + { + outputSchema: jsonSchema, + } + ); + + expectTypeOf(result).toMatchTypeOf<{ foo: string; baz?: number }>(); + }); + }); + }); + }); +}); diff --git a/packages/framework/src/resources/workflow/workflow.resource.ts b/packages/framework/src/resources/workflow/workflow.resource.ts index c6d868d6558..09bdc9e9453 100644 --- a/packages/framework/src/resources/workflow/workflow.resource.ts +++ b/packages/framework/src/resources/workflow/workflow.resource.ts @@ -45,7 +45,7 @@ export function workflow< if (validationResult.success === false) { throw new WorkflowPayloadInvalidError(workflowId, validationResult.errors); } - validatedData = validationResult.data; + validatedData = validationResult.data as T_PayloadValidated; } else { // This type coercion provides support to trigger Workflows without a payload schema validatedData = event.payload as unknown as T_PayloadValidated; diff --git a/packages/framework/src/types/import.types.ts b/packages/framework/src/types/import.types.ts new file mode 100644 index 00000000000..98c7d6d89e5 --- /dev/null +++ b/packages/framework/src/types/import.types.ts @@ -0,0 +1,34 @@ +export type ImportRequirement = { + /** + * The name of the dependency. + * + * This is a necessary duplicate as ESM does not provide a consistent API for + * reading the name of a dependency that can't be resolved. + * + * @example + * ```typescript + * 'my-dependency' + * ``` + */ + name: string; + /** + * The import of the dependency. This is necessary to ensure that the bundler will make + * the dependency available for usage during tree-shaking. + * + * @example + * ```typescript + * import('my-dependency') + * ``` + */ + import: Promise<{ default: unknown } & Record>; + /** + * The required exports of the dependency. The availability of these exports are + * checked by the import validator to verify the dependency is installed. + * + * @example + * ```typescript + * ['my-export'] + * ``` + */ + exports: readonly string[]; +}; diff --git a/packages/framework/src/types/schema.types.ts b/packages/framework/src/types/schema.types.ts deleted file mode 100644 index 6d6f3d2edf9..00000000000 --- a/packages/framework/src/types/schema.types.ts +++ /dev/null @@ -1,88 +0,0 @@ -import type { JSONSchema, FromSchema as JsonSchemaInfer } from 'json-schema-to-ts'; -import zod from 'zod'; -import { Prettify } from './util.types'; - -/** - * A JSON schema. - */ -export type JsonSchema = JSONSchema; - -/** - * A type that represents a class. - */ -export type ClassType = new (...args: unknown[]) => T; - -/** - * Extract the properties of a class type. - */ -export type ClassPropsInfer = T extends ClassType ? Prettify : never; - -/** - * A schema used to validate a JSON object. - * - * Supported schemas: - * - JSONSchema - * - ClassValidatorSchema - * - ZodSchema - */ -export type Schema = JsonSchema | zod.ZodType | ClassType; - -/** - * Infer the type of a Schema for unvalidated data. - * - * The resulting type has default properties set to optional, - * reflecting the fact that the data is unvalidated and has - * not had default properties set. - * - * @example - * ```ts - * type MySchema = FromSchemaUnvalidated; - * ``` - */ -export type FromSchemaUnvalidated = - /* - * Handle each Schema's type inference individually until - * all Schema types are exhausted. - */ - - // JSONSchema - T extends JSONSchema - ? JsonSchemaInfer - : // ZodSchema - T extends zod.ZodSchema - ? zod.input - : // ClassValidatorSchema - T extends ClassType - ? ClassPropsInfer - : // All schema types exhausted. - never; - -/** - * Infer the type of a Schema for validated data. - * - * The resulting type has default properties set to required, - * reflecting the fact that the data has been validated and - * default properties have been set. - * - * @example - * ```ts - * type MySchema = FromSchema; - * ``` - */ -export type FromSchema = - /* - * Handle each Schema's type inference individually until - * all Schema types are exhausted. - */ - - // JSONSchema - T extends JSONSchema - ? JsonSchemaInfer - : // ZodSchema - T extends zod.ZodSchema - ? zod.infer - : // ClassValidatorSchema - T extends ClassType - ? ClassPropsInfer - : // All schema types exhausted. - never; diff --git a/packages/framework/src/types/schema.types/base.schema.types.test-d.ts b/packages/framework/src/types/schema.types/base.schema.types.test-d.ts new file mode 100644 index 00000000000..30cd78312e7 --- /dev/null +++ b/packages/framework/src/types/schema.types/base.schema.types.test-d.ts @@ -0,0 +1,77 @@ +import { describe, expectTypeOf, it } from 'vitest'; +import { z } from 'zod'; +import { FromSchema, FromSchemaUnvalidated } from './base.schema.types'; + +describe('FromSchema', () => { + it('should infer an unknown record type when no schema is provided', () => { + expectTypeOf>().toEqualTypeOf>(); + }); + + it('should infer a Json Schema type', () => { + const testJsonSchema = { + type: 'object', + properties: { + foo: { type: 'string', default: 'bar' }, + bar: { type: 'string' }, + }, + additionalProperties: false, + } as const; + + expectTypeOf>().toEqualTypeOf<{ foo: string; bar?: string }>(); + }); + + it('should infer a Zod Schema type', () => { + const testZodSchema = z.object({ + foo: z.string().default('bar'), + bar: z.string().optional(), + }); + + expectTypeOf>().toEqualTypeOf<{ foo: string; bar?: string }>(); + }); + + it('should infer a Class Schema type', () => { + class TestSchema { + foo: string = 'bar'; + bar?: string; + } + + expectTypeOf>().toEqualTypeOf<{ foo: string; bar?: string }>(); + }); +}); + +describe('FromSchemaUnvalidated', () => { + it('should infer an unknown record type when no schema is provided', () => { + expectTypeOf>().toEqualTypeOf>(); + }); + + it('should infer a Json Schema type', () => { + const testJsonSchema = { + type: 'object', + properties: { + foo: { type: 'string', default: 'bar' }, + bar: { type: 'string' }, + }, + additionalProperties: false, + } as const; + + expectTypeOf>().toEqualTypeOf<{ foo?: string; bar?: string }>(); + }); + + it('should infer a Zod Schema type', () => { + const testZodSchema = z.object({ + foo: z.string().default('bar'), + bar: z.string().optional(), + }); + + expectTypeOf>().toEqualTypeOf<{ foo?: string; bar?: string }>(); + }); + + it('should infer a Class Schema type', () => { + class TestClassSchema { + foo?: string = 'bar'; + bar?: string; + } + + expectTypeOf>().toEqualTypeOf<{ foo?: string; bar?: string }>(); + }); +}); diff --git a/packages/framework/src/types/schema.types/base.schema.types.ts b/packages/framework/src/types/schema.types/base.schema.types.ts new file mode 100644 index 00000000000..ddaaae26b87 --- /dev/null +++ b/packages/framework/src/types/schema.types/base.schema.types.ts @@ -0,0 +1,55 @@ +import { ClassValidatorSchema, InferClassValidatorSchema } from './class.schema.types'; +import { JsonSchema, InferJsonSchema } from './json.schema.types'; +import { ZodSchemaMinimal, InferZodSchema } from './zod.schema.types'; + +/** + * A schema used to validate a JSON object. + */ +export type Schema = JsonSchema | ZodSchemaMinimal | ClassValidatorSchema; + +/** + * Main utility type for schema inference + * + * @param T - The Schema to infer the type of. + * @param Options - Configuration options for the type inference. The `validated` flag determines whether the schema has been validated. If `validated` is true, all properties are required unless specified otherwise. If false, properties with default values are optional. + */ +type InferSchema = + | InferJsonSchema + | InferZodSchema + | InferClassValidatorSchema + | never extends infer U + ? // If all inferred types are `never`, return an unknown record + [U] extends [never] + ? Record + : U extends Record + ? U + : Record + : Record; + +/** + * Infer the type of a Schema for unvalidated data. + * + * The resulting type has default properties set to optional, + * reflecting the fact that the data is unvalidated and has + * not had default properties set. + * + * @example + * ```ts + * type MySchema = FromSchemaUnvalidated; + * ``` + */ +export type FromSchemaUnvalidated = InferSchema; + +/** + * Infer the type of a Schema for validated data. + * + * The resulting type has default properties set to required, + * reflecting the fact that the data has been validated and + * default properties have been set. + * + * @example + * ```ts + * type MySchema = FromSchema; + * ``` + */ +export type FromSchema> = InferSchema; diff --git a/packages/framework/src/types/schema.types/class.schema.types.test-d.ts b/packages/framework/src/types/schema.types/class.schema.types.test-d.ts new file mode 100644 index 00000000000..ebdd46cb6c8 --- /dev/null +++ b/packages/framework/src/types/schema.types/class.schema.types.test-d.ts @@ -0,0 +1,42 @@ +import { describe, expectTypeOf, it } from 'vitest'; +import { InferClassValidatorSchema } from './class.schema.types'; + +describe('ClassSchema types', () => { + class TestSchema { + foo: string = 'bar'; + bar?: string; + } + + describe('validated data', () => { + it('should compile when the expected properties are provided', () => { + expectTypeOf>().toEqualTypeOf<{ + foo: string; + bar?: string; + }>(); + }); + + it('should not compile when the schema is not a ClassSchema', () => { + expectTypeOf>().toEqualTypeOf(); + }); + + it('should not compile when a property does not match the expected type', () => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + expectTypeOf>().toEqualTypeOf<{ + foo: number; + }>(); + }); + }); + + describe('unvalidated data', () => { + /** + * TODO: Support accessing defaulted properties when Typescript supports it. + */ + it.skip('should keep the defaulted properties optional', () => { + // @ts-expect-error - Type 'undefined' is not assignable to type 'string'. + expectTypeOf>().toEqualTypeOf<{ + foo?: string; + bar?: string; + }>(); + }); + }); +}); diff --git a/packages/framework/src/types/schema.types/class.schema.types.ts b/packages/framework/src/types/schema.types/class.schema.types.ts new file mode 100644 index 00000000000..4c57b30bf92 --- /dev/null +++ b/packages/framework/src/types/schema.types/class.schema.types.ts @@ -0,0 +1,44 @@ +import { Prettify } from '../util.types'; + +/** + * A type that represents a class. + */ +export type ClassValidatorSchema = new (...args: unknown[]) => T; + +/** + * Extract the properties of a class type. + */ +export type ClassPropsInfer = + T extends ClassValidatorSchema ? Prettify : never; + +/** + * Infer the data type of a ClassValidatorSchema. + * + * @param T - The ClassValidatorSchema to infer the data type of. + * @param Options - Configuration options for the type inference. The `validated` flag determines whether the schema has been validated. If `validated` is true, all properties are required unless specified otherwise. If false, properties with default values are optional. + * + * @returns The inferred type. + * + * @example + * ```ts + * class MySchema { + * @IsString() + * @IsNotEmpty() + * name: string; + * + * @IsEmail() + * @IsOptional() + * email?: string; + * } + * + * // has type { name: string, email?: string } + * type MySchema = InferClassValidatorSchema; + * ``` + */ +export type InferClassValidatorSchema = T extends ClassValidatorSchema + ? Options['validated'] extends true + ? ClassPropsInfer + : // ClassSchema doesn't support default properties, so the resulting type + // will not have default properties set to optional. + ClassPropsInfer + : never; diff --git a/packages/framework/src/types/schema.types/index.ts b/packages/framework/src/types/schema.types/index.ts new file mode 100644 index 00000000000..bee70f5c10b --- /dev/null +++ b/packages/framework/src/types/schema.types/index.ts @@ -0,0 +1,4 @@ +export type { JsonSchema } from './json.schema.types'; +export type { ZodSchemaMinimal, ZodSchema } from './zod.schema.types'; +export type { ClassValidatorSchema } from './class.schema.types'; +export type { Schema, FromSchema, FromSchemaUnvalidated } from './base.schema.types'; diff --git a/packages/framework/src/types/schema.types/json.schema.types.test-d.ts b/packages/framework/src/types/schema.types/json.schema.types.test-d.ts new file mode 100644 index 00000000000..25522ef5f43 --- /dev/null +++ b/packages/framework/src/types/schema.types/json.schema.types.test-d.ts @@ -0,0 +1,42 @@ +import { describe, expectTypeOf, it } from 'vitest'; +import { InferJsonSchema, JsonSchema } from './json.schema.types'; + +describe('JsonSchema types', () => { + const testSchema = { + type: 'object', + properties: { + foo: { type: 'string', default: 'bar' }, + bar: { type: 'string' }, + }, + additionalProperties: false, + } as const satisfies JsonSchema; + + describe('validated data', () => { + it('should compile when the expected properties are provided', () => { + expectTypeOf>().toEqualTypeOf<{ + foo: string; + bar?: string; + }>(); + }); + + it('should not compile when the schema is not a ClassSchema', () => { + expectTypeOf>().toEqualTypeOf(); + }); + + it('should not compile when a property does not match the expected type', () => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + expectTypeOf>().toEqualTypeOf<{ + foo: number; + }>(); + }); + }); + + describe('unvalidated data', () => { + it('should keep the defaulted properties optional', () => { + expectTypeOf>().toEqualTypeOf<{ + foo?: string; + bar?: string; + }>(); + }); + }); +}); diff --git a/packages/framework/src/types/schema.types/json.schema.types.ts b/packages/framework/src/types/schema.types/json.schema.types.ts new file mode 100644 index 00000000000..789edf7683e --- /dev/null +++ b/packages/framework/src/types/schema.types/json.schema.types.ts @@ -0,0 +1,36 @@ +import type { JSONSchema, FromSchema as JsonSchemaInfer } from 'json-schema-to-ts'; + +/** + * A JSON schema. + */ +export type JsonSchema = Exclude; + +/** + * Infer the data type of a JsonSchema. + * + * @param T - The `JsonSchema` to infer the data type of. + * @param Options - Configuration options for the type inference. The `validated` flag determines whether the schema has been validated. If `validated` is true, all properties are required unless specified otherwise. If false, properties with default values are optional. + * + * @returns The inferred type. + * + * @example + * ```ts + * const mySchema = { + * type: 'object', + * properties: { + * name: { type: 'string' }, + * email: { type: 'string' }, + * }, + * required: ['name'], + * additionalProperties: false, + * } as const satisfies JsonSchema; + * + * // has type { name: string, email?: string } + * type MySchema = InferJsonSchema; + * ``` + */ +export type InferJsonSchema = T extends JsonSchema + ? Options['validated'] extends true + ? JsonSchemaInfer + : JsonSchemaInfer + : never; diff --git a/packages/framework/src/types/schema.types/zod.schema.types.test-d.ts b/packages/framework/src/types/schema.types/zod.schema.types.test-d.ts new file mode 100644 index 00000000000..dee4a87c08f --- /dev/null +++ b/packages/framework/src/types/schema.types/zod.schema.types.test-d.ts @@ -0,0 +1,39 @@ +import { describe, expectTypeOf, it } from 'vitest'; +import { z } from 'zod'; +import { InferZodSchema } from './zod.schema.types'; + +describe('ZodSchema', () => { + const testSchema = z.object({ + foo: z.string().default('bar'), + bar: z.string().optional(), + }); + + describe('validated data', () => { + it('should compile when the expected properties are provided', () => { + expectTypeOf>().toEqualTypeOf<{ + foo: string; + bar?: string; + }>(); + }); + + it('should not compile when the schema is not a ClassSchema', () => { + expectTypeOf>().toEqualTypeOf(); + }); + + it('should not compile when a property does not match the expected type', () => { + // @ts-expect-error - Type 'number' is not assignable to type 'string'. + expectTypeOf>().toEqualTypeOf<{ + foo: number; + }>(); + }); + }); + + describe('unvalidated data', () => { + it('should keep the defaulted properties optional', () => { + expectTypeOf>().toEqualTypeOf<{ + foo?: string; + bar?: string; + }>(); + }); + }); +}); diff --git a/packages/framework/src/types/schema.types/zod.schema.types.ts b/packages/framework/src/types/schema.types/zod.schema.types.ts new file mode 100644 index 00000000000..67655b8f528 --- /dev/null +++ b/packages/framework/src/types/schema.types/zod.schema.types.ts @@ -0,0 +1,42 @@ +import zod from 'zod'; + +export type ZodSchema = zod.ZodType; + +/** + * A minimal ZodSchema type. + * + * It is necessary to define a minimal ZodSchema type to enable correct inference + * when Zod is not available, as Typescript doesn't support detection of module + * availability via `typeof import('zod')`. + */ +export type ZodSchemaMinimal = { + readonly safeParseAsync: unknown; +}; + +/** + * Infer the data type of a ZodSchema. + * + * @param T - The ZodSchema to infer the data type of. + * @param Options - Configuration options for the type inference. The `validated` flag determines whether the schema has been validated. If `validated` is true, all properties are required unless specified otherwise. If false, properties with default values are optional. + * + * @example + * ```ts + * const mySchema = z.object({ + * name: z.string(), + * email: z.string().optional(), + * }); + * + * // has type { name: string, email?: string } + * type MySchema = InferZodSchema; + * ``` + */ +export type InferZodSchema = + // Firstly, narrow to the minimal schema type without using the `zod` import + T extends ZodSchemaMinimal + ? // Secondly, narrow to the Zod type to provide type-safety to `zod.infer` and `zod.input` + T extends ZodSchema + ? Options['validated'] extends true + ? zod.infer + : zod.input + : never + : never; diff --git a/packages/framework/src/types/util.types.ts b/packages/framework/src/types/util.types.ts index 0246e75632b..0e5fc0a8f9a 100644 --- a/packages/framework/src/types/util.types.ts +++ b/packages/framework/src/types/util.types.ts @@ -1,3 +1,8 @@ +/* + * THIS FILE SHOULD NOT DEPEND ON ANY OTHER FILES. + * IT SHOULD ONLY CONTAIN UTILITY TYPES. + */ + /** * A type that represents either `A` or `B`. Shared properties retain their * types and unique properties are marked as optional. diff --git a/packages/framework/src/types/validator.types.ts b/packages/framework/src/types/validator.types.ts index 36826f8bf2b..933c39f8284 100644 --- a/packages/framework/src/types/validator.types.ts +++ b/packages/framework/src/types/validator.types.ts @@ -1,6 +1,8 @@ import type { ValidateFunction as AjvValidateFunction } from 'ajv'; import type { ParseReturnType } from 'zod'; -import type { Schema, JsonSchema, FromSchema, FromSchemaUnvalidated } from './schema.types'; +import type { Schema, FromSchema, FromSchemaUnvalidated } from './schema.types'; +import type { JsonSchema } from './schema.types/json.schema.types'; +import type { ImportRequirement } from './import.types'; export type ValidateFunction = AjvValidateFunction | ((data: T) => ParseReturnType); @@ -19,8 +21,7 @@ export type ValidateResult = data: T; }; -// eslint-disable-next-line @typescript-eslint/naming-convention -export interface Validator { +export type Validator = { validate: < T_Unvalidated extends Record = FromSchemaUnvalidated, T_Validated extends Record = FromSchema, @@ -28,6 +29,7 @@ export interface Validator { data: T_Unvalidated, schema: T_Schema ) => Promise>; - canHandle: (schema: Schema) => schema is T_Schema; + canHandle: (schema: Schema) => Promise; transformToJsonSchema: (schema: T_Schema) => Promise; -} + requiredImports: readonly ImportRequirement[]; +}; diff --git a/packages/framework/src/utils/import.utils.test.ts b/packages/framework/src/utils/import.utils.test.ts new file mode 100644 index 00000000000..ea08ba73fd2 --- /dev/null +++ b/packages/framework/src/utils/import.utils.test.ts @@ -0,0 +1,59 @@ +import { describe, it, expect } from 'vitest'; +import { checkDependencies } from './import.utils'; + +describe('import utils', () => { + describe('checkDependencies', () => { + it('should not throw an error if all dependencies are installed', async () => { + await expect( + checkDependencies( + [{ name: 'typescript', import: import('typescript'), exports: ['tokenToString'] }], + 'test schema' + ) + ).resolves.not.toThrow(); + }); + + it('should throw an error if a single dependency is not installed', async () => { + await expect( + checkDependencies( + // @ts-expect-error - Cannot find module 'missing-random-dependency' or its corresponding type declarations. + [{ name: 'missing-random-dependency', import: import('missing-random-dependency'), exports: [] }], + 'test schema' + ) + ).rejects.toThrow( + 'Tried to use a test schema in @novu/framework without missing-random-dependency installed. Please install it by running `npm install missing-random-dependency`.' + ); + }); + + it('should throw an error if multiple dependencies are not installed', async () => { + await expect( + checkDependencies( + [ + // @ts-expect-error - Cannot find module 'missing-random-dependency-1' or its corresponding type declarations. + { name: 'missing-random-dependency-1', import: import('missing-random-dependency-1'), exports: [] }, + // @ts-expect-error - Cannot find module 'missing-random-dependency-2' or its corresponding type declarations. + { name: 'missing-random-dependency-2', import: import('missing-random-dependency-2'), exports: [] }, + ], + 'test schema' + ) + ).rejects.toThrow( + 'Tried to use a test schema in @novu/framework without missing-random-dependency-1, missing-random-dependency-2 installed. Please install them by running `npm install missing-random-dependency-1 missing-random-dependency-2`.' + ); + }); + + it('should throw an error listing a single dependency that is not installed when using a root and non-root import', async () => { + await expect( + checkDependencies( + [ + // @ts-expect-error - Cannot find module 'missing-random-dependency' or its corresponding type declarations. + { name: 'missing-random-dependency', import: import('missing-random-dependency'), exports: [] }, + // @ts-expect-error - Cannot find module 'missing-random-dependency/nested' or its corresponding type declarations. + { name: 'missing-random-dependency', import: import('missing-random-dependency/nested'), exports: [] }, + ], + 'test schema' + ) + ).rejects.toThrow( + 'Tried to use a test schema in @novu/framework without missing-random-dependency installed. Please install it by running `npm install missing-random-dependency`.' + ); + }); + }); +}); diff --git a/packages/framework/src/utils/import.utils.ts b/packages/framework/src/utils/import.utils.ts new file mode 100644 index 00000000000..3d924c75f3e --- /dev/null +++ b/packages/framework/src/utils/import.utils.ts @@ -0,0 +1,37 @@ +import { MissingDependencyError } from '../errors/import.errors'; +import type { ImportRequirement } from '../types/import.types'; + +/** + * Check if the required dependencies are installed and throw an error if not. + * + * @param dependencies - The list of dependencies to check + * @param usageReason - The usage of the dependencies + */ +export const checkDependencies = async ( + dependencies: readonly ImportRequirement[], + usageReason: string +): Promise => { + const missingDependencies = new Set(); + for (const dep of dependencies) { + try { + const result = await dep.import; + + const hasAllExports = dep.exports.every((exportName) => result[exportName] !== undefined); + + /* + * First way that a dependency isn't available is if the import succeeds + * but the necessary exports are not available. + */ + if (!hasAllExports) { + missingDependencies.add(dep.name); + } + } catch (error) { + // Second way that a dependency isn't available is if the import fails. + missingDependencies.add(dep.name); + } + } + + if (missingDependencies.size > 0) { + throw new MissingDependencyError(usageReason, Array.from(missingDependencies)); + } +}; diff --git a/packages/framework/src/validators/base.validator.ts b/packages/framework/src/validators/base.validator.ts index e276acf453a..52daa76a971 100644 --- a/packages/framework/src/validators/base.validator.ts +++ b/packages/framework/src/validators/base.validator.ts @@ -1,4 +1,11 @@ -import type { FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../types/schema.types'; +import type { + FromSchema, + FromSchemaUnvalidated, + ClassValidatorSchema, + Schema, + JsonSchema, + ZodSchema, +} from '../types/schema.types'; import type { ValidateResult } from '../types/validator.types'; import { JsonSchemaValidator } from './json-schema.validator'; import { ZodValidator } from './zod.validator'; @@ -8,6 +15,13 @@ const zodValidator = new ZodValidator(); const classValidatorValidator = new ClassValidatorValidator(); const jsonSchemaValidator = new JsonSchemaValidator(); +/** + * Validate data against a schema. + * + * @param schema - The schema to validate the data against. + * @param data - The data to validate. + * @returns The validated data. + */ export const validateData = async < T_Schema extends Schema = Schema, T_Unvalidated extends Record = FromSchemaUnvalidated, @@ -16,24 +30,35 @@ export const validateData = async < schema: T_Schema, data: T_Unvalidated ): Promise> => { - if (zodValidator.canHandle(schema)) { - return zodValidator.validate(data, schema); - } else if (classValidatorValidator.canHandle(schema)) { - return classValidatorValidator.validate(data, schema); - } else if (jsonSchemaValidator.canHandle(schema)) { - return jsonSchemaValidator.validate(data, schema); + /** + * TODO: Replace type coercion with async type guard when available. + * + * @see https://github.com/microsoft/typescript/issues/37681 + */ + if (await zodValidator.canHandle(schema)) { + return zodValidator.validate(data, schema as ZodSchema); + } else if (await classValidatorValidator.canHandle(schema)) { + return classValidatorValidator.validate(data, schema as ClassValidatorSchema); + } else if (await jsonSchemaValidator.canHandle(schema)) { + return jsonSchemaValidator.validate(data, schema as JsonSchema); } throw new Error('Invalid schema'); }; +/** + * Transform a schema to a JSON schema. + * + * @param schema - The schema to transform. + * @returns The transformed JSON schema. + */ export const transformSchema = async (schema: Schema): Promise => { - if (zodValidator.canHandle(schema)) { - return zodValidator.transformToJsonSchema(schema); - } else if (classValidatorValidator.canHandle(schema)) { - return classValidatorValidator.transformToJsonSchema(schema); - } else if (jsonSchemaValidator.canHandle(schema)) { - return jsonSchemaValidator.transformToJsonSchema(schema); + if (await zodValidator.canHandle(schema)) { + return zodValidator.transformToJsonSchema(schema as ZodSchema); + } else if (await classValidatorValidator.canHandle(schema)) { + return classValidatorValidator.transformToJsonSchema(schema as ClassValidatorSchema); + } else if (await jsonSchemaValidator.canHandle(schema)) { + return jsonSchemaValidator.transformToJsonSchema(schema as JsonSchema); } throw new Error('Invalid schema'); diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index 7252e47ea45..6770f1554a2 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -1,6 +1,14 @@ import { ValidationError } from 'class-validator'; -import type { ClassType, FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../types/schema.types'; +import type { + FromSchema, + FromSchemaUnvalidated, + Schema, + JsonSchema, + ClassValidatorSchema, +} from '../types/schema.types'; import type { ValidateResult, Validator } from '../types/validator.types'; +import { checkDependencies } from '../utils/import.utils'; +import { ImportRequirement } from '../types/import.types'; // Function to recursively add `additionalProperties: false` to the schema // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -55,87 +63,101 @@ function formatErrors(errors: ValidationError[], parentPath = ''): { path: strin }); } -export class ClassValidatorValidator implements Validator { - canHandle(schema: Schema): schema is ClassType { - return ( - typeof (schema as ClassType) === 'function' && - (schema as ClassType).prototype !== undefined && - (schema as ClassType).prototype.constructor === schema - ); +export class ClassValidatorValidator implements Validator { + readonly requiredImports: readonly ImportRequirement[] = [ + { + name: 'class-validator', + import: import('class-validator'), + exports: ['validate', 'getMetadataStorage'], + }, + { + name: 'class-transformer', + import: import('class-transformer'), + exports: ['plainToInstance', 'instanceToPlain'], + }, + { + name: 'class-transformer', + // @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module + import: import('class-transformer/cjs/storage'), + exports: ['defaultMetadataStorage'], + }, + { + name: 'reflect-metadata', + import: import('reflect-metadata'), + exports: [], + }, + { + name: 'class-validator-jsonschema', + import: import('class-validator-jsonschema'), + exports: ['validationMetadatasToSchemas', 'targetConstructorToSchema'], + }, + ]; + + async canHandle(schema: Schema): Promise { + const canHandle = + typeof (schema as ClassValidatorSchema) === 'function' && + (schema as ClassValidatorSchema).prototype !== undefined && + (schema as ClassValidatorSchema).prototype.constructor === schema; + + if (canHandle) { + await checkDependencies(this.requiredImports, 'class-validator schema'); + } + + return canHandle; } async validate< - T_Schema extends ClassType = ClassType, + T_Schema extends ClassValidatorSchema = ClassValidatorSchema, T_Unvalidated = FromSchemaUnvalidated, T_Validated = FromSchema, >(data: T_Unvalidated, schema: T_Schema): Promise> { - try { - await import('reflect-metadata'); - const { plainToInstance, instanceToPlain } = await import('class-transformer'); - const { validate } = await import('class-validator'); - - // Convert plain data to an instance of the schema class - const instance = plainToInstance(schema, data); - - // Validate the instance - const errors = await validate(instance as object, { whitelist: true }); - - // if undefined, then something went wrong - if (!instance && !!data) throw new Error('Failed to convert data to an instance of the schema class'); - - if (errors.length === 0) { - return { success: true, data: instanceToPlain(instance) as T_Validated }; - } else { - return { - success: false, - errors: formatErrors(errors), - }; - } - } catch (error) { - if ((error as Error)?.message?.includes('Cannot find module')) { - throw new Error( - 'Tried to use a class-validator schema in @novu/framework without `class-validator`, `class-transformer` or `reflect-metadata` installed. ' + - 'Please install it by running `npm install class-validator class-transformer reflect-metadata`.' - ); - } - throw error; + const { plainToInstance, instanceToPlain } = await import('class-transformer'); + const { validate } = await import('class-validator'); + + // Convert plain data to an instance of the schema class + const instance = plainToInstance(schema, data); + + // Validate the instance + const errors = await validate(instance as object, { whitelist: true }); + + // if undefined, then something went wrong + if (!instance && !!data) throw new Error('Failed to convert data to an instance of the schema class'); + + if (errors.length === 0) { + return { success: true, data: instanceToPlain(instance) as T_Validated }; + } else { + return { + success: false, + errors: formatErrors(errors), + }; } } - async transformToJsonSchema(schema: ClassType): Promise { - try { - /* - * TODO: replace with direct import, when defaultMetadataStorage is exported by default - * @see https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 - */ - // @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module - const { defaultMetadataStorage } = await import('class-transformer/cjs/storage'); - const { getMetadataStorage } = await import('class-validator'); - const { targetConstructorToSchema, validationMetadatasToSchemas } = await import('class-validator-jsonschema'); - - const schemas = validationMetadatasToSchemas({ - classValidatorMetadataStorage: getMetadataStorage(), - classTransformerMetadataStorage: defaultMetadataStorage, - }); - - return addAdditionalPropertiesFalse( - replaceSchemaRefs( - targetConstructorToSchema(schema, { - classValidatorMetadataStorage: getMetadataStorage(), - classTransformerMetadataStorage: defaultMetadataStorage, - }), - schemas - ) - ); - } catch (error) { - if ((error as Error)?.message?.includes('Cannot find module')) { - // eslint-disable-next-line no-console - console.error( - 'Tried to use a class-validator schema in @novu/framework without `class-validator-jsonschema` installed. ' + - 'Please install it by running `npm install class-validator-jsonschema`.' - ); - } - throw error; - } + async transformToJsonSchema(schema: ClassValidatorSchema): Promise { + /* + * TODO: replace with direct import, when defaultMetadataStorage is exported by default + * @see https://github.com/typestack/class-transformer/issues/563#issuecomment-803262394 + */ + // @ts-expect-error - class-transformer doesn't export `defaultMetadataStorage` from the root module + const { defaultMetadataStorage } = await import('class-transformer/cjs/storage'); + const { getMetadataStorage } = await import('class-validator'); + const { validationMetadatasToSchemas, targetConstructorToSchema } = await import('class-validator-jsonschema'); + + const schemas = validationMetadatasToSchemas({ + classValidatorMetadataStorage: getMetadataStorage(), + classTransformerMetadataStorage: defaultMetadataStorage, + }); + + const transformedSchema = addAdditionalPropertiesFalse( + replaceSchemaRefs( + targetConstructorToSchema(schema, { + classValidatorMetadataStorage: getMetadataStorage(), + classTransformerMetadataStorage: defaultMetadataStorage, + }), + schemas + ) + ); + + return transformedSchema; } } diff --git a/packages/framework/src/validators/json-schema.validator.ts b/packages/framework/src/validators/json-schema.validator.ts index 2a5446d7a9a..22e8ede605d 100644 --- a/packages/framework/src/validators/json-schema.validator.ts +++ b/packages/framework/src/validators/json-schema.validator.ts @@ -2,10 +2,18 @@ import Ajv from 'ajv'; import type { ErrorObject, ValidateFunction as AjvValidateFunction } from 'ajv'; import addFormats from 'ajv-formats'; import type { ValidateResult, Validator } from '../types/validator.types'; -import type { FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../types/schema.types'; +import type { FromSchema, FromSchemaUnvalidated, Schema, JsonSchema } from '../types/schema.types'; import { cloneData } from '../utils/clone.utils'; +import { checkDependencies } from '../utils/import.utils'; +import { ImportRequirement } from '../types/import.types'; export class JsonSchemaValidator implements Validator { + /** + * Json schema validation has no required dependencies as they are included in + * the `@novu/framework` package dependencies. + */ + readonly requiredImports: readonly ImportRequirement[] = []; + private readonly ajv: Ajv; /** @@ -27,15 +35,18 @@ export class JsonSchemaValidator implements Validator { this.compiledSchemas = new Map(); } - canHandle(schema: Schema): schema is JsonSchema { - if (typeof schema === 'boolean') return false; + async canHandle(schema: Schema): Promise { + const canHandle = + (schema as JsonSchema).type === 'object' || + !!(schema as JsonSchema).anyOf || + !!(schema as JsonSchema).allOf || + !!(schema as JsonSchema).oneOf; + + if (canHandle) { + await checkDependencies(this.requiredImports, 'json-schema'); + } - return ( - (schema as Exclude).type === 'object' || - !!(schema as Exclude).anyOf || - !!(schema as Exclude).allOf || - !!(schema as Exclude).oneOf - ); + return canHandle; } async validate< diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index 72e3648b264..851b6ac1033 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -1,8 +1,10 @@ import { describe, it, expect } from 'vitest'; -import { ZodSchema, z } from 'zod'; +import { z } from 'zod'; import { validateData, transformSchema } from './base.validator'; -import { ClassType, JsonSchema, Schema } from '../types/schema.types'; +import { Schema, ZodSchema } from '../types/schema.types'; import { SimpleStringSchema, NestedSchema, SimpleStringAndNumberSchema } from './fixures/class-validator.fixtures'; +import { ClassValidatorSchema } from '../types/schema.types/class.schema.types'; +import { JsonSchema } from '../types/schema.types/json.schema.types'; const schemas = ['zod', 'class', 'json'] as const; @@ -12,7 +14,7 @@ describe('validators', () => { title: string; schemas: { zod: ZodSchema | null; - class: ClassType | null; + class: ClassValidatorSchema | null; json: JsonSchema; }; payload: Record; @@ -357,7 +359,7 @@ describe('validators', () => { title: string; schemas: { zod: ZodSchema | null; - class: ClassType | null; + class: ClassValidatorSchema | null; json: JsonSchema; }; result: JsonSchema; diff --git a/packages/framework/src/validators/zod.validator.ts b/packages/framework/src/validators/zod.validator.ts index e428b9bf82e..5db48cdc48a 100644 --- a/packages/framework/src/validators/zod.validator.ts +++ b/packages/framework/src/validators/zod.validator.ts @@ -1,19 +1,40 @@ -import { ZodSchema } from 'zod'; +import zod from 'zod'; -import type { FromSchema, FromSchemaUnvalidated, JsonSchema, Schema } from '../types/schema.types'; +import type { FromSchema, FromSchemaUnvalidated, Schema, JsonSchema, ZodSchemaMinimal } from '../types/schema.types'; import type { ValidateResult, Validator } from '../types/validator.types'; +import { checkDependencies } from '../utils/import.utils'; +import { ImportRequirement } from '../types/import.types'; -export class ZodValidator implements Validator { - canHandle(schema: Schema): schema is ZodSchema { - return (schema as ZodSchema).safeParseAsync !== undefined; +export class ZodValidator implements Validator { + readonly requiredImports: readonly ImportRequirement[] = [ + { + name: 'zod', + import: import('zod'), + exports: ['ZodType'], + }, + { + name: 'zod-to-json-schema', + import: import('zod-to-json-schema'), + exports: ['zodToJsonSchema'], + }, + ]; + + async canHandle(schema: Schema): Promise { + const canHandle = (schema as ZodSchemaMinimal).safeParseAsync !== undefined; + + if (canHandle) { + await checkDependencies(this.requiredImports, 'zod schema'); + } + + return canHandle; } async validate< - T_Schema extends ZodSchema = ZodSchema, + T_Schema extends zod.ZodType = zod.ZodType, T_Unvalidated = FromSchemaUnvalidated, T_Validated = FromSchema, >(data: T_Unvalidated, schema: T_Schema): Promise> { - const result = schema.safeParse(data); + const result = await schema.safeParseAsync(data); if (result.success) { return { success: true, data: result.data as T_Validated }; } else { @@ -27,21 +48,10 @@ export class ZodValidator implements Validator { } } - async transformToJsonSchema(schema: ZodSchema): Promise { - try { - const { zodToJsonSchema } = await import('zod-to-json-schema'); - - // TODO: zod-to-json-schema is not using JSONSchema7 - return zodToJsonSchema(schema) as JsonSchema; - } catch (error) { - if ((error as Error)?.message?.includes('Cannot find module')) { - // eslint-disable-next-line no-console - console.error( - 'Tried to use a zod schema in @novu/framework without `zod-to-json-schema` installed. ' + - 'Please install it by running `npm install zod-to-json-schema`.' - ); - } - throw error; - } + async transformToJsonSchema(schema: zod.ZodType): Promise { + const { zodToJsonSchema } = await import('zod-to-json-schema'); + + // TODO: zod-to-json-schema is not using JSONSchema7 + return zodToJsonSchema(schema) as JsonSchema; } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b887430470b..283d301fb69 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,7 +335,7 @@ importers: version: 7.1.0 ts-jest: specifier: 27.1.5 - version: 27.1.5(@babel/core@7.25.2)(@types/jest@29.5.13)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) + version: 27.1.5(@babel/core@7.24.3)(@types/jest@29.5.13)(babel-jest@27.5.1(@babel/core@7.24.3))(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) ts-node: specifier: ~10.9.1 version: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2) @@ -1023,13 +1023,13 @@ importers: dependencies: '@babel/plugin-proposal-optional-chaining': specifier: ^7.20.7 - version: 7.21.0(@babel/core@7.21.4) + version: 7.21.0(@babel/core@7.22.11) '@babel/plugin-transform-react-display-name': specifier: ^7.18.6 - version: 7.18.6(@babel/core@7.21.4) + version: 7.18.6(@babel/core@7.22.11) '@babel/plugin-transform-runtime': specifier: ^7.23.2 - version: 7.23.2(@babel/core@7.21.4) + version: 7.23.2(@babel/core@7.22.11) '@clerk/clerk-react': specifier: ^5.15.1 version: 5.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1215,7 +1215,7 @@ importers: version: 11.9.0 html-webpack-plugin: specifier: 5.5.3 - version: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + version: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -1251,7 +1251,7 @@ importers: version: 4.3.2 mdx-bundler: specifier: 10.0.2 - version: 10.0.2(esbuild@0.23.1) + version: 10.0.2(esbuild@0.18.20) mixpanel-browser: specifier: ^2.52.0 version: 2.53.0 @@ -1354,13 +1354,13 @@ importers: version: 7.12.1 '@babel/preset-env': specifier: ^7.23.2 - version: 7.23.2(@babel/core@7.21.4) + version: 7.23.2(@babel/core@7.22.11) '@babel/preset-react': specifier: ^7.13.13 - version: 7.18.6(@babel/core@7.21.4) + version: 7.18.6(@babel/core@7.22.11) '@babel/preset-typescript': specifier: ^7.13.0 - version: 7.21.4(@babel/core@7.21.4) + version: 7.21.4(@babel/core@7.22.11) '@babel/runtime': specifier: ^7.20.13 version: 7.21.0 @@ -1405,13 +1405,13 @@ importers: version: 7.4.2 '@storybook/preset-create-react-app': specifier: ^7.4.2 - version: 7.4.2(f7avyblvzm233o6g7idqcb345u) + version: 7.4.2(ucmnrhmq4kewpo24xrp57f5r6y) '@storybook/react': specifier: ^7.4.2 version: 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@storybook/react-webpack5': specifier: ^7.4.2 - version: 7.4.2(@babel/core@7.21.4)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1) + version: 7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1) '@testing-library/jest-dom': specifier: ^4.2.4 version: 4.2.4 @@ -1438,16 +1438,16 @@ importers: version: 0.13.0 less-loader: specifier: 4.1.0 - version: 4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + version: 4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) react-app-rewired: specifier: ^2.2.1 - version: 2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)) + version: 2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)) react-error-overlay: specifier: 6.0.11 version: 6.0.11 react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) sinon: specifier: 9.2.4 version: 9.2.4 @@ -1459,13 +1459,13 @@ importers: version: 5.6.2 webpack: specifier: 5.78.0 - version: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + version: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) webpack-bundle-analyzer: specifier: ^4.9.0 version: 4.9.0 webpack-dev-server: specifier: 4.11.1 - version: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + version: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) apps/webhook: dependencies: @@ -1764,34 +1764,34 @@ importers: version: 1.14.2 html-webpack-plugin: specifier: 5.5.3 - version: 5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + version: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) http-server: specifier: ^0.13.0 version: 0.13.0 jest: specifier: 27.5.1 - version: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + version: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) less: specifier: ^4.1.0 version: 4.1.3 less-loader: specifier: 4.1.0 - version: 4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + version: 4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) react-app-rewired: specifier: ^2.2.1 - version: 2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)) + version: 2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) typescript: specifier: 5.6.2 version: 5.6.2 webpack: specifier: 5.78.0 - version: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + version: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) webpack-dev-server: specifier: 4.11.1 - version: 4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + version: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) apps/worker: dependencies: @@ -2786,7 +2786,7 @@ importers: version: 20.16.5 jest: specifier: ^29.4.1 - version: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-environment-jsdom: specifier: ^29.4.1 version: 29.5.0 @@ -2798,7 +2798,7 @@ importers: version: 16.10.0(@swc-node/register@1.8.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/types@0.1.12)(typescript@5.6.2))(@swc/core@1.3.107(@swc/helpers@0.5.12)) ts-jest: specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) typescript: specifier: 5.6.2 version: 5.6.2 @@ -2956,13 +2956,13 @@ importers: version: 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@storybook/react-webpack5': specifier: ^7.4.2 - version: 7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1) + version: 7.4.2(@babel/core@7.23.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-hot-middleware@2.26.1) '@storybook/theming': specifier: ^7.4.2 version: 7.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/jest-dom': specifier: ^6.4.1 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@24.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@24.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6)) '@testing-library/react': specifier: ^12.1.5 version: 12.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -3007,13 +3007,13 @@ importers: version: 7.4.2(encoding@0.1.13) ts-loader: specifier: ~9.4.0 - version: 9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + version: 9.4.4(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) typescript: specifier: 5.6.2 version: 5.6.2 url-loader: specifier: ^4.1.1 - version: 4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + version: 4.1.1(file-loader@6.2.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) vite: specifier: ^4.5.2 version: 4.5.2(@types/node@20.16.5)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6) @@ -3204,7 +3204,7 @@ importers: version: 8.1.1 '@testing-library/jest-dom': specifier: ^6.4.1 - version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@25.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.6)) + version: 6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@25.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.6)) '@testing-library/react': specifier: ^12.1.5 version: 12.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -3383,7 +3383,7 @@ importers: version: 3.8.3(encoding@0.1.13) jest: specifier: ^27.0.6 - version: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + version: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -3392,7 +3392,7 @@ importers: version: 3.0.2 ts-jest: specifier: ^27.0.5 - version: 27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) typedoc: specifier: ^0.24.0 version: 0.24.6(typescript@5.6.2) @@ -3460,6 +3460,15 @@ importers: aws-lambda: specifier: ^1.0.7 version: 1.0.7 + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 + class-validator: + specifier: ^0.14.1 + version: 0.14.1 + class-validator-jsonschema: + specifier: ^5.0.1 + version: 5.0.1(class-transformer@0.5.1)(class-validator@0.14.1) express: specifier: ^4.19.2 version: 4.19.2 @@ -3471,10 +3480,13 @@ importers: version: 8.0.0(typescript@5.6.2) next: specifier: ^13.5.4 - version: 13.5.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) + version: 13.5.6(@babel/core@7.24.3)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) prettier: specifier: ^3.2.5 version: 3.3.2 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2) @@ -3532,7 +3544,7 @@ importers: version: 29.5.0 ts-jest: specifier: ^29.0.3 - version: 29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.18.20)(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) typedoc: specifier: ^0.24.0 version: 0.24.6(typescript@5.6.2) @@ -3732,7 +3744,7 @@ importers: version: link:../react next: specifier: '>=13' - version: 13.5.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) + version: 13.5.6(@babel/core@7.24.3)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) react: specifier: '>=17' version: 18.3.1 @@ -3803,7 +3815,7 @@ importers: version: 3.8.3(encoding@0.1.13) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) nock: specifier: ^13.1.3 version: 13.3.0 @@ -3821,7 +3833,7 @@ importers: version: 0.0.0 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.23.1)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) typedoc: specifier: ^0.24.0 version: 0.24.6(typescript@5.6.2) @@ -3912,7 +3924,7 @@ importers: version: 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@storybook/react-webpack5': specifier: ^7.4.2 - version: 7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1) + version: 7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack-hot-middleware@2.26.1) '@testing-library/dom': specifier: ^9.3.0 version: 9.3.0 @@ -3945,10 +3957,10 @@ importers: version: 8.8.2 babel-loader: specifier: ^8.2.4 - version: 8.3.0(@babel/core@7.25.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 8.3.0(@babel/core@7.25.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) compression-webpack-plugin: specifier: ^10.0.0 - version: 10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) jest: specifier: ^29.3.1 version: 29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) @@ -3972,28 +3984,28 @@ importers: version: 7.4.2(encoding@0.1.13) terser-webpack-plugin: specifier: ^5.3.9 - version: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) ts-jest: specifier: ^29.0.3 - version: 29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.18.20)(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) ts-loader: specifier: ~9.4.0 - version: 9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) typescript: specifier: 5.6.2 version: 5.6.2 url-loader: specifier: ^4.1.1 - version: 4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) webpack: specifier: ^5.74.0 - version: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + version: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) webpack-bundle-analyzer: specifier: ^4.9.0 version: 4.9.0 webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) + version: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) packages/novu: dependencies: @@ -4403,7 +4415,7 @@ importers: version: 3.8.3(encoding@0.1.13) jest: specifier: ^27.0.6 - version: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + version: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -4418,7 +4430,7 @@ importers: version: 0.0.0 ts-jest: specifier: ^27.0.5 - version: 27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) typedoc: specifier: ^0.24.0 version: 0.24.6(typescript@5.6.2) @@ -4533,7 +4545,7 @@ importers: version: 0.439.0(react@18.3.1) next: specifier: 14.2.4 - version: 14.2.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) + version: 14.2.4(@babel/core@7.24.3)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) react: specifier: ^18 version: 18.3.1 @@ -19735,6 +19747,12 @@ packages: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} + class-validator-jsonschema@5.0.1: + resolution: {integrity: sha512-9uTdo5jSnJUj7f0dS8YZDqM0Fv1Uky0BWefswnNa2F4nRcKPCiEb5z3nDUaXyEzcERCrizE+0AGDSao1uSNX9g==} + peerDependencies: + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.14.0 + class-validator@0.14.1: resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} @@ -25939,6 +25957,9 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.groupby@4.6.0: + resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -27789,6 +27810,9 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openapi3-ts@3.2.0: + resolution: {integrity: sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -30595,6 +30619,9 @@ packages: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -35289,8 +35316,8 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.575.0(@aws-sdk/client-sts@3.575.0) - '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/client-sso-oidc': 3.575.0 + '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-host-header': 3.575.0 @@ -35491,8 +35518,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.575.0(@aws-sdk/client-sts@3.575.0) - '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/client-sso-oidc': 3.575.0 + '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-bucket-endpoint': 3.575.0 @@ -35718,11 +35745,11 @@ snapshots: - aws-crt optional: true - '@aws-sdk/client-sso-oidc@3.575.0(@aws-sdk/client-sts@3.575.0)': + '@aws-sdk/client-sso-oidc@3.575.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-host-header': 3.575.0 @@ -35761,7 +35788,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso-oidc@3.637.0(@aws-sdk/client-sts@3.637.0)': @@ -36146,11 +36172,11 @@ snapshots: - aws-crt optional: true - '@aws-sdk/client-sts@3.575.0': + '@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.575.0(@aws-sdk/client-sts@3.575.0) + '@aws-sdk/client-sso-oidc': 3.575.0 '@aws-sdk/core': 3.575.0 '@aws-sdk/credential-provider-node': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) '@aws-sdk/middleware-host-header': 3.575.0 @@ -36189,6 +36215,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/client-sts@3.637.0': @@ -36418,7 +36445,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0)': dependencies: - '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/credential-provider-env': 3.575.0 '@aws-sdk/credential-provider-process': 3.575.0 '@aws-sdk/credential-provider-sso': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) @@ -36729,7 +36756,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.575.0)': dependencies: - '@aws-sdk/client-sts': 3.575.0 + '@aws-sdk/client-sts': 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) '@aws-sdk/types': 3.575.0 '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 @@ -37250,7 +37277,7 @@ snapshots: '@aws-sdk/token-providers@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.575.0(@aws-sdk/client-sts@3.575.0) + '@aws-sdk/client-sso-oidc': 3.575.0 '@aws-sdk/types': 3.575.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -37259,7 +37286,7 @@ snapshots: '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.575.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.575.0(@aws-sdk/client-sts@3.575.0) + '@aws-sdk/client-sso-oidc': 3.575.0 '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -38042,6 +38069,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.6(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 @@ -38136,6 +38174,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.22.20(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.22.20(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -38659,6 +38708,13 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11) + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -38734,6 +38790,12 @@ snapshots: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.24.8 + optional: true + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -38869,14 +38931,14 @@ snapshots: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4)': + '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11)': + '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.23.2)': dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.23.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.3)': @@ -39009,6 +39071,11 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -39019,9 +39086,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.21.4)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.3)': @@ -39244,9 +39311,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4)': + '@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.25.2)': @@ -39923,18 +39990,18 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.21.4)': - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.21.4) - '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.22.11) + '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.23.2) + '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 @@ -40209,10 +40276,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.21.4)': + '@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.22.20(@babel/core@7.21.4) + '@babel/core': 7.22.11 + '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: @@ -40863,6 +40930,11 @@ snapshots: '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.21.4)': dependencies: '@babel/core': 7.21.4 @@ -40873,6 +40945,11 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -40890,10 +40967,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.21.4)': + '@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.21.4) + '@babel/core': 7.22.11 + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.11) transitivePeerDependencies: - supports-color @@ -40904,6 +40981,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -40959,14 +41043,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.21.4)': + '@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.22.11 + '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.4) - '@babel/types': 7.25.6 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.11) + '@babel/types': 7.22.19 transitivePeerDependencies: - supports-color @@ -40981,6 +41065,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -41003,13 +41098,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4)': + '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.21.4) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.22.11) '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -41042,10 +41137,10 @@ snapshots: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.21.4)': + '@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.22.11 + '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.22.11)': @@ -41054,6 +41149,12 @@ snapshots: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -41144,6 +41245,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-runtime@7.23.2(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.22.11) + babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.22.11) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.22.11) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-runtime@7.23.2(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 @@ -41328,13 +41441,13 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.4)': + '@babel/plugin-transform-typescript@7.21.3(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.11) '@babel/plugin-transform-typescript@7.21.3(@babel/core@7.25.2)': dependencies: @@ -42030,19 +42143,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.22.15(@babel/core@7.21.4)': + '@babel/preset-flow@7.22.15(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.21.4) + '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.22.11) - '@babel/preset-flow@7.22.15(@babel/core@7.22.11)': + '@babel/preset-flow@7.22.15(@babel/core@7.23.2)': dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.23.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.22.11) + '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.23.2) '@babel/preset-flow@7.22.15(@babel/core@7.25.2)': dependencies: @@ -42112,15 +42225,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-react@7.22.15(@babel/core@7.21.4)': + '@babel/preset-react@7.18.6(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.21.4) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.21.4) + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.11) + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.11) + '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.22.11) + '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.22.11) transitivePeerDependencies: - supports-color @@ -42136,6 +42249,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-react@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.23.2) + transitivePeerDependencies: + - supports-color + '@babel/preset-react@7.22.15(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -42160,14 +42285,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.21.4(@babel/core@7.21.4)': + '@babel/preset-typescript@7.21.4(@babel/core@7.22.11)': dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.21.4) - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.11) + '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.11) + '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.11) transitivePeerDependencies: - supports-color @@ -43711,11 +43836,11 @@ snapshots: to-pascal-case: 1.0.0 unescape-js: 1.1.4 - '@esbuild-plugins/node-resolve@0.2.2(esbuild@0.23.1)': + '@esbuild-plugins/node-resolve@0.2.2(esbuild@0.18.20)': dependencies: '@types/resolve': 1.20.2 debug: 4.3.6(supports-color@8.1.1) - esbuild: 0.23.1 + esbuild: 0.18.20 escape-string-regexp: 4.0.0 resolve: 1.22.8 transitivePeerDependencies: @@ -44665,7 +44790,7 @@ snapshots: - ts-node - utf-8-validate - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))': + '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -44679,7 +44804,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -44702,44 +44827,42 @@ snapshots: - ts-node - utf-8-validate - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))': dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.16.5 ansi-escapes: 4.3.2 chalk: 4.1.2 - emittery: 0.8.1 + ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 micromatch: 4.0.8 - rimraf: 3.0.2 + pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -44753,7 +44876,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -44774,7 +44897,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -44788,7 +44911,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -46018,11 +46141,11 @@ snapshots: - encoding - supports-color - '@mdx-js/esbuild@3.0.1(esbuild@0.23.1)': + '@mdx-js/esbuild@3.0.1(esbuild@0.18.20)': dependencies: '@mdx-js/mdx': 3.0.1 '@types/unist': 3.0.2 - esbuild: 0.23.1 + esbuild: 0.18.20 vfile: 6.0.1 vfile-message: 4.0.2 transitivePeerDependencies: @@ -49424,7 +49547,7 @@ snapshots: webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -49436,14 +49559,14 @@ snapshots: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: - '@types/webpack': 5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + '@types/webpack': 5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)) type-fest: 2.19.0 - webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -49455,14 +49578,13 @@ snapshots: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optionalDependencies: - '@types/webpack': 5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)) + '@types/webpack': 5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)) type-fest: 2.19.0 - webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.78.0) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -49478,7 +49600,6 @@ snapshots: optionalDependencies: '@types/webpack': 5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)) type-fest: 2.19.0 - webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) webpack-hot-middleware: 2.26.1 '@pnpm/cli-meta@5.0.0': @@ -54483,7 +54604,7 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))': + '@storybook/builder-webpack5@7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: '@babel/core': 7.23.2 '@storybook/addons': 7.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -54505,30 +54626,30 @@ snapshots: '@swc/core': 1.3.107(@swc/helpers@0.5.12) '@types/node': 16.11.7 '@types/semver': 7.3.13 - babel-loader: 9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + babel-loader: 9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) express: 4.21.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) fs-extra: 11.2.0 - html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) path-browserify: 1.0.1 process: 0.11.10 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) semver: 7.6.3 - style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) - swc-loader: 0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + swc-loader: 0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)) - webpack-dev-middleware: 6.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) + webpack-dev-middleware: 6.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) webpack-hot-middleware: 2.25.3 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -54543,7 +54664,7 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': + '@storybook/builder-webpack5@7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))': dependencies: '@babel/core': 7.23.2 '@storybook/addons': 7.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -54565,30 +54686,30 @@ snapshots: '@swc/core': 1.3.107(@swc/helpers@0.5.12) '@types/node': 16.11.7 '@types/semver': 7.3.13 - babel-loader: 9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + babel-loader: 9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) express: 4.21.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) fs-extra: 11.2.0 - html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) path-browserify: 1.0.1 process: 0.11.10 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) semver: 7.6.3 - style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - swc-loader: 0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) + swc-loader: 0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - webpack-dev-middleware: 6.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)) + webpack-dev-middleware: 6.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) webpack-hot-middleware: 2.25.3 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -55239,16 +55360,16 @@ snapshots: '@storybook/postinstall@7.4.2': {} - '@storybook/preset-create-react-app@7.4.2(f7avyblvzm233o6g7idqcb345u)': + '@storybook/preset-create-react-app@7.4.2(ucmnrhmq4kewpo24xrp57f5r6y)': dependencies: - '@babel/core': 7.21.4 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + '@babel/core': 7.22.11 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) '@storybook/types': 7.4.2 '@types/babel__core': 7.20.0 babel-plugin-react-docgen: 4.2.1 pnp-webpack-plugin: 1.7.0(typescript@5.6.2) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) semver: 7.5.4 transitivePeerDependencies: - '@types/webpack' @@ -55262,16 +55383,16 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@7.4.2(@babel/core@7.21.4)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.22.15(@babel/core@7.21.4) - '@babel/preset-react': 7.22.15(@babel/core@7.21.4) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + '@babel/preset-flow': 7.22.15(@babel/core@7.22.11) + '@babel/preset-react': 7.22.15(@babel/core@7.22.11) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) '@storybook/core-webpack': 7.4.2(encoding@0.1.13) '@storybook/docs-tools': 7.4.2(encoding@0.1.13) '@storybook/node-logger': 7.4.2 '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) '@types/node': 16.11.7 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 @@ -55281,9 +55402,9 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-refresh: 0.11.0 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 typescript: 5.6.2 transitivePeerDependencies: - '@swc/core' @@ -55299,16 +55420,16 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.2(@babel/core@7.23.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/preset-flow': 7.22.15(@babel/core@7.22.11) - '@babel/preset-react': 7.22.15(@babel/core@7.22.11) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + '@babel/preset-flow': 7.22.15(@babel/core@7.23.2) + '@babel/preset-react': 7.22.15(@babel/core@7.23.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) '@storybook/core-webpack': 7.4.2(encoding@0.1.13) '@storybook/docs-tools': 7.4.2(encoding@0.1.13) '@storybook/node-logger': 7.4.2 '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) '@types/node': 16.11.7 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 @@ -55318,9 +55439,9 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-refresh: 0.11.0 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) optionalDependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.23.2 typescript: 5.6.2 transitivePeerDependencies: - '@swc/core' @@ -55336,16 +55457,16 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.22.15(@babel/core@7.25.2) '@babel/preset-react': 7.22.15(@babel/core@7.25.2) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) '@storybook/core-webpack': 7.4.2(encoding@0.1.13) '@storybook/docs-tools': 7.4.2(encoding@0.1.13) '@storybook/node-logger': 7.4.2 '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) '@types/node': 16.11.7 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 @@ -55355,7 +55476,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-refresh: 0.11.0 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optionalDependencies: '@babel/core': 7.25.2 typescript: 5.6.2 @@ -55459,7 +55580,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4))': dependencies: debug: 4.3.6(supports-color@8.1.1) endent: 2.1.0 @@ -55469,11 +55590,11 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.2) tslib: 2.7.0 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)))': dependencies: debug: 4.3.6(supports-color@8.1.1) endent: 2.1.0 @@ -55483,7 +55604,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.6.2) tslib: 2.7.0 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) transitivePeerDependencies: - supports-color @@ -55523,16 +55644,16 @@ snapshots: - vite-plugin-glimmerx - webpack-sources - '@storybook/react-webpack5@7.4.2(@babel/core@7.21.4)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)': dependencies: - '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.21.4)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(encoding@0.1.13)(esbuild@0.23.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1) + '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@types/node': 16.11.7 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.11 typescript: 5.6.2 transitivePeerDependencies: - '@swc/core' @@ -55551,16 +55672,16 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.2(@babel/core@7.23.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-hot-middleware@2.26.1)': dependencies: - '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.22.11)(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1) + '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.23.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@types/node': 16.11.7 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.23.2 typescript: 5.6.2 transitivePeerDependencies: - '@swc/core' @@ -55579,10 +55700,10 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack-hot-middleware@2.26.1)': dependencies: - '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)) - '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)))(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack-hot-middleware@2.26.1) + '@storybook/builder-webpack5': 7.4.2(@swc/helpers@0.5.12)(@types/react-dom@18.3.0)(@types/react@18.3.3)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)) + '@storybook/preset-react-webpack': 7.4.2(@babel/core@7.25.2)(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)))(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(type-fest@2.19.0)(typescript@5.6.2)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.2(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@types/node': 16.11.7 react: 18.3.1 @@ -56227,7 +56348,7 @@ snapshots: pretty-format: 24.9.0 redent: 3.0.0 - '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@24.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6))': + '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@24.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.23.2 @@ -56240,10 +56361,10 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 '@types/jest': 29.5.13 - jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) vitest: 1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@24.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.47))(terser@5.31.6) - '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@25.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.6))': + '@testing-library/jest-dom@6.4.2(@jest/globals@29.7.0)(@types/jest@29.5.13)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(vitest@1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@25.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.6))': dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.23.2 @@ -56256,7 +56377,7 @@ snapshots: optionalDependencies: '@jest/globals': 29.7.0 '@types/jest': 29.5.13 - jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) vitest: 1.2.1(@edge-runtime/vm@4.0.2)(@types/node@20.16.5)(jsdom@25.0.0)(less@4.2.0)(lightningcss@1.26.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.6) '@testing-library/react-hooks@8.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -57401,11 +57522,11 @@ snapshots: '@types/webidl-conversions@7.0.3': optional: true - '@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)': + '@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))': dependencies: '@types/node': 20.16.5 tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -57413,11 +57534,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)': + '@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)': dependencies: '@types/node': 20.16.5 tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) transitivePeerDependencies: - '@swc/core' - esbuild @@ -57437,11 +57558,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))': + '@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))': dependencies: '@types/node': 20.16.5 tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -59027,32 +59148,30 @@ snapshots: webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4))': dependencies: webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4))': dependencies: webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4))': dependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) - optionalDependencies: - webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.78.0) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) '@wry/context@0.4.4': dependencies: @@ -60169,42 +60288,43 @@ snapshots: transitivePeerDependencies: - supports-color - babel-jest@27.5.1(@babel/core@7.24.4): + babel-jest@27.5.1(@babel/core@7.24.3): dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.3 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.24.4) + babel-preset-jest: 27.5.1(@babel/core@7.24.3) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color + optional: true - babel-jest@27.5.1(@babel/core@7.25.2): + babel-jest@27.5.1(@babel/core@7.24.4): dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.24.4 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.25.2) + babel-preset-jest: 27.5.1(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - optional: true - babel-jest@29.7.0(@babel/core@7.24.4): + babel-jest@27.5.1(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.4 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 + '@babel/core': 7.25.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.4) + babel-preset-jest: 27.5.1(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -60225,32 +60345,32 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: '@babel/core': 7.21.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + babel-loader@8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@babel/core': 7.21.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - babel-loader@8.3.0(@babel/core@7.25.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + babel-loader@8.3.0(@babel/core@7.25.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@babel/core': 7.25.2 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) babel-loader@9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: @@ -60259,19 +60379,19 @@ snapshots: schema-utils: 4.0.0 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - babel-loader@9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + babel-loader@9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@babel/core': 7.23.2 find-cache-dir: 3.3.2 schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - babel-loader@9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + babel-loader@9.1.2(@babel/core@7.23.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@babel/core': 7.23.2 find-cache-dir: 3.3.2 schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) babel-plugin-add-react-displayname@0.0.5: {} @@ -60366,6 +60486,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.22.11): + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/core': 7.22.11 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.22.11) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.3): dependencies: '@babel/compat-data': 7.25.4 @@ -60559,6 +60688,23 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.3): + dependencies: + '@babel/core': 7.24.3 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.3) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.3) + optional: true + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 @@ -60597,6 +60743,13 @@ snapshots: babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-jest@27.5.1(@babel/core@7.24.3): + dependencies: + '@babel/core': 7.24.3 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3) + optional: true + babel-preset-jest@27.5.1(@babel/core@7.24.4): dependencies: '@babel/core': 7.24.4 @@ -60610,13 +60763,6 @@ snapshots: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) optional: true - babel-preset-jest@29.6.3(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) - optional: true - babel-preset-jest@29.6.3(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 @@ -61507,6 +61653,16 @@ snapshots: isobject: 3.0.1 static-extend: 0.1.2 + class-validator-jsonschema@5.0.1(class-transformer@0.5.1)(class-validator@0.14.1): + dependencies: + class-transformer: 0.5.1 + class-validator: 0.14.1 + lodash.groupby: 4.6.0 + lodash.merge: 4.6.2 + openapi3-ts: 3.2.0 + reflect-metadata: 0.1.14 + tslib: 2.7.0 + class-validator@0.14.1: dependencies: '@types/validator': 13.12.1 @@ -61879,17 +62035,17 @@ snapshots: dependencies: mime-db: 1.52.0 - compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.0.0 serialize-javascript: 6.0.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) - compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): + compression-webpack-plugin@10.0.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: schema-utils: 4.0.0 serialize-javascript: 6.0.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) compression@1.7.4: dependencies: @@ -62205,13 +62361,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -62220,13 +62376,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -62574,7 +62730,7 @@ snapshots: semver: 7.6.3 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - css-loader@6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + css-loader@6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -62584,9 +62740,9 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - css-loader@6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + css-loader@6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -62596,21 +62752,9 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) - css-loader@6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): - dependencies: - icss-utils: 5.1.0(postcss@8.4.47) - postcss: 8.4.47 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.47) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.47) - postcss-modules-scope: 3.0.0(postcss@8.4.47) - postcss-modules-values: 4.0.0(postcss@8.4.47) - postcss-value-parser: 4.2.0 - semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) - - css-minimizer-webpack-plugin@3.4.1(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + css-minimizer-webpack-plugin@3.4.1(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: cssnano: 5.1.15(postcss@8.4.47) jest-worker: 27.5.1 @@ -62618,11 +62762,11 @@ snapshots: schema-utils: 4.0.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: - esbuild: 0.23.1 + esbuild: 0.18.20 - css-minimizer-webpack-plugin@3.4.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + css-minimizer-webpack-plugin@3.4.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: cssnano: 5.1.15(postcss@8.4.47) jest-worker: 27.5.1 @@ -62630,7 +62774,7 @@ snapshots: schema-utils: 4.0.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) css-prefers-color-scheme@6.0.3(postcss@8.4.47): dependencies: @@ -64228,7 +64372,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: '@babel/core': 7.21.4 '@babel/eslint-parser': 7.25.1(@babel/core@7.21.4)(eslint@9.9.1(jiti@1.21.6)) @@ -64238,7 +64382,7 @@ snapshots: babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 9.9.1(jiti@1.21.6) - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.9.1(jiti@1.21.6)) @@ -64255,7 +64399,7 @@ snapshots: - jest - supports-color - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: '@babel/core': 7.21.4 '@babel/eslint-parser': 7.25.1(@babel/core@7.21.4)(eslint@9.9.1(jiti@1.21.6)) @@ -64267,7 +64411,7 @@ snapshots: eslint: 9.9.1(jiti@1.21.6) eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6)) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-react: 7.35.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-react-hooks: 4.6.2(eslint@9.9.1(jiti@1.21.6)) @@ -64363,10 +64507,10 @@ snapshots: eslint: 8.57.1 ignore: 5.3.2 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(eslint@9.9.1(jiti@1.21.6)): + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(eslint@9.9.1(jiti@1.21.6)): dependencies: - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.21.4) - '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.21.4) + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.22.11) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.22.11) eslint: 9.9.1(jiti@1.21.6) lodash: 4.17.21 string-natural-compare: 3.0.1 @@ -64474,17 +64618,6 @@ snapshots: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): - dependencies: - '@typescript-eslint/experimental-utils': 5.58.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - eslint: 9.9.1(jiti@1.21.6) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - transitivePeerDependencies: - - supports-color - - typescript - eslint-plugin-jest@28.8.0(@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: '@typescript-eslint/utils': 8.3.0(eslint@8.57.1)(typescript@5.6.2) @@ -64803,7 +64936,7 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: '@types/eslint': 8.56.12 eslint: 9.9.1(jiti@1.21.6) @@ -64811,9 +64944,9 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@types/eslint': 8.56.12 eslint: 9.9.1(jiti@1.21.6) @@ -64821,7 +64954,7 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) eslint@8.57.1: dependencies: @@ -65548,26 +65681,26 @@ snapshots: loader-utils: 2.0.4 schema-utils: 3.3.0 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - optional: true - file-loader@6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + file-loader@6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optional: true - file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + file-loader@6.2.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + optional: true file-selector@0.6.0: dependencies: @@ -65801,7 +65934,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -65817,12 +65950,12 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: eslint: 9.9.1(jiti@1.21.6) vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -65838,7 +65971,7 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: eslint: 9.9.1(jiti@1.21.6) vue-template-compiler: 2.7.16 @@ -65860,7 +65993,7 @@ snapshots: typescript: 5.6.2 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -65875,9 +66008,9 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -65892,7 +66025,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): dependencies: @@ -67112,32 +67245,23 @@ snapshots: tapable: 2.2.1 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - html-webpack-plugin@5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - - html-webpack-plugin@5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + html-webpack-plugin@5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - html-webpack-plugin@5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + html-webpack-plugin@5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) htmlparser2@6.1.0: dependencies: @@ -68297,27 +68421,6 @@ snapshots: - ts-node - utf-8-validate - jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): - dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) @@ -68378,16 +68481,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -68397,16 +68500,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -68537,7 +68640,7 @@ snapshots: - supports-color - utf-8-validate - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): + jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: '@babel/core': 7.24.4 '@jest/test-sequencer': 27.5.1 @@ -68564,48 +68667,45 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2) transitivePeerDependencies: - bufferutil - canvas - supports-color - utf-8-validate - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): dependencies: - '@babel/core': 7.24.4 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 parse-json: 5.2.0 - pretty-format: 27.5.1 + pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2) + '@types/node': 18.16.9 + ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2) transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - - utf-8-validate - jest-config@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -68630,13 +68730,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 18.16.9 + '@types/node': 20.16.5 ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -68662,12 +68762,12 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.16.5 - ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -68693,7 +68793,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.16.5 - ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -69280,17 +69380,6 @@ snapshots: string-length: 5.0.1 strip-ansi: 7.1.0 - jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))): - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.1.0 - jest-watcher@27.5.1: dependencies: '@jest/test-result': 27.5.1 @@ -69384,18 +69473,6 @@ snapshots: - ts-node - utf-8-validate - jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): - dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) @@ -69432,24 +69509,24 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)): + jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): + jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -70071,21 +70148,21 @@ snapshots: - encoding - supports-color - less-loader@4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + less-loader@4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: clone: 2.1.2 less: 4.1.3 loader-utils: 1.4.2 pify: 3.0.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - less-loader@4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + less-loader@4.1.0(less@4.1.3)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: clone: 2.1.2 less: 4.1.3 loader-utils: 1.4.2 pify: 3.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) less@4.1.3: dependencies: @@ -70493,6 +70570,8 @@ snapshots: lodash.get@4.4.2: {} + lodash.groupby@4.6.0: {} + lodash.includes@4.3.0: {} lodash.isarguments@3.1.0: {} @@ -71213,13 +71292,13 @@ snapshots: mdurl@2.0.0: {} - mdx-bundler@10.0.2(esbuild@0.23.1): + mdx-bundler@10.0.2(esbuild@0.18.20): dependencies: '@babel/runtime': 7.24.7 - '@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.23.1) + '@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.18.20) '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@mdx-js/esbuild': 3.0.1(esbuild@0.23.1) - esbuild: 0.23.1 + '@mdx-js/esbuild': 3.0.1(esbuild@0.18.20) + esbuild: 0.18.20 gray-matter: 4.0.3 remark-frontmatter: 5.0.0 remark-mdx-frontmatter: 4.0.0 @@ -71879,15 +71958,15 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + mini-css-extract-plugin@2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - mini-css-extract-plugin@2.7.5(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + mini-css-extract-plugin@2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) minimalistic-assert@1.0.1: {} @@ -72493,7 +72572,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@13.5.6(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): + next@13.5.6(@babel/core@7.24.3)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): dependencies: '@next/env': 13.5.6 '@swc/helpers': 0.5.2 @@ -72502,7 +72581,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.3)(babel-plugin-macros@3.1.0)(react@18.3.1) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 13.5.6 @@ -72520,7 +72599,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@14.2.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): + next@14.2.4(@babel/core@7.24.3)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): dependencies: '@next/env': 14.2.4 '@swc/helpers': 0.5.5 @@ -72530,7 +72609,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.3)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.4 '@next/swc-darwin-x64': 14.2.4 @@ -73369,6 +73448,10 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openapi3-ts@3.2.0: + dependencies: + yaml: 2.5.0 + opener@1.5.2: {} opentracing@0.14.7: {} @@ -74561,21 +74644,21 @@ snapshots: tsx: 4.19.0 yaml: 2.5.0 - postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) postcss-logical@5.0.4(postcss@8.4.47): dependencies: @@ -76154,14 +76237,14 @@ snapshots: regenerator-runtime: 0.13.11 whatwg-fetch: 3.6.2 - react-app-rewired@2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)): + react-app-rewired@2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)): dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) semver: 5.7.2 - react-app-rewired@2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)): + react-app-rewired@2.2.1(react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1)): dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1) semver: 5.7.2 react-chartjs-2@4.3.1(chart.js@3.9.1)(react@18.3.1): @@ -76197,7 +76280,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: '@babel/code-frame': 7.24.2 address: 1.2.2 @@ -76208,7 +76291,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -76223,7 +76306,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -76231,7 +76314,7 @@ snapshots: - supports-color - vue-template-compiler - react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@babel/code-frame': 7.24.2 address: 1.2.2 @@ -76242,7 +76325,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -76257,7 +76340,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -76555,56 +76638,56 @@ snapshots: transitivePeerDependencies: - supports-color - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(esbuild@0.23.1)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(esbuild@0.18.20)(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): dependencies: '@babel/core': 7.21.4 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.21.4) - babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.21.4) babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.5 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - css-minimizer-webpack-plugin: 3.4.1(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + css-minimizer-webpack-plugin: 3.4.1(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 9.9.1(jiti@1.21.6) - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.21.4))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.21.4))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.11))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.11))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) + eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) fs-extra: 10.1.0 - html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) identity-obj-proxy: 3.0.0 jest: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))) - mini-css-extract-plugin: 2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + mini-css-extract-plugin: 2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) postcss: 8.4.47 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47) - postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) postcss-normalize: 10.0.1(browserslist@4.21.5)(postcss@8.4.47) postcss-preset-env: 7.8.3(postcss@8.4.47) prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) react-refresh: 0.11.0 resolve: 1.22.2 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + sass-loader: 12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) semver: 7.5.4 - source-map-loader: 3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + source-map-loader: 3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) - terser-webpack-plugin: 5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - webpack-manifest-plugin: 4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - workbox-webpack-plugin: 6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) + webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + webpack-manifest-plugin: 4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + workbox-webpack-plugin: 6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) optionalDependencies: fsevents: 2.3.3 typescript: 5.6.2 @@ -76641,56 +76724,56 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(sass@1.77.8)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))(type-fest@2.19.0)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack-hot-middleware@2.26.1): dependencies: '@babel/core': 7.21.4 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.7.26(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(@types/webpack@5.28.5(@swc/core@1.3.107(@swc/helpers@0.5.12)))(react-refresh@0.11.0)(type-fest@2.19.0)(webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(webpack-hot-middleware@2.26.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.21.4) - babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + babel-loader: 8.3.0(@babel/core@7.21.4)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.21.4) babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.5 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + css-loader: 6.7.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 9.9.1(jiti@1.21.6) - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2))(eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.29.1)(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2) + eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) fs-extra: 10.1.0 - html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + html-webpack-plugin: 5.5.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2))) - mini-css-extract-plugin: 2.7.5(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2))) + mini-css-extract-plugin: 2.7.5(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) postcss: 8.4.47 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47) - postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) postcss-normalize: 10.0.1(browserslist@4.21.5)(postcss@8.4.47) postcss-preset-env: 7.8.3(postcss@8.4.47) prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) react-refresh: 0.11.0 resolve: 1.22.2 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + sass-loader: 12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) semver: 7.5.4 - source-map-loader: 3.0.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - terser-webpack-plugin: 5.3.7(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) - webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - webpack-manifest-plugin: 4.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) - workbox-webpack-plugin: 6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + source-map-loader: 3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + style-loader: 3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + terser-webpack-plugin: 5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) + webpack-dev-server: 4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + webpack-manifest-plugin: 4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) + workbox-webpack-plugin: 6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) optionalDependencies: fsevents: 2.3.3 typescript: 5.6.2 @@ -77006,6 +77089,8 @@ snapshots: dependencies: '@eslint-community/regexpp': 4.11.0 + reflect-metadata@0.1.14: {} + reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.6: @@ -77704,19 +77789,19 @@ snapshots: sanitize.css@13.0.0: {} - sass-loader@12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + sass-loader@12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: sass: 1.77.8 - sass-loader@12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + sass-loader@12.6.0(sass@1.77.8)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: sass: 1.77.8 @@ -78355,19 +78440,19 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + source-map-loader@3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - source-map-loader@3.0.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + source-map-loader@3.0.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) source-map-resolve@0.5.3: dependencies: @@ -78904,17 +78989,13 @@ snapshots: dependencies: webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - style-loader@3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): - dependencies: - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - - style-loader@3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + style-loader@3.3.2(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - style-loader@3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + style-loader@3.3.2(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) style-mod@4.1.2: {} @@ -78926,12 +79007,12 @@ snapshots: dependencies: inline-style-parser: 0.2.3 - styled-jsx@5.1.1(@babel/core@7.25.2)(babel-plugin-macros@3.1.0)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.24.3)(babel-plugin-macros@3.1.0)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 optionalDependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.24.3 babel-plugin-macros: 3.1.0 stylehacks@5.1.1(postcss@8.4.47): @@ -79201,15 +79282,15 @@ snapshots: '@swc/core': 1.3.107(@swc/helpers@0.5.12) webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - swc-loader@0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + swc-loader@0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - swc-loader@0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + swc-loader@0.2.3(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) swr@2.2.5(react@18.3.1): dependencies: @@ -79287,33 +79368,6 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)): - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) - postcss-nested: 6.0.1(postcss@8.4.47) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -79523,29 +79577,27 @@ snapshots: '@swc/core': 1.3.107(@swc/helpers@0.5.12) esbuild: 0.18.20 - terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - esbuild: 0.18.20 - terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - esbuild: 0.23.1 terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.94.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: @@ -79558,29 +79610,28 @@ snapshots: optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.12) - esbuild: 0.18.20 + esbuild: 0.23.1 - terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.12) - esbuild: 0.23.1 terser-webpack-plugin@5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): dependencies: @@ -79604,28 +79655,28 @@ snapshots: optionalDependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.12) - terser-webpack-plugin@5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + terser-webpack-plugin@5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) - esbuild: 0.23.1 + esbuild: 0.18.20 - terser-webpack-plugin@5.3.7(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + terser-webpack-plugin@5.3.7(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.6 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) optionalDependencies: - '@swc/core': 1.7.26(@swc/helpers@0.5.12) + '@swc/core': 1.3.107(@swc/helpers@0.5.12) terser-webpack-plugin@5.3.9(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): dependencies: @@ -79965,11 +80016,11 @@ snapshots: dependencies: tslib: 1.14.1 - ts-jest@27.1.5(@babel/core@7.24.4)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.24.4))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@27.1.5(@babel/core@7.24.3)(@types/jest@29.5.13)(babel-jest@27.5.1(@babel/core@7.24.3))(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) jest-util: 27.5.1 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -79978,11 +80029,11 @@ snapshots: typescript: 5.6.2 yargs-parser: 20.2.9 optionalDependencies: - '@babel/core': 7.24.4 - '@types/jest': 29.5.2 - babel-jest: 27.5.1(@babel/core@7.24.4) + '@babel/core': 7.24.3 + '@types/jest': 29.5.13 + babel-jest: 27.5.1(@babel/core@7.24.3) - ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.1)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@27.1.5(@babel/core@7.24.4)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.24.4))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -79995,15 +80046,15 @@ snapshots: typescript: 5.6.2 yargs-parser: 20.2.9 optionalDependencies: - '@babel/core': 7.25.2 - '@types/jest': 29.5.1 - babel-jest: 27.5.1(@babel/core@7.25.2) + '@babel/core': 7.24.4 + '@types/jest': 29.5.2 + babel-jest: 27.5.1(@babel/core@7.24.4) - ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.13)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.1)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 27.5.1 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -80013,7 +80064,7 @@ snapshots: yargs-parser: 20.2.9 optionalDependencies: '@babel/core': 7.25.2 - '@types/jest': 29.5.13 + '@types/jest': 29.5.1 babel-jest: 27.5.1(@babel/core@7.25.2) ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.13)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): @@ -80033,11 +80084,11 @@ snapshots: '@types/jest': 29.5.13 babel-jest: 27.5.1(@babel/core@7.25.2) - ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) jest-util: 27.5.1 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -80050,11 +80101,11 @@ snapshots: '@types/jest': 29.5.2 babel-jest: 27.5.1(@babel/core@7.25.2) - ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@27.1.5(@babel/core@7.25.2)(@types/jest@29.5.2)(babel-jest@27.5.1(@babel/core@7.25.2))(jest@27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) + jest: 27.5.1(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) jest-util: 27.5.1 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -80084,7 +80135,7 @@ snapshots: '@types/jest': 29.5.2 babel-jest: 27.5.1(@babel/core@7.25.2) - ts-jest@29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.18.20)(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.1.0(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.5.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -80100,24 +80151,6 @@ snapshots: '@babel/core': 7.25.2 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - esbuild: 0.18.20 - - ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.6.3 - typescript: 5.6.2 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.24.4 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.4) ts-jest@29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.23.1)(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: @@ -80137,11 +80170,11 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.25.2) esbuild: 0.23.1 - ts-jest@29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.1.2(@babel/core@7.25.2)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@18.16.9)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -80163,32 +80196,23 @@ snapshots: typescript: 5.6.2 webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.17.1 - micromatch: 4.0.8 - semver: 7.6.3 - typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + ts-loader@9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 micromatch: 4.0.8 semver: 7.6.3 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) - ts-loader@9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)): + ts-loader@9.4.4(typescript@5.6.2)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 micromatch: 4.0.8 semver: 7.6.3 typescript: 5.6.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) ts-loader@9.4.4(typescript@5.6.2)(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): dependencies: @@ -80349,6 +80373,27 @@ snapshots: optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.12) + ts-node@10.9.2(@swc/core@1.3.107(@swc/helpers@0.5.12))(@types/node@20.16.5)(typescript@5.6.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 20.16.5 + acorn: 8.12.1 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.3.107(@swc/helpers@0.5.12) + optional: true + ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.12))(@types/node@20.14.10)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -81147,23 +81192,23 @@ snapshots: url-join@5.0.0: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) optionalDependencies: - file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) - url-loader@4.1.1(file-loader@6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))))(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) optionalDependencies: - file-loader: 6.2.0(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + file-loader: 6.2.0(webpack@5.94.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) url-parse@1.5.10: dependencies: @@ -82257,12 +82302,12 @@ snapshots: optionalDependencies: webpack-bundle-analyzer: 4.10.1 - webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0): + webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0))(webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 @@ -82271,11 +82316,10 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) webpack-merge: 5.9.0 optionalDependencies: webpack-bundle-analyzer: 4.9.0 - webpack-dev-server: 4.11.1(webpack-cli@5.1.4)(webpack@5.78.0) webpack-dev-middleware@5.3.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: @@ -82285,35 +82329,15 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.0.0 webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - optional: true - - webpack-dev-middleware@5.3.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): - dependencies: - colorette: 2.0.19 - memfs: 3.5.0 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - - webpack-dev-middleware@5.3.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): - dependencies: - colorette: 2.0.19 - memfs: 3.5.0 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - optional: true - webpack-dev-middleware@5.3.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + webpack-dev-middleware@5.3.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: colorette: 2.0.19 memfs: 3.5.0 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) webpack-dev-middleware@6.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: @@ -82325,7 +82349,7 @@ snapshots: optionalDependencies: webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) - webpack-dev-middleware@6.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + webpack-dev-middleware@6.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: colorette: 2.0.19 memfs: 3.5.0 @@ -82333,9 +82357,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.0.0 optionalDependencies: - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) - webpack-dev-middleware@6.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)): + webpack-dev-middleware@6.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)): dependencies: colorette: 2.0.19 memfs: 3.5.0 @@ -82343,48 +82367,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.0.0 optionalDependencies: - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - - webpack-dev-server@4.11.1(webpack-cli@5.1.4)(webpack@5.78.0): - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.4 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.19 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.21.0 - graceful-fs: 4.2.11 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.0.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.0 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4) - webpack-dev-middleware: 5.3.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) - ws: 8.13.0 - optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - optional: true + webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4) webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: @@ -82423,47 +82406,8 @@ snapshots: - debug - supports-color - utf-8-validate - optional: true - - webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.4 - ansi-html-community: 0.0.8 - bonjour-service: 1.1.1 - chokidar: 3.5.3 - colorette: 2.0.19 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.21.0 - graceful-fs: 4.2.11 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.0.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.0 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) - webpack-dev-middleware: 5.3.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) - ws: 8.13.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + webpack-dev-server@4.11.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: '@types/bonjour': 3.5.10 '@types/connect-history-api-fallback': 1.3.5 @@ -82492,8 +82436,8 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) - webpack-dev-middleware: 5.3.3(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) + webpack-dev-middleware: 5.3.3(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) ws: 8.13.0 transitivePeerDependencies: - bufferutil @@ -82514,16 +82458,16 @@ snapshots: strip-ansi: 6.0.1 optional: true - webpack-manifest-plugin@4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + webpack-manifest-plugin@4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) webpack-sources: 2.3.1 - webpack-manifest-plugin@4.1.1(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + webpack-manifest-plugin@4.1.1(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: tapable: 2.2.1 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) webpack-sources: 2.3.1 webpack-merge@5.9.0: @@ -82549,7 +82493,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20): + webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -82572,7 +82516,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -82580,7 +82524,7 @@ snapshots: - esbuild - uglify-js - webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0)): + webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -82603,17 +82547,15 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)) watchpack: 2.4.2 webpack-sources: 3.2.3 - optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1): + webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack-cli@5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0)): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -82636,9 +82578,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) watchpack: 2.4.2 webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -82675,7 +82619,7 @@ snapshots: - esbuild - uglify-js - webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4): + webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -82698,17 +82642,17 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack-dev-server@4.11.1)(webpack@5.78.0) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4): + webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 0.0.51 @@ -82731,11 +82675,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(esbuild@0.23.1)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))(webpack-cli@5.1.4)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.1)(webpack@5.78.0) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.0)(webpack@5.78.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -83109,24 +83053,24 @@ snapshots: workbox-sw@6.5.4: {} - workbox-webpack-plugin@6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1)): + workbox-webpack-plugin@6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20)): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.23.1) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))(esbuild@0.18.20) webpack-sources: 1.4.3 workbox-build: 6.5.4(@types/babel__core@7.20.5) transitivePeerDependencies: - '@types/babel__core' - supports-color - workbox-webpack-plugin@6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12))): + workbox-webpack-plugin@6.5.4(@types/babel__core@7.20.5)(webpack@5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12))): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.78.0(@swc/core@1.7.26(@swc/helpers@0.5.12)) + webpack: 5.78.0(@swc/core@1.3.107(@swc/helpers@0.5.12)) webpack-sources: 1.4.3 workbox-build: 6.5.4(@types/babel__core@7.20.5) transitivePeerDependencies: From d5c304b4ae1ab912a0143a014866b7261359d1ee Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:16:25 +0100 Subject: [PATCH 19/23] Update packages/framework/src/types/schema.types/zod.schema.types.ts --- packages/framework/src/types/schema.types/zod.schema.types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/types/schema.types/zod.schema.types.ts b/packages/framework/src/types/schema.types/zod.schema.types.ts index ef33671e3b4..78d5cf454d8 100644 --- a/packages/framework/src/types/schema.types/zod.schema.types.ts +++ b/packages/framework/src/types/schema.types/zod.schema.types.ts @@ -1,4 +1,3 @@ - import type zod from 'zod'; export type ZodSchema = zod.ZodType; From 1281a14200b11c012cd446cdbc334731ebdb1b8a Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:16:51 +0100 Subject: [PATCH 20/23] Update packages/framework/src/client.test.ts --- packages/framework/src/client.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/framework/src/client.test.ts b/packages/framework/src/client.test.ts index b91915df1e4..a80064e2359 100644 --- a/packages/framework/src/client.test.ts +++ b/packages/framework/src/client.test.ts @@ -313,8 +313,6 @@ describe('Novu Client', () => { if (stepChat === undefined) throw new Error('stepEmail is undefined'); expect(stepChat.type).toBe('chat'); expect(stepChat.code).toContain(`body: "Test Body"`); - console.log(stepChat.providers); - // await new Promise((resolve) => setTimeout(resolve, 1000)); expect(stepChat.providers[0].code).toContain(`type: "plain_text"`); expect(stepChat.providers[0].code).toContain(`text: "Pretty Header"`); }); From d29556d481bcdaa13ce770c96f7ac7ec95914160 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:17:18 +0100 Subject: [PATCH 21/23] Update packages/framework/package.json --- packages/framework/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/package.json b/packages/framework/package.json index 7cd8962a9e5..f9c074627c7 100644 --- a/packages/framework/package.json +++ b/packages/framework/package.json @@ -264,8 +264,6 @@ "sanitize-html": "^2.13.0" }, "nx": { - "tags": [ - "package:public" - ] + "tags": ["package:public"] } } From 0ab32ecf473e4e38f2049935d7b8f853ef4a4b79 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:20:33 +0100 Subject: [PATCH 22/23] Update packages/framework/src/validators/class-validator.validator.ts --- packages/framework/src/validators/class-validator.validator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/validators/class-validator.validator.ts b/packages/framework/src/validators/class-validator.validator.ts index 6770f1554a2..492f7e5c53d 100644 --- a/packages/framework/src/validators/class-validator.validator.ts +++ b/packages/framework/src/validators/class-validator.validator.ts @@ -100,7 +100,7 @@ export class ClassValidatorValidator implements Validator (schema as ClassValidatorSchema).prototype.constructor === schema; if (canHandle) { - await checkDependencies(this.requiredImports, 'class-validator schema'); + await checkDependencies(this.requiredImports, 'Class Validator schema'); } return canHandle; From 37bc8bcf0be010011334663afd58e7fbb4547e76 Mon Sep 17 00:00:00 2001 From: Richard Fontein <32132657+rifont@users.noreply.github.com> Date: Mon, 11 Nov 2024 02:02:45 +0100 Subject: [PATCH 23/23] Update packages/framework/src/validators/validator.test.ts --- packages/framework/src/validators/validator.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/src/validators/validator.test.ts b/packages/framework/src/validators/validator.test.ts index 26729b4d29a..c5c7563d5cb 100644 --- a/packages/framework/src/validators/validator.test.ts +++ b/packages/framework/src/validators/validator.test.ts @@ -1,9 +1,8 @@ import { describe, it, expect } from 'vitest'; import { z } from 'zod'; import { validateData, transformSchema } from './base.validator'; -import type { Schema, ZodSchema, JsonSchema } from '../types/schema.types'; +import type { Schema, ZodSchema, JsonSchema, ClassValidatorSchema } from '../types/schema.types'; import { SimpleStringSchema, NestedSchema, SimpleStringAndNumberSchema } from './fixures/class-validator.fixtures'; -import { ClassValidatorSchema } from '../types/schema.types/class.schema.types'; const schemas = ['zod', 'class', 'json'] as const;