From a5c20b34285991c75871f67398e56e2b112c4dc9 Mon Sep 17 00:00:00 2001 From: Pr0m3th3us Date: Fri, 8 Nov 2024 04:08:18 +0100 Subject: [PATCH] feat: class validator middleware for Hono (#788) * setup middleware package * add implementation middleware * add documentation + updae tsconfig for decorator handling * add tests * fix format class-validator middleware * Add Readme * Update changelog & changeset * update changelog 2 * update changelog 2 * fix working directory ci * rm jest dependencies change to tsup for build fix ci name * revert changes not related to class-validator * remove the changeset since Changesets will add a changeset automatically * package description --- .changeset/spotty-donuts-yawn.md | 5 + .github/workflows/ci-class-validator.yml | 25 + package.json | 1 + packages/class-validator/README.md | 56 ++ packages/class-validator/package.json | 47 ++ packages/class-validator/src/index.ts | 158 +++++ packages/class-validator/test/index.test.ts | 262 ++++++++ packages/class-validator/tsconfig.json | 12 + packages/class-validator/tsconfig.vitest.json | 14 + packages/class-validator/vitest.config.ts | 10 + yarn.lock | 623 +++++++++++++++++- 11 files changed, 1212 insertions(+), 1 deletion(-) create mode 100644 .changeset/spotty-donuts-yawn.md create mode 100644 .github/workflows/ci-class-validator.yml create mode 100644 packages/class-validator/README.md create mode 100644 packages/class-validator/package.json create mode 100644 packages/class-validator/src/index.ts create mode 100644 packages/class-validator/test/index.test.ts create mode 100644 packages/class-validator/tsconfig.json create mode 100644 packages/class-validator/tsconfig.vitest.json create mode 100644 packages/class-validator/vitest.config.ts diff --git a/.changeset/spotty-donuts-yawn.md b/.changeset/spotty-donuts-yawn.md new file mode 100644 index 000000000..b3ee0b6b0 --- /dev/null +++ b/.changeset/spotty-donuts-yawn.md @@ -0,0 +1,5 @@ +--- +'@hono/class-validator': major +--- + +First release diff --git a/.github/workflows/ci-class-validator.yml b/.github/workflows/ci-class-validator.yml new file mode 100644 index 000000000..b34269a01 --- /dev/null +++ b/.github/workflows/ci-class-validator.yml @@ -0,0 +1,25 @@ +name: ci-class-validator +on: + push: + branches: [main] + paths: + - 'packages/class-validator/**' + pull_request: + branches: ['*'] + paths: + - 'packages/class-validator/**' + +jobs: + ci: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./packages/class-validator + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20.x + - run: yarn install --frozen-lockfile + - run: yarn build + - run: yarn test diff --git a/package.json b/package.json index e85797dbe..f57a51c23 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "build:hello": "yarn workspace @hono/hello build", "build:zod-validator": "yarn workspace @hono/zod-validator build", + "build:class-validator": "yarn workspace @hono/class-validator build", "build:arktype-validator": "yarn workspace @hono/arktype-validator build", "build:qwik-city": "yarn workspace @hono/qwik-city build", "build:graphql-server": "yarn workspace @hono/graphql-server build", diff --git a/packages/class-validator/README.md b/packages/class-validator/README.md new file mode 100644 index 000000000..c12325b12 --- /dev/null +++ b/packages/class-validator/README.md @@ -0,0 +1,56 @@ +# Class-validator middleware for Hono + +The validator middleware using [class-validator](https://github.com/typestack/class-validator) for [Hono](https://github.com/honojs/hono) applications. + +## Usage + +```ts +import { classValidator } from '@hono/class-validator' +import { IsInt, IsString } from 'class-validator' + +class CreateUserDto { + @IsString() + name!: string; + + @IsInt() + age!: number; +} + + +const route = app.post('/user', classValidator('json', CreateUserDto), (c) => { + const user = c.req.valid('json') + return c.json({ success: true, message: `${user.name} is ${user.age}` }) +}) +``` + +With hook: + +```ts +import { classValidator } from '@hono/class-validator' +import { IsInt, IsString } from 'class-validator' + +class CreateUserDto { + @IsString() + name!: string; + + @IsInt() + age!: number; +} + +app.post( + '/user', classValidator('json', CreateUserDto, (result, c) => { + if (!result.success) { + return c.text('Invalid!', 400) + } + }) + //... +) +``` + +## Author + +**Pr0m3ht3us** - https://github.com/pr0m3th3usex + +## License + +MIT \ No newline at end of file diff --git a/packages/class-validator/package.json b/packages/class-validator/package.json new file mode 100644 index 000000000..6954df94a --- /dev/null +++ b/packages/class-validator/package.json @@ -0,0 +1,47 @@ +{ + "name": "@hono/class-validator", + "packageManager": "yarn@4.0.2", + "description": "Validator middleware using class-validator", + "version": "0.1.0", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "scripts": { + "test": "vitest --run", + "build": "rimraf dist && tsup ./src/index.ts --format esm,cjs --dts", + "prerelease": "yarn build && yarn test", + "release": "yarn publish" + }, + "license": "MIT", + "publishConfig": { + "registry": "https://registry.npmjs.org", + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/honojs/middleware.git" + }, + "homepage": "https://github.com/honojs/middleware", + "peerDependencies": { + "hono": ">=3.9.0" + }, + "devDependencies": { + "hono": "^4.0.10", + "rimraf": "^5.0.5", + "tsup": "^8.3.5", + "typescript": "^5.3.3", + "vitest": "^1.4.0" + }, + "dependencies": { + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "reflect-metadata": "^0.2.2" + } +} \ No newline at end of file diff --git a/packages/class-validator/src/index.ts b/packages/class-validator/src/index.ts new file mode 100644 index 000000000..513f96468 --- /dev/null +++ b/packages/class-validator/src/index.ts @@ -0,0 +1,158 @@ +import 'reflect-metadata' +import { validator } from 'hono/validator' +import { ClassConstructor, ClassTransformOptions, plainToClass } from 'class-transformer' +import { Context, Env, Input, MiddlewareHandler, TypedResponse, ValidationTargets } from 'hono' +import { ValidationError, validate } from 'class-validator' + +/** + * Hono middleware that validates incoming data using class-validator(https://github.com/typestack/class-validator). + * + * --- + * + * No Hook + * + * ```ts + * import { classValidator } from '@hono/class-validator' + * import { IsInt, IsString } from 'class-validator' + * + * class CreateUserDto { + * @IsString() + * name!: string; + * + * @IsInt() + * age!: number; + * } + * + * + * const route = app.post('/user', classValidator('json', CreateUserDto), (c) => { + * const user = c.req.valid('json') + * return c.json({ success: true, message: `${user.name} is ${user.age}` }) + * }) + * ``` + * + * --- + * Hook + * + * ```ts + * import { classValidator } from '@hono/class-validator' + * import { IsInt, IsString } from 'class-validator' + * + * class CreateUserDto { + * @IsString() + * name!: string; + * + * @IsInt() + * age!: number; + * } + * + * app.post( + * '/user', + * classValidator('json', CreateUserDto, (result, c) => { + * if (!result.success) { + * return c.text('Invalid!', 400) + * } + * }) + * //... + * ) + * ``` + */ + +type Hook< + T, + E extends Env, + P extends string, + Target extends keyof ValidationTargets = keyof ValidationTargets, + O = object +> = ( + result: ({ success: true } | { success: false; errors: ValidationError[] }) & { + data: T + target: Target + }, + c: Context +) => Response | void | TypedResponse | Promise> + +type HasUndefined = undefined extends T ? true : false + +type HasClassConstructor = ClassConstructor extends T ? true : false + +export type StaticObject> = { + [K in keyof InstanceType]: HasClassConstructor[K]> extends true + ? StaticObject[K]> + : InstanceType[K] +} + +const parseAndValidate = async >( + dto: T, + obj: object, + options: ClassTransformOptions +): Promise< + { success: false; errors: ValidationError[] } | { success: true; output: InstanceType } +> => { + // tranform the literal object to class object + const objInstance = plainToClass(dto, obj, options) + // validating and check the errors, throw the errors if exist + + const errors = await validate(objInstance) + // errors is an array of validation errors + if (errors.length > 0) { + return { + success: false, + errors, + } + } + + return { success: true, output: objInstance as InstanceType } +} + +export const classValidator = < + T extends ClassConstructor, + Output extends InstanceType = InstanceType, + Target extends keyof ValidationTargets = keyof ValidationTargets, + E extends Env = Env, + P extends string = string, + In = StaticObject, + I extends Input = { + in: HasUndefined extends true + ? { + [K in Target]?: K extends 'json' + ? In + : HasUndefined extends true + ? { [K2 in keyof In]?: ValidationTargets[K][K2] } + : { [K2 in keyof In]: ValidationTargets[K][K2] } + } + : { + [K in Target]: K extends 'json' + ? In + : HasUndefined extends true + ? { [K2 in keyof In]?: ValidationTargets[K][K2] } + : { [K2 in keyof In]: ValidationTargets[K][K2] } + } + out: { [K in Target]: Output } + }, + V extends I = I +>( + target: Target, + dataType: T, + hook?: Hook, + options: ClassTransformOptions = { enableImplicitConversion: false } +): MiddlewareHandler => + // @ts-expect-error not typed well + validator(target, async (data, c) => { + const result = await parseAndValidate(dataType, data, options) + + if (hook) { + const hookResult = hook({ ...result, data, target }, c) + if (hookResult instanceof Response || hookResult instanceof Promise) { + if ('response' in hookResult) { + return hookResult.response + } + return hookResult + } + } + + if (!result.success) { + return c.json({ errors: result.errors }, 400) + } + + return result.output + }) diff --git a/packages/class-validator/test/index.test.ts b/packages/class-validator/test/index.test.ts new file mode 100644 index 000000000..da524350d --- /dev/null +++ b/packages/class-validator/test/index.test.ts @@ -0,0 +1,262 @@ +import { Hono } from 'hono' +import { classValidator } from '../src' +import type { Equal, Expect } from 'hono/utils/types' +import { IsInt, IsString, ValidateNested, ValidationError } from 'class-validator' +import { ExtractSchema } from 'hono/types' +import { Type } from 'class-transformer' + +describe('Basic', () => { + const app = new Hono() + + class UserDto { + @IsString() + name!: string + + @IsInt() + age!: number + } + + const route = app.post('/author', classValidator('json', UserDto), (c) => { + const data = c.req.valid('json') + return c.json({ + success: true, + message: `${data.name} is ${data.age}`, + }) + }) + + type Actual = ExtractSchema + type Expected = { + '/author': { + $post: { + input: { + json: { + name: string + age: number + } + } + output: { + success: boolean + message: string + } + } + } + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + type verify = Expect> + + it('Should return 200 response', async () => { + const req = new Request('http://localhost/author', { + body: JSON.stringify({ + name: 'Superman', + age: 20, + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(200) + expect(await res.json()).toEqual({ + success: true, + message: 'Superman is 20', + }) + }) + + it('Should return 400 response', async () => { + const req = new Request('http://localhost/author', { + body: JSON.stringify({ + name: 'Superman', + age: '20', + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(400) + const data = (await res.json()) as { errors: ValidationError[] } + expect(data.errors.length).toBe(1) + }) +}) + +describe('With Hook', () => { + const app = new Hono() + + class PostDto { + @IsInt() + id!: number + + @IsString() + title!: string + } + + app + .post( + '/post', + classValidator('json', PostDto, (result, c) => { + if (!result.success) { + return c.text('Invalid!', 400) + } + const data = result.data + return c.text(`${data.id} is valid!`) + }), + (c) => { + const data = c.req.valid('json') + return c.json({ + success: true, + message: `${data.id} is ${data.title}`, + }) + } + ) + .post( + '/errorTest', + classValidator('json', PostDto, (result, c) => { + return c.json(result, 400) + }), + (c) => { + const data = c.req.valid('json') + return c.json({ + success: true, + message: `${data.id} is ${data.title}`, + }) + } + ) + + it('Should return 200 response', async () => { + const req = new Request('http://localhost/post', { + body: JSON.stringify({ + id: 123, + title: 'Hello', + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(200) + expect(await res.text()).toBe('123 is valid!') + }) + + it('Should return 400 response', async () => { + const req = new Request('http://localhost/post', { + body: JSON.stringify({ + id: '123', + title: 'Hello', + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(400) + }) + + it('Should return 400 response and error array', async () => { + const req = new Request('http://localhost/errorTest', { + body: JSON.stringify({ + id: 123, + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(400) + + const { errors, success } = (await res.json()) as { + success: boolean + errors: ValidationError[] + } + expect(success).toBe(false) + expect(Array.isArray(errors)).toBe(true) + }) +}) + +describe('Nested DTO', () => { + const app = new Hono() + + class AuthorDto { + @IsString() + name!: string + + @ValidateNested({ each: true }) + @Type(() => PostDto) + posts!: PostDto[] + } + + class PostDto { + @IsInt() + id!: number + + @IsString() + title!: string + } + + app.post('/author', classValidator('json', AuthorDto), (c) => { + const data = c.req.valid('json') + + return c.json({ + success: true, + message: `Posts sent: ${data.posts.length}`, + }) + }) + + it('Should return 200 response', async () => { + const req = new Request('http://localhost/author', { + body: JSON.stringify({ + name: 'Superman', + posts: [ + { + id: 1, + title: 'Volume 1', + }, + ], + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(200) + expect(await res.json()).toEqual({ + success: true, + message: 'Posts sent: 1', + }) + }) + + it('Should return 400 response', async () => { + const req = new Request('http://localhost/author', { + body: JSON.stringify({ + name: 'Superman', + posts: [ + { + id: '1223', + name: 'Error id', + }, + ], + }), + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + const res = await app.request(req) + expect(res).not.toBeNull() + expect(res.status).toBe(400) + const data = (await res.json()) as { errors: ValidationError[] } + expect(data.errors.length).toBe(1) + }) +}) diff --git a/packages/class-validator/tsconfig.json b/packages/class-validator/tsconfig.json new file mode 100644 index 000000000..eb85aad40 --- /dev/null +++ b/packages/class-validator/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + }, + "include": [ + "src/**/*.ts" + ], +} \ No newline at end of file diff --git a/packages/class-validator/tsconfig.vitest.json b/packages/class-validator/tsconfig.vitest.json new file mode 100644 index 000000000..95f7c959e --- /dev/null +++ b/packages/class-validator/tsconfig.vitest.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": [ + "vitest/globals", + ], + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + }, + "include": [ + "src/", + "test/" + ], +} diff --git a/packages/class-validator/vitest.config.ts b/packages/class-validator/vitest.config.ts new file mode 100644 index 000000000..657172fb4 --- /dev/null +++ b/packages/class-validator/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + typecheck: { + tsconfig: './tsconfig.vitest.json', + }, + }, +}) diff --git a/yarn.lock b/yarn.lock index 05f09c5e7..9f5a2b3d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1103,6 +1103,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/aix-ppc64@npm:0.24.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/android-arm64@npm:0.17.19" @@ -1145,6 +1152,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm64@npm:0.24.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/android-arm@npm:0.17.19" @@ -1187,6 +1201,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-arm@npm:0.24.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/android-x64@npm:0.17.19" @@ -1229,6 +1250,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/android-x64@npm:0.24.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/darwin-arm64@npm:0.17.19" @@ -1271,6 +1299,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-arm64@npm:0.24.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/darwin-x64@npm:0.17.19" @@ -1313,6 +1348,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/darwin-x64@npm:0.24.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/freebsd-arm64@npm:0.17.19" @@ -1355,6 +1397,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-arm64@npm:0.24.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/freebsd-x64@npm:0.17.19" @@ -1397,6 +1446,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/freebsd-x64@npm:0.24.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-arm64@npm:0.17.19" @@ -1439,6 +1495,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm64@npm:0.24.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-arm@npm:0.17.19" @@ -1481,6 +1544,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-arm@npm:0.24.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-ia32@npm:0.17.19" @@ -1523,6 +1593,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ia32@npm:0.24.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-loong64@npm:0.17.19" @@ -1565,6 +1642,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-loong64@npm:0.24.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-mips64el@npm:0.17.19" @@ -1607,6 +1691,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-mips64el@npm:0.24.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-ppc64@npm:0.17.19" @@ -1649,6 +1740,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-ppc64@npm:0.24.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-riscv64@npm:0.17.19" @@ -1691,6 +1789,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-riscv64@npm:0.24.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-s390x@npm:0.17.19" @@ -1733,6 +1838,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-s390x@npm:0.24.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/linux-x64@npm:0.17.19" @@ -1775,6 +1887,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/linux-x64@npm:0.24.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/netbsd-x64@npm:0.17.19" @@ -1817,6 +1936,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/netbsd-x64@npm:0.24.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.23.0": version: 0.23.0 resolution: "@esbuild/openbsd-arm64@npm:0.23.0" @@ -1824,6 +1950,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-arm64@npm:0.24.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/openbsd-x64@npm:0.17.19" @@ -1866,6 +1999,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/openbsd-x64@npm:0.24.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/sunos-x64@npm:0.17.19" @@ -1908,6 +2048,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/sunos-x64@npm:0.24.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/win32-arm64@npm:0.17.19" @@ -1950,6 +2097,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-arm64@npm:0.24.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/win32-ia32@npm:0.17.19" @@ -1992,6 +2146,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-ia32@npm:0.24.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.17.19": version: 0.17.19 resolution: "@esbuild/win32-x64@npm:0.17.19" @@ -2034,6 +2195,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.24.0": + version: 0.24.0 + resolution: "@esbuild/win32-x64@npm:0.24.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-plugin-eslint-comments@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-plugin-eslint-comments@npm:4.4.0" @@ -2300,6 +2468,23 @@ __metadata: languageName: unknown linkType: soft +"@hono/class-validator@workspace:packages/class-validator": + version: 0.0.0-use.local + resolution: "@hono/class-validator@workspace:packages/class-validator" + dependencies: + class-transformer: "npm:^0.5.1" + class-validator: "npm:^0.14.1" + hono: "npm:^4.0.10" + reflect-metadata: "npm:^0.2.2" + rimraf: "npm:^5.0.5" + tsup: "npm:^8.3.5" + typescript: "npm:^5.3.3" + vitest: "npm:^1.4.0" + peerDependencies: + hono: ">=3.9.0" + languageName: unknown + linkType: soft + "@hono/clerk-auth@workspace:packages/clerk-auth": version: 0.0.0-use.local resolution: "@hono/clerk-auth@workspace:packages/clerk-auth" @@ -4062,6 +4247,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.9.0" @@ -4076,6 +4268,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-android-arm64@npm:4.24.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-android-arm64@npm:4.9.0" @@ -4090,6 +4289,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-darwin-arm64@npm:4.24.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.9.0" @@ -4104,6 +4310,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-darwin-x64@npm:4.24.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-darwin-x64@npm:4.9.0" @@ -4111,6 +4324,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.24.4" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-freebsd-x64@npm:4.24.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.19.1": version: 4.19.1 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.19.1" @@ -4118,6 +4345,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.4" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.9.0" @@ -4132,6 +4366,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.4" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.19.1": version: 4.19.1 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.19.1" @@ -4139,6 +4380,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.9.0" @@ -4153,6 +4401,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.9.0" @@ -4167,6 +4422,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.4" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.19.1": version: 4.19.1 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.19.1" @@ -4174,6 +4436,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.4" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.9.0" @@ -4188,6 +4457,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.4" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.19.1": version: 4.19.1 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.19.1" @@ -4195,6 +4471,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.9.0" @@ -4209,6 +4492,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.9.0" @@ -4223,6 +4513,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.9.0" @@ -4237,6 +4534,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.9.0" @@ -4251,6 +4555,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.24.4": + version: 4.24.4 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.9.0": version: 4.9.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.9.0" @@ -4569,6 +4880,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + "@types/glob@npm:*": version: 8.1.0 resolution: "@types/glob@npm:8.1.0" @@ -4911,6 +5229,13 @@ __metadata: languageName: node linkType: hard +"@types/validator@npm:^13.11.8": + version: 13.12.2 + resolution: "@types/validator@npm:13.12.2" + checksum: 64f1326c768947d756ab5bcd73f3f11a6f07dc76292aea83890d0390a9b9acb374f8df6b24af2c783271f276d3d613b78fc79491fe87edee62108d54be2e3c31 + languageName: node + linkType: hard + "@types/ws@npm:^8": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" @@ -7042,6 +7367,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.1": + version: 4.0.1 + resolution: "chokidar@npm:4.0.1" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 4bb7a3adc304059810bb6c420c43261a15bb44f610d77c35547addc84faa0374265c3adc67f25d06f363d9a4571962b02679268c40de07676d260de1986efea9 + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -7079,6 +7413,24 @@ __metadata: languageName: node linkType: hard +"class-transformer@npm:^0.5.1": + version: 0.5.1 + resolution: "class-transformer@npm:0.5.1" + checksum: 19809914e51c6db42c036166839906420bb60367df14e15f49c45c8c1231bf25ae661ebe94736ee29cc688b77101ef851a8acca299375cc52fc141b64acde18a + languageName: node + linkType: hard + +"class-validator@npm:^0.14.1": + version: 0.14.1 + resolution: "class-validator@npm:0.14.1" + dependencies: + "@types/validator": "npm:^13.11.8" + libphonenumber-js: "npm:^1.10.53" + validator: "npm:^13.9.0" + checksum: 946e914e47548b5081449c720ea6a4877bac63dc960e14fca4b990b56e64efe3802d12f07ec22d6420c290245b72ea2d646939239f2a3b597794e6c4c2a4f2ae + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -7811,6 +8163,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.7": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -8913,6 +9277,89 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.24.0": + version: 0.24.0 + resolution: "esbuild@npm:0.24.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.0" + "@esbuild/android-arm": "npm:0.24.0" + "@esbuild/android-arm64": "npm:0.24.0" + "@esbuild/android-x64": "npm:0.24.0" + "@esbuild/darwin-arm64": "npm:0.24.0" + "@esbuild/darwin-x64": "npm:0.24.0" + "@esbuild/freebsd-arm64": "npm:0.24.0" + "@esbuild/freebsd-x64": "npm:0.24.0" + "@esbuild/linux-arm": "npm:0.24.0" + "@esbuild/linux-arm64": "npm:0.24.0" + "@esbuild/linux-ia32": "npm:0.24.0" + "@esbuild/linux-loong64": "npm:0.24.0" + "@esbuild/linux-mips64el": "npm:0.24.0" + "@esbuild/linux-ppc64": "npm:0.24.0" + "@esbuild/linux-riscv64": "npm:0.24.0" + "@esbuild/linux-s390x": "npm:0.24.0" + "@esbuild/linux-x64": "npm:0.24.0" + "@esbuild/netbsd-x64": "npm:0.24.0" + "@esbuild/openbsd-arm64": "npm:0.24.0" + "@esbuild/openbsd-x64": "npm:0.24.0" + "@esbuild/sunos-x64": "npm:0.24.0" + "@esbuild/win32-arm64": "npm:0.24.0" + "@esbuild/win32-ia32": "npm:0.24.0" + "@esbuild/win32-x64": "npm:0.24.0" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 9f1aadd8d64f3bff422ae78387e66e51a5e09de6935a6f987b6e4e189ed00fdc2d1bc03d2e33633b094008529c8b6e06c7ad1a9782fb09fec223bf95998c0683 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -9783,6 +10230,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.2": + version: 6.4.2 + resolution: "fdir@npm:6.4.2" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 34829886f34a3ca4170eca7c7180ec4de51a3abb4d380344063c0ae2e289b11d2ba8b724afee974598c83027fea363ff598caf2b51bc4e6b1e0d8b80cc530573 + languageName: node + linkType: hard + "fecha@npm:^4.2.0": version: 4.2.3 resolution: "fecha@npm:4.2.3" @@ -13392,6 +13851,13 @@ __metadata: languageName: node linkType: hard +"libphonenumber-js@npm:^1.10.53": + version: 1.11.12 + resolution: "libphonenumber-js@npm:1.11.12" + checksum: 56fdf7ce107bd9d0329c47392d21649ee61b5ef210fa5926cb839506195d8482760982c9f75c207e97cf070be8ef2edc5a81db7cc3623f46990222945f4e0f65 + languageName: node + linkType: hard + "libsodium-wrappers@npm:^0.7.10": version: 0.7.13 resolution: "libsodium-wrappers@npm:0.7.13" @@ -14987,7 +15453,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -16119,6 +16585,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -16824,6 +17297,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.2 + resolution: "readdirp@npm:4.0.2" + checksum: a16ecd8ef3286dcd90648c3b103e3826db2b766cdb4a988752c43a83f683d01c7059158d623cbcd8bdfb39e65d302d285be2d208e7d9f34d022d912b929217dd + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -16852,6 +17332,13 @@ __metadata: languageName: node linkType: hard +"reflect-metadata@npm:^0.2.2": + version: 0.2.2 + resolution: "reflect-metadata@npm:0.2.2" + checksum: 1cd93a15ea291e420204955544637c264c216e7aac527470e393d54b4bb075f10a17e60d8168ec96600c7e0b9fcc0cb0bb6e91c3fbf5b0d8c9056f04e6ac1ec2 + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -17305,6 +17792,75 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.24.0": + version: 4.24.4 + resolution: "rollup@npm:4.24.4" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.24.4" + "@rollup/rollup-android-arm64": "npm:4.24.4" + "@rollup/rollup-darwin-arm64": "npm:4.24.4" + "@rollup/rollup-darwin-x64": "npm:4.24.4" + "@rollup/rollup-freebsd-arm64": "npm:4.24.4" + "@rollup/rollup-freebsd-x64": "npm:4.24.4" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.4" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.4" + "@rollup/rollup-linux-arm64-gnu": "npm:4.24.4" + "@rollup/rollup-linux-arm64-musl": "npm:4.24.4" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.4" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.4" + "@rollup/rollup-linux-s390x-gnu": "npm:4.24.4" + "@rollup/rollup-linux-x64-gnu": "npm:4.24.4" + "@rollup/rollup-linux-x64-musl": "npm:4.24.4" + "@rollup/rollup-win32-arm64-msvc": "npm:4.24.4" + "@rollup/rollup-win32-ia32-msvc": "npm:4.24.4" + "@rollup/rollup-win32-x64-msvc": "npm:4.24.4" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 8e9e9ce4dc8cc48acf258a26519ed1bbbbdac99fd701e89d11c31271e01b4663fe61d839f7906a49c0983b1a49e2acc622948d7665ff0f57ecc48d872835d1ce + languageName: node + linkType: hard + "router@npm:^1.3.1": version: 1.3.8 resolution: "router@npm:1.3.8" @@ -18607,6 +19163,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^0.3.1": + version: 0.3.1 + resolution: "tinyexec@npm:0.3.1" + checksum: 11e7a7c5d8b3bddf8b5cbe82a9290d70a6fad84d528421d5d18297f165723cb53d2e737d8f58dcce5ca56f2e4aa2d060f02510b1f8971784f97eb3e9aec28f09 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.1": version: 0.2.6 resolution: "tinyglobby@npm:0.2.6" @@ -18617,6 +19180,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.9": + version: 0.2.10 + resolution: "tinyglobby@npm:0.2.10" + dependencies: + fdir: "npm:^6.4.2" + picomatch: "npm:^4.0.2" + checksum: ce946135d39b8c0e394e488ad59f4092e8c4ecd675ef1bcd4585c47de1b325e61ec6adfbfbe20c3c2bfa6fd674c5b06de2a2e65c433f752ae170aff11793e5ef + languageName: node + linkType: hard + "tinypool@npm:^0.7.0": version: 0.7.0 resolution: "tinypool@npm:0.7.0" @@ -19172,6 +19745,47 @@ __metadata: languageName: node linkType: hard +"tsup@npm:^8.3.5": + version: 8.3.5 + resolution: "tsup@npm:8.3.5" + dependencies: + bundle-require: "npm:^5.0.0" + cac: "npm:^6.7.14" + chokidar: "npm:^4.0.1" + consola: "npm:^3.2.3" + debug: "npm:^4.3.7" + esbuild: "npm:^0.24.0" + joycon: "npm:^3.1.1" + picocolors: "npm:^1.1.1" + postcss-load-config: "npm:^6.0.1" + resolve-from: "npm:^5.0.0" + rollup: "npm:^4.24.0" + source-map: "npm:0.8.0-beta.0" + sucrase: "npm:^3.35.0" + tinyexec: "npm:^0.3.1" + tinyglobby: "npm:^0.2.9" + tree-kill: "npm:^1.2.2" + peerDependencies: + "@microsoft/api-extractor": ^7.36.0 + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ">=4.5.0" + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: 7794953cbc784b7c8f14c4898d36a293b815b528d3098c2416aeaa2b4775dc477132cd12f75f6d32737dfd15ba10139c73f7039045352f2ba1ea7e5fe6fe3773 + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -19899,6 +20513,13 @@ __metadata: languageName: node linkType: hard +"validator@npm:^13.9.0": + version: 13.12.0 + resolution: "validator@npm:13.12.0" + checksum: 21d48a7947c9e8498790550f56cd7971e0e3d724c73388226b109c1bac2728f4f88caddfc2f7ed4b076f9b0d004316263ac786a17e9c4edf075741200718cd32 + languageName: node + linkType: hard + "vary@npm:^1, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2"